语义分割之《Fully Convolutional Networks for Semantic Segmentation》论文阅读


  FCN原文链接: Fully Convolutional Networks for Semantic Segmentation
  FCN代码链接: FCN github

  参考

一、FCN简介

  FCNs替换之前的经典网络Alexnet,VGGs,Googlenet等网络结构中的全连接层为卷积层提升了网络的训练速度,采用迁移学习的训练方式对网络进行优化,同时采用skip(现如今大部分网络都会采用的方式)融合低层细节信息和高层语义信息提升网络的性能,是第一个端到端的语义分割网络。

二、FCN结构

在这里插入图片描述

1、全卷积网络

  卷积网络的基本结构包含卷积层,池化层,激活层和全连接层,一般都是以一个层接一层排列,前一层的大小为 h ∗ w ∗ d h*w*d hwd,其中 h , w h,w h,w为输入数据的高和宽, d d d为该层神经元的通道数也即是个数。假设上一层的输入为 h ∗ w ∗ d h*w*d hwd,且在 ( i , j ) (i,j) (i,j)处的输入数据为 x i j x_{ij} xij则输出为:
y i j = f k s ( { X s i + σ i , s j + σ j 0 ≤ σ i , σ j < k } ) y_{ij}=f_{ks}(\lbrace {X_{si+\sigma i, sj+\sigma j}}_{0\le \sigma i, \sigma j \lt k} \rbrace ) yij=fks({Xsi+σi,sj+σj0σi,σj<k})
其中k是可大小,s是补偿, f k s f_{ks} fks标是该层的类型。和其他网络不同的地方是FCNs中的 f k s f_{ks} fks没有全连接层,也就是说整个网络中只包含卷积层,池化层和激活层。如下图所示,上半部分是一个正常的分类网络,后三层分别是4096,4096,1000通道的全卷积层,而FCNs中将后三层换成卷积层。传统的CNN使用的全连接层会使得网络丢失部分细节信息且限制了网络的输入大小,替换为全卷积之后可以保留部分细节的同时保证网络能够适应任何尺寸的图像,当然代价是性能上的损失。
在这里插入图片描述

2、上采样

  关于上采样,作者专门用了一小节介绍了空洞卷积(dilated convolution)但是也明确表示网络中并不会使用该结构,而是在3.3节中多次强调线性插值和deconvolution(一般翻译成去卷积,更准确的翻译应该是转置卷积,来自于ZFNet),使用deconvolution可以保证网络的上采样是可学习的,而且相比于其他方法更高效。另外,deconvolution在反向传播中其实就是convolution的相反过程。
在这里插入图片描述

3、SKIP

  将底层次的feature和高层次的feature结合,这样可以融合二者的细节信息和语义信息
在这里插入图片描述

三、实验结果

1、训练

  第一阶段,以经典的网络Alexnet,googlnet,vgg等的网络结构为基础去除后面的全连接层为卷积层:
在这里插入图片描述
  第二阶段,原始网络的输出为16*16*4096最后得到分割的预测图16*16*21(21是对应的类别数量),之后直接上采样为目因为最后上采样32倍因此为FCN-32s。
在这里插入图片描述
  第三阶段将第四个pooling层的预测结果使用skip结构和最终的输出融合,最后上采样16倍,称为FCN-16s。
在这里插入图片描述
  第三阶段将第三个pooling层的预测结果使用skip结构和最终的输出融合,最后上采样8倍,称为FCN-8s。
在这里插入图片描述

2、代码结构

  代码很简单不做过多的描述:

def FCN_8(image_size):
    fcn_8 = FCN_8_helper(image_size)
    #Calculating conv size after the sequential block
    #32 if image size is 512*512
    Conv_size = fcn_8.layers[-1].output_shape[2] 
    
    #Conv to be applied on Pool4
    skip_con1 = Convolution2D(21,kernel_size=(1,1),padding = "same",activation=None, name = "score_pool4")
    
    #Addig skip connection which takes adds the output of Max pooling layer 4 to current layer
    Summed = add(inputs = [skip_con1(fcn_8.layers[14].output),fcn_8.layers[-1].output])
    
    #Upsampling output of first skip connection
    x = Deconvolution2D(21,kernel_size=(4,4),strides = (2,2),padding = "valid",activation=None,name = "score4")(Summed)
    x = Cropping2D(cropping=((0,2),(0,2)))(x)
    
    
    #Conv to be applied to pool3
    skip_con2 = Convolution2D(21,kernel_size=(1,1),padding = "same",activation=None, name = "score_pool3")
    
    #Adding skip connection which takes output og Max pooling layer 3 to current layer
    Summed = add(inputs = [skip_con2(fcn_8.layers[10].output),x])
    
    #Final Up convolution which restores the original image size
    Up = Deconvolution2D(21,kernel_size=(16,16),strides = (8,8),
                         padding = "valid",activation = None,name = "upsample")(Summed)
    
    #Cropping the extra part obtained due to transpose convolution
    final = Cropping2D(cropping = ((0,8),(0,8)))(Up)
    
    
    return Model(fcn_8.input, final)

3、实验结果

1)、相同网络不同结构的对比

  可以明显的看到8s相较于其他两个结构在结果上更加精细而且边界效果更好。
在这里插入图片描述
在这里插入图片描述

1)、不同网络结构的对比

  指标,其中 n i j n_{ij} nij表示类别i被预测为类被j的数量, n c l n_{cl} ncl表示类别的数量 t i t_i ti表示类别i的像素的总数:

  • 像素准确率: ∑ i n i i ∑ i t i \frac{\sum_{i} n_{ii}}{\sum_it_i} itiinii
  • 平均准确率: 1 n c l ∑ i n i i t i \frac{1}{n_{cl}} \frac{\sum_in_{ii}}{t_i} ncl1tiinii
  • 平均IU: 1 n c l ∑ i n i i t i + ∑ j n j i − n i i \frac{1}{n_{cl}}\frac{\sum_in_{ii}}{t_i+\sum_jn_{ji}-n_{ii}} ncl1ti+jnjiniiinii
  • 加权IU: ( ∑ k t k ) − 1 ∑ i t i n i i t i + ∑ j n j i − n i i \frac{(\sum_kt_k)^{-1}\sum_it_in_{ii}}{t_i+\sum_jn_{ji}-n_{ii}} ti+jnjinii(ktk)1itinii

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

四、FCNs的缺陷

  • FCNs无法利用不同像素点之间的关联信息;
  • FCNs的速度比较慢;
  • FCNs的分割不是实例级别的(区分个体)
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值