基于图像的语义分割又被理解为密集的像素预测,即将每个像素进行分类,这不仅仅对于算法是一个考验,而且对于硬件的计算性能也有很高的要求。
因此,本文从两方面着手考虑,一方面是基于语义分割经典网络的介绍,向大家展示语义分割方向上的,经典的网络模型。另一方面,从计算的性能入手,向大家介绍一下语义分割方向的轻量化模型。
文章目录
一、经典语义分割模型
1.1 全卷积神经网络(FCN)
论文地址:
https://arxiv.org/abs/1411.4038
代码实现地址:
https://github.com/MarvinTeichmann/tensorflow-fcn[Tensorflow]
FCN神经网络作为深度学习中,语义分割网络的经典之作,是必须要理解和掌握的一个网络结构,它借鉴了传统的分类网络结构,而又区别于传统的分类网络,将传统分类网络的全连接层转化为卷积层。然后通过反卷积(deconvolution)进行上采样,逐步恢复图像的细节信息并扩大特征图的尺寸。
在恢复图像的细节信息过程中,FCN一方面通过可以学习的反卷积来实现,另一方面,采用了跳跃连接(skip-connection)的方式,将下采样过程中得到的特征信息与上采样过程中对应的特征图相融合。
虽然从目前的研究来看,FCN存在着诸如语义信息丢失,缺乏对于像素之间关联性的研究,但是FCN引入了编码-解码的结构,为深度学习在语义分割方向上的应用打开了一扇大门,也为后续的研究做出了许多借鉴之处。
FCN-8s在VOC-2012上的准确率如下图所示:
1.2 SegNet
论文地址:
https://arxiv.org/abs/1511.00561
代码实现地址:
https://github.com/tkuanlun350/Tensorflow-SegNet[Tensorflow]
SegNet采用了FCN的编码-解码的架构,但是与FCN不同的是,SegNet没有使用跳跃连接结构,并且在上采样的过程中,不是使用反卷积,而是使用了unpooling的操作。
SegNet相较于FCN有了两点的改进。第一,由于unpooling不需要进行学习,所以相比于FCN,SegNet的参数数量明显下降,从而降低了计算量。第二,由于SegNet在解码器中使用那些存储的索引来对相应特征图进行去池化操作。从而保证了高频信息的完整性,但是对于较低分辨率的特征图进行unpooling时,同样会忽略像素近邻之间的信息。
SegNet在CamVid数据集上的测试结果如下图所示:
1.3 Deeplab系列
deeplab系列是由Google团队设计的一系列的语义分割网络模型。是一个不断进化改进的过程,通过阅读deeplab系列的论文,理解作者一步步的改进思路,无论对于文章的理解,还是设计我们自己的网络结构,都有很大的帮助。
deeplabv1的设计亮点在于,采用了空洞卷积和CRF的处理。利用空洞卷积在不增加参数的情况下扩大了感受野的范围。而CRF的后期处理可以更好的提升语义分割的准确率。deeplabv2在v1的基础之上增加了ASPP(空洞空间金字塔池化)模块。如下图所示:
通过不同尺度的空洞率来提取不同尺寸的特征,更好的融合不同的特征,达到更好的分割效果。
deeplabv3的创新点有两个,一个是改进了ASPP模块,第二个是参考了HDC的设计思想,也就是横纵两种结构。对于改进的ASPP模块,如下图所示。