全卷积神经神经网络-深度学习笔记

全卷积神经神经网络-深度学习笔记


机器学习与深度学习相关算法笔记目录

全卷积网络FCN是深度学习运用于图像语义分割的代表作,是一种端到端的图像分割方法,可以做到像素级别的预测,直接得出label map,输出分割结果。

网络结构

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

全卷积网络

一般的CNN在卷积层后面一般会连接几个全连接层,将卷积层得到的feature map映射到固定长度的特征向量。像AlexNet这样的经典CNN一般用于图像的分类与回归问题,它们最后得到的是整个图像类别的概率向量。以AlexNet的ImageNet模型为例,其输出一个1000维的向量表示输入图像属于哪一类别的概率。(用softmax进行归一化)


而全卷积网络就是将后面的全连接层转化为全卷积层。

卷积层与全连接层之间的不同点在于,卷积层中的神经元只与输入数据的局部区域进行连接,并利用卷积核共享参数。它们的相同点在于神经元之间都是计算点集,运算方式相同。

全卷积网络中将后三层全连接层转化为卷积层的方法如下:
1、第一个全连接层的输入是7*7*256的feature map,如果采用全连接,需要先将其变为7*7*256维的向量。而采用卷积网络只需要用核为7*7,深度为4096的卷积核对其进行卷积运算,进而得到深度为4096的1*1的feature map。
2、第二个全连接层则用核为1*1,深度为4096的卷积核代替。输出深度为4096的1*1的feature map。
3、第三个全连接层用核为1*1,深度为1000的卷积核代替。输出深度为1000的1*1的feature map。

采用全卷积层因为没有了全连接层对输入输出维度的要求,可以接受任意图片的输入。而将全连接层的参数重塑为卷积层的卷积核,使得卷积层可在更大的图片上滑动得到不同区域乃至像素点的分类情况。

反卷积层

为了输出与原图片一样大小的图像语义分割图,我们需要对全卷积网络网络最后一个深度为1000的feature map进行上采用,我们上采用使用的是反卷积网络。

反卷积层上采样的结构与全卷积网络是对称的。

其中反卷积的运算如下图所示:

图中为kernelsize=3,stride=1,padding=2的反卷积,input是2×2, output是4×4。

跳级(skip)结构

从实验结果看,得到的分割结果比较粗糙,作者考虑加入前层的细节,即把后面几个feature map与后面觉得结果进行fusion(即加和)。

实验发现这样的结果更加细致准确。在往下做到第三层时得到最佳效果。

模型训练

  1. 用AlexNet,VGG16或者GoogleNet训练好的模型做初始化,在这个基础上做fine-tuning,全部都fine-tuning,只需在末尾加上upsampling,参数的学习还是利用CNN本身的反向传播原理。
  2. 采用whole image做训练,不进行patchwise sampling。实验证明直接用全图已经很effective and efficient 对class score的卷积层做全零初始化。随机初始化在性能和收敛上没有优势

FCN例子: 输入可为任意尺寸图像彩色图像;输出与输入尺寸相同,深度为:20类目标+背景=21,模型基于AlexNet

  • 蓝色:卷积层
  • 绿色:Max Pooling层
  • 黄色: 求和运算, 使用逐数据相加,把三个不同深度的预测结果进行融合:较浅的结果更为精细,较深的结果更为鲁棒
  • 灰色: 裁剪,在融合之前,使用裁剪层统一两者大小, 最后裁剪成和输入相同尺寸输出
  • 对于不同尺寸的输入图像,各层数据的尺寸(height,width)相应变化,深度(channel)不变
  • 全卷积层部分进行特征提取, 提取卷积层(3个蓝色层)的输出来作为预测21个类别的特征
  • 图中虚线内是反卷积层的运算, 反卷积层(3个橙色层)可以把输入数据尺寸放大。和卷积层一样,升采样的具体参数经过训练确定

实验结果

参考文献
论文 : Fully Convolutional Networks for Semantic Segmentation

©️2020 CSDN 皮肤主题: 撸撸猫 设计师:设计师小姐姐 返回首页