Contents
- 1 基于深度学习的语义分割方法介绍
- 1.1 Encoder
- 1.2 Decoder
- 1.3 Convolution Layer in Encoder and Decoder
- 1.4 总结
- 2 常见模型
- 2.1 FCN系列
- 2.2 SegNet
- 2.3 Unet及各种变体
- 2.4 Deeplab系列
- 3 参考资料
本文写的比较简单,属于入门入门入门级别,仅当作个人学习笔记和回忆时使用,更多细节和内容请参考论文和网络资料。
在计算机视觉领域,有一个方向是语义分割,一般是针对图像进行像素级分类,具体而言,就是语义图像分割会将每个像素都标注上其对应的类别。与实例分割(mask rcnn)不同,实例分割常常与目标检测系统相结合,用于检测和分割场景中同一对象的多个实例。
基于深度学习的语义分割方法介绍
用卷积神经网络分类(全卷积网络FCN),与普通CNN网络不通的是,FCN的分类层是卷积层,普通网络为全连接层。方法介绍如下: 最近的语义分割架构一般都用卷积神经网络(CNN)为每个像素分配一个初始类别标签。卷积层可以有效地捕捉图像中的局部特征,并以层级的方式将许多这样的模块嵌套在一起,这样 CNN 就可以试着提取更大的结构了。通过一系列卷积捕捉图像的复杂特征,CNN 可以将一张图的内容编码为紧凑表征。 但为了将单独的像素映射给标签,我们需要将标准 CNN 编码器扩展为编码器-解码器架构。在这个架构中,编码器使用卷积层和池化层将特征图尺寸缩小,使其成为更低维的表征。解码器接收到这一表征,用通过转置卷积执行上采样而「恢复」空间维度,这样每一个转置卷积都能扩展特征图尺寸。在某些情况下,编码器的中间步骤可用于调优解码器。最终,解码器生成一个表示原始图像标签的数组。
Encoder
encoder
本质其实就是一连串的卷积网络。该网络主要由卷基层,池化层和BatchNormalization层组成。卷基层负责获取图像局域特征,池化层对图像进行下采样并且将尺度不变特征传送到下一层,而BN主要对训练图像的分布归一化,加速学习。
概括地说,encoder对图像的低级局域像素值进行归类与分析,从而获得高阶语义信息(“汽车”, “马路”,“行人”),Decoder收集这些语义信息,并将同一物体对应到相应的像素点上,每个物体都用不同的颜色表示。
Decoder
Encoder已经获取了所有的物体信息与大致的位置信息,那么下一步就需要将这些物体对应到具体的像素点上了。这一系列工作是由Decoder完成。Decoder对缩小后的特征图像进行上采样,然后对上采样后的图像进行卷积处理,目的是完善物体的几何形状,弥补Encoder当中池化层将物体缩小造成的细节损失。
Convolution Layer in Encoder and Decoder
Encoder和Decoder中都存在卷积层。他们在算法上一模一样,但是在作用上有一点不同。
- Encoder阶段,卷基层的主要作用就是获取图像的局部信息,并传送给池化层,然后由2×2最大池化处理,把最大值特征再次传递到下一层。所以在这部分当中,Convolution Pooling的主要作用从图像中获取信息。
- Decoder阶段的处理是将特征层进行上采样,然后交给卷基层进行处理。上采样后的2×2区域只有一个前一层传来的1×1特征点,其余区域都是空值,因此这些空值需要被填补成适当的特征值,来让这个区域变得完整并且平滑。这个工作就是由卷基层担任的。所以位于Decoder当中的卷积层的作用是对图像进行“填补”。
总结
- Encoder对图像进行分析,弄清某一区域是什么物体,然后Decoder来寻找这个物体对应的是原图像当中的哪些像素点。
- 两个阶段的卷积层在计算方式上完全一样,但是表现结果有差异,因此根据此差异,Enocder阶段的卷积层命名为“卷积”,Decoder阶段的卷积命名为“反卷积”。
常见模型
FCN系列
三种模型FCN-32S, FCN-16S,FCN-8S
全卷积神经网络(FCN
)的主要贡献在于,因为没有全连接层(fc
),网络可适应任意尺寸输入,增大数据尺寸的反卷积(deconv
)层,能够输出精细的结果,结合不同深度层结果的跳级(skip
)结构,可确保鲁棒性和精确性。
SegNet
SegNet和FCN思路十分相似,只是Encoder,Decoder(Upsampling)使用的技术不一致。SegNet的上采样Upsampling(反向池化),通过Pooling Indices
方式来保存池化点的来源信息,在Encoder的池化层处理中,会记录每一个池化后的1×1特征点来源于之前的2×2的哪个区域,在这个信息在论文中被称为Pooling Indices。Pooling Indices在Decoder中使用,SegNet是一个对称网络,那么在Decoder中需要对特征图进行上采样的时候,我们就可以利用它对应的池化层的Pooling Indices来确定某个1×1特征点应该放到上采样后的2×2区域中的哪个位置,这样解决了特征点随机分配任意位置(或者固定)带来的层层误差。过程如下图所示:
此外SegNet的编码器部分使用的是VGG16的前13层卷积网络,每个编码器层都对应一个解码器层,最终解码器的输出被送入soft-max分类器以独立的为每个像素产生类概率。
SegNet网络结构
Unet及各种变体
Unet
在生物医学图像处理中是非常著名的解决方案,它在全卷积层上构建模型,对其做了修改使得它能够在少量的训练图像数据上运行,得到了更加精确的分割。网络结构如下图所示:
U-Net网络结构
U-net架构(最低分辨率为32×32像素的示例)。
每个蓝色框对应一个多通道feature map
。通道数量在框的顶部。框的左下角是x-y大小。白色框表示复制过来的feature map。箭头表示不同的操作。
Deeplab系列
- 主要有模型Deeplabv1,Deeplabv2,Deeplabv3,Deeplabv3 。
- DeepLab系列是针对Semantic Segmentation任务提出的一系列模型,主要使用了DCNN、CRF、空洞卷积做密集预测。重点讨论了空洞卷积的使用,并提出的获取多尺度信息的ASPP模块,在多个数据集上获得了state-of-the-art 表现.
- V3 使用深度分离卷积替代了pooling,并且使用了Xception,Xception的核心是使用了Depthwise separable convolution。Depthwise separable convolution的思想来自inception结构,是inception结构的一种极限情况。Inception 首先给出了一种假设:卷积层通道间的相关性和空间相关性是可以退耦合的,将它们分开映射,能达到更好的效果。在inception结构中,先对输入进行11的卷积,之后将通道分组,分别使用不同的33卷积提取特征,最后将各组结果串联在一起作为输出。更多内容可以参考这篇文章
参考资料
2019年最新基于深度学习的语义分割技术讲解(含论文 指标 应用 经验) U-net 论文笔记 语义分割论文-DeepLab系列