• 神经网络模型训练简记(三)


    内容简述

    第一、二章及第三章3.1、3.2节具体内容见神经网络模型训练简记(一)神经网络模型训练简记(二)以下正文从3.3节开始。

    三、机器视觉网络模型分类及简介

    3.3语义分割

    语义分割任务是从像素级别上认知图像,首先将图像中的每个像素点划分到一个规定好的类别中,从而实现对各个图像物体区间的划分,然后将不同的物体打上不同的标签,最后输出图像中就可以根据像素标签对不同类别物体进行区分,其中每种不同的颜色代表着不同语义物体的类别。
    在这里插入图片描述
    一般的语义分割架构可以被认为是一个编码器——解码器网络。编码器通常是一个预训练的分类网络,像 VGG、ResNet,然后是一个解码器网络。这些架构之间的不同主要在于解码器网络。解码器的任务是将编码器学习到的可判别特征(较低分辨率)从语义上映射到像素空间(较高分辨率),以获得密集分类。
    不同于分类任务中深度网络的最终结果(即类存在的概率)被视为唯一重要的事,语义分割不仅需要在像素级有判别能力,还需要有能将编码器在不同阶段学到的可判别特征映射到像素空间的机制。不同的架构采用不同的机制(跳远连接、金字塔池化等)作为解码机制的一部分。

    3.3.1FCN

    FCN(Fully Convolutional Networks)于2014~2015年被提出,是在CNN(卷积神经网络)的基础上发展而来,它是像素级图像分类方法,最终输出图像每个像素的类别,论文链接
    CNN网络为了将卷积层生成的Feature Map(特征图)映射成一个固定长度的特征向量,会使用将输出像素点按顺序连接的方法,这在网络中称为全连接层。FCN在经典的CNN网络结构上做出了改进,不再使用全连接层得到固定长度的特征向量进行分类,因此不再对输入图像的尺寸有着限制,在实现上采样功能时采用了反卷积层,使它恢复到输入图像相同的尺寸,从而可以对每一个像素都产生一个预测,同时保留了原始输入图像中的空间信息,最后在上采样的特征图进行像素的分类,能够输出更加精细的结果。并且使用了结合不同深度层结果的跳级(skip)结构,同时确保了稳定性和准确度。
    在这里插入图片描述
    FCN网络基本原理:
    (1)image经过多个conv和+一个max pooling变为pool1 feature,宽高变为1/2
    (2)pool1 feature再经过多个conv+一个max pooling变为pool2 feature,宽高变为1/4
    (3)pool2 feature再经过多个conv+一个max pooling变为pool3 feature,宽高变为1/8
    (4)…
    (5)直到pool5 feature,宽高变为1/32。
    在这里插入图片描述
    那么
    (1)对于FCN-32s,直接对pool5 feature进行32倍上采样获得32x upsampled feature,再对32x upsampled feature每个点做softmax prediction获得32x upsampled feature prediction(即分割图)。
    (2)对于FCN-16s,首先对pool5 feature进行2倍上采样获得2x upsampled feature,再把pool4 feature和2x upsampled feature逐点相加,然后对相加的feature进行16倍上采样,并softmax prediction,获得16x upsampled feature prediction。
    (3)对于FCN-8s,首先进行pool4+2x upsampled feature逐点相加,然后又进行pool3+2x upsampled逐点相加,即进行更多次特征融合。具体过程与16s类似,不再赘述。
    作者在原文种给出3种网络结果对比,明显可以看出效果:FCN-32s < FCN-16s < FCN-8s,即:使用多层feature融合有利于提高分割准确性。
    在这里插入图片描述
    小结:
    (1)一是可以接受任意大小的输入图像,而不用要求所有的训练图像和测试图像具有同样的尺寸。二是更加高效,因为避免了由于使用像素块而带来的重复存储和计算卷积的问题。
    (2)一是得到的结果还是不够精细。进行8倍上采样虽然比32倍的效果好了很多,但是上采样的结果还是比较模糊和平滑,对图像中的细节不敏感。二是对各个像素进行分类,没有充分考虑像素与像素之间的关系,忽略了在通常的基于像素分类的分割方法中使用的空间规整(spatial regularization)步骤,缺乏空间一致性。

    3.3.2SegNet

    SegNet于2015年提出,新颖之处在于解码器对其较低分辨率的输入特征图进行上采样的方式。具体地说,解码器使用了在相应编码器的最大池化步骤中计算的池化索引来执行非线性上采样。这种方法消除了学习上采样的需要。经上采样后的特征图是稀疏的,因此随后使用可训练的卷积核进行卷积操作,生成密集的特征图,论文链接
    SegNet由编码网络,解码网络后接一个分类层组成。编码网络由13个卷积层组成,与VGG16的前13层卷积相同,将VGG16在大型数据集上训练得到的权重值作为编码网络的权重初始值,为了保留encoder 最深层输出的到高分辨率的feature maps,删掉VGG16中的全连接层,这么做的一个好处是可以大幅度减少encoder层中训练参数的数量(from 134M to 14.7M),每一层encoder都对应着一层decoder,因此decoder网络也是13层,在decoder网络输出后接一个多分类的soft-max分类器对每个像素生成类别概率。
    在这里插入图片描述
    小结:
    (1)优点如下:
    ①可以提高物体边界的分割效果;
    ②相比反卷积操作,减少了参数数量,减少了运算量,相比resize操作,减少了插值的运算量,而实际增加的索引参数也很少;
    ③该pooling操作可以应用于任何基于编码-解码的分割模型。
    (2)缺点如下:
    ①没有考虑到对图像多尺度的处理,导致有一些小图像可能识别不到;
    ②没有整合图像的上下文信息。

    3.3.3U-Net

    U-Net于2015年被提出,在2015年的ISBI细胞跟踪挑战赛上,U-Net对电子显微镜下拍摄的细胞图像分割取得最佳效果,是目前医学图像分割领域最受欢迎的网络模型之一,论文链接
    U-Net与FCN都是很小的分割网络,既没有使用空洞卷积,也没有后接CRF,结构简单。整体结构如下图,类似于一个大大的U字母:首先进行Conv+Pooling下采样;然后Deconv反卷积进行上采样,crop之前的低层feature map,进行融合;然后再次上采样。重复这个过程,直到获得输出388x388x2的feature map,最后经过softmax获得output segment map。总体来说与FCN思路非常类似。
    在这里插入图片描述
    与FCN逐点相加不同,U-Net采用将特征在channel维度拼接在一起,简单地将编码器的特征图拼接至每个阶段解码器的上采样特征图,从而形成一个梯形结构。
    小结:
    (1)语义分割网络在特征融合时也有2种办法:
    ①FCN式的逐点相加,对应caffe的EltwiseLayer层,对应tensorflow的tf.add();
    ②U-Net式的channel维度拼接融合,对应caffe的ConcatLayer层,对应tensorflow的tf.concat()。
    (2)U-Net网络优点有:
    ①支持少量的训练模型,例如在医学方向我们所能够训练的数据相对较少;
    ②在训练的过程中使用高梯度下降(high Momentum),这里的high Momentum = 0.99,high momentum的使用可以使训练模型的学习率处在一个自我调节的过程;
    ③权重划分。为了是某些像素点更加具有特征/代表性,则对像素点进行一个权重的划分,来补偿每个图像中像素点出现概率不同的问题。
    (3)缺点有:
    ①有效卷积增加了模型设计的难度和普适性。目前很多算法直接采用了same卷积,这样也可以免去Feature Map合并之前的裁边操作;
    ②其通过裁边的形式和Feature Map并不是对称的。

    3.3.4DecoupledNet

    DecoupledNet于2015年提出,论文提出了一个将语义分割解耦为分割和分类问题的半监督网络,且分割和分类两个任务的网络是单独训练,相较于当时的半监督学习方法,在PASCAL VOC数据集上取得了十分不错的成绩,论文链接
    网络整体结构如下:
    在这里插入图片描述
    整体网络包含三部分:Classification network, segmentation network, bridging layers【用来连接前两个网络的中间层】。分类网络是用来产生图片的类别,而分割网络则是产生像素级别的分类,由于两者之间的loose connection,因此,中间接上一个bridge层。一个预先假设:大量的图片分类的标签,少量的分割标签。
    训练:先使用大量的分类标签训练分类网络,之后使用训练好的分类网络,使用分割标签联合训练bridge层和分割网络。
    分类部分:使用的是VGG16为主干。
    Bridge部分:
    在这里插入图片描述
    这部分是网络的Bridge层部分,分类网络到cls-score-sigmoid就结束了。
    分割部分:最后是产生像素级的分类预测,输入是特定类别的activation maps,输出的结果是2通道的class-specific segmentation map,分为前景和背景,也是通过与下采样相同数量的上采样得到到,上采样是pool中max对应位置的恢复进行上采样。

    3.3.5ENet

    ENet(efficient neural network)于2016年提出, 专门为需要低延迟操作的任务创建。ENet 比当前网络模型快 18 倍,少了 75 倍的 FLOPs,参数数量降低了 79 倍,并且提供相似甚至更好的准确率,论文链接
    ENet的网络整体参数如下表:
    在这里插入图片描述
    ENet 的作者认为对图像进行下采样会损失图像边缘的空间信息,同时全对称的上采样结构会增加模型的大小和计算成本,所以在设计中尽量限制下采样的使用,并采用SegNet的上采样方式,即直接在解码器中调用编码器下采样时保存的池化索引来对模型进行稀疏上采样。对图像进行下采样可以使模型有更大的感受野,为了解决限制下采样带来的感受野小的问题,ENet 采用扩张卷积代替常规卷积,并设置不同的扩张率,使得模型获得不同大小的感受野。
    高分辨率的图像可以为模型提供更多的信息,但是ENet认为视觉信息在空间上是冗余的,对于模型的分类帮助不大,还会带来大量的计算资源消耗和拉长推理时间。另外,ENet认为浅层的网络对模型的直接分类帮助不大,更多的是作为特征提取器的作用,为此ENet设计了初始化模块,如图所示。
    在这里插入图片描述
    初始化模块放在模型的第一层,只使用一次,它对输入图像同时进行卷积和最大池化操作,并把结果拼接起来,得到一个特征图。这样做能快速减少图像尺寸又不会损失太多信息。而为了减少模型参数,使模型可以应用于低功耗设备和达到实时性要求,ENet 设计了卷积模块,如图(b)所示。卷积块由3部分组成,两个 1×1 的卷积和卷积操作。其中 1×1 的卷积用来降低图像维度,大幅减少模型参数。卷积操作则表示对模型进行卷积,可以使用空洞卷积、分解卷积或是常规的 3×3 卷积。最后通过一个1×1卷积使其恢复到输入的维度。
    小结:
    ENet是为语义分割任务的实时性而设计,与同时期的SegNet和FCN相比,追平精度的情况下识别速度更快。

    3.3.6PSPNet

    PSPNet在2016~2017年提出,通过引入空洞卷积来修改基础的 ResNet 架构,特征经过最初的池化,在整个编码器网络中以相同的分辨率进行处理(原始图像输入的 1/4),直到它到达空间池化模块。在 ResNet 的中间层中引入辅助损失,以优化整体学习。在修改后的 ResNet 编码器顶部的空间金字塔池化聚合全局上下文,被认为是分割效果最好的深度学习网络模型之一,论文链接
    网络主要结构如下:
    在这里插入图片描述
    PSPNet中有三个细节对模型的性能很重要:1、金字塔池化;2、空洞卷积;3、一种深度监督loss的优化策略。
    1.Pyramid Pooling Module
    在深度神经网络中。感受野的大小可以粗略地表明我们使用上下文信息能力的程度。在一些深层网络,比如ResNet,它们的感受野其实已经超过图像本身了,但是有研究表明,其实CNN的经验感受野比理论感受野要小得多,尤其是在高层信息上。这表明了很多网络其实无法有效地融合场景的先验信息,因此论文提出了一种场景先验信息表示的方法。
    在Spatial pyramid pooling中,不同层次的feature map在平滑和拼接之后被用于图像分类。这种先验信息是为了消除了CNN中固定尺寸的约束。为了进一步减少不同子区域之间的上下文信息丢失,文中提出了一种分层的全局先验信息,其中包含具有不同尺寸和在不同子区域之间变化的信息。这被称为Pyramid Pooling Module,用于在深度神经网络的最终层feature map上进行全局场景先验信息的构造,结构如下图。
    在这里插入图片描述
    2.基于深度监督学习的ResNet-Based FCN
    深度的预训练网络可带来良好的性能。 但是,网络深度的增加可能会带来一些优化困难。 ResNet通过在每个块中跳接(skip connection)来解决此问题。ResNet较深的层主要根据先前的残差来学习残差。
    相反地,论文建议在监督下产生额外的损失而产生初始结果,然后在损失最终的情况下学习残差。因此,将深度网络的优化分解为两个,每个问题都更易于解决。
    在这里插入图片描述
    上图显示了ResNet101模型的训练示例。除了使用softmax损失来训练final分类器的主分支外(loss1),在第四阶段之后还应用了另一个分类器,即res4b22。与将反向辅助损耗阻止到几个浅层的中继反向传播不同,我们让两个损耗函数通过所有先前的层。 loss2有助于优化学习过程,而loss1决定最终分类。loss2进行了权值平衡。在测试阶段,文中放弃了loss2,并且仅将经过优化的主分支用于最终预测。这种基于ResNet的FCN的深度监督训练策略在不同的实验环境下具有广泛的用途,并且可以与预训练的ResNet模型一起使用,体现了这种学习策略的普遍性。
    小结:
    (1)PSPNet可以高效的理解复杂的背景含义,为全局池化特征提供了更多的背景信息;
    (2)为ResNet-based FCN网络提供了一种深监督优化策略;
    (3)PSPNet可以为语义分割及相关先进技术的发展提供有用的策略。

    3.3.7RefineNet

    RefineNet于2016年提出,它解决了传统卷积网络中空间分辨率减少的问题,与 PSPNet(使用计算成本高的空洞卷积)使用的方法非常不同。提出的架构迭代地池化特征,利用特殊的 RefineNet 模块增加不同的分辨率,并最终生成高分辨率的分割图,论文链接
    RefineNet使用多分辨率作为输入,将提取的特征融合在一起,并将其传递到下一个阶段。引入链式残差池化,可以从一个大的图像区域获取背景信息。它通过多窗口尺寸有效地池化特性,利用残差连接和学习权重方式融合这些特征。所有的特征融合都是使用 sum(ResNet 方式)来进行端到端训练。使用普通 ResNet 的残差层,没有计算成本高的空洞卷积,网络整体结构如下:
    在这里插入图片描述
    RefineNet共包含下面三个核心模块:
    (1)残差卷积模块RCU(Residual Conv Unit);
    (2)多分辨率融合模块(Multi-Resolution fuse);
    (3)链式残差池化模块(Chained Residual Pooling)。
    1.残差卷积模块
    在这里插入图片描述
    模块中包含激活(ReLU)和卷积(Conv3x3)操作,然后使用加法将前后的特征图融合,这在设计上与ResNet思想相同。
    2.多分辨率融合模块
    在这里插入图片描述
    将前面多种分辨率的特征图输入到融合模块后,首先采用卷积层获得尺寸不变的特征图。然后使用上采样操作将所有特征图扩展为尺寸相同的新特征图。最后,使用Sum操作融合所有的特征图。
    3.链式残差池化模块
    在这里插入图片描述
    此模块的目的是从大的背景区域中俘获上下文信息,多个池化窗口能获得有效的特征,并使用学习到的权重进行融合。
    小结:
    (1)模型优点如下:
    ①创建容易,可以进行端到端的训练;
    ②灵活,可以以各种方式进行级联和修改;
    ③性能,在高分辨率的图像上产生更好的结果。
    (2)模型缺点如下:
    ①模型的复杂性;
    ②处理能力强,由于模型是端到端的训练,它需要大量的资源来实现。

    3.3.8G-FRNet

    G-FRNet(Gated Feedback Refinement Network)于2018年提出,它是一种用于密集标记任务的端到端深度学习框架,解决了现有方法的局限性。最初,GFRNet 进行粗略地预测,然后通过在细化阶段有效地集成局部和全局上下文信息,逐步细化细节。论文引入了控制信息前向传递的门控单元,以过滤歧义,论文连接
    网络要解决的问题为模糊信息的前向传递会限制后面的精准识别。
    例如,虽然网络中较深的卷积层可以在牛和马之间提供强大的区分力,但来自较早层的表示可能特定于动物。
    在这里插入图片描述
    论文提出了一种门控反馈细化网络,首先进行粗略预测,然后在细化阶段有效地整合局部和全局上下文信息来逐步细化细节。论文引入了控制向前传递信息的门单元,以借助深层特征来辅助浅层特征滤除其中的信息的模糊与歧义。使用更深,更有辨别力的层的特征来过滤辨别能力较差但定位更精细的早期层传递的信息。论文认为深层特征可以帮助浅层信息恢复特征中的模糊性内容,而单独的浅层信息并不能很好的恢复,因为其感受野不是很大或者并不具有足够的区分性。
    网络整体结构如下:
    在这里插入图片描述
    论文使用编码器产生的具有不同空间尺寸的特征图(f1,f2,…,f7)来重建一个小的(即粗糙的)标签图P mG。
    解码器通过在编码器网络中添加来自特征图的细节来逐步完善标签图。在解码的每个阶段,细化单元(RU1,RU2,…,RU5)通过将来自先前标签图和编码器层的信息作为输入来生成具有较大空间尺寸的新标签图(由连接Gi和RUi的边表示)。
    该模型的主要新颖之处在于,来自较早编码器层的信息在转发给解码器之前先经过门单元。
    在将每个等级评分图传递到下一阶段的优化模块之前,使用标准的2x(两倍)双线性上采样。还使用下采样的地面真相标签图在每个解码阶段提供监视(l1,l2,…,l6)。

    3.3.9BiSeNet

    BiSeNet(Bilateral Segmentation Network)于2018年提出,论文提出了一个实时的语义分割网络结构,在cityscape的2048X1024分辨率图像上的mIOU达到了68.4%(ESPNet为60%),同时速度达到了105fps(基于Xception39),论文链接
    语义分割任务中同时需要丰富的空间信息与很大的感受野,用来提升性能,当前的方法为了达到实时,都损失了空间信息,因此性能也会也比较大的下降。
    论文中使用spatial path与small stride,在保留了空间信息的同时,也生成了high-resolution的features;此外,使用了context path,获取更加充足的感受野。
    基于spatial path与context path,提出了Feature Fusion Module,实现图像特征的有效提取。
    当前语义分割加速的方法主要有裁剪网络或者使用U型结构形成直连path,但是前者会损失信息,后者会加大计算量。论文结合了spatial path与context path,网络结构如下:
    在这里插入图片描述
    网络具体结构如下图,包括ARM与FFM等。注意这里只使用了3个convolution layer来初步提取特征,因此计算量其实是很小的。
    在这里插入图片描述
    Spatial path:
    之前在feature extraction的过程中,很多都是使用了dilated convolution,这增大了感受野,但是减少了空间信息。因此在spatial path中,只使用3个conv+bn+RELU的结构,conv的stride为2,最终feature map为原图的1/8大小,空间信息没有太多损失。
    context path
    spatial path是保留了空间信息,context path是增大感受野,并且使用ARM模块将感受野扩大到整个feature map。ARM在这里主要是为context path输出的feature map做refinement,它没有采用上采样策略,耗时可以忽略不计。
    FFM
    将spatial path与context path使用FFM进行concatenate经过CNN,输出最后的结果。
    loss function
    网络最终的输出可以有softmax loss,此外,作者也在loss function中引入了xception阶段中产生的loss(FFM模块中使用)。最终训练时刻的loss只使用了xception model中的loss。
    小结
    提出了具有spatial path与context path的BiSeNet模型,设计FFM(Feeature Fusion Module)与ARM(Attention Refinement Module),在保持快速分割的同时,进一步提升了模型的准确度。

    3.3.10HRNet

    HRNet(High-Resoultion Net)于2019~2020年被提出,模型的主要特点是在整个过程中特征图(Feature Map)始终保持高分辨率,这与之前主流方法思路上有很大的不同,论文链接
    在HRNet之前,2D人体姿态估计算法是采用(Hourglass/CPN/Simple Baseline/MSPN等)将高分辨率特征图下采样至低分辨率,再从低分辨率特征图恢复至高分辨率的思路(单次或重复多次),以此过程实现了多尺度特征提取的一个过程。
    HRNet在整个过程中保持特征图的高分辨率,但多尺度特征提取是姿态估计模型一定要实现的过程,那么HRNet是如何实现多尺度特征提取的呢?模型是通过在高分辨率特征图主网络逐渐并行加入低分辨率特征图子网络,不同网络实现多尺度融合与特征提取实现的。
    HRNet的网络结构如下图所示,非常清晰易懂。一共有三个不同feature map大小的branch。每个branch在前向传播过程中,feature map大小不发生变化。三个branch虽然有着不同大小feature map但是每个branch之间会存在信息的交流。例如在前向的过程中,上面branch会把自己的feature map大小减半,然后传入到下面的branch中,而下面的branch也会通过upsample把变大后的feature送给上面的branch,两个操作可以在同一个阶段同时进行。
    在这里插入图片描述
    可以看出,不同于其他方法,HRNet通过并行的方式连接高-低分辨率特征图,因此可以直接在高分辨率的特征图上预测姿态,而不需要通过降采样再升采样来预测姿态,而且在整个过程中,不停地融合各种不同尺度的表征,实现了多尺度融合,提高了高分辨率的语义信息。
    实验结果,在两种输入分辨率上,大模型HRNet-W48和小模型HRNet-W32,都刷新了COCO纪录。其中,大模型在384×288的输入分辨率上,拿到了76.3的mAP。
    小结
    (1)作者提出的方法是并行连接高分辨率与低分辨率网络,而不是像之前方法那样串行连接。因此,其方法能够保持高分辨率,而不是通过一个低到高的过程恢复分辨率,因此预测的heatmap可能在空间上更精确;
    (2)提出的模型融合相同深度和相似级别的低分辨率特征图来提高高分辨率的特征图的表示效果,并进行重复的多尺度融合。

    3.3.11Fast-SCNN

    Fast-SCNN于2019年提出,是一个实时的语义分割模型。其基于现有的two-branch方法(BiSeNet),引入了一个learning to downsample模块,在cityscapes上得到68.0%的miou,论文链接
    一般来讲,基于卷积神经网络做语义分割通常使用 encoder-decoder 结构,如FCN、SegNet等,在此基础上,很多实时性的语义分割算法还会使用多分枝网络结构,如BiSegNet等。在 2 分支的网络结构中,较深的分支输入低分辨率图片,目的是为了在保证较少计算开销的前提下有效地提取全局上下文特征;较浅的网络分支输入高分辨率图像,目的是提取空间细节信息。两个分支的计算结果融合,形成最终的语义分割结果。
    在 2 分支结构的网络中,2 个分支基本保持着相对独立的计算流程。“深网络+低分辨率输入”和“浅网络+高分辨率输入”的组合能够较好地控制计算开销,以保证算法的实时性。
    2 个分支的浅层部分,实际上都是在提取浅层特征,若能将 2 个分支的浅层部分合并在一起,则可以进一步减少计算量。基于此,作者提出了“learning to downsample”模块,2 个分支共用该模块提取浅层特征。并以 learning to downsample 模块和 2 个分支为基础,构建实时性语义分割网络 Fast-SCNN。
    在这里插入图片描述
    Fast-SCNN 的总体结构如下图所示:
    在这里插入图片描述
    从上图可以看出,2 个分支共享 learning to downsample 模块,以进一步减少计算量。整个网络由 learning to downsample 模块、全局特征提取器、特征融合模块和分类器 4 部分组成,下面分别介绍。
    Learning to Downsample模块
    该模块包括 3 个卷积层,第一个卷积层为普通的卷积层,后面两个卷积层使用深度可分离卷积以提高计算效率。每个卷积层的步长都是 2,因此该模块输出特征的长(或宽)为输入图像的1/8。每个卷积层的卷积核尺寸为 3x3,每个卷积层后面都有 BN 层和 ReLU 激活函数。
    全局特征提取器
    Fast-SCNN 使用全局特征提取器来提取全局特征,此处的全局特征提取器类似于传统 2 分支结构中的深度分支。传统的 2 分支结构中深度分支的输入是低分辨率的输入图像,而 Fast-SCNN 中全局特征提取器的输入为 learning to downsample 模块的输出 feature map。
    可以这么理解:Fast-SCNN 中的 learning to downsample 模块代替了传统 2 分支结构中深度分支的前几个卷积层。
    使用 MobileNet-v2 中提出的 bottleneck residual block 构建全局特征提取器,bottleneck residual block 中的深度可分离卷积有利于减少全局特征提取器的参数量和计算量。
    全局特征提取器还包含 pyramid pooling 模块(PPM),用于提取不同尺度的上下文特征。
    特征融合模块
    特征融合模块用于融合 2 个分支的输出特征,Fast-SCNN 使用了相对比较简单的结构完成特征融合,以最大限度地提高计算效率。特征融合模块的结构如下表所示:
    在这里插入图片描述
    为了使得 2 个分支的输出特征尺寸一致,需要对深度分支的特征做上采样操作,即上表中的“Upsample x X”操作。两个分支的最后都有 1 个卷积核尺寸为 1x1 的卷积操作用于调整通道数,将两个卷积操作的输出特征相加,之后使用激活函数进行非线性变换。
    分类器
    分类器模块中包含 2 个深度可分离卷积和1个卷积核尺寸为 1x1 的卷积以提高网络性能。在分类器模块中还包含 1 个 softmax 操作。在网络训练时,softmax 操作用于计算损失。在推理时,使用 argmax 操作代替 softmax 以提高推理速度。
    小结
    (1)指出在多分枝结构的语义分割网络中,2 个分支共用浅层网络能够进一步精简网络结构,达到提高运算速度的目的;
    (2)设计出了 learning to downsample 模块,2 个分支共用该模块提取低级特征;
    (3)以 learning to downsample 模块、bottleneck residual block 为基础,构建了 Fast-SCNN 用于语义分割任务,通过实验证明了 Fast-SCNN 的高性能与高实时性。

    3.3.12DeepLab系列

    3.3.12.1DeepLabv1

    DeepLabv1于2015年提出,论文链接
    DCNN(深层卷积神经网络)在像素标记存在两个问题:信号下采样和空间不变性(invariance)。第一个问题是由于DCNN中重复的最大池化和下采样造成分辨率下降,DeepLabv1通过带孔(atrous)算法解决。第二个问题是分类器获得以对象为中心的决策需要空间不变性,从而限制了DCNN的空间精度,DeepLabv1通过条件随机场(CRF)提高模型捕获精细细节的能力。
    DeepLab有别于two stage的RCNN模型,RCNN没有完全利用DCNN的feature map。
    DeepLab和其他SOTA模型的主要区别在于DCNN和CRF的组合。
    空洞卷积
    kernel size=3,Input stride=2,stride=1。
    在这里插入图片描述
    feature map变小主要是由于卷积层和池化层引起的,若另所有层的stride=1,输出feature map将会变大。
    原始情况下Pooling layer stride=2,receptive field=4
    在这里插入图片描述
    令Pooling layer stride=1,receptive field=3,输出更dense,但感受野变小。
    在这里插入图片描述
    采用空洞卷积后,receptive field=4
    跟第一张图相比,在蓝色节点的基础上多了红色节点,在保持感受野使输出更加dense。
    在这里插入图片描述
    条件随机场
    在这里插入图片描述
    CRF,简单来讲就是每个像素点作为节点,像素与像素间的关系作为边,即构成了一个条件随机场。通过二元势函数描述像素点与像素点之间的关系,鼓励相似像素分配相同的标签,而相差较大的像素分配不同标签,而这个“距离”的定义与颜色值和实际相对距离有关。所以这样CRF能够使图片在分割的边界出取得比较好的效果。

    3.3.12.2DeepLabv2

    DeepLabv2于2016~2017年提出,论文链接
    DCNN在语义分割中有三个挑战:
    (1)特征分辨率下降;
    (2)存在物体多尺度;
    (3)由于DCNN的空间不变性使得空间精度下降。
    (1)是由于DCNN中的重复池化和下采样降低了空间分辨率,一种方法是采用转置卷积(deconvolutional layer),但是需要额外的空间和计算量。DeepLabv2在最后几个最大池化层用空洞卷积替代下采样,以更高的采样密度计算feature map。
    (2)物体存在多尺度,解决该问题的一个标准方法是将图片缩放成不同尺寸,汇总特征得到结果。这种方法可以提高性能,但是增加了计算成本。受SPPNet启发,DeepLabv2提出一个类似结构,对给定输入以不同采样率的空洞卷积进行采样,以多比例捕捉图像上下文,称为ASPP(astrous spatial pyramid pooling)。
    (3)分类器要求空间不变性,从而限制了DCNN的空间精度。解决该问题的一个方法是使用跳级结构融合不同层的特征从而计算最终的分割结果。DeepLabv2更高效的方法是采用条件随机场增强模型捕捉细节的能力。
    DeepLabv2结构如下图:
    在这里插入图片描述
    首先经过采用空洞卷积的DCNN如VGG-16或ResNet101得到粗略的分割结果,然后通过双线性插值将feature map恢复成原图分辨率,最后用全连接的CRF来精细化分割结果。
    空洞卷积
    一维信号,空洞卷积输入x[i],输出y[i],长度K的滤波器为ω[k]。
    在这里插入图片描述
    r为输入信号的采样步长,标准卷积中r=1。
    在这里插入图片描述
    二维情况如下:
    在这里插入图片描述
    首先下采样将分辨率降低2倍,做卷积,再上采样得到结果。本质是和原图的1/4位置做响应。
    对全分辨率图做r=2的空洞卷积,直接得到结果。可以计算整张图的响应。
    使用空洞卷积可以增大感受野,采样率为r的空洞卷积插入r−1个零,将k×k的卷积核变为ke=k+(k−1)(r−1)而不增加计算量。
    ASPP
    并行采用多个采样率的空洞卷积提取特征,再将特征进行融合,该结构称为空洞空间金字塔池化(atrous spatial pyramid pooling)。
    在这里插入图片描述
    条件随机场
    同DeepLabv1。
    小结
    (1)DeepLab V2相对于DeepLab V1做了以下改进:
    ①用多尺度获得更好的分割效果(ASPP);
    ②基础层由VGG16改为ResNet;
    ③使用不同的学习率。
    (2)在PASCAL VOC 2012和其他数据上达到SOTA。

    3.3.12.3DeepLabv3

    DeepLabv3于2017年提出,论文链接
    语义分割中,应用DCNN有两个挑战:
    (1)连续池化或卷积带来的分辨率下降,让DCNN学习更抽象的特征表示。然而,空间不变性会阻碍分割任务,因为其需要详细的空间信息。为了解决该问题,DeepLab引入空洞卷积。
    (2)物体存在多尺度,有许多方法解决该问题,我们主要考虑四类:
    在这里插入图片描述
    ①将DCNN应用于图像金字塔来提取不同尺度输入的特征,将预测结果融合得到最终输出。
    ②encoder-decoder结构,利用encoder的多尺度特征到解码器上恢复分辨率。
    ③在原网络的顶端增加额外的模块来捕获长程信息,如DenseCRF。
    ④SPP空间金字塔池化具有不同采样率和感受野的卷积核,能以多尺度捕获对象。
    级联ResNet
    将空洞卷积应用于级联结构,在ResNet最后一个block(block4)后连接许多级联模块。
    图(a)中整体信息汇聚到非常小的feature map,实验表明其不利于分割。
    Multi-grid Method
    定义Multi_Gird=(r1,r2,r3)为block4到block7三个卷积层的unit rates。则rates=2⋅(1,2,4)=(2,4,8)。
    ASPP+
    在ASPP中加入BN层。
    当采样率变大,卷积核的有效权重变小。
    在65×65的feature map上以不同采样率采用3×3的卷积核。当采样率接近于feature map尺寸时,3×3退化为1×1卷积核,只有中心的权重是有效的。
    为了解决该问题并在模型中整合全局上下文信息,我们对最后的feature map采用全局池化,并经过256个1×1的卷积核(BN),然后双线性插值到所需空间维度。
    最终ASPP包含
    (a)一个1×1的卷积和三个3×3、rates=(6,12,18)、output_stride=16的空洞卷积(256+BN)。
    (b)图像级特征。将特征做全局平均池化,后卷积,再上采样。
    (a)中不同rates的空洞卷积通过控制不同的padding输出相同的尺寸,(b)中上采样后与(a)尺寸一致。
    所有分支的结果被拼接起来并经过1×1的卷积(256+BN),最后经过1×1卷积生成分割结果。
    在这里插入图片描述
    当output_stride=8,采样率加倍。
    小结
    DeepLab V3的改进主要包括以下几方面:
    1)提出了更通用的框架,适用于任何网络;
    2)复制了ResNet最后的block,并级联起来;
    3)在ASPP中使用BN层;
    4)去掉了CRF。

    3.3.12.4DeepLabv3+

    DeepLabv3+于2018年提出,论文链接
    语义分割中的DCNN主要有两种结构:空间金字塔池化SPP和编码器-解码器encoder-decoder:
    SPP通过多种感受野池化不同分辨率的特征来挖掘上下文信息。
    Encoder-decoder逐步重构空间信息来更好的捕捉物体的边缘。
    在这里插入图片描述
    DeepLabv3+对DeepLabv3进行了拓展,在encoder-decoder结构上采用SPP模块。encoder提取丰富的语义信息,decoder恢复精细的物体边缘。encoder允许在任意分辨率下采用空洞卷积。
    深度可分离卷积
    深度可分离卷积将标准卷积分解为depthwise conv后跟一个pointwise conv,有效地降低了计算复杂度。
    depthwise conv对每个输入通道分别进行spatial conv。
    pointwise conv合并depthwise conv的输出。
    论文提出atrous separable conv,其在保持性能前提下,有效降低了计算量和参数量。
    DeepLabv3作为encoder
    令outputstride等于输入图像分辨率和输出分辨率的比值。
    图像分类任务,最终的feature map通常比输入图像分辨率小32倍,因此outputstride=32。
    语义分割任务,令outputstride=16or8,通过移除最后1or2个blocks并应用空洞卷积(rate=2or4)来密集提取特征。
    论文中的encoder-decoder结构中,采用DeepLabv3最后的feature map作为encoder的输出,包含256个通道并富含语义信息。此外,可以通过空洞卷积以任意分辨率提取特征,取决于计算量。
    decoder
    在这里插入图片描述
    DeepLabv3以factor=16上采样。
    DeepLabv3+首先以factor=4上采样,然后和尺寸相同的低层特征相拼接。低层特征采用1×1卷积降维,因为低层特征维度一般比较高(256or512),将占较大权重(我们的模型只有256),使得训练变困难。拼接之后,我们采用3×3的卷积来细化特征,然后再以factor=4双线性插值。
    改进 Aligned Xception
    Xception模型用于图像分类任务,Aligned Xception用于物体检测任务,我们对Xception做了一些变化使其可用于语义分割任务。
    1)更多的层,为了计算量和内存,不对Entry flow网络结构进行修改。
    2)所有池化层替换为depthwise separable conv,以便采用 atrous separable conv提取任意分辨率的特征。
    3)类似于MobileNet,在每个3×3后添加额外的BN和ReLU。
    在这里插入图片描述
    总结
    (1)DeepLab V1为了避免池化引起的信息丢失问题,提出了空洞卷积的方式,这样可以在增大感受野的同时不增加参数数量,同时保证信息不丢失。为了进一步优化分割精度,还使用了CRF(条件随机场)。
    (2)DeepLab V2在之前的基础上,增加了多尺度并行,解决了对不同大小物体的同时分割问题。
    (3)DeepLab V3将空洞卷积应用在了级联模块,并且改进了ASPP模块。
    (4)
    在这里插入图片描述

    参考文档

    一文概览主要语义分割网络
    图像语义分割入门+FCN/U-Net网络解析
    全卷积网络(FCN)与图像分割
    U-Net网络理解与应用
    图像分割之U-Net
    语义分割之SegNet,Bayesian SegNet
    论文阅读笔记八:SegNet: A Deep Convolutional Encoder-Decoder Architecture for Image Segmentation (IEEE2017)
    论文阅读:SegNet: A Deep Convolutional Encoder-Decoder Architecture for Image Segmentation
    AI顶会CVPR图像分割论文ENet
    目标分割(七)PSPNet讲解
    [论文笔记] PSPNet:Pyramid Scene Parsing Network
    语义分割经典——RefineNet详解
    RefineNet网络模型的详细指南
    【G-FRNet】Gated Feedback Refinement Network for Dense Image Labeling
    G-FRNet论文阅读
    DecoupledNet
    语义分割之BiSeNet
    旷视科技提出双向网络BiSeNet:实现实时语义分割
    High-Resoultion Net(HRNet)论文解析
    HRNet详解
    Fast-SCNN:多分支结构共享低级特征的语义分割网络
    语义分割丨DeepLab系列总结「v1、v2、v3、v3+」
    深度学习|语义分割:DeepLab系列

  • 相关阅读:
    Hexo博客使用aplayer音乐播放插件
    Vite4+Typescript+Vue3+Pinia 从零搭建(7) - request封装
    Github分支创建、管理、下载与上传
    Redis Part1
    YOLO改进系列之注意力机制(GAM Attention模型介绍)
    字符函数和字符串函数详解
    富文本生成word并在线预览(附源码)
    字节一面被拒含泪离开,面试官:测试开发连这些都不懂,哭也没用
    [emditor] 去掉其中的空行
    博客系统测试报告
  • 原文地址:https://blog.csdn.net/weixin_46846685/article/details/127699597