FCN网络详解

FCN论文详解

FCN算法Pytorch实现:https://github.com/codecat0/CV/tree/main/Semantic_Segmentation/FCN

1. 将全连接层替换为卷积层

语义分割的目的是对图像中每一个像素点进行分类,与普通的分类任务只输出图像某个类别不同,语义分割任务输出的是与输入图像大小相同的图像,输出图像的每个像素对应输入图像每个像素的类别,这也就是论文中提到的dense prediction

FCN全卷积网络是图像分割开山之作,其核心思想非常简单,用卷积层代替分类网络中的全连接层。
在这里插入图片描述

用于分类的神经网络由卷积层、池化层和最后连接的全连接层组成,经过最后的全连接层后,二维的图像信息被映射为具体的一维类别信息进行输出,得到分类标签。

对于语义分割问题,我们需要的不是具体的类别标签,而是一个二维的分割图,FCN方法丢弃全连接层,并将其换成卷积层,最后输出与原图相同大小的分割图

论文作者认为:全连接层让目标的位置信息消失了,只保留了语义信息,而将全连接层更换为卷积层可以同时保留位置信息和语义信息
在这里插入图片描述

2. 上采样

由于经过多次卷积之后图像的大小会缩小,需要通过上采样对其进行尺寸大小的恢复,使最后的分割图与原图尺寸一样

2.1 反卷积

下图为stride=1、paddding=0的反卷积的工作过程
在这里插入图片描述

下图为stride=2、padding=1的反卷积的工作过程
在这里插入图片描述

根据卷积的尺寸计算公式
o = i − k + 2 ⋅ p s + 1 o=\frac {i-k+2 \cdot p} {s} + 1 o=sik+2p+1
反卷积的尺寸就算公式为:
i = ( o − 1 ) ⋅ s + k − 2 ⋅ p i = (o-1) \cdot s + k - 2 \cdot p i=(o1)s+k2p

Pytorch实现nn.ConvTranspose2d

2.2 插值

2.2.1 最近邻插值

在这里插入图片描述

计算PQ11、Q12、Q22、Q21距离可知P与Q11最近,所以P像素点的值与Q11像素点的值一样

2.2.2 双线性插值

在这里插入图片描述

双线性插值就是做两次线性变换,先在X轴上做一次线性变换,求出每一行的R
R 1 = x 2 − x x 2 − x 1 Q 11 + x − x 1 x 2 − x 1 Q 21 R 2 = x 2 − x x 2 − x 1 Q 12 + x − x 1 x 2 − x 1 Q 22 R_1=\frac {x_2-x} {x_2-x_1} Q_{11} + \frac {x-x_1} {x_2-x_1}Q_{21} \\ R_2=\frac {x_2-x} {x_2-x_1} Q_{12} + \frac {x-x_1} {x_2-x_1} Q_{22} R1=x2x1x2xQ11+x2x1xx1Q21R2=x2x1x2xQ12+x2x1xx1Q22
再在Y轴上做一次线性变换,求该区域的P
P = y 2 − y y 2 − y 1 R 1 + y − y 1 y 2 − y 1 R 2 P=\frac {y_2-y} {y_2-y_1}R_1 + \frac {y-y_1} {y_2-y_1}R_2 P=y2y1y2yR1+y2y1yy1R2

2.3 UpPooling

在这里插入图片描述

2.4 Upsample

3. 跳跃结构

如果直接用全卷积后的层进行上采样的话,得到的结果往往不够精细,所以本文中采取了跳级结构的方法,将更靠前的卷积层和经过上采样的层相结合,如下图所示:
在这里插入图片描述

采用这种方法,能够在保留全局特征的前提下,尽可能使得图像的划分更为精细

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值