• 深度学习领域图像分割FCN(Fully Convolutional Networks for Semantic Segmentation)


    目录

    1.论文的下载

    2.图像分割FCN项目实战:测试和数据集训练

    3.FCN前置知识点

    (1)图像分割 

    (2)传统方法存在的问题

     (3)语义分割常用评价指标

     (4)图像分割的应用

    4.FCN正文

     (1)总体介绍

    (2)端到端的训练方式

    (3)全局信息与局部信息

    (4)分割术语

    (5)感受野

    (6)平移不变性

    (7)Shift-and-stitch

    (8)上采样(Upsampling)

     (9)从分类到密集FCN

     (10)网络结构

     (11)训练技巧

    (13)拓展(提高准确度)

    (14)研究成果

    5.实验结果

    (1)PASCAL VOC 数据集上的效果

    (2)NYUDv2数据集上的结果 

    (3)SIFT-Flow数据集上的结果

    6.补充 

    1.论文的下载

    https://arxiv.org/abs/1411.4038

    2.图像分割FCN项目实战:测试和数据集训练

    https://mydreamambitious.blog.csdn.net/article/details/125774545

    注:

    深度学习领域语义分割常用数据集:https://mydreamambitious.blog.csdn.net/article/details/125938575

    3.FCN前置知识点

    (1)图像分割 

    图像分割是计算机视觉研究中的一个经典难题,已经成为图像理解领域关注的一个热点,图像分割是图像分析的第一步,是计算机视觉的基础,是图像理解的重要组成部分,同时也是图像处理中最困难的问题之一。所谓图像分割是指根据灰度、彩色、空间纹理、几何形状等特征把图像划分成若干个互不相交的区域,使得这些特征在同一区域内表现出一致性或相似性,而在不同区域间表现出明显的不同。简单的说就是在一副图像中,把目标从背景中分离出来。对于灰度图像来说,区域内部的像素一般具有灰度相似性,而在区域的边界上一般具有灰度不连续性。 

    (2)传统方法存在的问题

    在实际运用中,每运行一次N-cut,只能切割一次图片,为了分割出图像上的多个物体,需要进行多次运行多次,才能对所有的物体进行分割,如下图中就是进行了7次分割之后才将所有的物体分割完毕,并且准确率也有待改进。

    缺点:

    基于图像块的分割虽然常见,但是效率低,且往往需要前期或者后期处理,如超像素,检测框,局部预分类等。

    语义分割面临着语义和位置信息不可兼得的问题,全局信息解决的“是什么”,而布局信息解决的是“在哪里”。

     (3)语义分割常用评价指标

    首先假设共有K+1个类别,Pij表示本属于类别i,但是被预测为类别j的像素数量,因此Pii为真正的数量,而Pij和Pji分别表示为假正和假负:

     

     (4)图像分割的应用

    地理信息系统

    无人车驾驶

    医疗影像分析

    机器人等领域

    注:相对于图像分类或者目标检测,语义分割使我们的对图像有更加细致的了解。

    4.FCN正文

     (1)总体介绍

    论文研究成就:在现有的网络下,对网络进行改进,将最后的全连接成修改为全卷积兼容任意尺度的图片大小,并且采用端到端,像素到像素训练方式,其结果超过了现有的语义分割技术;

    核心思想:搭建了一个全卷积网络,兼容任意尺寸的图片大小,经过有效推理和学习得到相同尺度的输出;

    主要方法:将当前现有的分类网络修改为全卷积网络(AlexNet,VGGNet和GoogleNet)并进行微调设计了跳跃连接,将全局信息和局部信息连接起来,相互补偿。

    实验成果:在PASCAL VOC,NYUDv2和SITF-Flow数据集上,与现有的最好的语义分割技术相比得到了最好的结果。

    (2)端到端的训练方式

     传统的非端到端训练方式:如在一个典型的自然语言处理(Natural Language Processing)问题中,包括分词、词性标注、句法分析、语义分析等多个独立步骤,每个步骤是一个独立的任务,其结果的好坏会影响到下一步骤,从而影响整个训练的结果,这是非端到端的。

    而现在的端到端的训练方式:输入原始图像,输出的是预测的图像,中间的具体过程依赖于算法本身的学习能力。通过网络内部结构,对原始图像进行降维和特征提取,并在后序过程中将尺寸较小的特征图逐渐恢复成与原始尺寸相同的预测图。由于端到端的训练方式依赖于设计的算法好坏,而不需要人为的干预。

    (3)全局信息与局部信息

    局部信息:

           提取位置:浅层网络提取局部信息;

           特点:物体的几何信息比较丰富,对应的感受野较小;

           目的:有助于分割尺寸较小的目标,有利于提高分割的精确度。

    全局信息:

            提取位置:深层网络中提取全局信息;

             特点:物体的空间信息比较丰富,对应的感受野较大;

            目的:有助于分割尺寸较大的目标有利于提高分割的精确度。

    (4)分割术语

    pixel-wise(pixels-to pixels):像素级别(每张图片都是一个个pixel组成的,pixel是图像的基本单位)。

    image-wise:图像级别(比如一张图片的标签是狗,即“狗”是对整个图片的标注)。

    patch-wise:块级别(介于像素级别和图像级别之间,每个patch都是由多个pixel组成的)。

    patch wise training:指对每一个感兴趣的像素,以它为中心取一个patch(小块),然后输入网络,输出则为该像素标签。

    (5)感受野

    感受野:在卷积神经网络中,决定某一层输出结果中一个元素所对应的输入层的区域大小。

    计算公式:

     注:随着stride越大,感受野越大,但是过大的stride会使feature map保留的信息变少。因此在较小stride情况下,如何增大感受野或者保持不变,也是需要解决的问题。

     

     

     

     

    (6)平移不变性

    宏观的结果:图像中的目标无论被移到图片中的哪个位置,分类结果都应该是相同的。

    具体的过程:卷积=平移不变图像中的目标有移动,得到的特征图也会产生相同的移动。

    注:《why do deep convolutional networks generalize so poorly to small image transformations?》

    (7)Shift-and-stitch

    补零+平移原始图片得到四种版本的输入图片——>最大池化得到对应的四张输出的特征图片——>将四张输出图拼接成密集预测图。

     描述:假设下采样因子为f(相当于步长stride),输入图像通过(左移和上移填充)右向x像素和向下y像素。其中

     

    最后得到f^2个输入图像,当然对应的输出图像也对应着f^2个。

    比如:下面的这张图

     经过平移之后得到2^2=4个输入图像,输出对应着四个特征图,并且输出是交错的,因此预测对应于位于感受野中心的像素。最后将四个输出图进行交织成一个与输入大小相同的特征图。

     操作的原理是知道了,可是论文中为什么这么做呢?

    解释:在网内减少二次采样:

    第一种做法是:通过稀疏卷积核filter的方式,膨胀卷积核filter,filter能看到更细节的信息,但是接受域更小而且需要花费很长时间计算。

    第二种做法是Shift-and -stitch:输出更加密集且没有减小filter的接受域范围,但是由于使用更大的感受野,因此相对于原始的设计filter不能感受更精细的信息。

    密集预测:通过网络内的反卷积层将分数提升到输入维度。最终层反卷积滤波器固定为双线性插值,而中间上采样层初始化为双线性上采样,然后学习。不使用移位和缝合或等效的滤波器稀疏。

     参考:https://zhuanlan.zhihu.com/p/56035377

    (8)上采样(Upsampling)

    简单的双线性插值通过线性映射来计算来自最近四个输入的每个输出yij,线性映射仅依赖于输入单元和输出单元的相对位置。但是论文中提到并没有使用双线性插值的方式进行上采样,而是使用反卷积的方式进行上采样(Deconvolution——back convolution).

    反卷积可以理解为卷积的逆运算操作,但是反卷积不能恢复因为卷积操作而造成的值损失,所以真正意义上的反卷积,仅仅是将卷积过程反向变换一次,所以也可以被称为转置卷积。

     

     (9)从分类到密集FCN

    对VGGNet,GoogleNet和AlexNet网络进行改进之后,并且在ILSVRC12和ILSVRC14上的表现都非常的不错,因此最终选择VGGNet16,比VGGNet19的表现都还要好。而对比GoogLeNet只选择了最终的损失层,并且丢弃了最后的平均池化层,从而提高了性能。通过丢弃最后的分类层并将其修改为全卷积层,使用一个1x1卷积在通道数为21上,从而来预测每个粗略输出位置的每个PASCAL类别(当然包括背景)的概率。然后是反卷积层,将粗略输出双线性插值上采样到像素密集输出。

    最终在三个改进的网络上的表现如下(其中最差的模型也达到了最好的75%):

     (10)网络结构

    基于VGG16的调整:

     

     

     其中:

    FCN-32s:2^5=32表示经过5次下采样之后的特征图,如果还原为原图的话,需要经过32倍上采样;但是这样做对恢复的原图并不好。

    网络结构图中的1操作表示:直接将最后经过下采样之后的特征图乘以32进行上采样。

    网络结构图中的2操作表示:首先将经过5次下采样(pool5)之后的特征图上采样2倍之后和经过4次下采样(pool4)的特征图进行融合,得到FCN-16s。

    网络结构图中的3操作表示:将2操作的结果(FCN-16s)进行2倍采样之后和经过3次下采样(pool3)的特征图进行融合得到FCN-8s。

    测试结果:

     在PASCAL VOC 2012上验证的结果(不同的评估方式):

     (11)训练技巧

                 加载预训练模型

                 初始化反卷积参数

                 至少175个epoch后算法才会有不错的表现

                 学习率在100次后进行调整

                 pool3之前的特征图不需要进行融合。

    (12)实验框架

               参数调优:优化器选择SGD,动量选择0.9;并且minibatch选择20,固定学习率的大小为10^-3,10^-4,5^-5(GoogLeNet,VGG16和AlexNet);权重衰减为5^-4或者2^-4;并且对卷积层的初始化采用0初始化(随机的初始化对于精度和速度并没有什么贡献)。

               微调:通过反向传播通过整个网络对所有层进行微调。 单独对输出分类器单独进行微调只能获得完整微调性能的70%,因此不能从头开始训练。 VGG网络是分阶段训练的,而我们从完整的16层初始化后进行训练)对于粗糙的FCN-32s,在单GPU上,微调要花费三天的时间,而且大约每隔一天就要更新到FCN-16s和FCN-8s版本。

     

    (13)拓展(提高准确度)

    第一:密集预测:通过网络内的反卷积层将分数提升到输入维度。最终层反卷积滤波器固定为双线性插值,而中间上采样层初始化为双线性上采样,然后学习。不使用移位和缝合或等效的滤波器稀疏。

    第二:类别平衡:虽然本文说类别平衡没有必要,但是我觉得还是有必要的,因为如果类别不平衡的话,对于训练的结果影响还是挺大的额,比如200图片(猫狗)180张为狗的图片,20张为猫的图片,那么很明显最后的训练结果影响是非常大的。

    第三:数据增强:数据增对于扩充数据集非常的有效,并且对于模型的训练也是有提高的,但是本文对于数据增强并没有什么提高、

    图像数据增强(平移,旋转,亮度变换,翻转,添加高斯噪声,缩放,裁剪)

    第四:更多的训练数据:更多的训练数据集对于模型的训练当然是好,能提取到更多的图像特征,模型的泛化能力也更强。所以在本文中训练数据集的增加贡献了3.4%。

    (14)研究成果

                第一:将分类网络改编为全卷积网络,具体包括全连接层转化为全卷积层以及通过反卷积的方式进行上采样。

                第二:使用迁移学习的方式进行微调。

                第三:使用了跳跃连接结构使得语义信息可以和表征信息相结合,产生准确而精细的分割。

                第四:FCN证明端到端的训练,像素到像素的训练方式下的卷积神经网络超过现有的最好的语义分割结果。

                第五:FCN成为PASCAL VOC 最出好的分割方法,较20111和2012分割算法的MIoU提高了近20%。

    5.实验结果

    (1)PASCAL VOC 数据集上的效果

    (2)NYUDv2数据集上的结果 

    (3)SIFT-Flow数据集上的结果

     

     

    6.补充 

    Mean IU对于小尺度特征图不是一个较好的评价指标;随着下采样的倍数降低,Mean IU的值不断增加。因为低倍下采样意味着特征图处于网络的浅层,但是浅层的特征图对于分类效果并不是很好,提取到的特征比较粗糙,所以Mean IU对于小尺度的特征图评价准确率不准确。

     

  • 相关阅读:
    虚拟化、容器与Docker基本介绍以及安装部署(Docker 基本管理)
    从开发角度读懂公司卫生间一直有人窜稀的原理
    PHP代码审计16—ThinkPHP代码审计入门
    Android可滑动的分时图以及常用动画
    西安mPEG-DSPE磷脂聚乙二醇_CAS:178744-28-0供应商价格
    React框架新手入门
    sop流程图怎么做?sop流程图可以用什么做好?
    知乎万赞的:网络安全系统自学就业路线,建议收藏!
    【Ubuntu20.04】使用 systemd 进行服务部署
    Elk-Metricbeat配置Nginx的日志分析 (Metricbeat-part2)
  • 原文地址:https://blog.csdn.net/Keep_Trying_Go/article/details/125966298