三、图像分割的模型
1. FCN
FCN(Fully Convolutional Networks),全卷积网络,2015年发表,算是深度学习图像分割模型的鼻祖。
其核心思想为:
- 使用不包含全连接的全卷积网络,所以可以输入任意大小的图片。
- 使用跳跃连接,以结合不同尺度的图像特征,使得模型具备更高的精度与鲁棒性。
- 使用反卷积对提取后的低分辨率图像进行上采样,输出与原图同分辨率的分割图片,保留了原始图像的空间信息,从而能够对原图的每一个像素都进行预测。
其基本网络模式为:
论文中采用了经典分类网络:
- AlexNet
- VGGNet
- GoogLeNet
比如下面这个由AlexNet修改(BackBone的特征提取部分)而来的模型结构(PASCAL数据集,20类目标+背景=21):
原本最后会输出1000维的向量示输入图像属于每一类的概率,但是这里将最后的三层全连接换成了卷积,在进行上采样之后,就可以对每个像素进行分类。
跳跃连接:
这里最后三次下采样得到了三张特张图,32x、16x、8x,代表进行了多少倍的上采样,这里由于第一张特征图融合了之后两张特征图的信息,所以效果最好(下图8s是进行了特征融合的第一张特征图)。
损失函数:在进行了特征融合的特征图上(也就是8s,与上采样过后的16s、32s进行融合),每一个像素都和标签做损失,使用 softmax loss 。
使用crop裁剪:上采样时,特征图由于 padding 等原因和前面的图大小不同,要使用crop裁剪一下,大小一样后相加(其实在这种结构中直接相加效果不好),进行特征融合。
反卷积:这是一个步长为2、卷积核为3的反卷积工作流程(也有叫转置卷积的,这里与数学上的意义不一样):
下采样:这里使用了池化,其实并不好。(改变了像素信息的位置关系,像素位置就会有偏移,池化可以代替邻近点的信息,但是不能记录邻近点的位置关系)
训练:
作者的训练过程有四个阶段。
参考:https://blog.csdn.net/qq_31347869/article/details/89429211
1.一阶段
以经典的分类网络初始化,BackBone为AlexNet,最后两层全连接去掉。
2.二阶段
从小特征图(16x16x4096)到预测分割小图(16x16x21),直接上采样为一张大图,再crop为原图大小。
反卷积(橙色)的stride为32,故这个网络称为FCN-32s。
该使用单GPU训练约需3天。
3.三阶段
两次上采样,第二次上采样前使用跳跃连接进行特征融合(这里操作为直接相加),第二次反卷积stride为16,故该网络称为FCN-16s。
该使用单GPU训练约需1天。
4.四阶段
三次上采样,使用跳跃连接对三个特征图进行特征融合,第三次反卷积stride为8,故该网络称为FCN-8s。
该使用单GPU训练约需1天。
FCN的优缺点:
优点:
相较于传统图像分割方法:
- 可以接受任意大小的输入图像,而不要求训练图像和测试图像具有同样的分辨率。
- 更加高效,因为避免了由于使用像素块而带来的重复存储和计算卷积的问题。
缺点:
- 是得到的结果还是不够精细。进行8倍上采样虽然比32倍的效果好了很多,但是上采样的结果还是比较模糊和平滑,对图像中的细节不敏感。
- 对各个像素进行分类,没有充分考虑像素与像素之间的关系,忽略了在通常的基于像素分类的分割方法中使用的空间规整(spatial regularization)步骤,缺乏空间一致性。
总结:
- 要精确预测每个像素的分割结果,必须经历从大到小,再从小到大的两个过程 。
- 上采样时,分阶段增大比一步到位效果更好 。
- 使用跳跃连接与特征图融合的方法来提升模型精度与鲁棒性。
相关代码(pytorch):