上采样

上采样,任何可以让你的图像变成更高分辨率的技术。

最简单的方式是重采样和插值:将输入图片input image进行rescale到一个想要的尺寸,而且计算每个点的像素点,使用如双线性插值bilinear等插值方法对其余点进行插值。

  • Unpooling

在CNN中常用的来表示max pooling的逆操作。因为max pooling不可逆,因此使用近似的方式来反转得到max pooling操作之前的原始情况:

  • Deconvolution(反卷积)

    • 也被称为分数步长卷积(convolution with fractional strides)或者转置卷积(transpose convolution)或者后向卷积backwards strided convolution。
    • 与Unpooling不同,使用反卷积来对图像进行上采样是可以习得的。通常用来对卷积层的结果进行上采样,使其回到原始图片的分辨率。

Pytorch

在PyTorch中,上采样的层被封装在torch.nn中的Vision Layers里面,一共有4种:

① PixelShuffle
② Upsample
③ UpsamplingNearest2d
④ UpsamplingBilinear2d

upsample

torch.nn.functional.upsample(input, size=None, scale_factor=None, mode='nearest', align_corners=None)

推荐使用interpolate

  • scale_factor 在高度、宽度和深度上面的放大倍数。
  • mode 上采样的方法,包括最近邻(nearest),线性插值(linear),双线性插值(bilinear),三次线性插值(trilinear),默认是最近邻(nearest)

interpolate

torch.nn.functional.interpolate(input, size=None, scale_factor=None, mode='nearest', align_corners=None)

例子:

#-*-coding:utf-8-*-
import torch
import torch.nn as nn
import numpy as np# pool of non-square window
##  In the simplest case, the output value of the layer
# with input size (N,C,H,W)(N, C, H, W)(N,C,H,W),
# output (N,C,Hout,Wout)(N, C, H_{out}, W_{out})(N,C,Hout​,Wout​) and kernel_size (kH,kW)(kH, kW)(kH,kW) can be precisely described as:data = np.arange(64).reshape((8,8))
A = torch.Tensor(data.reshape(1,1,8,8))
print('A=',A)## MAX POOL
maxpool = nn.MaxPool2d((2, 2), stride=(2, 2),return_indices=True)
B,indices = maxpool(A)
print('B=',B)## Upsample
Upsample = nn.Upsample(scale_factor=2, mode='bilinear')
C = Upsample(B)
print('C=',C)
D = nn.functional.interpolate(B,scale_factor=2, mode='bilinear')
print('D=',D)### max unpool
maxunpool = nn.MaxUnpool2d(kernel_size=(2,2),stride=(2,2))
E = maxunpool(B,indices)
print('E=',E)

结果

A= tensor([[[[ 0.,  1.,  2.,  3.,  4.,  5.,  6.,  7.],[ 8.,  9., 10., 11., 12., 13., 14., 15.],[16., 17., 18., 19., 20., 21., 22., 23.],[24., 25., 26., 27., 28., 29., 30., 31.],[32., 33., 34., 35., 36., 37., 38., 39.],[40., 41., 42., 43., 44., 45., 46., 47.],[48., 49., 50., 51., 52., 53., 54., 55.],[56., 57., 58., 59., 60., 61., 62., 63.]]]])
B= tensor([[[[ 9., 11., 13., 15.],[25., 27., 29., 31.],[41., 43., 45., 47.],[57., 59., 61., 63.]]]])C= tensor([[[[ 9.0000,  9.5000, 10.5000, 11.5000, 12.5000, 13.5000, 14.5000,15.0000],[13.0000, 13.5000, 14.5000, 15.5000, 16.5000, 17.5000, 18.5000,19.0000],[21.0000, 21.5000, 22.5000, 23.5000, 24.5000, 25.5000, 26.5000,27.0000],[29.0000, 29.5000, 30.5000, 31.5000, 32.5000, 33.5000, 34.5000,35.0000],[37.0000, 37.5000, 38.5000, 39.5000, 40.5000, 41.5000, 42.5000,43.0000],[45.0000, 45.5000, 46.5000, 47.5000, 48.5000, 49.5000, 50.5000,51.0000],[53.0000, 53.5000, 54.5000, 55.5000, 56.5000, 57.5000, 58.5000,59.0000],[57.0000, 57.5000, 58.5000, 59.5000, 60.5000, 61.5000, 62.5000,63.0000]]]])
D= tensor([[[[ 9.0000,  9.5000, 10.5000, 11.5000, 12.5000, 13.5000, 14.5000,15.0000],[13.0000, 13.5000, 14.5000, 15.5000, 16.5000, 17.5000, 18.5000,19.0000],[21.0000, 21.5000, 22.5000, 23.5000, 24.5000, 25.5000, 26.5000,27.0000],[29.0000, 29.5000, 30.5000, 31.5000, 32.5000, 33.5000, 34.5000,35.0000],[37.0000, 37.5000, 38.5000, 39.5000, 40.5000, 41.5000, 42.5000,43.0000],[45.0000, 45.5000, 46.5000, 47.5000, 48.5000, 49.5000, 50.5000,51.0000],[53.0000, 53.5000, 54.5000, 55.5000, 56.5000, 57.5000, 58.5000,59.0000],[57.0000, 57.5000, 58.5000, 59.5000, 60.5000, 61.5000, 62.5000,63.0000]]]])
E= tensor([[[[ 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.],[ 0.,  9.,  0., 11.,  0., 13.,  0., 15.],[ 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.],[ 0., 25.,  0., 27.,  0., 29.,  0., 31.],[ 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.],[ 0., 41.,  0., 43.,  0., 45.,  0., 47.],[ 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.],[ 0., 57.,  0., 59.,  0., 61.,  0., 63.]]]])

mode

nearest

图像矩阵
234 38 22
67 44 12
89 65 63

坐标
---------------------->X
|
|
|
|
|
Y

放大为(4,4)
? ? ? ?
? ? ? ?
? ? ? ?
? ? ? ?

根据公式
srcX=dstX* (srcWidth/dstWidth)
srcY = dstY * (srcHeight/dstHeight)
小数用四舍五入或截断

依次填完每个象素
234 38 22 22
67 44 12 12
89 65 63 63
89 65 63 63

Bilinear Interpolation

根据于待求点P最近4个点的像素值,计算出P点的像素值。

上采样 介绍 + Bilinear pytorch代码解析相关推荐

  1. Opencores上的i2c controller core代码解析

    Opencores上的i2c controller core代码解析 一.i2c_eeprom_test.v 二.i2c_master_top.v 三.i2c_master_byte_ctrl.v 四 ...

  2. pytorch代码解析:loss = y_hat - y.view(y_hat.size())

    pytorch代码解析:pytorch中loss = y_hat - y.view(y_hat.size()) import torchy_hat = torch.tensor([[-0.0044], ...

  3. ResNet论文笔记及Pytorch代码解析

    注:个人学习记录 感谢B站up主"同济子豪兄"的精彩讲解,参考视频的记录 [精读AI论文]ResNet深度残差网络_哔哩哔哩_bilibili 算法的意义(大概介绍) CV史上的技 ...

  4. 深度学习中一些注意力机制的介绍以及pytorch代码实现

    文章目录 前言 注意力机制 软注意力机制 代码实现 硬注意力机制 多头注意力机制 代码实现 参考 前言 因为最近看论文发现同一个模型用了不同的注意力机制计算方法,因此懵了好久,原来注意力机制也是多种多 ...

  5. 初探强化学习(13)DQN的Pytorch代码解析,逐行解析,每一行都不漏

    首先上完整的代码. 这个代码是大连理工的一个小姐姐提供的.小姐姐毕竟是小姐姐,心细如丝,把理论讲的很清楚.但是代码我没怎么听懂.小姐姐在B站的视频可以给大家提供一下.不过就小姐姐这个名字,其实我是怀疑 ...

  6. [深度学习] DeepFM 介绍与Pytorch代码解释

    一. DeepFM算法的提出 由于DeepFM算法有效的结合了因子分解机与神经网络在特征学习中的优点:同时提取到低阶组合特征与高阶组合特征,所以越来越被广泛使用. 在DeepFM中 FM算法负责对一阶 ...

  7. 自然语言处理(三):传统RNN(NvsN,Nvs1,1vsN,NvsM)pytorch代码解析

    文章目录 1.预备知识:深度神经网络(DNN) 2.RNN出现的意义与基本结构 3.根据输入和输出数量的网络结构分类 3.1 N vs N(输入和输出序列等长) 3.2 N vs 1(多输入单输出) ...

  8. GAT:图注意力模型介绍及PyTorch代码分析

    文章目录 1.计算注意力系数 2.聚合 2.1 附录--GAT代码 2.2 附录--相关代码 3.完整实现 3.1 数据加载和预处理 3.2 模型训练 1.计算注意力系数 对于顶点 iii ,通过计算 ...

  9. GAT: 图注意力模型介绍及PyTorch代码分析

    文章目录 GAT: 图注意力模型介绍及代码分析 原理 图注意力层(Graph Attentional Layer) 情境一:节点和它的一个邻居 情境二:节点和它的多个邻节点 聚合(Aggregatio ...

最新文章

  1. ArcGIS Engine中的Symbols详解
  2. 名词解释说明用英语怎么说_“用英语怎么说”译成How to say in English,典型的中式英语!...
  3. SAP 解决长时间不操作掉线问题
  4. HDLBits答案(16)_Verilog有限状态机(3)
  5. wps出现安装installer_为什么不能安装WPS
  6. P2607-[ZJOI2008]骑士【基环树,树形dp】
  7. RTP/RTCP/RTSP
  8. 看懂架构设计中的服务隔离
  9. Qt文档阅读笔记-Threaded Fortune Server Example解析
  10. 世界上最漂亮的写作工具Typora(创作者必备软件)
  11. Android ViewPager + Fragment实现滑动页面
  12. caffe之 Blob、Layer、Net
  13. BIGEMAP地图下载器优势对比(水经注)
  14. 原生ajax请求流程
  15. 对称网络的电路分析方法
  16. vagrant共享目录出现“mount:unknown filesystem type ‘vboxsf‘”错误解决方法(亲测可行)
  17. 域名是什么?怎样注册一个域名?
  18. 高德地图API总结--Marker多点聚合
  19. html 发言样式,HTML样式
  20. Fio 命令生产环境测试

热门文章

  1. Ubuntu20.4系统隐藏顶栏
  2. 12个关于移动 H5 开发的采坑问题汇总
  3. c语言中vector的用法,C++ vector使用方法
  4. 金融科技真的不如互联网?
  5. vue 实现类似淘宝的商品详情页的商品展示
  6. Pandas100秒处理一亿行数据
  7. 一天正常的作息时间表
  8. 数据库架构设计——分布式数据库设计
  9. 机器学习笔记(二)-预测神奇宝贝CP值
  10. scipy回归分析_销量预测方法及案例分析