图像语义分割中的上采样和下采样

  • 1. 下采样(subsampled)
  • 2. 上采样(upsampled)
    • 2.1 线性插值
    • 2.2 单线性插值
    • 2.3 双线性插值
    • 2.4 双线性插值举例
    • 2.5 插值法总结
    • 2.6 转置卷积(Transposed Convolution)
  • 3. FCN (Fully Convolutional Networks)

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

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


1. 下采样(subsampled)

下采样:就是对卷积得到的 FeatureMapFeature MapFeatureMap 进行进一步压缩。通俗的所,实际上就是卷积层之间的池化操作。

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

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

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

2. 上采样(upsampled)

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

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

  • 双线性插值
  • 反卷积

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

2.1 线性插值

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

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

2.2 单线性插值

已知中P1P_1P1​点和P2P_2P2​点,坐标分别为(x1,y1)(x_1, y_1)(x1​,y1​)、(x2,y2)(x_2, y_2)(x2​,y2​),要计算[x1,x2][x_1, x_2][x1​,x2​] 区间内某一位置 xxx 在直线上的 yyy 值.


该直线一定满足方程:

(y−y1)(x−x1)=(y2−y1)(x2−x1)\frac{(y-y_1)}{(x-x_1)} = \frac{(y_2-y_1)}{(x_2-x_1)}(x−x1​)(y−y1​)​=(x2​−x1​)(y2​−y1​)​

可以化简得到:
y=(x2−xx2−x1)y1+(x−x1x2−x1)y2y = (\frac{x_2-x} {x_2-x_1})y_1 + (\frac{x-x_1} {x_2-x_1})y_2y=(x2​−x1​x2​−x​)y1​+(x2​−x1​x−x1​​)y2​

可以看到yyy的值与y1y_1y1​和y2y_2y2​的各自对应有关,并且对应系数(x2−xx2−x1)(\frac{x_2-x} {x_2-x_1})(x2​−x1​x2​−x​)和 (x−x1x2−x1)(\frac{x-x_1} {x_2-x_1})(x2​−x1​x−x1​​)决定了 y1y_1y1​ 和 y2y_2y2​ 分别对 yyy 的贡献。

进一步细看,x1、x2、y1、y2x_1、x_2、y_1、y_2x1​、x2​、y1​、y2​均已知,则由 xxx 值决定 yyy 走向。

  • 当 xxx 越靠近 x1x_1x1​,那么 (x−x1x2−x1)(\frac{x-x_1} {x_2-x_1})(x2​−x1​x−x1​​)的值就越小,则 y2y_2y2​ 对 yyy 的贡献越小,反而 y1y_1y1​ 对 yyy 的贡献越大,所以 yyy 更加靠近 y1y_1y1​ 的值。
  • 当 xxx 越靠近 x2x_2x2​,那么 (x2−xx2−x1)(\frac{x_2-x} {x_2-x_1})(x2​−x1​x2​−x​)的值就越小,则 y1y_1y1​ 对 yyy 的贡献越小,反而 y2y_2y2​ 对 yyy 的贡献越大,所以 yyy 更加靠近 y2y_2y2​ 的值。

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

同样根据插入点与它周围像素点的距离远近,来分配不同权重,进行叠加。
将 y1y_1y1​ 和 y2y_2y2​ 换作对应点位置的像素值 即:f(p1)f(p_1)f(p1​) 和 f(p2)f(p_2)f(p2​) ,则公式可得:

f(p)=(x2−xx2−x1)f(p1)+(x−x1x2−x1)f(p2)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)=(x2​−x1​x2​−x​)f(p1​)+(x2​−x1​x−x1​​)f(p2​)

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


2.3 双线性插值

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

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

首已知Q11(x1,y1)、Q12(x1,y2)、Q21(x2,y1)、Q22(x2,y2)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),像素为 zzz

现在固定 xxx ,计算 yyy 的位置。

  • 首先根据Q11、Q21Q_{11}、Q_{21}Q11​、Q21​计算出R1(x,y1)R_1(x,y_1)R1​(x,y1​)的像素值;
  • 再根据Q12、Q22Q_{12}、Q_{22}Q12​、Q22​计算出R2(x,y2)R_2(x,y_2)R2​(x,y2​)的像素值;
  • 最后再依据R1R_1R1​、R1R_1R1​得到 ppp 的像素插值zzz。

根据单线性插值的结论公式,可以直接得出结果1:
f(R1)=(x2−xx2−x1)f(Q11)+(x−x1x2−x1)f(Q21)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​)=(x2​−x1​x2​−x​)f(Q11​)+(x2​−x1​x−x1​​)f(Q21​)
f(R2)=(x2−xx2−x1)f(Q12)+(x−x1x2−x1)f(Q22)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​)=(x2​−x1​x2​−x​)f(Q12​)+(x2​−x1​x−x1​​)f(Q22​)

再根据f(R1)、f(R2)f(R_1)、f(R_2)f(R1​)、f(R2​)进行纵向单线性插值,可得结果2:
f(p)=(y2−yy2−y1)f(R1)+(y−y1y2−y1)f(R2)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)=(y2​−y1​y2​−y​)f(R1​)+(y2​−y1​y−y1​​)f(R2​)

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

f(p)=(y2−yy2−y1)(x2−xx2−x1)f(Q11)+(y2−yy2−y1)(x−x1x2−x1)f(Q21)+(y−y1y2−y1)(x2−xx2−x1)f(Q12)+(y−y1y2−y1)(x−x1x2−x1)f(Q22)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)=(y2​−y1​y2​−y​)(x2​−x1​x2​−x​)f(Q11​)+(y2​−y1​y2​−y​)(x2​−x1​x−x1​​)f(Q21​)+(y2​−y1​y−y1​​)(x2​−x1​x2​−x​)f(Q12​)+(y2​−y1​y−y1​​)(x2​−x1​x−x1​​)f(Q22​)
可以简化得:
f(p)=w11f(Q11)+w21f(Q21)+w12f(Q12)+w22f(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)=w11​f(Q11​)+w21​f(Q21​)+w12​f(Q12​)+w22​f(Q22​)
其中w11、w21、w12、w22w_{11}、w_{21}、w_{12}、w_{22}w11​、w21​、w12​、w22​分别表示四个点对点ppp上像素的一个权重比,这是根据训练得出来的。

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

2.4 双线性插值举例

这里假设按照取平均的准则,进行插值计算,即w11、w21、w12、w22w_{11}、w_{21}、w_{12}、w_{22}w11​、w21​、w12​、w22​均为 0.50.50.5

2.5 插值法总结

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

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

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


2.6 转置卷积(Transposed Convolution)

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

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

和传统的卷积运算相比:

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

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

具体给一些常见的例子4

No padding, no strides, transposed Arbitrary padding, no strides, transposed Half padding, no strides, transposed Full padding, no strides, transposed
No padding, strides, transposed Padding, strides, transposed Padding, strides, transposed (odd)

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

而第二行的strides设置为2,所以两两像素之间存在一个空像素,即 0 的个数为 strides−1strides - 1strides−1。

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

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

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


3. FCN (Fully Convolutional Networks)

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

如上图中,imageimageimage 为原始图像(32∗32)(32*32)(32∗32),有 pool1、pool2、pool3、pool4、pool5pool1、pool2、pool3、pool4、pool5pool1、pool2、pool3、pool4、pool5 五次卷积得到的FeatureMapFeature MapFeatureMap

首先看到 pool5pool5pool5,是通过原始图像经过了 5 次下采样操作,得到的1∗11*11∗1的FeatureMapFeature MapFeatureMap,包含了高纬度的特征信息。直接将该 FeatureMapFeature MapFeatureMap 通过上采样放大 32 倍,还原到原始图片大小,得到了32x32x32x upsampledupsampledupsampled predictionpredictionprediction 的结果,如下图红色箭头指向所示:

因为在 FCNFCNFCN 中每下采样一次,图像的边缘信息在不断减少,而图像的更高维度特征则会被学习到,为了同时包含低纬度和高纬度特征图的的不同特点,因此提出了一个相加的操作。
也就是说不仅只考虑高纬度的FeatureMapFeature MapFeatureMap ,因此 FCNFCNFCN 做出如下操作:

  1. 将 pool5pool5pool5 的特征进行两倍大小的上采样放大,即得到图中的2x2x2x upsampledupsampledupsampled predictionpredictionprediction,此时的 FeatureMapFeature MapFeatureMap 大小和 pool4pool4pool4 的大小一致;
  2. 因为 pool5pool5pool5 中保存了最高维度的特征信息,pool4pool4pool4 中保存了次高维度的特征信息,然后将这两个FeatureMapFeature MapFeatureMap 进行相加;
  3. 将相加的结果进行16倍的上采样放大,即得到图中的16x16x16x upsampledupsampledupsampled predictionpredictionprediction,此时的 FeatureMapFeature MapFeatureMap 大小也和原始输入图像一致。

通过上面三个步骤得到的图像同时保存了 pool4pool4pool4 和 pool5pool5pool5 两个维度级别的特征。

依次类推,把 pool3、pool4、pool5pool3、 pool4、pool5pool3、pool4、pool5 的维度特征也进行叠加,然后对比各自不同叠加情况的预测效果,取最优情况,这就是 FCNFCNFCN 最经典的一个原理流程。

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


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

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

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

  4. Convolution arithmetic ↩︎

  5. Fully Convolutional Networks for Semantic Segmentation ↩︎

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

  1. 探索图像语义分割中的特征融合

    简介 图像语义分割是计算机视觉领域一大重要分支,在benchmark性能一次次提升的过程中,特征融合起到很重要的作用.下面,将介绍图像语义分割任务中历年的比较不错的特征融合方法. 常用的Backbon ...

  2. 语义分割中的深度学习方法全解:从FCN、SegNet到各版本DeepLab

    语义分割中的深度学习方法全解:从FCN.SegNet到各版本DeepLab 原文:https://www.sohu.com/a/155907339_610300 图像语义分割就是机器自动从图像中分割出 ...

  3. 笔记:基于DCNN的图像语义分割综述

    写在前面:一篇魏云超博士的综述论文,完整题目为<基于DCNN的图像语义分割综述>,在这里选择性摘抄和理解,以加深自己印象,同时达到对近年来图像语义分割历史学习和了解的目的,博古才能通今!感 ...

  4. 深度学习-Tensorflow2.2-图像处理{10}-图像语义分割-23

    图像语义分割简介 图像语义分割网络结构-FCN 上采样 代码实现 import tensorflow as tf import matplotlib.pyplot as plt %matplotlib ...

  5. 当前主流的深度学习图像语义分割模型解析

    转载自[量子位]公众号 QbitAI 原文地址:http://www.sohu.com/a/155907339_610300 图像语义分割就是机器自动从图像中分割出对象区域,并识别其中的内容. 量子位 ...

  6. 图像语义分割方法研究进展

    全监督学习的图像语义分割方法研究进展 简介 1 全监督学习的图像语义分割方法 1.1 基于全卷积的图像语义分割方法 1.2 基于编码器解码器结构的图像语义分割方法 1.3 基于注意力机制的图像语义分割 ...

  7. 将特定像素点在图像上连接起来_(NeurIPS 2019) Gated CRF Loss-一种用于弱监督图像语义分割的新型损失函数...

    本文已经被NeurIPS 2019(2019 Conference and Workshop on Neural Information Processing Systems)接收,论文为弱监督图像语 ...

  8. 图像语义分割和目标检测(上)

    语义分割是对图像在像素级别上进行分类的方法,在一张图像中,属于同一类的像素点都要被预测为相同的类,因此语义分割是从像素级别来理解图像.但是需要正确区分语义分割和实例分割,虽然他们在名称上很相似,但是他 ...

  9. 一、深度卷积神经网络中图像语义分割研究总结

    时间:20220410 内容:语义分割研究进程总结 参考:深度卷积神经网络图像语义分割研究进展 http://www.cjig.cn/html/jig/2020/6/20200601.htm 语义分割 ...

最新文章

  1. php4.3-5.x,4.3 案例之 ThinkPHP 5.0 集成方法
  2. 三十八、商业智能与ETL基础知识
  3. linux移植wifi sd8688.bin 最新固件,[ZZ]浅析firmware完整生存和使用流程
  4. mysql分析sql语句性能_sql语句执行性能分析
  5. 160809312 王仲超 第四次作业
  6. php可以运行js代码吗,php可以运行js代码吗?
  7. 关于三极管集电极电压1V以上后伏安特性曲线不右移
  8. 第十二章、GDK学习
  9. caniuse-lite is outdated. Please run: npx browserslist@latest --update-db
  10. 【Processing】行走的行星 动态海报 processing艺术与科技
  11. blender合并物体后材质丢失问题的解决办法
  12. Latex 字体的设置
  13. 美国华盛顿州立大学计算机排名,华盛顿州立大学专业排名一览及最强专业推荐(USNEWS美国大学排名)...
  14. Understand教程—使用搜索功能的几种方法
  15. 机器学习 第二节 第二课
  16. flume系列之:监控flume上个小时生成的HDFS文件是否有损毁,并发送告警信息
  17. 二代测序之SNV基础知识笔记总结
  18. 安然邮箱社交网络分析
  19. 深圳弘辽科技电商如何用互联网思维摆地摊
  20. 利用python自带的库sympy,求解不同阻尼比的振动方程表达式

热门文章

  1. 遍历map的键值对的方法(深入浅出)
  2. 谁说夫妻之间没有爱情只剩亲情?
  3. 录用了一位38岁老程序员,结果...
  4. c#调用ShowDialog方法内存泄露
  5. 信托公司利用境外资金的两大途径
  6. 赤峰计算机二级考试在哪考,【图】赤峰电脑培训计算机二级考试就到东方—赤峰天下信息网...
  7. mysql自然连接和等值连接_区分笛卡儿积,自然连接,等值连接,内连接,外连接...
  8. 【SQL】群辉 NAS 安装 Mysql 远程访问连接
  9. PHP+html实现搜索功能,
  10. Unity3D发布APK到Android平台