基于深度学习的语义分割之FCN、SegNet、UNet、LinkNet、PSPNet、DeepLab系列

2023-11-18

  图像分割(Image Segmentation)是计算机视觉研究中的一个经典难题,也是图像理解领域关注的一个热点,在场景理解、医学图像分析、机器人感知、视频监控、增强现实、图像压缩等领域有着广泛的应用。图像分割,简单来说就是在图像中把目标从背景中分离出来,分为语义分割(Semantic Segmentation)和实例分割(Instance Segmentation)。语义分割(应用于静态2D图像、视频,甚至3D数据、体数据)需要将视觉输入分为不同的语义可解释类别,语义的可解释性意为分类类别在真实世界中是有意义的,是像素级别的分类,主要应用领域有地理信息系统、无人驾驶、医疗影像分析、机器人等。实例分割现有的方法主要是,机器自动从图像中用目标检测方法框出不同实例,再用语义分割方法在不同实例区域内进行逐像素标记。
  语义分割是在像素级别上的分类,属于同一类的像素都要被归为一类,因此语义分割是从像素级别来理解图像的。如下左图所示,属于人的像素都要分成一类,属于建筑物的像素也要分成一类,除此之外还有背景像素也被分为一类。如下右图所示,实例分割不同于语义分割,如果一张照片中有多个人,对于语义分割来说,只要将所由人的像素都归为一类,但是实例分割还要将不同人(实例)的像素归为不同的类,也就是说实例分割比语义分割更进一步。
在这里插入图片描述
  如下所示,展示了自2014年以来流行的语义分割工作以及实例分割的时间表。图片出自2020年新出的一篇语义分割综述《Image Segmentation Using Deep Learning: A Survey》,图中橘色部分代表着语义分割的网络,绿色部分代表了实例分割的网络。本篇博客将逐步按照FCN →SegNet →U-Net →LinkNet →PSPNet →DeepLab系列的顺序,依次整理基于深度学习的语义分割网络。

FCN(2014)

  分类网络尽管表面上来看可以接受任意尺寸的图片作为输入,但是由于网络结构最后全连接层的存在,使其丢失了输入的空间信息,因此,这些网络并没有办法直接用于解决诸如分割等稠密估计的问题。考虑到这一点,《Fully Convolutional Networks for Semantic Segmentation》发表在CVPR 2015,并且作为当年best paper的候选论文,提出了全卷积网络(FCN)的概念,针对语义分割训练一个端到端、点对点的网络,用于像素级的预测。FCN创新点:(1)用卷积层和池化层替代了分类网络中的全连接层,从而使得网络结构可以适应像素级的稠密估计任务,而且能够实现端到端的训练;(2)利用反卷积(deconv)层进行上采样,能够输出精细的结果;(3) 结合不同深度层特征的跳跃(skip)结构,同时确保鲁棒性和精确性。

  • 全卷积化(Fully Convolutional):分类所使用的网络通常会在最后连接全连接层,它会将原来二维的矩阵(图片)压缩成一维的,从而丢失了空间信息,最后训练输出一个标量。而图像语义分割的输出则需要是个分割图,且不论尺寸大小,但是至少是二维的,所以网络前半部分在VGG的基础上丢弃全连接层换上卷积层,就是所谓的全卷积化了。具体地,假如说原来最后一层卷积输出的是6×6×256的特征图,那么第一个全连接层会把这个矩阵给拉成一维向量9216,然后再用9216×(9216,4096)=1×1×4096大小的一维向量。而全卷积就是在得到6×6×256的特征图后,再用6×6×256的卷积核去卷积这幅特征图,如果输出通道是4096的话,得到就是1×1×4096的热图,如果输入尺寸发生变化,那么输出的尺寸就不是1×1×4096了。
  • 反卷积(Deconvolution) :将输出映射到密集像素的一种方法是内插,例如简单的双线性插值,即通过线性映射来计算来自最近四个输入的每个输出,线性映射仅依赖于输入单元和输出单元的相对位置。但是利用反卷积操作,层中的滤波器不需要是固定的,可以被学习,并且堆叠反卷积层和激活函数甚至可以学习到非线性上采样。

  • 跳跃结构(Skip Architecture):通过跨层连接的结构,结合了网络浅层的细(fine-grain)粒度信息信息以及深层的粗糙(coarse)信息,以实现精准的分割任务。具体结构如下,其中的FCN-s代表了全局的下采样步长:
    在这里插入图片描述
    过程如下:
    1、32x upsampled
    原图经过不断的卷积和池化,得到pool5层的特征(比原图缩小了32倍),将pool5通过32倍的上采样(反向卷积)得到最后结果。但是pool5层的特征属于高层抽象特征,采样后得到的结果不够精细。
    2、16x upsampled
    将pool5的结果进行2倍上采样,与pool4相加,作为“融合”,然后将“融合”结果进行16倍的上采样(反向卷积)得到最后结果(注:融合是指对应位置像素值相加,后来的UNet则直接是通道上拼接)。
    3、8x upsampled
    将pool5的结果进行2倍上采样,与pool4相加,作为“融合”,然后将“融合”结果进行2倍的上采样,再与pool3的结果进行“融合”,之后进行八倍的上采样。

参考链接:
[1] FCN——Semantic Segmentation的开山之作之论文解析
[2] https://zhuanlan.zhihu.com/p/38214117

SegNet(2015)

  SegNet是一个由剑桥大学团队开发的图像分割的开源项目《SegNet: A Deep Convolutional Encoder-Decoder Architecture for Robust Semantic Pixel-Wise Labelling》被收录于CVPR 2015,《SegNet: A Deep Convolutional Encoder-Decoder Architecture for Image Segmentation》被收录于PAMI 2017。SegNet和FCN思路十分相似,但是提出了一个encoder-decoder结构的卷积神经网络。
在这里插入图片描述

  • 编码器:如上图所示,左边是卷积提取特征,通过pooling增大感受野,同时图片变小,该过程称为编码。每一个encoder执行密集卷积、非线性ReLU、不重叠的 2×2 最大池化,来进行下采样。
  • 解码器:右边是卷积与upsampling,通过卷积使得图像分类后特征得以重现,upsampling还原到图像原始尺寸,该过程称为解码。每个decoder使用存储的Pooling Indices对其输入进行上采样,再送入卷积。
  • Pooling Indices:即每次pooling,都会保存通过max选出的权值在2x2 filter中的相对位置。图中绿色的pooling与橘色的特征图通过pool indices操作,得到pooling后的indices输出到对应的upsampling,就是Pooling的逆过程。可以看出,SegNet上采样不需要训练学习(只是占用了一些存储空间),而FCN则是用transposed convolution策略,即将feature反卷积后得到upsampling,这一过程需要学习。
    在这里插入图片描述
    优势:
       1)提升边缘刻画度;
       2)减少训练的参数;
       3)这种模式可包含到任何编码-解码网络中。

    在这里插入图片描述
    SegNet 的编码器结构与解码器结构是一一对应的,即一个 decoder 具有与其对应的 encoder 相同的空间尺寸和通道数。编码器在拓扑上与VGG16网络中的13个卷积层相同,网络最后一层是soft-max分类器,它独立地对每个像素进行分类,最后输出的是一个K个通道的图像,其中K是类别的数量。

U-Net(2015)

  U-Net是基于FCN的一个语义分割网络,初衷是为了解决医学图像分割问题,《U-Net: Convolutional Networks for Biomedical Image Segmentation》发表于MICCAI 2015。在医学图像上需要对每个像素进行分类,有人提出用滑动窗口的方法,通过一个patch(该像素周围)的类别对该像素进行分类。但存在两点不足:1)由于需要逐patch地输入来进行预测,因此非常的慢,会因为重叠造成很多冗余;2)没有解决位置信息和上下文信息之间的trade-off问题,即大patch有上下文信息但是缺少位置信息(max-pooling所致),小patch有位置信息但是缺少上下文信息。创新点:(1)基于FCN的一个U型对称结构,左侧是contracting path(encoder),用于获取上下文信息(context),右侧是expanding path(decoder),用于精确的定位(localization);(2)skip-connections,使得最终所得到的feature map中既包含了high-level 的feature,也包含很多的low-level的feature,实现了不同scale下feature的融合;(3)使用弹性形变进行数据增强,使用少量的数据进行训练的情况下获得精确的分割结果;(4)采用了Overlap-tile strategy(边界镜像);(5)加权交叉熵损失函数(让模型有分离边界的能力)。

  • 网络结构:上图为U-net网络结构图,每个蓝色框对应一个多通道特征图(feature map),其中通道数在框顶,尺寸位于框的左下角;白色框表示复制的特征图;箭头表示不同的操作。蓝色箭头代表3×3的卷积操作,由于stride是1,padding策略是valid,因此,每个该操作以后,feature map的大小会减2。灰色箭头表示复制和剪切操作,因为U-Net网络的每个卷积层得到的特征图都会concatenate到对应的上采样层(U-net采用了完全不同的特征融合方式:拼接,将特征在channel维度拼接在一起,而FCN融合时使用的对应点相加),而在同一层卷积的最后一层要比上采样的第一层要大一些,这就导致想要利用浅层的feature,就要进行一些剪切。在最后一层,利用1×1的卷积核进行卷积运算,将每个64维的特征向量映射网络的输出层,通道数为类别个数,输入是572×572的,但是输出变成了388×388,这说明经过网络以后,输出的结果和原图不是完全对应的
  • Overlap-tile:为了预测图像边界区域中的像素,可以通过输入图像的镜像操作来推断遗失的上下文。由于医学图像很大,所以要切成一张张小的patch,切成patch的时候适合切成Overlap-tile(重叠平铺)的切图。如下图所示,左图中的白框是要分割区域,但是在切图的时候要包含周围区域(周围overlap部分可以为分割区域边缘部分提供纹理信息),为了预测黄色区域中的分割,需要蓝色区域内的图像数据作为输入。从右图可以看出,黄框区域分割结果没有因为切成小patch而造成分割情况不好。
  • 数据增强:为了对平移和旋转具有不变性,以及对变形和灰度值变化具有鲁棒性,通过对原始图像进行弹性形变以获得扩充图像,这可以让网络学习弹性形变不变性。
  • 带边界权值的损失函数:如下图所示,a是输入数据,b是Ground Truth,c是基于Ground Truth生成的分割掩码,d是U-Net使用的用于分离边界的损失权值。
    E = ∑ x ∈ Ω w ( x ) l o g ( p l ( x ) ( x ) ) E=\sum_{x \in \Omega}w(x) log(p_{l(x)}(x)) E=xΩw(x)log(pl(x)(x))
    其中 p l ( x ) ( x ) p_{l(x)}(x) pl(x)(x) s o f t m a x softmax softmax损失函数, l : Ω { 1 , . . . , K } l : \Omega\{1,...,K\} l:Ω{1,...,K}是像素点的标签值, w : Ω ∈ R w: \Omega \in \mathbb{R} w:ΩR是像素点的权值,目的是为了给图像中贴近边界点的像素更高的权值。增大对粘连的同类物体之间的像素的loss权重,使得每个物体的分割轮廓是清晰的。
    w ( x ) = w c ( x ) + w 0 ⋅ e x p ( − ( d 1 ( x ) + d 2 ( x ) ) 2 2 σ 2 ) w(x)=w_c(x)+w_0 \cdot exp(-\frac{(d_1(x)+d_2(x))^2}{2\sigma^2}) w(x)=wc(x)+w0exp(2σ2(d1(x)+d2(x))2)
    其中 w c w_c wc是平衡类别比例的权值, d 1 d_1 d1是像素点到距离其最近的细胞的距离, d 2 d_2 d2则是像素点到距离其第二近的细胞的距离。 w 0 w_0 w0 σ \sigma σ是常数值,在实验中分别为10,5。
    在这里插入图片描述
    参考链接:
    [1] 【语义分割系列:四】Unet 论文阅读翻译笔记 医学图像 pytorch实现
    [2] https://zhuanlan.zhihu.com/p/43927696

PSPNet(2016)

  作者发现当前基于FCN的模型的主要问题是,缺乏合适的策略来利用全局场景类别线索,从而在判断图像中像素点类别时预测失败。《Pyramid Scene Parsing Network》收录于CVPR 2017,提出了金字塔池化模块(pyramid pooling module)能够聚合不同区域的上下文信息,从而提高获取全局信息的能力。本文的baseline是 FCN 和 DeepLab v1。

复杂场景解析的几个常见问题:
语境关系不匹配:语境关系是普遍存在的,尤其在对复杂场景的理解中极为重要,有些物体常常是一起出现的,例如,飞机很可能在跑道上或在空中飞行,而不是在公路上;汽车不会在河上行驶。所以,缺乏收集语境信息的能力会增大错误分类的概率。
类别混淆:有许多类别标签在分类时容易出现混淆,比如田野和土地,山脉和丘陵,墙、房子和建筑物,它们的外观十分相似。利用类别之间的关系即可解决上述问题。
不明显的类别 :通常来说,场景中包含着任意大小的物体。一些小的东西,比如路灯和标志牌,尽管它们可能很重要,但很难被找到。相反,大的物体或东西可能会超过FCN的感受野,从而导致的预测不连续性。要提高对非常小或非常大的对象的识别能力,应该特别注意包含不明显类别物体的不同子区域。

  • 金字塔池化模块全局语境信息结合局部语境信息有助于区分出各种类别,越好的特征越能融合来自感受野大小不同的子区域的信息。如下图所示,金字塔池化模块融合了四种不同尺度下的特征。图中用红色突出显示的为最粗略的层级,是使用全局池化(实验结果表明平均池化效果更好)生成的单个bin输出。剩下的三个层级将输入特征图划分成若干个不同的子区域,并对每个子区域进行池化,最后将包含位置信息的池化后的单个bin组合起来(1×1、2×2、3×3和6×6的bin大小)。金字塔池化模块中不同层级输出不同尺度的特征图,为了保持全局特征的权重,我们在每个金字塔层级后使用1x1的卷积核,当某个层级维数为 n n n时,即可将语境特征的维数降到原始特征的 1 / n 1/n 1/n。然后,通过双线性插值直接对低维特征图进行上采样,使其与原始特征图尺度相同。最后,将不同层级的特征图拼接为最终的金字塔池化全局特征。
    在这里插入图片描述
    对于图(a)中的输入图像,使用一个预训练过的ResNet模型来提取特征图,最终特征图尺寸为输入图像的 1 / 8 1/8 1/8,如图(b)所示。对上述特征图使用(c)中所示的金字塔池化模块来获取语境信息,其中,金字塔池化模块分4个层级,其池化核大小分别为图像的全部、一半和小部分,最终它们可融合为全局特征。然后,在(c)模块的最后部分,我们将融合得到的全局特征与原始特征图concat起来。最后,在(d)中通过一层卷积层生成最终的预测图。
  • 基于深度监督的loss:除了使用Softmax loss来训练最终分类器的的主分支外,在第四阶段(即res4b22残差块)后再使用另一个分类器。这两个loss同时传播,通过各自前面所有层,辅助loss有助于优化学习过程,主loss仍是主要的优化方向。通过增加权重,以平衡辅助loss(实验表明辅助分支损失权重0.4性能最优)。在测试阶段,放弃辅助分支,只使用优化好的主分支来进行最终的预测。

参考链接:https://www.jianshu.com/p/57329a0b7a2d

LinkNet(2017)

  目前的分割算法虽然精度较高,但参数与操作上的数量都是十分巨大的。《LinkNet: Exploiting Encoder Representations for Efficient Semantic Segmentation》,是VCIP 2017的论文,贡献是在不影响处理时间的条件下得到较高分割准确率。一般,编码层由于卷积池化丢失的位置信息通过池化层最大值的索引或者反卷积操作进行恢复。该文创新点是并未使用上述方法进行恢复,绕过空间信息,直接将编码器与解码器连接来提高准确率,一定程度上减少了处理时间。通过这种方式,保留编码部分中不同层丢失的信息,同时,在进行重新学习丢失的信息时并未增加额外的参数与操作。
  文中模型结构近乎类似U-Net,是一个典型的Encoder-Decoder结构。左侧是Encoder模块,右侧是Decoder模块。LinkNet网络结构如图所示,其中conv表示卷积,full-conv表示转置卷积。/2表示因子为2的下采样,使用带步长的卷积来实现。*2表示因子为2的上采样。encoder开始处有一个initial block,其余部分由残差块组成,表示为encoder-block(i),decoder用了通道约减方案(channel reduction scheme),其细节如下所示。现在的分割算法大多使用VGG16、ResNet101等作为encoder,参数量太大了。LinkNet使用ResNet18作为encoder。
在这里插入图片描述
参考链接:http://jialexu.com/index.php/archives/172/

DeepLab系列

DeepLab v1(2015)

  Deep Convolutional Neural Networks (DCNNs) 能够很好的处理图像级别的分类问题,因为它具有很好的平移不变性(空间细节信息已高度抽象),但是DCNNs很难处理像素级别的分类问题,例如姿态估计和语义分割,它们需要准确的位置信息。目前的两个大问题就是(1)重复池化和下采样导致分辨率大幅下降,位置信息丢失难以恢复;(2)空间不变性导致细节信息丢失。《Semantic Image Segmentation with Deep Convolutional Nets and Fully Connected CRFs》收录于ICLR 2015,创新点在于:对于降采样问题,我们使用‘atrous’新型卷积来实现(就是后来的空洞卷积);不变性问题,加入CRF来对图像进行优化。

  • 空洞卷积:为了加载预先在ImageNet训练好的VGG16模型,并保证图片仅缩放8倍,首先将VGG16的全连接层改为卷积层,再使用采样率rate=2或4的空洞卷积方法对特征图采样,这种方法不仅可以保持完好的滤波器还能扩大感受野,并且不增加计算量和参数。如下图所示,在一维向量上,卷积核的大小仍然是3×3,Input stride=2就是空洞因子或膨胀因子,在同样的卷积核大小下,通过增加Input stride可以增大卷积核的感受野。
  • 网络结构:下图是原始的VGG16的网络结构,论文对预训练模型进行了修改,(1)为了保证分辨率,把最后两个池化层(pool4、pool5)的步长2改成1;(2)把最后三个卷积层(conv5_1、conv5_2、conv5_3)的dilate rate设置为2,且第一个全连接层的dilate rate设置为4(保持感受野);(3)根据分类数,把最后一个全连接层fc8的通道数从1000改为21;(4)把全连接层(fc6、fc7、fc8)改成卷积层。在加速实验中,作者将第一个全连接层fc6,通道数从4096变为1024,卷积核大小从7x7变为3x3,后续实验中发现此处的dilate rate为12时(LargeFOV),效果最好。
  • CRF精准定位:在进行测试时,需要将class socre maps还原为原始图像的分辨率。由于class score maps十分平滑,可以通过简单的双线性插值近似的将其提高8倍分辨率,但细节上仍存在较大差距。卷积网络中,分类与定位之间有一个平衡,具有多层池化的更深层的网络在分类任务上取得的效果更好,然而, 增加的不变性和较大的感受野使从最后的层预测出位置会有很大的挑战。常用的方法包括(1)通过利用卷积网络中多层信息,来更好的估计分割边界;(2)采用超像素表示,将定位任务分给低级的分割方法。该文中首先利用DCNN的识别能力,后接全连接的CRF来提高位置的准确性。
    在这里插入图片描述
    CRF的能量函数做为优化目标: E ( x ) = ∑ i θ i ( x i ) + ∑ i j θ i j ( x i , x j ) E(x)=\sum_i\theta_i(x_i)+\sum_{ij}\theta_{ij}(x_i,x_j) E(x)=iθi(xi)+ijθij(xi,xj)其中, θ i ( x i ) = − l o g P ( x i ) \theta_i(x_i)=-logP(x_i) θi(xi)=logP(xi)这一项保证了分类的准确率,准确率越高P(x)越接近1,此项值越小。 θ i j ( x i , x j ) = μ ( x i , x j ) ∑ m = 1 K ω m ⋅ k m ( f i , f j ) \theta_{ij}(x_i,x_j)=\mu(x_i,x_j)\sum_{m=1}^{K}\omega_m\cdot k^m(f_i,f_j) θij(xi,xj)=μ(xi,xj)m=1Kωmkm(fi,fj),其中当 i ≠ j i\not = j i=j μ ( x i , x j ) \mu(x_i,x_j) μ(xi,xj)的值为1,即只考虑标签不相同的两个像素点,右边的核函数主要由两个像素点的位置和颜色决定,位置为主、颜色为辅。

DeepLab v2(2016)

  《DeepLab: Semantic Image Segmentation with Deep Convolutional Nets, Atrous Convolution, and Fully Connected CRFs》收录于TPAMI 2017,与deeplab v1相比主要提出了语义分割的另一个挑战,即图像中存在多尺度的物体。因此,论文的创新点主要是(1)在tensorflow中以模块化方式,实现了‘atrous convolution’;(2)利用不同膨胀因子的空洞卷积融合多尺度信息,实现了ASPP(Atrous Spatial Pyramid Pooling);(3)利用CRF优化 ,推出Dense CRF。
ASPP:通过不同的atrous convolution对图像进行不同程度的缩放,得到不同大小的feature maps,再把子窗口的特征进行池化就生成了固定长度的表示。
在这里插入图片描述
  LargeFOV是指采用膨胀速率r=12的膨胀卷积策略,作者在VGG16的fc6采用该膨胀卷积,并将fc7和fc8改为1x1的全卷积,命名为DeepLab-LargeFOV。作为对比,同时在VGG16的fc6-fc8层用四路采用不同膨胀速率的膨胀卷积作用于各自的fc6,在fc7和fc8同样采用全卷积策略,命名为DeepLab-ASPP,根据膨胀卷积r的不同组合,r={2,4,8,12}的称为DeepLab-ASPP-S,r={6,12,18,24}的称为DeepLab-ASPP-L,如下图分别为VGG16上的DeepLab-LargeFOV和DeepLab-ASPP示意图。除此之外,deeplabv2还将backbone由VGG-16修改为ResNet-101。

DeepLab v3(2017)

  同样的作者,又在CVPR 2017提出了《Rethinking Atrous Convolution for Semantic Image Segmentation》,主要的创新点在于:(1)设计了串行和并行的带孔卷积模块,串行结构使用了Multi-Grid策略,并行结构采用空间金字塔池化获取多尺度的内容信息;(2)提出的ASPP网络模块包含了加入了batch normalization layers,对于网络训练很重要。
  目前提出的几种获取尽可能多的目标的总体特征和细节特征,即不同尺度下的特征的方法如下:(1)应用于图像金字塔从而在每个输入的尺度下提取特征;(2)编码器解码器结构,在编码器部分就利用起多尺度的特征,解码器部分恢复图像同时保证空间分辨率;(3)用额外添加的模块级联在原来的网络上,从而捕获长跨度的信息;(4)空间金字塔池化。
在这里插入图片描述

  • 以串行方式设计atrous convolution模块:把resnet的block4拷贝几份串联起来,如下图所示(a)在没有使用带孔卷积的情况下它的输出步长是256,(b)采用串行的ResNet,级联block为block5、block6、block7,均为block4的复制。这些blocks中有三个3×3的卷积,除去最后一个block之外,所有的卷积最后一步步长为2。多网格设计,对 block4~block7采用不同的atrous rates,rates = (2,4,8)。
  • 带孔空间金字塔池化:四个并行的步长不同的带孔卷积被应用在特征映射之上,具有不同atrous rates的ASPP能够有效的捕获多尺度信息。但是随着sampling rate的增加,有效filter特征权重(即有效特征区域,而不是补零区域的权重)的数量会变小,即当采用具有不同atrous rates的3×3 filter应用到65×65的feature map时,在rate值接近于feature map大小的极端情况,该3×3 filter不能捕获整个图像内容,而退化成了一个简单的1×1 filter, 因为只有中心filter权重才是有效的。利用全局平均池化处理模型的特征映射,将得到的图像级特征输入到一个有256个filter的 1×1 卷积(加入BN),然后将特征进行双线性上采样(bilinearly upsample)到特定的空间维度。当output_stride=16时,包括一个1×1 convolution和3×3 convolutions,其中3×3 convolutions的rates=(6,12,18),(所有的filter个数为256,并加入batch normalization)。

两种方法的结构合并并不会带来提升,相比较来说,ASPP的纵式结构要好一点,所以deeplab v3一般也是指ASPP的结构。

DeepLab v3+(2018)

  果然,他们还没有满足,又继续改进提出了《Encoder-Decoder with Atrous Separable Convolution for Semantic Image Segmentation》,在ECCV 2018。创新点在于:(1)引入Encoder-Decoder模型,将空间金字塔池化结构的多尺度特征捕捉能力和编码器-解码器结构处理边界细节的能力相结合;(2)将Xception中的深度可分离卷积应用到空洞空间金字塔池化(ASPP)和解码模块中作为backbone,进一步提升速度和精度。

  • 网络结构:基于DeepLab v3,将原结构作为编码器,另外加入一个解码器。论文使用DeepLab v3中logits前最后一层的feature map作为encoder的输出。通常得到的out_stride为16,基于双线性插值上采样16倍作为decoder层比较常用,但边界信息仍不准确。因此,作者提出:(1)首先通过双线性插值恢复4倍大小的分辨率;(2)然后与对应的低层次的feature map进行拼接,低层次的feature maps首先用1x1的卷积处理降低通道数;(3)后接一个大小为3×3的卷积来增强feature maps;(4)最后通过一个插值来进一步恢复4倍分辨率至原图大小。
  • 对Xception模型的改进:(1)加深了Xception;(2)用深度可分卷积替换所有max pooling 减少了计算量,进而可以使用空洞卷积来提取feature(另一种方式是直接在max pooling 中应用空洞卷积);(3)在每个3×3的深度可分卷积后接BN层和ReLU。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

基于深度学习的语义分割之FCN、SegNet、UNet、LinkNet、PSPNet、DeepLab系列 的相关文章

  • 线程池面试题

    线程池面试题 1 Executor 框架三大组成部分 2 ThreadPoolExecutor 类 线程池执行器 核心 2 1 ThreadPoolExecutor 3 个最重要的参数 2 2 ThreadPoolExecutor 饱和策略
  • 电机四象限运行

    电机四象限模式 前言 电机单象限模式 电机四象限模式 电机控制中的两象限和四象限程序 两象限程序 四象限程序 前言 在主机厂工作中常常提到四象限和两象限程序 对于电驱运行方式的四象限运行不是很熟悉 学习一下 做下笔记 以防止遗忘 个人理解
  • 成功解决 XXX--1.0-SNAPSHOT.jar中没有主清单属性

    问题描述 在运行使用maven打包的项目之后 运行项目发现主类没有找到 提示XXX 1 0 SNAPSHOT jar中没有主清单属性 问题原因 maven在打包时没有配置主类 解决方案 如果您使用的是Springboot框架 那么只需要在p
  • elasticsearch7.8.0 win指定jdk版本

    修改 elasticsearch env bat 文件 set JAVA HOME D elasticsearch 7 8 0 jdk if JAVA HOME set JAVA ES HOME jdk bin java exe set J

随机推荐

  • Python学习6.1类与对象

    一 类的定义 1 类的组成 类属性 实例方法 静态方法 类方法 eg 输入 class Student native place 云南 类属性 def init self name age self name name self age a
  • JUC之ReentrantLock

    一 背景 随着java内卷越来越厉害 校招经常会问一些源码知识 例如Synchronized的实现原理 ReentrantLock的实现原理 AQS的实现原理 ConCurrentHashMap的实现原理等等 如何能够灵活的应对呢 解决方案
  • STDC语义分割网络:BiSeNet的轻量化加强版(CVPR2021语义分割)

    今天和大家分享CVPR2021中语义分割领域的一篇论文 论文标题及作者如下图所示 论文下载地址 https arxiv org abs 2104 13188 代码即将开源 https github com MichaelFan01 STDC
  • 访问权限修饰符

    访问控制权限修饰符 Java中访问修饰符有四种 分别是public private protected和默认 1 public 表示公有的 对于一个public成员 可以被任何类访问 在不同的包中 所有类都可以访问 2 private 表示
  • 【从零开始的Java开发】2-8-1 HTML入门:标签、表格、表单

    文章目录 HTML简介 常用标签 字体标签 段落标签p 注释标签 标题标签h 图片标签img 超级链接标签a 锚点标签 列表 阶段小结 表格 相关标签 合并行列 分组设置表格格式的标签 相关属性 其他标签 表单 表单主要控件和实例 表单其他
  • EasyDemo*SQLite数据库版本升级

    一 简介 我们在开发应用的时候 存储数据可能会用到数据库 第一个版本时所设计的数据库结构 如果在以后的app版本中需要增加业务逻辑 数据库的表可能要做相应的修改 那么原来的数据库结构就不能用了 这时就需要对数据库进行升级 二 升级方案 1
  • linux配置放火墙开放端口

    vi etc sysconfig iptables A INPUT m state state NEW m tcp p tcp dport 80 j ACCEPT 允许80端口通过防火墙 A INPUT m state state NEW
  • 神经网络实现连续型变量的回归预测(python)

    最近写论文时用到一个方法 是基于神经网络的最优组合预测 主要思想如下 在建立由回归模型 灰色预测模型 BP神经网络预测模型组成的组合预测模型库的基础上 利用以上三种单一预测模型的组合构成BP神经网络组合预测模型 我是参考的参考这篇文章 路玉
  • Linux3.10内核之后proc文件系统的使用

    最近在通过无线扫描周边的手机mac的事情 拿到AP周边的mac后需要送到应用层 之前接触的都是RTOS的系统 数据交互比较简单 Linux下应用层无法直接和驱动交换数据 需要通过kernel提供的一些通道 因为只是向应用层送数据 和应用层的
  • Windows7旗舰版和10 创建原始套接字失败,代码10013

    笔记本重装系统后 以前能运行的程序中的Ping程序不能运行了 查看代码 创建套接字失败 RawSock socket AF INET SOCK RAW IPPROTO ICMP RawSock INVALID SOCKET 用DWORD d
  • 微信小程序地图(map)组件点击(tap)获取经纬度

    微信小程序中使用地图 map 组件 通过点击 tap 获取经纬度 按照官方的回应 暂时是没法做到的 从地图组件API多有残缺判断 怀疑是个实习生干的 做个变通 适用性有限 请大家参考 基本思路就是在地图上铺满一层marker 从而通过点击m
  • 智慧合约:智能合约安全问题的AI解决方案

    一支穿云箭 千军万马来相见 在经历三个月 漫长熊市 后 从4月中旬开始 EOS的一个拉升 形成了数字货币市场大牛市的壮观景象 可是在美链BeautyChain BEC 的智能合约漏洞被黑客利用 随意刷币 SmartMesh SMT 智能合约
  • System.out.println()影响系统运行效率!!!

    在Java开发中 System out println 是一种常用的输出方式 可以将字符串输出到控制台 然而 这种输出方式在一定程度上会影响系统的运行效率 首先 System out println 的输出操作需要占用CPU和内存资源 因为
  • 配置Maven仓库私服

    在项目的pom xml文件中配置 将下面代码复制粘贴到文件的最下方即可
  • 霍尔传感器测电机的转速

    霍尔传感器可以用于测量电机的转速 测量原理是通过检测电机旋转时产生的磁场变化来计算转速 具体的测量方法如下 1 在电机旋转的轴上安装一个磁铁 磁铁的北极和南极在轴上相隔一定距离 2 在电机旋转轴的一侧安装一个霍尔传感器 传感器的感应面与磁铁
  • java的intern方法

    intern 方法返回值 一个字符串 内容与此字符串相同 但一定取自具有唯一字符串的池 new的字符串和变量不会进入常量池 String str1 a String str2 b String str3 ab 放在常量池 String st
  • Android_CTF: kgb_messenger

    环境 kgb messenger apk 测试机 OnePlus Andorid 9 1 Alerts 安装该apk后 使用发现如下的界面 用 jadx 反编译该 apk 搜索字符串 Russian 在MainActivity中发现了以上字
  • Git安装与配置及常见命令

    Git安装与配置及常见命令 1 下载与安装 1 官方下载地址 https git scm com download win 2 安装好之后 直接点击 运行即可 之后一直默认就行 3 桌面点击右键 会出现 Git Bash Here 点击此选
  • SpringBoot自定义bean的加载顺序

    最近面试的时候被问到这个问题 当时自己没回答上来 下来自己想了想然后又查了些博客 所以就记录下这个 首先写出两个测试类 Component public class TestA public TestA System out println
  • 基于深度学习的语义分割之FCN、SegNet、UNet、LinkNet、PSPNet、DeepLab系列

    图像分割 Image Segmentation 是计算机视觉研究中的一个经典难题 也是图像理解领域关注的一个热点 在场景理解 医学图像分析 机器人感知 视频监控 增强现实 图像压缩等领域有着广泛的应用 图像分割 简单来说就是在图像中把目标从