深度学习笔记(基础)——(六)全卷积神经网络(FCN)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_37764129/article/details/86130395

    通常CNN在卷积层之后会接上若干个全连接层,将卷积层产生的特征图(Feature Map)映射成一个固定长度的特征向量进行分类。以AlexNet为代表的经典CNN结构适合于图像级的分类和回归任务,因为它们最后都期望得到整个输入图像的一个数值描述,如AlexNet的ImageNet模型输出一个1000维的向量,表示输入图像属于每一类的概率。例如,图4.15中的猫,输入AlexNet,得到一个长为1000的输出向量,表示输入图像属于每一类的概率,其中在“tabby cat”这一类上响应最高。

    与物体分类建立图像级理解任务不同的是,有些应用场景下要得到图像像素级别的分类结果,如语义级别图像分割(Semantic Image Segmentation),最终要得到对应位置每个像素的分类结果;又如边缘检测,相当于对每个像素做一次二分类(是边缘或不是边缘)。以语义图像分割为例,其目的是将图像分割为若干个区域,使得语义相同的像素被分割在同一区域内。图4.16是一个语义图像分割的例子,输入图像,输出不同颜色的分割区域表示不同的语义:背景、人和马。

    Lonjong等发表在CVPR2015的论文提出了,全卷积网络(FCN)进行像素级的分类从而高效地解决了语义级别的图像分割问题。与经典的CNN在卷积层之后使用全连接层得到固定长度的特征向量进行分类不同,FCN可以接受任意尺寸的输入图像,采用反卷积层对最后一个卷积层的Feature Map进行采样,使它恢复到与输入图像相同的尺寸,从而可以对每个像素都产生了一个预测,同时也保留了原始输入图像中的空间信息,最后在上采样的特征图上进行逐像素分类。逐像素计算Softmax分类的损失,相当于每一个像素对应一个训练样本。

Lonjong的论文包含了当下CNN的三个思潮,具体如下:

  • 不含全连接层(FC)的全卷积(Fully Conv)网络,可适应任意尺寸输入
  • 增大数据尺寸的反卷积(Deconv)层,能够输出精细的结果
  • 结合不同深度层结果的跳级(Skip)结构,同时确保鲁棒性和精确性。

全卷积网络的原理:

    FCN将传统CNN中的全连接层转化成一个个的卷积层。如图4.15所示,在传统的CNN结构中,前5层是卷积层,第6层和第7层分别是一个长度为4096的一维向量,第8层是长度为1000的一维向量,分别对应1000个类别的概率。FCN将这3层也表示为卷积层,卷积核的大小通道数,宽,高)分别为(4096,1,1)、(4096,1,1)、(1000,1,1)。这样所有的层都是卷积层,故称为全卷积网络。

    可以发现,经过多次卷积(还有Pooling)以后,得到的图像越来越小,分辨率越来越低(粗略的图像),那么FCN是如何得到图像中每一个像素的类别的呢?为了从这个分辨率低的粗略图像恢复到原图的分辨率,FCN使用了上采样。例如经过5次卷积(和Pooling)以后,图像的分辨率依次缩小了2、4、8、16、32倍。对于最后一层的输出图像,需要进行32倍的上采样,以得到与原图一样的大小。

    这个上采样是通过反卷积(Deconvolution)实现的。对第5层的输出(32倍放大)反卷积得到原图大小,得到的结果还是不够精确,一些细节无法恢复。于是,Jonathan将第4层的输出和第3层的输出也依次反卷积,分别需要16倍和8倍上采样,结果就精细一些了。图4.17所示的对比,可以看到他们得到的结果越来越精确。

    与传统用CNN进行图像分割的方法相比,FCN有两大明显的优点:一是可以接受任意大小的输入图像,而不用要求所有的训练图像和测试图像具有同样的尺寸;二是更加高效,因为避免了由于使用像素块带来的重复存储和计算卷积的问题

    同样FCN的缺点也比较明显:一是得到的结果还是不够精细,进行8倍上采样虽然比32倍的效果好了很多,但是上采样的结果还是比较模糊和平滑,对图像中的细节不敏感;二是对各个像素进行分类,没有充分考虑像素与像素之间的关系,忽略了在通常的基于像素分类的分割方法中使用的空间规整(Spatial Regularization)步骤,缺乏空间一致性。

猜你喜欢

转载自blog.csdn.net/qq_37764129/article/details/86130395