FCN学习总结

简介

FCN——Fully Convolutional Networks for Semantic Segmentation是CVPR 2015的论文,其是深度学习应用于图像分割的代表作,作者Oral发表于CVPR 2015。该算法在图像分割问题中应用了当下CNN的几种最新思潮。全卷积网络(FCN)是从抽象的特征中恢复出每个像素所属的类别,即从图像级别的分类进一步延伸到像素级别的分类。

补充:区分semantic segmentation(语义分割)和instance segmentation(实例分割

  • semantic segmentation - 只标记语义,下图左:区分不同的类(即把人当做一类,所有人用同一种颜色标注)。
  • instance segmentation - 标记实例和语义。下图右:还要区分同类中的不同个人(即还要区分不同的人,不同人用不同颜色标注)
    在这里插入图片描述

FCN的核心思想如下:

  • 不含全连接层(fc)的全卷积网络。可适应任意尺寸输入
  • 增大数据尺寸的反卷积(deconv)层。能够输出精细的结果。
  • 和不同深度层结果的跳级(skip)结构。同时确保鲁棒性和精确性。

网络结构

FCN原论文中给出的网络结构如下:
在这里插入图片描述
上图中有几点需要明确

  • 32x即为扩大32倍。
  • Pool5扩大32倍就可以得到输入图像的大小。
  • 同样,Pool5扩大2倍并与Pool4融合后,再扩大16倍也可以得到输入图像的大小。
  • 后续同理……

具体的网络结构如下:输入可为任意尺寸彩色图像,输出与输入尺寸相同,且输出的channel数为:20类目标+背景=21。
在这里插入图片描述
重点

  • 损失函数是在最后一层的 spatial map上的所有pixel的loss和,在每一个 pixel 都使用 softmax loss 。
  • 使用 skip 结构融合多层(3层)输出,底层网络应该可以预测更多的位置信息,因为他的感受野小可以看到小的 pixels。
  • 上采样 lower-resolution layers 时,如果采样后的图因为 padding 等原因和前面的图大小不同,使用 crop ,当裁剪成大小相同的,spatially aligned ,使用 concat 操作融合两个层。

上图虚线上半部分为全卷积网络。(蓝:卷积,绿:max pooling)。对于不同尺寸的输入图像,各层数据的尺寸(height,width)相应变化,深度(channel)不变。

逐像素预测

上图虚线下半部分中,分别从卷积网络的不同阶段,以卷积层(蓝色×3)预测深度为21的分类结果。

例:第一个预测模块
输入 16 ∗ 16 ∗ 4096 16*16*4096 16164096,卷积模板尺寸 1 ∗ 1 1*1 11,输出 16 ∗ 16 ∗ 21 16*16*21 161621
相当于对每个像素施加一个全连接层,从4096维特征,预测21类结果。

采用反卷积层对最后一个卷积层的feature map进行上采样, 使它恢复到输入图像相同的尺寸,从而可以对每个像素都产生了一个预测, 同时保留了原始输入图像中的空间信息, 最后在上采样的特征图上进行逐像素分类(softmax),如下:
在这里插入图片描述
假设经过多次卷积和pooling以后,得到的图像越来越小,分辨率越来越低。其中图像大小到 H / 32 ∗ W / 32 H/32 * W/32 H/32W/32的时候,利用反卷积进行上采样,恢复到原始输入图像大小,最后的输出是21张heatmap经过upsampling变为原图大小的图片。为了对每个像素进行分类,这里有一个小trick,就是最后通过逐个像素地求其在21张图像 该像素位置 的最大数值描述(概率)作为该像素的分类。因此产生了一张已经分类好的图片,如下图右侧有狗狗和猫猫的图。
在这里插入图片描述

反卷积

首先推荐动图:https://github.com/vdumoulin/conv_arithmetic

反卷积本质上就是把原来卷积的forward和backward过程颠倒一下即可。(注:只能还原大小,不能还原数值)

反卷积的操作如下:如果还是不太懂,推荐参考博客
在这里插入图片描述

跳级结构

这部分其实在本文的最开始已经讲过了,在此不再赘述。

在跳级结构部分,使用逐数据相加(黄色×2),把三个不同深度的预测结果进行融合较浅的结果更为精细,较深的结果更为鲁棒
在融合之前,使用裁剪层crop(灰色×2)统一两者大小。最后裁剪成和输入相同尺寸输出。

训练

训练过程分为四个阶段,也体现了作者的设计思路,值得研究。

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

第2阶段
在这里插入图片描述
从特征小图(16164096)预测分割小图(161621),之后直接升采样为大图。
反卷积(橙色)的步长为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阶段可以看出,跳级结构利用浅层信息辅助逐步升采样,有更精细的结果。
在这里插入图片描述

结论

总体来说,本文的逻辑如下:

  • 想要精确预测逐像素的分割结果 。
  • 必须经历从大到小,再从小到大的两个过程 。
  • 在升采样过程中,分阶段增大比一步到位效果更好 。
  • 在升采样的每个阶段,使用降采样对应层的特征进行辅助。(跳级结构

done~

References

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值