图像语义分割中的上采样(Upsampling)和下采样(subsampling)

最近在看到一篇论文中用到了transposed convolution,并出现了upsampling等概念,表示很迷。那么什么是upsampling

因此作出如下总结仅供自己学习理解。


1. 下采样(subsampled)

下采样:就是对卷积得到的 F e a t u r e M a p Feature Map FeatureMap 进行进一步压缩。通俗的所,实际上就是卷积层之间的池化操作。

作用: 通过最大池化或者平均池化从而减少了特征,减少了参数的数量,且降低了卷积网络计算的复杂度;实际上就是过滤作用小、信息冗余的特征,保留关键信息(而信息关键与否就体现在对应像素的value是否被激活的更大)。

下图左边是经过卷积得到的一个Feature Map,卷积后的每一个像素点我理解成:将原始图像中卷积核大小的所有像素点特征糅合到了一个像素点。

通过步长为 2 的最大池化,将被激活程度最大(value最大)的特征筛选出来,而其余相对较小的特征则被去掉,达到降低特征维度的作用。同时还增大了整个网络图所覆盖的感受野。

在这里插入图片描述

2. 上采样(upsampled)

就是将提取到的Feature Map进行放大, 从而以更高的分辨率进行显示图像。这里的方法图像放大,并不是简单地方法放大,也不是之前下采样的逆操作。
也就是说上采样放大后输出的图像和下采样之前的图像是不一样的。

常用的上采样方法有两种:

  • 双线性插值
  • 反卷积

首先看看什么是线性插值吧。

2.1 线性插值

其实线性插值1是一种数学方法,有一阶、二阶、三阶,对应为单线性插值、双线性插值和三线性插值。三者不同之处在于:

  • 单线性插值对应两点之间任意一点为插值;
  • 双线性插值对应4点形成方形之间的任意一点作为插值;
  • 三线性插值对应8点形成立方体内的任意一点作为插值。

2.2 单线性插值

已知中 P 1 P_1 P1点和 P 2 P_2 P2点,坐标分别为 ( x 1 , y 1 ) (x_1, y_1) (x1,y1) ( x 2 , y 2 ) (x_2, y_2) (x2,y2),要计算 [ x 1 , x 2 ] [x_1, x_2] [x1,x2] 区间内某一位置 x x x 在直线上的 y y y 值.

在这里插入图片描述
该直线一定满足方程:

( y − y 1 ) ( x − x 1 ) = ( y 2 − y 1 ) ( x 2 − x 1 ) \frac{(y-y_1)}{(x-x_1)} = \frac{(y_2-y_1)}{(x_2-x_1)} (xx1)(yy1)=(x2x1)(y2y1)

可以化简得到:
y = ( x 2 − x x 2 − x 1 ) y 1 + ( x − x 1 x 2 − x 1 ) y 2 y = (\frac{x_2-x} {x_2-x_1})y_1 + (\frac{x-x_1} {x_2-x_1})y_2 y=(x2x1x2x)y1+(x2x1xx1)y2

可以看到 y y y的值与 y 1 y_1 y1 y 2 y_2 y2的各自对应有关,并且对应系数 ( x 2 − x x 2 − x 1 ) (\frac{x_2-x} {x_2-x_1}) (x2x1x2x) ( x − x 1 x 2 − x 1 ) (\frac{x-x_1} {x_2-x_1}) (x2x1xx1)决定了 y 1 y_1 y1 y 2 y_2 y2 分别对 y y y 的贡献。

进一步细看, x 1 、 x 2 、 y 1 、 y 2 x_1、x_2、y_1、y_2 x1x2y1y2均已知,则由 x x x 值决定 y y y 走向。

  • x x x 越靠近 x 1 x_1 x1,那么 ( x − x 1 x 2 − x 1 ) (\frac{x-x_1} {x_2-x_1}) (x2x1xx1)的值就越小,则 y 2 y_2 y2 y y y 的贡献越小,反而 y 1 y_1 y1 y y y 的贡献越大,所以 y y y 更加靠近 y 1 y_1 y1 的值。
  • x x x 越靠近 x 2 x_2 x2,那么 ( x 2 − x x 2 − x 1 ) (\frac{x_2-x} {x_2-x_1}) (x2x1x2x)的值就越小,则 y 1 y_1 y1 y y y 的贡献越小,反而 y 2 y_2 y2 y y y 的贡献越大,所以 y y y 更加靠近 y 2 y_2 y2 的值。

这是根据直线方程的定义求得的结论,但是我们现在在讨论插值。
即考虑如何在某一个坐标点上插入一个合理的像素值。

同样根据插入点与它周围像素点的距离远近,来分配不同权重,进行叠加。
y 1 y_1 y1 y 2 y_2 y2 换作对应点位置的像素值 即: f ( p 1 ) f(p_1) f(p1) f ( p 2 ) f(p_2) f(p2) ,则公式可得:

f ( p ) = ( x 2 − x x 2 − x 1 ) f ( p 1 ) + ( x − x 1 x 2 − x 1 ) f ( p 2 ) f(p) = (\frac{x_2-x} {x_2-x_1})f(p_1) + (\frac{x-x_1} {x_2-x_1})f(p_2) f(p)=(x2x1x2x)f(p1)+(x2x1xx1)f(p2)

也就是说,插值点离哪一个像素点越近,就与那一个像素点更相关,则更近像素点的权重应当更大。


2.3 双线性插值

然后,根据单线性插值再来介绍下双线性插值方法2

实际上就是先进行了 2 次横向的单线性插值,然后根据单线性插值的结果进行 1 次纵向的单线性插值。

在这里插入图片描述

首已知 Q 11 ( x 1 , y 1 ) 、 Q 12 ( x 1 , y 2 ) 、 Q 21 ( x 2 , y 1 ) 、 Q 22 ( x 2 , y 2 ) Q_{11}(x_1,y_1)、Q_{12}(x_1,y_2)、Q_{21}(x_2,y_1)、Q_{22}(x_2,y_2) Q11(x1,y1)Q12(x1,y2)Q21(x2,y1)Q22(x2,y2) 四个点的坐标,设插值坐标点为 ( x , y ) (x,y) (x,y),像素为 z z z

现在固定 x x x ,计算 y y y 的位置。

  • 首先根据 Q 11 、 Q 21 Q_{11}、Q_{21} Q11Q21计算出 R 1 ( x , y 1 ) R_1(x,y_1) R1(x,y1)的像素值;
  • 再根据 Q 12 、 Q 22 Q_{12}、Q_{22} Q12Q22计算出 R 2 ( x , y 2 ) R_2(x,y_2) R2(x,y2)的像素值;
  • 最后再依据 R 1 R_1 R1 R 1 R_1 R1得到 p p p 的像素插值 z z z

根据单线性插值的结论公式,可以直接得出结果1:
f ( R 1 ) = ( x 2 − x x 2 − x 1 ) f ( Q 11 ) + ( x − x 1 x 2 − x 1 ) f ( Q 21 ) f(R_1) = (\frac{x_2-x} {x_2-x_1})f(Q_{11}) + (\frac{x-x_1} {x_2-x_1})f(Q_{21}) f(R1)=(x2x1x2x)f(Q11)+(x2x1xx1)f(Q21)
f ( R 2 ) = ( x 2 − x x 2 − x 1 ) f ( Q 12 ) + ( x − x 1 x 2 − x 1 ) f ( Q 22 ) f(R_2) = (\frac{x_2-x} {x_2-x_1})f(Q_{12}) + (\frac{x-x_1} {x_2-x_1})f(Q_{22}) f(R2)=(x2x1x2x)f(Q12)+(x2x1xx1)f(Q22)

再根据 f ( R 1 ) 、 f ( R 2 ) f(R_1)、f(R_2) f(R1)f(R2)进行纵向单线性插值,可得结果2:
f ( p ) = ( y 2 − y y 2 − y 1 ) f ( R 1 ) + ( y − y 1 y 2 − y 1 ) f ( R 2 ) f(p) = (\frac{y_2-y}{y_2-y_1})f(R_1) + (\frac{y-y_1}{y_2-y_1})f(R_2) f(p)=(y2y1y2y)f(R1)+(y2y1yy1)f(R2)

将结果1代入结果2中,可得:

f ( p ) = ( y 2 − y y 2 − y 1 ) ( x 2 − x x 2 − x 1 ) f ( Q 11 ) + ( y 2 − y y 2 − y 1 ) ( x − x 1 x 2 − x 1 ) f ( Q 21 ) + ( y − y 1 y 2 − y 1 ) ( x 2 − x x 2 − x 1 ) f ( Q 12 ) + ( y − y 1 y 2 − y 1 ) ( x − x 1 x 2 − x 1 ) f ( Q 22 ) f(p) = (\frac{y_2-y}{y_2-y_1}) (\frac{x_2-x} {x_2-x_1})f(Q_{11}) + (\frac{y_2-y}{y_2-y_1}) (\frac{x-x_1} {x_2-x_1})f(Q_{21}) + (\frac{y-y_1}{y_2-y_1}) (\frac{x_2-x} {x_2-x_1})f(Q_{12}) + (\frac{y-y_1}{y_2-y_1})(\frac{x-x_1} {x_2-x_1})f(Q_{22}) f(p)=(y2y1y2y)(x2x1x2x)f(Q11)+(y2y1y2y)(x2x1xx1)f(Q21)+(y2y1yy1)(x2x1x2x)f(Q12)+(y2y1yy1)(x2x1xx1)f(Q22)
可以简化得:
f ( p ) = w 11 f ( Q 11 ) + w 21 f ( Q 21 ) + w 12 f ( Q 12 ) + w 22 f ( Q 22 ) f(p) = w_{11}f(Q_{11}) + w_{21}f(Q_{21}) + w_{12}f(Q_{12}) + w_{22}f(Q_{22}) f(p)=w11f(Q11)+w21f(Q21)+w12f(Q12)+w22f(Q22)
其中 w 11 、 w 21 、 w 12 、 w 22 w_{11}、w_{21}、w_{12}、w_{22} w11w21w12w22分别表示四个点对点 p p p上像素的一个权重比,这是根据训练得出来的。

根据结果可得,双线性插值和前面提到的定义 (双线性插值对应4点形成方形之间的任意一点作为插值) 刚好对应。

2.4 双线性插值举例

这里假设按照取平均的准则,进行插值计算,即 w 11 、 w 21 、 w 12 、 w 22 w_{11}、w_{21}、w_{12}、w_{22} w11w21w12w22均为 0.5 0.5 0.5

在这里插入图片描述

2.5 插值法总结

在原有图像像素的基础上,在像素点之间采用合适的插值算法插入新的元素3

插值就是在不生成像素的情况下增加图像像素大小的一种方法,在周围像素色彩的基础上用数学公式计算丢失像素的色彩(也有的有些相机使用插值,人为地增加图像的分辨率)。

所以在放大图像时,图像看上去会比较平滑、干净。但必须注意的是插值并不能增加图像信息


2.6 转置卷积(Transposed Convolution)

其实转置卷积还有更通俗的说法,叫做反卷积(Deconvolution)。

转置卷积实际上是通过卷积运算实现分辨率还原。因为卷积操作中有权重参数,所以这是一种可以学习的方法,通过参数的学习实现输出图像尽可能与原图像相似。

和传统的卷积运算相比:

  • 相同点:都是根据卷积核进行卷积运算;
  • 不同点:普通卷积通过padding然后卷积是为了提取特征,使Feature Map变小,提取出更加复杂的特征;而在转置卷积中的stride存在不同,在输入图像的每两个像素之间增加大小为stirde的空像素,和空洞卷积的空洞操作是一样的。并且通过转置卷积,有使得Feature Map尺寸变大的效果。

即前者提取高级特征,后者放大高级特征。

具体给一些常见的例子4

No padding, no strides, transposedArbitrary padding, no strides, transposedHalf padding, no strides, transposedFull padding, no strides, transposed
No padding, strides, transposedPadding, strides, transposedPadding, strides, transposed (odd)

可以注意到第一行的四张图都是no strides,所以和不同的卷积类似;

而第二行的strides设置为2,所以两两像素之间存在一个空像素,即 0 的个数为 s t r i d e s − 1 strides - 1 strides1

这样对像素周围进行补0的方式就是最简单的反卷积。

另外也可以看看这一篇总结的反卷积,感觉写的不错,有对应的实际Demo。

但是这样的补0操作会使得像素边缘信息不断丢失。 F C N FCN FCN 5中通过相加的方式很好地解决了这类特征信息不足问题。


3. FCN (Fully Convolutional Networks)

全卷积神经网络(full Convolutional neural network, FCN)是一个普通的CNN,其中最后一个全连接层被另一个具有较大“感受野”的卷积层所取代。这样做是为了捕捉全局背景的整体信息(告诉我们图像中有什么,并且给出一些物体位置的粗略描述)。

在这里插入图片描述

如上图中, i m a g e image image 为原始图像 ( 32 ∗ 32 ) (32*32) 3232,有 p o o l 1 、 p o o l 2 、 p o o l 3 、 p o o l 4 、 p o o l 5 pool1、pool2、pool3、pool4、pool5 pool1pool2pool3pool4pool5 五次卷积得到的 F e a t u r e M a p Feature Map FeatureMap

首先看到 p o o l 5 pool5 pool5,是通过原始图像经过了 5 次下采样操作,得到的 1 ∗ 1 1*1 11 F e a t u r e M a p Feature Map FeatureMap,包含了高纬度的特征信息。直接将该 F e a t u r e M a p Feature Map FeatureMap 通过上采样放大 32 倍,还原到原始图片大小,得到了 32 x 32x 32x u p s a m p l e d upsampled upsampled p r e d i c t i o n prediction prediction 的结果,如下图红色箭头指向所示:

在这里插入图片描述

因为在 F C N FCN FCN 中每下采样一次,图像的边缘信息在不断减少,而图像的更高维度特征则会被学习到,为了同时包含低纬度和高纬度特征图的的不同特点,因此提出了一个相加的操作。
也就是说不仅只考虑高纬度的 F e a t u r e M a p Feature Map FeatureMap ,因此 F C N FCN FCN 做出如下操作:

  1. p o o l 5 pool5 pool5 的特征进行两倍大小的上采样放大,即得到图中的 2 x 2x 2x u p s a m p l e d upsampled upsampled p r e d i c t i o n prediction prediction,此时的 F e a t u r e M a p Feature Map FeatureMap 大小和 p o o l 4 pool4 pool4 的大小一致;
  2. 因为 p o o l 5 pool5 pool5 中保存了最高维度的特征信息, p o o l 4 pool4 pool4 中保存了次高维度的特征信息,然后将这两个 F e a t u r e M a p Feature Map FeatureMap 进行相加;
  3. 将相加的结果进行16倍的上采样放大,即得到图中的 16 x 16x 16x u p s a m p l e d upsampled upsampled p r e d i c t i o n prediction prediction,此时的 F e a t u r e M a p Feature Map FeatureMap 大小也和原始输入图像一致。

通过上面三个步骤得到的图像同时保存了 p o o l 4 pool4 pool4 p o o l 5 pool5 pool5 两个维度级别的特征。

依次类推,把 p o o l 3 、 p o o l 4 、 p o o l 5 pool3、 pool4、pool5 pool3pool4pool5 的维度特征也进行叠加,然后对比各自不同叠加情况的预测效果,取最优情况,这就是 F C N FCN FCN 最经典的一个原理流程。

最后其实我还是对转置卷积的运算有些不理解,如果有道友懂的可以一起聊聊,我也等后续理解了在进行补充吧!


  1. 【数学】线性插值 ↩︎

  2. 学无疑物-上采样之双线性插值法详解 ↩︎

  3. 深度学习中的上采样 ↩︎

  4. Convolution arithmetic ↩︎

  5. Fully Convolutional Networks for Semantic Segmentation ↩︎

  • 65
    点赞
  • 280
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
### 回答1: 目标检测是计算机视觉的一项重要任务,其主要目的是在图像或视频找到特定对象的位置和边界框。目标检测可以分为两种计算方法:上采样Upsampling)方法和下采样(Downsampling)方法。 上采样方法主要是通过增加图像分辨率来检测目标。该方法的基本思路是将原始图像放大到目标检测器所需的分辨率,并使用特征提取算法来寻找目标。上采样方法可以使用多种技术,如插值、卷积等。这些技术可用于对图像进行高质量的缩放,以使目标检测器能够检测到目标。 下采样方法则是通过降低图像分辨率来检测目标。该方法的基本思路是在降低图像分辨率的同时,保留有关目标形状、大小和纹理等方面的信息。下采样方法可以使用多种技术,如池化、卷积等。这些技术可用于从图像提取特征,并生成对目标位置和边界框的估计。 总之,目标检测是通过使用上采样或下采样方法,通过对图像进行特征提取和计算来寻找特定对象的位置和边界框。其上采样方法通过增加图像分辨率来检测目标,而下采样方法则通过降低图像分辨率来检测目标。 ### 回答2: 目标检测上采样和下采样是为了在不同层级的特征图上实现目标检测算法的多尺度检测。 上采样是指将低分辨率的特征图放大到高分辨率,常用的方法有最邻近插值、双线性插值和转置卷积。最邻近插值是通过简单地复制像素值来放大图像,双线性插值则是通过对最近的4个像素进行加权平均得到新的像素值。转置卷积则是通过卷积核进行卷积操作,但是将输入特征图的像素值插入到输出特征图的特定位置,从而实现放大的效果。上采样的目的是为了恢复特征图的细节信息,使得目标更容易被检测出来。 下采样则是将高分辨率的特征图缩小到低分辨率,常用的方法有池化操作。池化操作可以通过取平均值或者最大值等方式将一个大的像素块缩小到一个像素值,从而减少特征图的尺寸。下采样的目的是为了降低计算复杂度,同时增强特征的感受野,使得模型能够更好地处理目标的整体信息。 通常,目标检测算法会使用多个尺度的特征图进行检测,低层级的特征图能够更好地捕捉细节信息,而高层级的特征图则能够捕捉更加抽象的语义信息。上采样和下采样的计算原理在目标检测算法起到了对特征图进行适当放大和缩小的作用,从而更好地匹配目标的尺度,提高检测的准确性和效果。 ### 回答3: 目标检测上采样和下采样是指将图像从原始分辨率调整到不同的分辨率,以适应模型的需求。下采样是降低分辨率,上采样是增加分辨率。 下采样通过减少每个基元(如像素)的数量来降低分辨率。常用的下采样算法有平均池化和最大池化。平均池化取每个区域内像素值的平均值作为下采样后的值,最大池化则取最大值作为下采样后的值。下采样过程,丢失了一些细节信息,但可以减少计算量,加快运算速度,并提取出图像的主要特征。 上采样通过增加每个基元的数量来增加分辨率。最常用的上采样算法是反卷积算法,也称为转置卷积反卷积通过在原始图像间插入零值来扩展基元,然后通过卷积进行滤波操作,从而获得更高的分辨率。上采样可以增加图像的细节信息,使其更接近原始图像。 总结起来,下采样通过减少基元的数量来降低分辨率,丢失一些细节信息;而上采样通过增加基元的数量来增加分辨率,使图像更接近原始图像。这些操作在目标检测被广泛应用,可以提高模型的性能和准确率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值