赞
踩
好久没看模型算法了,很多知识忘记了,今天想记录下一些理论知识,方便自己温顾。对于上采样,下采样,卷积,池化,后面会添加一些代码搭建网络的过程,并详细记录每一步每行代码的含义。
主要目的有两个:1、使得图像符合显示区域的大小;2、生成对应图像的缩略图;
其实下采样就是池化;
1.用stride为2的卷积层实现:卷积过程导致的图像变小是为了提取特征。下采样的过程是一个信息损失的过程,而池化层是不可学习的,用stride为2的可学习卷积层来代替pooling可以得到更好的效果,当然同时也增加了一定的计算量。
2.用stride为2的池化层实现:池化下采样是为了降低特征的维度。如Max-pooling和Average-pooling,目前通常使用Max-pooling,因为他计算简单而且能够更好的保留纹理特征。
上采样:也叫做图像插值上采样就和下采样反过来,将一张照片放大,在像素点之间根据放大倍数,以插值的形式插入像素值从而达到放大图像的目的。可以显示在更高分辨率的显示设备上。
1.插值,一般使用的是双线性插值,因为效果最好,虽然计算上比其他插值方式复杂,但是相对于卷积计算可以说不值一提,其他插值方式还有最近邻插值、三线性插值等;
2.转置卷积又或是说反卷积(Transpose Conv),通过对输入feature map间隔填充0,再进行标准的卷积计算,可以使得输出feature map的尺寸比输入更大;相比上池化,使用反卷积进行图像的“上采样”是可以被学习的(会用到卷积操作,其参数是可学习的)。
3.Up-Pooling - Max Unpooling && Avg Unpooling --Max Unpooling,在对称的max pooling位置记录最大值的索引位置,然后在unpooling阶段时将对应的值放置到原先最大值位置,其余位置补0;
4.对于一部分网络模型来讲,上采样和下采样的结构往往是对称的,我们可以在下采样做Max Pooling的时候记录下来最大值所在的位置,当做上采样的时候把最大值还原到其对应的位置,然后其余的位置补0,如下图所示。
对于Max Unpooling如下图所示:
输入为5*5,卷积核为3*3,卷积之后输出为3*3,我们需要得到5*5。
那么我们如果给5x5的图像填充一圈,就变成了7x7的图像了,再去拿这个卷积核进行卷积,就会得到5x5的输出。实际中,我们也确实是这么做的,有一个参数padding
即表示是否填充,我们可以设置填充的范围,以及填充的值,一般填充0。
下面是充填之后的图片为7*7,通过卷积核3*3卷积之后,得到输出5*5。
几个常用的解释:
in_channels:输入的通道数
out_channels:输出的通道数
kernel_size:卷积核的大小,类型为int 或者元组,当卷积是方形的时候,只需要一个整数边长即可,卷积不是方形,要输入一个元组表示高和宽。(卷积核不需要你设置,只需要给定大小,里面的值是随机生成的)
stride:步长(就是每次挪动几个像素,默认是1)
padding:填充几圈,默认是0,不填充(填充的值为0)
dilation:控制卷积核之间的间距(设置这个可以做空洞卷积)
groups:控制输入和输出之间的连接
bias:偏置,是否将一个 学习到的 bias 增加输出中,默认是True
padding_mode:设置填充的模式
卷积的计算公式:o=(i−f+2p)/s+1
i为输入大小(input),f为卷积核大小(kernel),p为填充大小(padding),s为步长(stride),o为输出大小。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。