FCN个人理解

背景

在图像分类任务上,现存网络有VGG、Resnet等,其中Resnet的出现使得计算机识别准确率超过人类自身。但是在目标检测和图像分割任务上准确率一直较低。现如今,在图像语义分割(对像素点进行分类)任务上,常见网络例如:FCN、SegNet、U-Net、SegNet、DeepLab、FC-Densenet E-Net 和 Link-Net、RefineNet、PSPNet、Mask-RCNN 以及一些半监督方法,例如 DecoupledNet 和 GAN-SS等。一般认为,发展到现在,基于深度学习的图像语义分割“通用框架已经确定”:前端FCN(包含基于此的改进 SegNet、DeconvNet、DeepLab)+ 后端 CRF/MRF(条件随机场/马尔科夫随机场)优化,如下图:

在这里插入图片描述

简介

Berkeley团队提出 Fully Convolutional Networks(FCN)方法用于图像语义分割,将图像级别的分类扩展到像素级别的分类,获得CVPR2015 的 best paper,网络如下:

在这里插入图片描述

FCN 是像素级别的识别,也就是输入有多少像素,输出就要多少像素,像素之间完全映射,并且在输出图像上有信息标注,指明每一个像素可能是什么物体 / 类别。

与经典的CNN在卷积层之后使用全连接层得到固定长度的特征向量进行分类(全联接层+softmax输出)不同,FCN可以接受任意尺寸的输入图像,采用反卷积层对最后一个卷积层的feature map进行上采样, 使它恢复到输入图像相同的尺寸, 最后在上采样的特征图上进行逐像素分类(即逐个像素计算softmax分类的损失, 相当于每一个像素对应一个训练样本)。

FCN与CNN的区别在于:FCN将CNN的全连接层转化为卷积层,输出是已经label好的一张图片,如下图粗略展示:

在这里插入图片描述

FCN的卷积网络部分可以采用VGG、GoogleNet、AlexNet等作为前置基础网络,再在这些的预训练基础上进行迁移学习与finetuning,对反卷积的结果跟对应的正向feature map进行叠加输出(这样做的目的是得到更加准确的像素级别分割),根据上采样的倍数不一样分为FCN-8S、FCN-16S、FCN-32S,其中不同结果如下:
在这里插入图片描述

《Fully convolutional networks for semantic segmentation》论文

论文中网络结构图,如下:

在这里插入图片描述

在FCN网络模型中,前一部分为正常卷积,类似于Alxnet,其中每一层卷积都包含卷积和池化(默认),并且每卷一次像素信息变为原来的1/2大小,到第五层时变为原图像的1/32;后一部分对1/32的热图(heatmap)、1/16、1/8的feature map进行还原,即进行反卷积上采样,扩充至原来大小(严格说是近似原始数据大小,此时一般进行裁剪操作)。

实现步骤

  1. 首先对原图像进行卷积 conv1、pool1后,原图像缩小为1/2;

  2. 继续对图像进行第二次卷积操作conv2、pool2,图像缩小为1/4;

  3. 继续对图像进行第三次卷积操作conv3、pool3,缩小为原图像的1/8,此时保留pool3的featureMap;

  4. 继续对图像进行第四次卷积操作conv4、pool4,缩小为原图像的1/16,保留pool4的featureMap;

  5. 继续对图像进行第五次卷积操作conv5、pool5,缩小为原图像的1/32;

  6. 然后把原来CNN操作中的全连接变成卷积操作——conv6、conv7,图像的featureMap数量改变,但是图像大小依然为原图的1/32,此时图像不再叫featureMap而是叫heatMap(热图)。现在我们有1/32尺寸的heatMap,1/16尺寸的featureMap和1/8尺寸的featureMap;

  7. 对1/32尺寸的heatMap进行upsampling操作,最后就完成了整个图像的还原。此时网络结构记为FCN-32s。

  8. 将conv4中保留的1/16尺寸的featureMap和1/32尺寸的heatMap进行融合,然后进行upsampling操作, 最后就完成了整个图像的还原。此时网络结构记为FCN-16s。

  9. 将conv3中保留的1/8尺寸的featureMap、conv4中保留的1/16尺寸的featureMap和1/32尺寸的heatMap三者进行融合,然后进行upsampling操作,最后就完成了整个图像的还原。 此时网络结构记为FCN-8s。

具体如下图:

在这里插入图片描述

核心思想

  1. 不含全连接层的全卷积网络,可以适应任意尺寸的输入。

  2. 上采样,增大数据尺寸的反卷积(deconv)层。

  3. 结合不同深度结果的跳级结构,可同时保证鲁棒性(深层)和精确性(浅层)。

下面逐个解释

为什么FCN可以适应任意尺寸的输入?

对于传统CNN,一幅输入图片在经过卷积层时,这些层是不关心图片大小的。比如对于一个卷积层,对于一个inputsize大小的输入feature map,滑窗卷积,输出outputsize大小的feature map即可。但是在进入全连接层之前,feature map(假设大小为n×n×c,其中通道数为c)要变成一条向量,此时卷积核的大小应为n×n(假设4096个卷积核),则权值个数是4096×n×n,而我们知道神经网络结构一旦确定,它的权值个数都是固定的,所以这个n不能变化,而n和inputsize成固定大小关系,所以层层向回看,每个outputsize都要固定,那每个inputsize都要固定,因此输入图片大小要固定。但是对于FCN,所有的层均为卷积层,所以网络大小与输入图片无关,因此输入图片大小可以任意。

上采样

现阶段上采样方法有双线性插值上采样、反卷积上采样、反池化上采样等。论文中采用的是反卷积上采样(具体反卷积解释在其他笔记中)。

跳级结构

在试验中发现,得到的分割结果比较粗糙,所以考虑加入更多前层的细节信息,也就是把倒数第几层的输出和最后的输出做一个fusion,实际上也就是加和。能够同时保证模型的鲁棒性和准确性。跳级结构如下图:

在这里插入图片描述

详细的网络训练过程

输入为5005003,对每个像素分20个类别,外加一个背景类别,共21个类别,其中橙色为上采样、灰色为裁剪层、蓝色为卷积、绿色为池化、黄色为融合。

  1. 以经典的分类网络为初始化。最后两级是全连接(红色),参数弃去不用;

在这里插入图片描述

  1. 从特征小图(16164096)预测出分割小图(161621),再进行上采样,最后经过灰色裁剪层,输出和原图相同尺寸输出。 其中反卷积(橙色)的步长为32,这个网络称为FCN-32s。

在这里插入图片描述

  1. 上采样分为两次完成(橙色×2)。

    第一次上采样对heatmap得到的预测小图161621进行上采样,尺寸变为2倍;

    接着在融合之前,使用裁剪层(灰色×2)统一两者大小;

    接着在第二次上采样前,把第4个pooling层(绿色)的预测结果(蓝色)融合进来(使用跳级结构提升精确性);

    然后进行第二次上采样,尺寸变为16倍。

    第二次反卷积步长为16,这个网络称为FCN-16s。
    在这里插入图片描述

  2. 上采样分为三次完成(橙色×3)。

    第一次上采样对heatmap得到的预测小图161621进行上采样,尺寸变为2倍;接着在融合之前,使用裁剪层(灰色×2)统一两者大小;接着在第二次上采样前,把第4个pooling层(绿色)的预测结果(蓝色)融合进来(使用跳级结构提升精确性);然后进行第二次上采样,尺寸变为2倍。 在融合之前,使用裁剪层(灰色×2)统一两者大小。在第三次上采样前,把第3个pooling层(绿色)的预测结果(蓝色)融合进来。使用跳级结构提升精确性。 然后进行第二次上采样,尺寸变为8倍。第三次反卷积步长为8,记为FCN-8s
    在这里插入图片描述
    比较2,3,4阶段可以看出,跳级结构利用浅层信息辅助逐步上采样,有更精细的结果。

缺点

  1. 得到的结果还是不够精细。进行8倍上采样虽然比32倍的效果好了很多,但是上采样的结果还是比较模糊和平滑,对图像中的细节不敏感

  2. 对各个像素进行分类,没有充分考虑像素与像素之间的关系。忽略了在通常的基于像素分类的分割方法中使用的空间规整(spatial regularization)步骤,缺乏空间一致性

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值