一、 上采样(upsampling)
upsampling(上采样)的三种方式:
Resize,如双线性插值直接缩放,类似于图像缩放;
反卷积(deconvolution & transposed convolution);
反池化(unpooling)。
上采样upsampling的主要目的是放大图像,几乎都是采用内插值法,即在原有图像像素的基础上,在像素点值之间采用合适的插值算法插入新的元素。
传统的网络是subsampling的,对应的输出尺寸会降低;upsampling的意义在于将小尺寸的高维度feature map恢复回去,以便做pixelwise prediction,获得每个点的分类信息。
大名鼎鼎的FCN使用反卷积来完成上采样的过程。
1.Resize
线性插值法(linear interpolation)
这里讲解线性插值法的推导为了给双线性插值公式做铺垫。
线性插值法是指使用连接两个已知量的直线来确定在这个两个已知量之间的一个未知量的值的方法。
假设已知两个坐标(x0,y0)(x0,y0)和(x1,y1)(x1,y1),要得到[x0,x1][x0,x1]区间内某一位置x在直线上的值。
该直线的方程可表示为:
假设方程两边的值为α,那么这个值就是插值系数——从x0x0到xx的距离与从x0x0到x1x1的距离的比值。由于x已知,所以可以从公式中得到α的值:
这样
也就是:
2、双线性插值
双线性插值是插值算法中的一种,是线性插值的扩展。利用原图像中目标点四周的四个真实存在的像素值来共同决定目标图中的一个像素值,其核心思想是在两个方向分别进行一次线性插值。
image.png
已知的红色数据点和待插值的绿色数据点
假如我们想得到未知函数f在点P= (x,y) 的值,假设我们已知函数f在Q11=(x1,y1)、Q12=(x1,y2),Q21=(x2,y1)以及Q22=(x2,y2)Q11=(x1,y1)、Q12=(x1,y2),Q21=(x2,y1)以及Q22=(x2,y2) 四个点 值。
第一步:X方向的线性插值,在Q12,Q22中插入蓝色点R2,Q11,Q21中插入蓝色点R1;
第二步 :Y方向的线性插值 ,通过第一步计算出的R1与R2在y方向上插值计算出P点。
在x与y方向上,z值成单调性特性的应用中,此种方法可以做外插运算,即可以求解Q11~Q22所构成的正方形以外的点的值。
总结:线性插值法利用原图像中两个点计算像素值进行插值,双线性插值法利用原图像中四个点计算目标像素值进行插值。
CNN可视化,通过反卷积将卷积得到的feature map还原到像素空间,来观察feature map对哪些pattern相应最大,即可视化哪些特征是卷积操作提取出来的;
FCN全卷积网络中,由于要对图像进行像素级的分割,需要将图像尺寸还原到原来的大小,类似upsampling的操作,所以需要采用反卷积;
GAN对抗式生成网络中,由于需要从输入图像到生成图像,自然需要将提取的特征图还原到和原图同样尺寸的大小,即也需要反卷积操作。
反卷积(deconvolution),由于实现上采用转置卷积核的方法,所以有人说应该叫转置卷积TD(transposed convolution)。
当stride不为1的时候,转置卷积的卷积核就变成了一个带’洞’的卷积
image.png
2. 反池化(unpooling)
在池化过程中,记录下max-pooling在对应kernel中的坐标,在反池化过程中,将一个元素根据kernel进行放大,根据之前的坐标将元素填写进去,其他位置补0 。在下采样的时候记录max的位置,上采样的时候最大值的位置还原,其它位置填0,如下图所示:
image.png
二、deconv(反卷积)和dilated conv(空洞卷积)的区别
膨胀卷积(空洞卷积,Dilated Convolution)
膨胀卷积在Standard Convolution的基础上多了一个超参数称之为膨胀率(dilation rate),该超参数指的是kernel的间隔数量。
deconv的其中一个用途是做upsampling,即增大图像尺寸。而dilated conv并不是做upsampling,而是增大感受野。
可以形象的做个解释:
对于标准的k*k卷积操作,stride为s,分三种情况:
(1) s>1,即卷积的同时做了downsampling,卷积后图像尺寸减小;
(2) s=1,普通的步长为1的卷积,比如在tensorflow中设置padding=SAME的话,卷积的图像输入和输出有相同的尺寸大小;
(3) 0
而dilated conv不是在像素之间padding空白的像素,而是在已有的像素上,skip掉一些像素,或者输入不变,对conv的kernel参数中插一些0的weight,达到一次卷积看到的空间范围变大的目的。
当然将普通的卷积stride步长设为大于1,也会达到增加感受野的效果,但是stride大于1就会导致downsampling,图像尺寸变小。大家可以从以上理解到deconv,dilated conv
作者:zelda2333
链接:https://www.jianshu.com/p/70253d6596ea
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。一、 上采样(upsampling)
upsampling(上采样)的三种方式:
Resize,如双线性插值直接缩放,类似于图像缩放;
反卷积(deconvolution & transposed convolution);
反池化(unpooling)。
上采样upsampling的主要目的是放大图像,几乎都是采用内插值法,即在原有图像像素的基础上,在像素点值之间采用合适的插值算法插入新的元素。
传统的网络是subsampling的,对应的输出尺寸会降低;upsampling的意义在于将小尺寸的高维度feature map恢复回去,以便做pixelwise prediction,获得每个点的分类信息。
大名鼎鼎的FCN使用反卷积来完成上采样的过程。
1.Resize
线性插值法(linear interpolation)
这里讲解线性插值法的推导为了给双线性插值公式做铺垫。
线性插值法是指使用连接两个已知量的直线来确定在这个两个已知量之间的一个未知量的值的方法。
假设已知两个坐标(x0,y0)(x0,y0)和(x1,y1)(x1,y1),要得到[x0,x1][x0,x1]区间内某一位置x在直线上的值。
该直线的方程可表示为:
假设方程两边的值为α,那么这个值就是插值系数——从x0x0到xx的距离与从x0x0到x1x1的距离的比值。由于x已知,所以可以从公式中得到α的值:
这样
也就是:
2、双线性插值
双线性插值是插值算法中的一种,是线性插值的扩展。利用原图像中目标点四周的四个真实存在的像素值来共同决定目标图中的一个像素值,其核心思想是在两个方向分别进行一次线性插值。
image.png
已知的红色数据点和待插值的绿色数据点
假如我们想得到未知函数f在点P= (x,y) 的值,假设我们已知函数f在Q11=(x1,y1)、Q12=(x1,y2),Q21=(x2,y1)以及Q22=(x2,y2)Q11=(x1,y1)、Q12=(x1,y2),Q21=(x2,y1)以及Q22=(x2,y2) 四个点 值。
第一步:X方向的线性插值,在Q12,Q22中插入蓝色点R2,Q11,Q21中插入蓝色点R1;
第二步 :Y方向的线性插值 ,通过第一步计算出的R1与R2在y方向上插值计算出P点。
在x与y方向上,z值成单调性特性的应用中,此种方法可以做外插运算,即可以求解Q11~Q22所构成的正方形以外的点的值。
总结:线性插值法利用原图像中两个点计算像素值进行插值,双线性插值法利用原图像中四个点计算目标像素值进行插值。
CNN可视化,通过反卷积将卷积得到的feature map还原到像素空间,来观察feature map对哪些pattern相应最大,即可视化哪些特征是卷积操作提取出来的;
FCN全卷积网络中,由于要对图像进行像素级的分割,需要将图像尺寸还原到原来的大小,类似upsampling的操作,所以需要采用反卷积;
GAN对抗式生成网络中,由于需要从输入图像到生成图像,自然需要将提取的特征图还原到和原图同样尺寸的大小,即也需要反卷积操作。
反卷积(deconvolution),由于实现上采用转置卷积核的方法,所以有人说应该叫转置卷积TD(transposed convolution)。
当stride不为1的时候,转置卷积的卷积核就变成了一个带’洞’的卷积
image.png
2. 反池化(unpooling)
在池化过程中,记录下max-pooling在对应kernel中的坐标,在反池化过程中,将一个元素根据kernel进行放大,根据之前的坐标将元素填写进去,其他位置补0 。在下采样的时候记录max的位置,上采样的时候最大值的位置还原,其它位置填0,如下图所示:
image.png
二、deconv(反卷积)和dilated conv(空洞卷积)的区别
膨胀卷积(空洞卷积,Dilated Convolution)
膨胀卷积在Standard Convolution的基础上多了一个超参数称之为膨胀率(dilation rate),该超参数指的是kernel的间隔数量。
deconv的其中一个用途是做upsampling,即增大图像尺寸。而dilated conv并不是做upsampling,而是增大感受野。
可以形象的做个解释:
对于标准的k*k卷积操作,stride为s,分三种情况:
(1) s>1,即卷积的同时做了downsampling,卷积后图像尺寸减小;
(2) s=1,普通的步长为1的卷积,比如在tensorflow中设置padding=SAME的话,卷积的图像输入和输出有相同的尺寸大小;
(3) 0
而dilated conv不是在像素之间padding空白的像素,而是在已有的像素上,skip掉一些像素,或者输入不变,对conv的kernel参数中插一些0的weight,达到一次卷积看到的空间范围变大的目的。
当然将普通的卷积stride步长设为大于1,也会达到增加感受野的效果,但是stride大于1就会导致downsampling,图像尺寸变小。大家可以从以上理解到deconv,dilated conv