【图像分割】FCN (Fully Convolutional Networks)

FCN (Fully Convolutional Networks)

原文:

《Fully Convolutional Networks for Semantic Segmentation》

实现:

https://github.com/shelhamer/fcn.berkeleyvision.org
https://github.com/wkentaro/pytorch-fcn

相关文章:

FCN学习:Semantic Segmentation
【论文笔记】FCN
全卷积网络 FCN 详解
FCN的学习及理解
图像语义分割入门+FCN/U-Net网络解析

核心思想

  • 卷积化(Convolutional)
    不含全连接层(fc)的全卷积(fully conv)网络,可适应任意尺寸输入。
  • 上采样(Upsample)
    通过反卷积(deconvolution)/ 转置卷积(transposed convolution)增大特征图尺寸。
  • 跳跃结构(Skip Layer)
    结合不同深度层结果的跳级 (skip) 结构,得到更精细的分割结果。

优点和不足

  • 优点
    可以接受任意大小的输入图像,不用要求所有的训练图像和测试图像具有同样的尺寸
    更加高效,因为避免了由于使用像素块而带来的重复存储和计算卷积的问题。

  • 缺点
    图像分割结果不够精细,没有分割出目标图像的细节。虽然8倍上采样比32倍的效果好了很多,但是上采样的结果还是比较模糊和平滑,对图像中的细节不敏感。
    独立对各个像素进行分类,没有充分考虑像素与像素之间的关系。忽略了通常在基于像素分类的分割方法中使用的空间规整(spatial regularization)步骤,缺乏空间一致性

网络结构

网络结构如下。输入可为任意尺寸图像彩色图像;输出与输入尺寸相同,深度为:20类目标+背景=21。
在这里插入图片描述

  • 全卷积 - 提取特征
    虚线上半部分为全卷积网络(蓝:卷积,绿:max pooling)。对于不同尺寸的输入图像,各层数据的尺寸(height,width)相应变化,深度(channel)不变。 这部分由深度学习分类问题中经典网络AlexNet修改而来。只不过,把最后两个全连接层(fc)改成了卷积层。
  • 逐像素预测
    虚线下半部分为 upsample 网络,分别从卷积网络的不同阶段预测深度为21的分类结果。
    例:第一个预测模块的输入:16x16x4096,卷积核大小1x1,输出16x16x21。 相当于对每个像素施加一个全连接层,通过4096维特征预测21类结果。

训练过程

训练过程分为四个阶段
第1阶段
在这里插入图片描述
以经典的分类网络为初始化。最后两级是全连接(红色),参数弃去不用。

第2阶段
在这里插入图片描述
从特征小图(16x16x4096)预测分割小图(16x16x21),之后直接升采样为大图。
反卷积(橙色)的步长为32,这个网络称为FCN-32s。
这一阶段使用单GPU训练约需3天。

第3阶段
在这里插入图片描述
升采样分为两次完成(橙色×2)。
在第二次升采样前,把第4个pooling层(绿色)的预测结果(蓝色)融合进来。使用跳级结构提升精确性。
第二次反卷积步长为16,这个网络称为FCN-16s。
这一阶段使用单GPU训练约需1天。

第4阶段
在这里插入图片描述
升采样分为三次完成(橙色×3)。
进一步融合了第3个pooling层的预测结果。
第三次反卷积步长为8,记为FCN-8s。
这一阶段使用单GPU训练约需1天。

较浅层的预测结果包含了更多细节信息。比较2,3,4阶段可以看出,跳级结构利用浅层信息辅助逐步升采样,有更精细的结果。
在这里插入图片描述

upsample 过程

模型特征提取阶段通过卷积、池化、非线性激活函数等操作输出特征图像(heatmap)。因为丢了很多细节,我们直接对heatmap进行反卷积等操作得到的输出图像分割效果差。因此需要找到一种方式填补丢失的细节数据,所以需要使用到跳跃结构(Skip Layer)

论文中的upsample过程如下图所示:
在这里插入图片描述
在这里插入描述
image是原图像,conv1,conv2…,conv5为卷积操作,pool1,pool2,…pool5为pool操作(图片大小变为原图的1/2),con6-7是最后的卷积层,最右边一列是upsample后的end to end结果。图中nx 是指对应的特征图上采样n倍(即变大n倍),并不是指有n个特征图,如32x upsampled 中的32x 是指图像变大32倍,2x conv7是指conv7的特征图变大2倍。

第一行对应FCN-32s,第二行对应FCN-16s,第三行对应FCN-8s

  • 对原图进行卷积conv1pool1后图像缩小为1/2;对图像进行第二次卷积conv2pool2后图像缩小为1/4;对图像进行第三次卷积conv3pool3后图像缩小为1/8,此时保留pool3的featuremap;对图像进行第四次卷积conv4pool4后图像缩小为1/16,此时保留pool4的featuremap;对图像进行第五次卷积conv5pool5后图像缩小为1/32,然后把原来CNN中的全连接层改成卷积层conv6、conv7,图像featuremap的大小经过conv6conv7依然为原图的1/32,此时卷积的结果不再叫featuremap而是叫heatmap
  • 上采样通过 反卷积 (deconvolution) 实现。
    FCN-32s 将conv7的输出反卷积到原图大小(32倍放大),但是得到的结果不够精确,一些细节无法恢复。于是将第四层的输出和第三层的输出也依次反卷积,分别进行16倍和8倍上采样,得到FCN-16sFCN-8s。在分割表现上,FCN-8s 优于 FCN-16s 优于 FCN-32s。因为FCN-8s兼顾了local和global信息。
  • 特征图之间的 fuse 操作通过求和实现

loss的计算

FCN 网络的输入batchsize=1,因为分割loss的计算在每一个像素点都一个真值(标签),相当于每一个像素点的都是一个分类任务,一个图像就有对应像素点个样本。所以分割任务的batch是一个图片,将一个图片最后在所有像素点上的分类loss加起来计算一次梯度的更新。因此损失函数是在最后一层的spatial map上的每一个pixel的loss和,在每一个pixel使用 softmax loss

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值