卷积网络 能够自动的学习图像的不同特征,
较浅层(感受野小)学习到图像的局部区域特征;
较深层(感受野大)学习到图像的抽象特征(对大小/位置/方向等因素敏感性低,也因此具有一定的鲁棒性)。
传统的基于CNN 的图像分割,为了对一个像素进行分类,需要把该像素周围的一个图像块作为CNN 的输入,用于网络的训练和预测,这样的开销很大:一是存储开销大,二是计算效率低(重复像素很多),三是图像块限制了感受野的大小。
下图是 全卷积网络(FCN)用于语义分割的网络结构:
原图通过不断的卷积和池化(大小分别缩小为原图的2倍→4倍→8倍→16倍),图像越来越小,分辨率越来越低。为了得到原图的分辨率,将最后一层卷积特征进行上采样,通过反向卷积(deconvolution)实现,得到与原图大小一致的heatmap图,每个位置输出该像素点所对应的类别概率(论文中VOC数据集共有21个分类)。
FCN将分类网络的最后一层去掉,将全连接层改为全卷积层。在AlexNet/VGG16/GoogleLeNet等修改后的网络上进行反向传播微调网络,得到实验结果如下图所示。
分类网络:卷积网络+全连接 的结构,能够得到固定大小的特征向量进行分类(softmax输出每个类别的对应概率)。
而全卷积层通过上采样,保持与原图大小一致,因此可以对每个像素进行分类,输出每个像素对应的概率。
与传统的基于CNN 的图像分割方法相比,FCN有两个明显优势:
1.可以接受任意大小的输入;
2.避免了重复存储和计算,更加高效。
卷积网络的深层特征通过“非线性的,从局部到全局的”金字塔结构,编码了图像中的语义和位置信息。全局信息解决“是什么”,而局部信息解决“在哪里”。论文指出可以采用“融合层”策略,将高层特征和低层特征进行融合来提高分割性能,下图是几种不同的FCN结构。
第一行表示FCN-32s方法:
原图经过不断的卷积和池化,得到conv7层的特征(比原图缩小了32倍),将conv7通过32倍的上采样(反向卷积)得到最后结果。但是conv7层的特征属于高层抽象特征,采样后得到的结果不够精细。
第二行表示FCN-16s方法,采用“融合”策略来细化图像分割结果:
将conv7的结果进行2倍上采样,与pool3相加,作为“融合”,然后将“融合”结果进行16倍的上采样(反向卷积)得到最后结果。实验结果表明,将高层特征与低层特征的融合能够明显提高像素点的分类效果。
第三行表示FCN-8s方法:
将conv7进行4倍上采样,pool4进行2倍上采样,与pool3进行融合,将融合结果进行8倍上采样(反向卷积)得到最后结果。
下图是几种FCN结构的结果,对比发现,FCN-32s能够得到大致的分割结果,但是不够精细。FCN-16s和FCN-8s明显比FCN-32s精细很多,而且融合了两种高层特征的FCN-8s已经很接近Ground Truth了。
FCN结合了卷积网络的层级特性,并且细化了输出。论文里还提出了两种细化结果的方法:
1.减小池化层的stride大小,但是修改之后,后面的层也需要进行调整,这就比较麻烦了;
2.采用shift-and-stitch方法,但是这种方法的开销比“融合层”更大,因此论文实验中没有采用。