什么是语义分割?
语义分割就是从像素水平上理解、识别图片的内容。输入的是图片,输出的是同尺寸的分割标记,每个像素会被标识为一个类别。
语义分割的用处:
·机器人视觉和场景理解
·辅助/自动驾驶
·医学X光
一、简介
FCN是深度学习用于语义分割任务的开山之作,提出了“全卷积神经网络”,将全连接层替换为卷积层的end-to-end的全卷积网络,可以适应任意尺寸的输入,在不破坏空间结构的基础上,可以对图像进行像素级别的分类。解决了降采样后的低分辨率问题。
FCN采用反卷积层对最后一个卷积层的热力图进行上采样,使它恢复到输入图像相同的尺寸,从而可以对每个像素都产生了一个预测,通过逐个像素地求其在1000张特征图(1000个通道、1000个类别)上,该像素位置的最大数值描述(概率)作为该像素的分类,也就是求每个像素的所属类别,损失函数是在最后一层的特征图上各像素的损失之和。
二、FCN-反卷积
反卷积更倾向于称为转置卷积。反卷积核是卷积核的转置,学习率为0。如下图:
方法一:
反卷积:
· 外围全补零
· 输入:2x2
· 输出:4x4
· 参数设置
· 卷积核尺寸:3x3
· 步长:1
· Padding:2
具体参数可参考:
方法二:
插零分数步长反卷积:
· 输入:3x3
· 输出:5x5
· 参数设置:
· 卷积核尺寸:3x3
· 步长:2
· Padding:1
具体参数设置可参考:
反卷积是为了还原原有的特征图,类似消除原有卷积的某种效果,所以叫反卷积。
反卷积只是上采样中的一种实现方法,除了反卷积,还有双线性插值,反池化等。具体可参考:双线性插值、反池化。这里就不再描述。
二、跳层结构(Skip-layer)
对图像进行5次卷积+池化,图像会缩小至原图的1/2、1/4、1/8、1/16、1/32,如下:
把CNN中的全连接层变成卷积核为11outputsize的卷积层conv6、conv7,图像大小不变,得到heatmap,如下:
如果要将小的热力图恢复到原始大小的尺寸,并指出每个像素点是属于哪个物体类别。直接使用32倍的反卷积得到的分割效果粗糙,特别是对于边缘的识别其实是很糟糕的。在这里引入了跳层结构(Skip-layer)。如下图:
现在有1/32、1/16、1/8的特征图:
· 将1/32尺寸的heatMap进行反卷积上采样(stride=2,得到1/16的特征图),加上(concat操作)pool4的结果(1/16的特征图)补充细节(相当于一个插值过程),得到1/16的特征图;
· 再对这个concat的结果(1/16的特征图)进行再次反卷积上采样(stride=2,得到1/8的特征图),加上(concat操作)pool3的结果(1/8的特征图)补充细节,得到1/8的特征图;
· 再对这个concat的结果(1/8的特征图)进行一次反卷积(stride=8,得到原图大小的特征图),也就完成了整个图像的还原。
具体来说,就是将不同池化层的结果进行上采样。其中,使用 concat 操作融合两个层 ,然后结合这些结果来优化输出。
最后像素的分类按照该点在1000张上采样得到的图上的最大的概率来定。
三、FCN架构图例
参考:FCN详解