您的位置:首页 > 理论基础 > 计算机网络

[深度学习论文阅读]Fully Convolutional Networks for Semantic Segmentation(FCN网络)

2018-01-18 17:08 1586 查看

论文简介

2015 CVPR

《Fully Convolutional Networks for Semantic Segmentation》

另外还有一版是2016年的

内容有些微不一样

Fully Convolutional Networks for Semantic Segmentation

key word: pixel level, fully Conv layer, CNN

总览

  本文最突出的贡献在于提出FCN全卷积神经网络来做Dense prediction(像素级的预测)。本网络并不在意输入图片的大小,与普通的CNN固定输入大小不太一样。

  文中使用当时做图像检测比较好的三种网络结构(Alex Net、VGG net、GoogLenet)改造成做语义分割的全卷积神经网络做语义分割任务(dense prediction)

  另外本文定义了upsampling常用的skip architecture(文中说该结构能够结合深层网络以及浅层网络的信息)。

  该网络得到很好的语义分割的效果,另外处理每张图片的速度也很快只需要五分之一秒。



  从图上可以看出,FCN是end to end 训练的,利用Imagenet的与训练模型做fine-tune然后达到语义分割(像素级预测)的效果

FCN

  原本普通的CNN将最后提取到的特征做全连接层最后分类,如下图上半部分,最后经过softmax后tabby cat的几率最高。但是将普通的CNN结构转换为全卷积FCN之后将FC层也转换成卷积。

举个例子,本来FC层是将最后卷积得到的特征图中的参数与FC层的一类全部对应起来,即将特征图中的每一个像素都有一个权重去得到全连接层。但是在全卷积中就是将最后的全部连接变成继续做卷积操作,以VGGnet为例子,最后得到7*7*256的特征图最后用4096个7*7的滤波器做卷积得到1*1*4096的特征,同样的,用1*1的滤波器做卷积可以得到1*1*1000。当然此时若输入的图像大一些,如384*384,最后经过同样的7*7卷积核就可以得到6*6*4096,那么6*6就有了位置信息(localization information)




  看上图,本来一个224*224的图片经过AlexNet后变成了1*1*1000的,但是放大一点的,例如384*384的经过这个过程就会变成6*6*1000的这就是1000张heatmap,这就是heatmap的由来,其实这个就是feature map,只不过是最后一层输出的。



  根据作者的讲解PPT

有下图,普通的Alexnet进行分类花费2.2ms的时间,而全卷积对像素点进行分类,输入500*500的图像输出10*10的heatmap(grid),这里对100个像素点进行分类,花费22ms。

  全卷积的计算:

实际上在全卷积中就是把FC转换成了卷积的操作,例如VGGnet在卷积到一维向量的FC的时候参数7*7*512*4096,得到的是一维的4096向量,在这里卷积层与一维向量是全部用权重连接的;将这个过程转化为全卷积过程,只不过将直接连接编程4096个滤波器(卷积核)做卷积操作,参数变为7*7*4096。

Loss

l(x;θ)=∑ijl′(xij;θ)

  全卷积的loss其实就是将的得到的heatmap中的每一个像素的Loss相加就可以得到,这里的Loss function是可以任选的,很多实现的用的是交叉熵。

upsampling

  上采样在本文中使用的是deconvolution(反卷积),但其实的操作是转置卷积。这个过程其实就是卷积的反过程,卷积的前向传播就是转置卷积的后向传播过程,反之亦然。可以很当然的想到,如果卷积的步长是s,那么很容易感觉到反卷积的步长应该是1s,这样才能扩大图片规格。另外重要的是:反卷积和既然只是卷积的反操作那么它也可以被端到端的训练,从刚才的loss公式中可以看到,只需要计算像素级的分类损失进行加和就可以得到总的损失。

  文中说反卷积的参数可以使非固定的(但实际作者实现的时候使用了固定的参数-这个操作相当于是双线性插值)。

另外上采样只是将图片扩大的操作,转置卷积是上采样的一种,固定参数的转置可以看做双线性插值,可调节参数的就是转置卷积。


Patchwise training is loss sampling

  通常做语义分割的方法都是使用Patchwise训练,就是指将一张图片中的重要部分裁剪下来进行训练以避免整张照片直接进行训练所产生的信息冗余,这种方法有助于快速收敛。但是本文章提出直接使用整张图片也许可能使效果更好而Patchwise可能是信息受损(所以此节名为Patchwise training is loss sampling)。

这里一个直觉得想法是一整张图像可能是有空间相关性的,那么Patchwise就减少了这种相关性


Segmentation Architecture(skip Architecture)

  文章对ILSVRC训练的分类网络进行fine-tune以合适FCN任务。重要的是:提出skip结构使得深层网络输出的粗略的但是全面的特征(感受野大)与较为浅层的网络输出细节的特征结合。





From classifier to dense FCN

  文章选择了AlexNet,VggNet,GoogLenet来进行fine-tune完成FCN任务。最终选择了VGG16net(在这个任务中性能与VGG19类似)。



  官方FCN的实现

Combining what and where

  这里显示了skip结构对于性能的提升。





  这篇文章首先将conv7之后产生的缩小32倍的图像进行上采样(步长为32)即扩大32倍,这就是FCN-32s。利用一层skip,将缩小32倍的图像进行上采样(双线性插值-非固定的参数可以通过BP进行改变的)然后与conv4的缩小16倍的图像相加,再继续进行步长为16的上采样-这是two stream net(双网络流网络)。同样的操作加上conv3之后的缩小8倍的图像就可以得到three stream net,得到的分割结果也更精细。



实验设计

  本文实验通过两种方式训练了网络

staged training

Learning all at once

  在staged方法中(这个pytoch实现的FCN使用的就是这种训练方式)先训练FCN-32s,然后upgrade到16s再upgrade到8s,这样依次渐进训练。

  第二种就是一次全部训练再相加,这种方式更快一些,另外两种方式的效果差不多。

Experimental framework Optimization

  一些训练参数的细节

Optimization:SGD with momentum 0.9

MimiBatch:20 images

lr:fixed learning rates of 10−3, 10−4, and5−5 for FCN-AlexNet, FCN-VGG16, and FCN-GoogLeNet

weight decay:5−4 or 2−4

Doubled the learning rates for biases

Zero-initialize the class scoring convolution layer

Dropout

fine-tuning

  训练过程



Result

结果评价方式



最终结果



总结

FCN

skip architecture

upsampling
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐