【语义分割系列:三】FCN 论文阅读翻译笔记+资源整理+pytorch实现

本文介绍了FCN在语义分割中的应用,作为像素级别分类的里程碑,它通过全卷积网络实现端到端预测。FCN的特点包括无全连接层、反卷积上采样、skip结构以及任意输入尺寸的输出。文章详细讨论了FCN的架构,如反卷积、skip连接和训练策略,并提供了Pytorch实现的相关问题解答。
摘要由CSDN通过智能技术生成

2015 CVPR best paper

key word: pixel level, fully supervised, CNN
semantic segmentation milestone

Fully Convolutional Networks for Semantic Segmentation

官方 github:FCN

wkentaro Pytorch FCN

Pytorch FCN bag | 自己 2019/4/22 跑过

一篇很好的博文:全卷积网络 FCN 详解

Introduce

title

FCN作为图像语义分割的先河,实现像素级别的分类(即end to end,pixel-wise)

特点:

  • Extend deep classification architecture(AlexNet, VGG, GoogLeNet)
  • fine-tune, pixel-to-pixel
  • end-to-end
  • input of any size, output classification maps(heatmap)
  • deconvolution(upsample), can be learned
  • For pixelwise prediction, connect coarse output back to pixels

特点:

  • 做pixel-wise的prediction,使用ground-truth作为监督信息,预测label map
  • 不含全连接层(fc)的全卷积(fully conv)网络
    (分类网络输出一个热度图类型图像,而不像CNN在卷积之后会接上若干个全连接层,得到输入图像的分类的概率)
    title
  • 对全卷积网络末,使用deconv(反卷积)方法做unsampling(上采样),输出和原图大小一样。
  • 结合不同深度层结果的skip结构。同时确保鲁棒性和精确性。

title

上图:
猫,输入AlexNet, 得到一个长为1000的输出向量, 表示输入图像属于每一类的概率, 其中在“tabby cat”这一类统计概率最高。但是因为丢失了一些物体的细节,不能很好地给出物体的具体轮廓、指出每个像素具体属于哪个物体。
猫,输入FCN,得到一个热度图类型图像。

重点:

  • 损失函数是在最后一层的 spatial map上的 pixel 的 loss 和,在每一个 pixel 使用 softmax loss

  • 使用 skip 结构融合多层(3层)输出,底层网络应该可以预测更多的位置信息,因为他的感受野小可以看到小的 pixels

  • 上采样 lower-resolution layers 时,如果采样后的图因为 padding 等原因和前面的图大小不同,使用 crop ,当裁剪成大小相同的,spatially aligned ,使用 concat 操作融合两个层

缺点:

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

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

Architecture

FCN结构

  • 卷积化(Convolutional)
    VGG16,ResNet50/101等网络丢弃全连接层
  • 上采样(Upsample)
    反卷积(Deconvolution)
  • 跳层连接(Skip Layer)
    是为了优化结果

输入可为任意尺寸图像彩色图像;输出与输入尺寸相同,深度为:20类目标+背景=21。 (在PASCAL数据集上进行的,PASCAL一共20类)

title
蓝:卷积
绿:max pooling

全卷积-提取特征

图虚线以上部分

对于不同尺寸的输入图像,各层数据的尺寸(height,width)相应变化,深度(channel)不变。

AlexNet最后两个全连接层(fc)改成了卷积层。
(论文中最高精度的分类网络是VGG16,此处使用AlexNet举例)

逐像素预测

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

采用反卷积层对最后一个卷积层的feature map进行上采样, 使它恢复到输入图像相同的尺寸,从而可以对每个像素都产生了一个预测, 同时保留了原始输入图像中的空间信息, 最后在上采样的特征图上进行逐像素分类。

最后的输出是21张heatmap经过upsampling变为原图大小的图片,为了对每个像素进行分类预测label成最后已经进行语义分割的图像,这里有一个小trick,就是最后通过逐个像素地求其在21张图像该像素位置的最大数值描述(概率)作为该像素的分类。因此产生了一张已经分类好的图片,如下图右侧有狗狗和猫猫的图。

反卷积-上采样

  • FCN是用transposed convolution策略,即将feature 反卷积后得到upsampling,这一过程需要学习

title

先进行上采样,即扩大像素;再进行卷积,通过学习获得权值。

title

反卷积层(橙色×3)可以把输入数据尺寸放大。

FCN作者使用的方法是这里所说反卷积的一种变体,这样就可以获得相应的像素值,图像可以实现end to end。

(feature map值与权重不同,生成的上采样的二值区域也是不一样的。)

skip结构

title

title

Loss

fcn网络的输入batchsize是1,因为分割loss的计算在每一个像素点都一个真值(标签),相当于每一个像素点的都是一个分类任务,一个图像就有对应像素点个样本。所以分割任务的batch是一个图片,将一个图片最后在所有像素点上的分类loss加起来计算一次梯度的更新。

Train

title

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

title

从特征小图(16164096)预测分割小图(161621),之后直接升采样为大图。
反卷积(橙色)的步长为32,这个网络称为FCN-32s。

title

升采样分为两次完成(橙色×2)。
在第二次升采样前,把第4个pooling层(绿色)的预测结果(蓝色)融合进来。使用skip结构提升精确性。
第二次反卷积步长为16,这个网络称为FCN-16s。

title

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

现在我们有1/32尺寸的heatMap,1/16尺寸的featureMap和1/8尺寸的featureMap&#

  • 4
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值