本文将分 3 期进行连载,共介绍 19 ****个在图像分割任务上曾取得 SOTA 的经典模型。
-
第 1 期:FCN、ReSeg、U-Net、ParseNet、DeepMask、SegNet、Instance-Aware Segmentation
-
第 2 期:DeepLab、DeepLabv3、RefineNet、PSPNet、Dense-Net、Mask-Lab
-
第 3 期:PANet、DANet、FastFCN、Gated-SCNN、OneFormer、PSPNet-ResNet50_PSSL
您正在阅读的是其中的第 2 期。前往 SOTA!模型资源站(sota.jiqizhixin.com)即可获取本文中包含的模型实现代码、预训练模型及 API 等资源。
第 1 期回顾:FCN、ReSeg、U-Net、ParseNet、DeepMask…你都掌握了吗?一文总结图像分割必备经典模型(一)RCNN、DRCN、FSRCNN、ESPCN、SRGAN、RED…你都掌握了吗?
本期收录模型速览
模型 | SOTA!模型资源站收录情况 | 模型来源论文 |
---|---|---|
DeepLab | sota.jiqizhixin.com/project/dee… 收录实现数量:7 支持框架:TensorFlow、PyTorch | Semantic image segmentation with deep convolutional nets and fully connected crfs |
DeepLabv3 | sota.jiqizhixin.com/project/dee… 收录实现数量:9 支持框架:PyTorch、TensorFlow等 | Rethinking atrous convolution for semantic image segmentation |
RefineNet | sota.jiqizhixin.com/project/ref… 收录实现数量:5 支持框架:MindSpore、PyTorch | RefineNet: Multi-path Refinement Networks for High-Resolution Semantic Segmentation |
PSPNet | sota.jiqizhixin.com/project/psp… 收录实现数量:5 支持框架:PaddlePaddle、PyTorch等 | Pyramid Scene Parsing Network |
Dense-Net | sota.jiqizhixin.com/project/den… 收录实现数量:21 支持框架:PaddlePaddle、PyTorch等 | Densely connected convolutional networks |
Mask-Lab | sota.jiqizhixin.com/project/mas… | MaskLab: Instance Segmentation by Refining Object Detection with Semantic and Direction Features |
图像分割是计算机视觉中的一项基本任务,其应用领域包括场景理解、医学图像分析、机器人感知、视频监控、增强现实和图像压缩等。图像分割就是把图像分成若干个特定的、具有独特性质的区域并提出感兴趣目标的技术和过程。它是由图像处理到图像分析的关键步骤。相比图像分类和检测,分割是一项更精细的工作,因为需要对每个像素点分类。
图像分割可以表示为带有语义标签的像素分类问题(语义分割,Semantic Segmentation)或单个对象的分割问题(实例分割,Instance Segmentation) 。语义分割是对所有图像像素进行一组对象类别(如人、车、树、天空)的像素级标记,即简单地对图像中各个像素点分类。实例分割进一步扩展了语义分割的范围,需要检测和描绘图像中每个感兴趣的对象(例如,对个人的分割),即区分开不同的物体。从一定意义上来说,实例分割可以看作是语义分割加检测。
此外,还有全景分割(Panoramic segmentation),全景分割是语义分割和实例分割的结合。跟实例分割不同的是:实例分割只对图像中的object进行检测,并对检测到的object进行分割,而全景分割是对图中的所有物体(包括背景)都要进行检测和分割。本文不涉及全景分割的方法。
随着深度学习技术的应用,已经产生了新一代的图像分割模型,其性能有了显著的提高——通常在流行的基准测试中获得了最高的准确率——致使许多研究人员认为该领域发生了范式转变。
本文聚焦于深度学习技术,回顾图像分割中必备的TOP模型,包括语义分割模型和实例分割模型。
1、 DeepLab
深度卷积网络(DCNNs)在high level视觉任务中表现突出,比如图像分类和目标检测。本文结合DCNNs和概率图模型,提出了DeepLab以解决像素级图像分割任务(semantic image segmentation)。本文在一开始就提出了将DCNN应用在语义分割任务上所不得不解决的两个困难:1. 信号的多次下采样,导致分辨率的降低;2. CNN本身对于空间位置的不敏感。这两个问题导致DCNN在用于逐pixel的分割任务时,在细节的保持上不准确,空间准确率降低。为了解决第一个问题,即max pooling导致的分辨率降低,DeepLab引入空洞卷积(atrous conv)来代替pooling扩充感受野。为了解决第二个问题,作者引入了全连接CRF(fully-connected CRF)。因此,DeepLab结构实际上就是一个带atrous conv的DCNN和一个CRF结构的两阶段的结合。
空洞卷积,如图1,在文章中也被称作“洞算法(hole algorithm)”,被应用在VGG的后面几层,用于提高分辨率(将原本stride=32的VGG模型变成了stride=8)。
图1 一维洞算法示意,内核大小=3,输入跨度=2,输出跨度=1
CRF的作用是对最终产生的score map进行精细化处理,以得到物体的边缘和细节。本文采用了fully-connected CRF。其能量函数(相当于惩罚函数)基本形式如下:
惩罚函数分为两部分,其一是每个像素点自己的能力函数,其二是像素点之间的能量函数(pairwise potential)。
除此之外,DeepLab还用了多尺度预测的trick,即将输入图像以及前面的四个max pooling的输出结果通过128x3x3和128x1x1两次卷积后,concat主网络的输出的feature map。通过整个方法,feature map的通道数增加了5×128个,对于定位的效果也有一定提升。
当前SOTA!平台收录 DeepLab 共7个模型实现。
项目 | SOTA!平台项目详情页 |
---|---|
### DeepLab | 前往 SOTA!模型平台获取实现资源:sota.jiqizhixin.com/project/dee… |
2、 DeepLabv3
该文重新探讨空洞卷积的意义,在语义分割领域,空洞卷积是调整卷积核感受野和DCNN feature map分辨率的有力工具。该文应用不同sample rate的空洞卷积以级联或者平行的方式来处理分割任务中的多尺寸问题。另外,增强了ASPP(Atrus spatial pyramid pooling)使其在图像级编码全局上下文信息来生成卷积特征。此外,移除了CRF,但取得的效果更好。
考虑二维数据,对于输出y上的每个位置i和一个滤波器w,在输入特征映射x上应用空洞卷积:
其中,空洞率 r对应于样本的步幅的输入信号,这相当于卷积输入x的filter中两个空间上相邻的weight值间插入r-1个0。标准卷积是空洞率 r=1的一种特殊情况,空洞卷积允许我们通过改变速率值来自适应地修改滤波器的感受野,具体见图2。
图2 内核大小为3×3和不同速率的Atrous卷积。标准卷积对应于速率=1的Atrous卷积。采用大数值的Atrous率扩大了模型的感受野,使物体能够在多种尺度上进行编码
对于用于图像分类任务的DCNNs,最终的特征响应比输入的图像维度小32倍,因此输出步幅为32。如果想要将DCNN中计算出的特征响应的空间密度增加一倍,则将降低分辨率的最后一个池化或卷积层的步幅设置为1,以避免信号抽取。然后,将所有后续的卷积层替换为速率为r=2的空洞卷积。这允许我们提取更密集的特征响应,而不需要学习任何额外的参数。
作者首先探索设计在级联架构下的空洞卷积模块。具体来说,复制最后一个ResNet块的几个副本,并将它们排列为级联。在这些块中有三个3×3卷积,最后一个卷积的步长为2,除了最后一个block,类似于原始的ResNet。使用特定空洞率的空洞卷积来控制输出步幅,如图3(b)。
图3 没有和有无序卷积的级联模块
ASPP的灵感来自于空间金字塔池的成功,这表明在不同尺度上重新采样特征是有效的,可以对任意尺度的区域进行准确、有效的分类,本文在ASPP中引入了批归一化。具体来说,在模型的最后一个特征图上应用全局平均池化,将得到的多尺度特征与256个滤波器进行1×1卷积(批归一化),然后将特征双向上采样到所需的空间维度。最后,改进的ASPP包括1个1×1卷积和3个3×3卷积,输出步幅为16时r=(6,12,18)(都有256个滤波器和批归一化)以及多尺度特征,如图14所示。当输出步幅为8时,速率是两倍。连接来自所有分支的结果特征并通过另一个1×1卷积,然后在最后面的1×1卷积生成最终的结果。
图4 带有非线性卷积的平行模块(ASPP),用图像级别的特征进行增强**
当前SOTA!平台收录 DeepLabv3 共9个模型实现。
项目 | SOTA!平台项目详情页 |
---|---|
DeepLabv3 | 前往 SOTA!模型平台获取实现资源:sota.jiqizhixin.com/project/dee… |
3、RefineNet
RefineNet是一个多路改进网络,能够显式地利用下采样过程中所有可用的信息,使用long-range残差连接实现高分辨率预测。RefineNet能够混合粗粒度的高维语义特征和细粒度的低维特征,生成高分辨率的语义特征图。这样保证了网络能够通过long-range残差连接反向传播到较早的低维层。RefineNet整体架构如图15。RefineNet利用了ResNet网络,在四种不同的下采样阶段将特征图输入到RefineNet模块中,得到融合后的特征图。除了RefineNet4之外,每一个RefineNet模块都有两个输入,一个是本阶段的特征图,另一个是低层产生的经过处理的特征图,这样随着下采样的进行,语义信息也逐渐丰富,最终得到的得分图经过上采样操作恢复原有图像大小。
图5 RefineNet各组件图示
每一个RefineNet模块都由四部分组成:第一个是残差卷积单元(Residual Conv Unit),用来调整预训练的权重;第二个是多分辨率融合单元(Multi-Resolution fuse),实现不同分辨率特征图的融合;第三部分是链式残差池化(Chained Residual Pooling),用来捕获背景上下文信息;最后一个是输出卷积单元,处理结果用于最终的预测。具体来说,残差卷积单元包含激活(ReLU)和卷积(Conv 3×3)操作,然后使用加法将前后的特征图融合,这在设计上与ResNet思想相同。多分辨率融合单元将前面多种分辨率的特征图输入到融合模块内后,首先采用卷积层获得尺寸不变的特征图。然后使用上采样操作将所有特征图扩展为尺寸相同的新特征图。最后,使用Sum操作融合所有的特征图。链式残差池化单元的目的是从大的背景区域中捕获上下文信息,多个池化窗口能获得有效的特征,并使用学习到的权重进行融合。
引入具有身份映射的残差连接,允许梯度从一个区块直接传播到任何其他区块。这个概念鼓励为shortcut连接保持一个干净的信息路径,这样这些连接就不会被任何非线性层或组件 “阻断”。相反,将非线性操作放在主要信息路径的分支上。作者遵循这一准则来开发RefineNet中的各个组件,包括所有卷积单元。利用这种特殊的策略有效训练多级联的RefineNet。链式残差池化块中包括一个非线性激活层(ReLU)。作者观察到,这个ReLU对于后续池化操作的有效性非常重要,它也使得模型对学习率的变化不敏感。每个RefineNet块中的一个ReLU不会明显降低梯度流的有效性。RefineNet中有短程和长程的残差连接。短程残差连接是指一个RCU或残差池组件中的局部short-cut连接,而长程残差连接是指RefineNet模块和ResNet块之间的连接。通过长程残差连接,梯度可以直接传播到ResNet的早期卷积层,从而实现所有网络组件的端到端训练。
融合块融合了多条short-cut的信息,这可以看作是对具有必要维度或分辨率适应性的多条残差连接进行求和融合。这里的多分辨率融合块的作用类似于ResNet中传统残差卷积单元中的 “求和 “融合的作用。在RefineNet中,特别是在融合块中,存在一些层专门进行线性特征转换操作,如线性特征降维或双线性上采样。将这些层放置在short-cut路径上,这与ResNet的情况类似。在ResNet中,当short-cut连接跨越两个区块时,它将在short-cut路径中引入一个卷积层用于线性特征维度的适应,这将确保特征维度与下一个区块中的后续求和相匹配。由于这些层中只采用了线性变换,梯度仍然可以通过这些层有效地传播。
当前SOTA!平台收录RefineNet共5个模型实现。
项目 | SOTA!平台项目详情页 |
---|---|
RefineNet | 前往 SOTA!模型平台获取实现资源:sota.jiqizhixin.com/project/ref… |
4、 PSPNet
PSPNet全称为Pyramid Scene Parseing Network,是采用金字塔池化模块搭建的场景分析网络,获得了当年ImageNet场景解析挑战赛的第一名。PSPNet通过对不同区域的上下文信息进行聚合,提升了网络利用全局上下文信息的能力。PSPNet使用的策略是:pooling-conv-upsample,拼接得到特征图后进行标签预测。
为了实现准确的场景感知,知识图依赖于场景上下文的先验信息。作者发现基于FCN的模型的主要问题是缺乏适当的策略来利用全局场景类别线索。为了减少不同子区域上下文信息的损失,该文提出将全局场景优先结构引入到CNN的最后一层feature map上,从而结合不同子区域及不同尺寸的语义信息。PSPNet的完整架构如图6所示。
图6 PSPNet概述。给定一个输入图像(a),首先使用CNN来获得最后一个卷积层的特征图(b),然后,应用一个金字塔解析模块以生成不同的子区域表征,接着是上采样和连接层,以形成最终的特征表征,其中包含了(c)中的局部和全局上下文信息。最后,将该表征送入卷积层以获得最终的每像素预测(d)
PSPNet用带有空洞卷积的预训练的ResNet作为backbone,最后一层提取的feature map大小为输入图像的1/8。PSPNet为四级模块,其二进制大小分别为1×1、2×2、3×3和6×6。因此,通过融合四个不同金字塔尺寸的特征,将输入的feature map分为不同的子区域并生成不同位置的池化表示,从而产生不同尺寸的输出,为了强化全局特征的权重,在金字塔层数为N的情况下,利用一个1×1的卷积将上下文表示的维度降到1/N。然后将得到的特征通过双线性插值上采样至相同尺寸,进行拼接后作为最终的全局金字塔池化特征。
经过深度预训练的神经网络能够改进性能,然而深度的增加也可能会带来额外的优化困难。ResNet通过在每个块中使用skip connection来解决这个问题。本文在原始残差网络的基础之上做了一些改进,提出通过另外的损失函数来产生初始结果,然后通过最终的损失函数来学习残差。图17展示了PSPNet输入图像后的预训练ResNet网络,改进点在下图中的“loss2”,作者将这个损失作为辅助优化的损失,即auxiliary loss,简称AR,主损失为下图中“loss1”的分类损失。
图7 ResNet101中辅助损失的说明。每个蓝框表示一个残差块。辅助损失是在res4b22残差块之后添加的
当前SOTA!平台收录PSPNet共5个模型实现。
项目 | SOTA!平台项目详情页 |
---|---|
PSPNet | 前往 SOTA!模型平台获取实现资源:sota.jiqizhixin.com/project/psp… |
5、 Dense-Net
随着CNN的层数不断加深,信息(输入信息或者梯度信息)容易出现弥散现象。一些研究专门针对此问题展开,比如ResNets、Stochastic depth和FractalNets。本文引入了密集卷积网络(DenseNet),以前馈方式将每一层连接到另一层。具有L层的传统卷积网络有L个连接,每个层与其后续层之间有一个连接,本文网络则具有L(L+1)/2 个直接连接。对于每个层,所有前面层的特征图用作输入,其自身的特征图被用作所有后续层的输入。
图8 一个5层的密集块,增长率为k=4。每层将所有前面的特征图作为输入
将图像定义为x_0 ,模型有L层,每一层为一个非线性转换Hl(·) ,这里 l 表示第 l 层。Hl(·)可以由以下操作组成,例如,Batch Normalization (BN) 、rectified linear units (ReLU)、 Pooling、 Convolution (Conv)。我们定义第 l 层的输出为 x_l 。传统的卷积前馈网络将第 l 层的输出作为第 l+1 层的输入。即:
而ResNets定义如下:
ResNets的一个缺点是:ResNets使用的是sum操作,这可能会阻碍信息在网络的流动。为了进一步提高两层之间信息的流动,作者提出了一个不同的连接方式,即第 l 层接收前面所有层的feature maps[ x_0,…,x_l−1]作为输入:
其中,[x_0, x_1, … , x_l-1]是指各层产生的特征图的连接。由于其密集的连接性,作者将这种网络结构称为密集卷积网络(DenseNet)。为了便于实施,作者将Hl(·)的多个输入串联成一个单一的张量。作者将Hl(·)定义为三个连续操作的复合函数:批归一化(BN)、ReLU和3×3卷积(Conv)。
卷积网络的一个必需操作就是下采样,而这会改变feature maps的大小。但是当feature maps的大小发生改变时,上式不可用。因此,为了能够在网络结构中进行下采样,作者将网络划分成多个密集块,如下图所示:
图9 有三个密集块的深度密集网。两个相邻块之间的层被称为过渡层,通过卷积和池化改变特征图的大小
作者定义两个blocks之间的层为过渡层,其包含一个batch normalization、一个1×1卷积层和一个2×2平均池化层。尽管每一层仅仅产生k个feature maps, 但是每一层的输入依然会很多。因此,作者在3×3卷积前面增加一个1×1卷积(称为 bottleneck layer),用于减少每一层feature map输入的数目。作者将增加了bottleneck layer的Densenet称为DenseNet-B。
为了进一步提高模型的紧凑性,作者减少过渡层的feature maps的数量。如果一个dense block包含m个feature maps, 令后面的过渡层产生 [θxm] 个输出feature maps,这里 0≤θ≤1 , 表示压缩因子。作者将使用了θ<1 的网络称为DenseNet-C,本实验中定义θ=0.5 。
当前SOTA!平台收录Dense-Net共21个模型实现。
项目 | SOTA!平台项目详情页 |
---|---|
Dense-Net | 前往 SOTA!模型平台获取实现资源:sota.jiqizhixin.com/project/den… |
6、 Mask-Lab
本文解决的是实例分割的问题,即同时解决对象检测和语义分割的任务。论文提出了一个名为MaskLab的模型,它可以产生三个输出:box检测、语义分割和方向预测。MaskLab建立在Faster-RCNN对象检测器之上,预测框提供了对象实例的准确定位。在每个感兴趣区域内,MaskLab通过组合语义和方向预测来执行前景/背景分割。语义分割有助于模型区分包括背景在内的不同语义类的对象,而方向预测估计每个像素朝向其相应中心的方向,实现分离同一语义类的实例。
图10 MaskLab产生三种输出,包括box预测(来自Faster-RCNN)、语义分割logits(用于像素分类的logits)和方向预测logits(用于预测每个像素对其相应实例中心的方向的logits)。对于每个感兴趣的区域,通过利用语义分割和方向logits进行前景/背景分割。对于语义分割逻辑,根据预测的box标签挑选通道,并根据预测的box来裁剪区域。对于方向预测Logits,进行方向汇集,从每个通道集合区域Logits。串联这两个裁剪后的特征,并通过另一个1×1卷积进行前景/背景分割**
如图10,MaskLab采用ResNet-101作为特征提取器。它由三个部分组成,所有的特征共享到conv4(或res4x)块,还有一个额外的重复conv5(或res5x)块用于Faster-RCNN中的box分类器。原始的conv5块在语义分割和方向预测中都是共享的。建立在Faster-RCNN之上的MaskLab生成了box预测、语义分割逻辑(用于像素级分类的逻辑)和方向预测逻辑(用于预测每个像素对其相应实例中心的方向的逻辑)。语义分割Logits和方向预测Logits是通过在ResNet-101的conv5块的最后一个特征图之后添加的另一个1×1卷积来计算的。鉴于每个预测的方框(或感兴趣的区域),我们通过利用这两个逻辑值来进行前景/背景分割。具体的,对来自Faster-RCN预测的语义通道的裁剪过的语义Logits和经过方向汇集后的裁剪过的方向Logits的串联进行1×1卷积。
语义和方向特征。MaskLab为一幅图像生成语义分割日志和方向预测日志。语义分割逻辑用于预测像素级的语义标签,它能够分离不同语义标签的实例,包括背景类。方向预测Logits用于预测每个像素对其相应实例中心的方向,因此它们对进一步分离相同语义标签的实例很有用。
考虑到来自box预测分支的预测box和标签,我们首先从语义分割逻辑中选择与预测标签相关的通道(例如,人物通道),并根据预测的box裁剪区域。为了利用方向信息,我们进行同样的组合操作,从每个方向通道收集区域日志(由方向指定)。然后,经过裁剪的语义分割逻辑图和汇集的方向逻辑图被用于前景/背景分割。图18给出了具体细节,图中显示 “人 “的分割Logits可以清楚地将人与背景和领带分开,而方向Logits能够预测像素对其实例中心的方向。在集合了方向逻辑后,该模型能够在指定的box区域内进一步分离两个人。作者提出的方向预测逻辑是与类别无关的。具体来说,对于有K个类别的mask分割,模型需要(K+32)个通道(K个用于语义分割,32个用于方向汇集),而输出2×(K+1)×49个通道。
图11 语义分割逻辑和方向预测逻辑被用来在每个预测的方框内进行前景/背景分割。特别是,分割逻辑能够区分不同语义类别的实例(例如,人和背景),而方向逻辑(方向是用颜色编码的)进一步区分同一语义类别的实例(例如,预测的蓝色方框中的两个人)。在assembling操作中,区域Logits(彩色三角形区域)从每个方向通道复制。例如,由红色三角形指定的区域从红色方向通道编码实例方向的0度到45度复制Logits。粉色通道编码实例方向从180度到225度的弱激活
Mask细化:作者通过利用HyperColumn特征进一步细化预测的粗略mask。如图12所示,生成的粗mask逻辑(仅利用语义和方向特征)与ResNet-101低层的特征相连接,然后由三个额外的卷积层处理,以预测最终mask。
*图12 mask细化。hypercolumn特征与粗预测的mask相连接,然后送入另一个小的ConvNet,产生最终的精mask预测
“裁剪和调整大小”首先从特征映射中裁剪指定的边界框区域,然后将它们双线性地调整为指定大小(例如,4×4)。进一步将区域划分为若干子框(例如,4个子框,每个子框具有2×2的大小),并使用另一个小网络来学习每个子框的偏移。最后,依据每个变形的子框再次执行“裁剪并调整大小”操作。
图13 可变形裁剪和调整大小。(a) 裁剪和调整大小的操作是在一个边界框区域内裁剪特征,并将其调整到指定的4×4大小。(b) 然后将4×4区域分为4个小的子框,每个子框的大小为2×2。然后,对变形的sub-boxes再次进行裁剪和调整大小
项目 | SOTA!平台项目详情页 |
---|---|
Mask-Lab | 前往 SOTA!模型平台获取实现资源:sota.jiqizhixin.com/project/mas… |
前往 SOTA!模型资源站(sota.jiqizhixin.com)即可获取本文中包含的模型实现代码、预训练模型及API等资源。