姓名:贺文琪
学号:19021210758
【嵌牛导读】近年来,以深度学习为中心的机器学习技术引起了人们的关注。比如自动驾驶汽车已经逐渐成为可能,但在整个深度学习过程,需要算法识别和学习作为原始数据提供的图像,在这一过程中,应用到了语义分割技术。
【嵌牛鼻子】图像语义分割,全卷积网络
【嵌牛提问】什么是语义分割?它的结构是怎样的?
转载源:https://mp.weixin.qq.com/ssrc=3×tamp=1575994552&ver=1&signature=wIOst3f1PiZhG8igzlTmxhrJhZLHx5WG3ydQ7QH6uHyp91GMCjerGGvEhmyw4HSvyF29pWaL4R4qmiaUZEuYNFGexnEtgyPU8w*4IzOkwwO4MCNtCjeV8bruIlwtIB6DEniNiu-W1ynXQ1PJNg1oCch0VKU4SCRp6p6NzC5QgU=
【嵌牛正文】
图像语义分割,简单而言就是给定一张图片,对图片上的每一个像素点分类。
从图像上来看,就是我们需要将实际的场景图分割成下面的分割图:
不同颜色代表不同类别。 经过阅读论文和查看PASCAL VOC Challenge performance evaluation server,我发现图像语义分割从深度学习引入这个任务(FCN)到现在而言,一个通用的框架已经大概确定了。即:
FCN-全卷积网络
CRF-条件随机场
MRF-马尔科夫随机场
前端使用FCN进行特征粗提取,后端使用CRF/MRF优化前端的输出,最后得到分割图。
接下来,我会从前端和后端两部分进行总结。
前端
为什么需要FCN?
我们分类使用的网络通常会在最后连接几层全连接层,它会将原来二维的矩阵(图片)压扁成一维的,从而丢失了空间信息,最后训练输出一个标量,这就是我们的分类标签。
而图像语义分割的输出需要是个分割图,且不论尺寸大小,但是至少是二维的。所以,我们需要丢弃全连接层,换上全卷积层,而这就是全卷积网络了。具体定义请参看论文:Fully Convolutional Networks for Semantic Segmentation
前端结构
FCN
此处的FCN特指Fully Convolutional Networks for Semantic Segmentation论文中提出的结构,而非广义的全卷积网络。
作者的FCN主要使用了三种技术:
卷积化(Convolutional)
上采样(Upsample)
跳跃结构(Skip Layer)
卷积化
卷积化即是将普通的分类网络,比如VGG16,ResNet50/101等网络丢弃全连接层,换上对应的卷积层即可。
上采样
此处的上采样即是反卷积(Deconvolution)。当然关于这个名字不同框架不同,Caffe和Kera里叫Deconvolution,而tensorflow里叫conv_transpose。CS231n这门课中说,叫conv_transpose更为合适。
众所诸知,普通的池化(为什么这儿是普通的池化请看后文)会缩小图片的尺寸,比如VGG16 五次池化后图片被缩小了32倍。为了得到和原图等大的分割图,我们需要上采样/反卷积。
反卷积和卷积类似,都是相乘相加的运算。只不过后者是多对一,前者是一对多。而反卷积的前向和后向传播,只用颠倒卷积的前后向传播即可。所以无论优化还是后向传播算法都是没有问题。图解如下:
跳跃结构
这个结构的作用就在于优化结果,因为如果将全卷积之后的结果直接上采样得到的结果是很粗糙的,所以作者将不同池化层的结果进行上采样之后来优化输出。具体结构如下:
而不同上采样结构得到的结果对比如下:
这是FCN结构,也是深度学习应用于图像语义分割的开山之作,所以得了CVPR2015的最佳论文。
当然还有一些其他的结构方法,比如:SegNet/DeconvNet,DeepLab,还有用RNN来做的,还有更有实际意义的weakly-supervised方法等等。