全景分割(UPSNet & DeeperLab)

全景分割简介

  • 全景分割(UPSNet & DeeperLab)
    • 评估标准
    • 数据集
    • Baseline
    • UPSNet
    • DeeperLab
    • 参考文献

全景分割(UPSNet & DeeperLab)

新人小白,第一次写博客,望指教。

全景分割(panoptic segmentation),是图像分割任务的一个新坑,提出于2018年。一句话概括全景分割,就是为图像中每一个pixel赋予class label和instance ID。Each pixel of an image must be assigned a semantic label and an instance id.

之前的图像分割主要有两个方向,一个是语义分割(semantic segmentation):常用来识别天空、草地、道路等等不可数且没有固定形状的stuff;另一个是实例分割(instance segmentation):常用来识别人、动物、工具等可数且相互独立的things。语义分割预测每个pixel的class label,不区分实例;实例分割预测每个instance对应的像素区域,区分实例,通常采用mask标记目标。

现在,全景分割就是把这两个任务结合起来,做到“完全理解整幅图像”:给每个pixel加上标签 ( l i , z i ) (l_i,z_i) (li,zi),其中 i i i表示第 i i i个像素, l l l表示语义类别, z z z表示实例ID。当 l i l_i li属于stuff时,忽略 z i z_i zi,识别stuff;当 l i l_i li属于things且 l i = z i l_i=z_i li=zi时,该pixel属于某一things。Pixel with the same label and id belongs to the same object; for stuff labels the instance id is ignored.
 

评估标准

评估标准上,开山之作“Panoptic Segmentation”提出了评价指标panoptic quality(PQ):
P Q = ∑ ( p , g ) ∈ T P I o U ( p , g ) ∣ T P ∣ + 1 2 ∣ F P ∣ + 1 2 ∣ F N ∣ PQ=\frac{\sum_{(p,g) \in TP} IoU(p,g)}{|TP|+\frac{1}{2}|FP|+\frac{1}{2}|FN|} PQ=TP+21FP+21FN(p,g)TPIoU(p,g)PQ可以看作是segmentation quality(SQ)和recognition quality(RQ)的乘积 P Q = S Q × R Q = ∑ ( p , g ) ∈ T P I o U ( p , g ) ∣ T P ∣ × ∣ T P ∣ ∣ T P ∣ + 1 2 ∣ F P ∣ + 1 2 ∣ F N ∣ PQ=SQ \times RQ=\frac{\sum_{(p,g) \in TP} IoU(p,g)}{|TP|} \times \frac{|TP|}{|TP|+\frac{1}{2}|FP|+\frac{1}{2}|FN|} PQ=SQ×RQ=TP(p,g)TPIoU(p,g)×TP+21FP+21FNTP式中,TP代表匹配的segments pairs;FP代表不匹配的predicted segments;FN代表不匹配的GT segments。注意,当predicted segments和GT segments的IoU>0.5时则认为两个segments匹配。下图给出了person类的segments划分为TP、FN和FP的例子。

全景分割(UPSNet & DeeperLab)_第1张图片

具体计算时,先分别对每一类计算PQ,再计算所有类的平均值。RQ相当于F1 score,SQ相当于匹配后的预测segment与标注segment的mIoU。对于类别不平衡问题,PQ不敏感。并且PQ只关心每个实例的分割质量而没有考虑不同实例的大小不同。之后工作(DeeperLab)提出了parsing covering(PC)指标: C o v i = 1 N i ∑ R ∈ S i ∣ R ∣ max ⁡ R ′ ∈ S i ′ I o U ( R , R ′ ) Cov_i = \frac{1}{N_i} \sum_{R \in S_i}{\left| R \right| \max \limits_{R' \in S'_i}IoU(R,R')} Covi=Ni1RSiRRSimaxIoU(R,R)其中, R ′ , R R',R R,R分别表示对应类别的预测 segments 与真实 segments, ∣ R ∣ \left| R \right| R表示对应类别的实例在真实标注中像素点数量, N i N_i Ni表示类别为 i i i的真实标注像素点总和。通过对大的实例物体赋予更大的权重,使评价指标能够更明显地反映大物体的分割指标。
N i = ∑ R ∈ S i ∣ R ∣ N_i= \sum_{R \in S_i} {\left| R \right|} Ni=RSiR P C = 1 C ∑ i = 1 C C o v i PC=\frac{1}{C} \sum_{i=1}^{C}{Cov_i} PC=C1i=1CCovi从公式分子分母入手,分子有点像加入实例大小的加权求和,最后得到的是加权平均。
 

数据集

全景分割数据集需要有语义分割标注和实例分割标注。目前有四个全景分割数据集:

  1. Cityscapes:包含 50 个城市街景的图像分割任务数据集,一共有5000张街景图片(2975/500/1525 train/val/test images),97%的图片有像素标注,共有19个类别,其中8个类别符合语义分割的特征(11 things and 8 stuff);
  2. ADE20k:可用于场景感知、分割和多物体识别等多种任务的数据集,一共有25000张图像(20000/2000/3000 train/val/test images),并经过公开标注(100 things and 50 stuff)。
  3. Mapillary Vistas:全球最大、最多样化的街景图像数据库,一共有25000张分辨率不同的街景照片(18000/2000/5000 train/val/test images)。其中98%的图片都经过了像素标注(37 things and 28 stuff);
  4. COCO:143k张图像(118k/5k/20k train/val/test images),并经过公开标注(83 things and 53 stuff)。
     

Baseline

PS baseline算法采用PSPNet和Mask R-CNN分别进行语义和实例分割,并将语义和实例分割的输出采用类似NMS的启发式方法融合得到全景分割的输出,文章最后将machine results与human results进行比较。作者还指出PS的创新方向主要有两个,一个是深度end-to-end模型,以同时处理PS中的stuff-and-thing;另一个是采用高层的推理帮助解决PS中不能有重叠segments的问题(如learnable NMS)。
 

UPSNet

本文的关键点在于:

  1. 全景分割Head的构建,参数量少且高效,不仅可以利用语义分割和实例分割输出的logits,同时可将这个结构接在任意一个特征提取网络后面。
  2. 语义分割和实例分割之间存在冲突(语义分割和实例分割的效果好坏是会互相影响的,并非单纯的实例分割影响到实例分割的指标判断,语义分割影响到语义分割的指标判断,他们之间有一种相互的影响)。文章后面是通过增加一个拒判类别来缓和的,感觉有点牵强。
  3. 文章提出的全景分割网络结构是可以端到端训练的。

在Unified Panoptic Segmentation Network(UPSNet)工作中,作者认为现有的分割方法忽略了语义和实例分割的联系,并设计了一个统一这两种分割的模型。结构图如下:

全景分割(UPSNet & DeeperLab)_第2张图片

UPSNet结构中设计有三个Head,分别是Semantic Head(语义头),Instance Head(实例头),以及Panoptic Head(全景头)。其中语义头建立在可变性卷积的基础上,且利用来自特征金字塔网络(FPN)的多尺度信息;实例头与Mask R-CNN类似输出mask segmentation, bounding box和相关类;全景头利用了前两个头的logits,且添加了一个新的logits通道(对应于额外的一个未知类),全景头存在的目的是解决实例分割和语义分割之间的冲突,有助于准确地预测实例和类标签。

下面详细解释:

Backbone: 采用原始Mask R-CNN作为backbone(特征提取采用ResNet +FPN;RPN判断proposals是否为前景,并生成bbox的坐标变换系数;PymaridMaskTarget用于生成前景RoIs)。

Instance Segmentation Head: 实例头遵循了Mask R-CNN的设计,带有边界框回归输出、分类输出和分割掩码输出。

Semantic Segmentation Head: 语义头以FPN的多尺度特征图作为输入,采用FPN的 P 2 , P 3 , P 4 , P 5 P_2,P_3,P_4,P_5 P2,P3,P4,P5(256通道)特征图,他们首先经过相同的可变性卷积网络,然后均上采样到 P 2 P_2 P2尺度,再接着将他们concate起来并应用1×1卷积(softmax)来预测语义类别。具体看下图:

全景分割(UPSNet & DeeperLab)_第3张图片

语义头采用沿像素的交叉熵损失。为了更加强调前景对象(如行人),文章还考虑了RoI损失——根据Mask R-CNN的做法,训练阶段,采用实例的GT bounding box来裁切1×1卷积后得到的logits map,然后将其resize成28×28的mask,RoI损失通过计算28×28 patch的交叉熵得到,RoI 损失相当于在instance中对错误分类的像素进行更多的惩罚(之后消融实验证明了RoI损失再不损失语义分割精度的基础上提高了全景分割性能,但是从消融实验可以看出,RoI损失在提高了stuff分割效果的同时降低了thing的分割效果,如此一来RoI损失的有效性不能够严谨证明)。

Panoptic Segmentation Head: 全景头的设计需要接受来自语义头和实例头的logits信息。结构如下所示:

全景分割(UPSNet & DeeperLab)_第4张图片

语义头产生的语义分割的logits定义为 X X X,尺寸为 ( N s t u f f + N t h i n g , H , W ) (N_{stuff}+N_{thing},H,W) (Nstuff+Nthing,H,W),代表(通道数,高,宽), X X X可以理所当然地沿着通道被分为两个tensor X s t u f f X_{stuff} Xstuff X t h i n g X_{thing} Xthing N s t u f f N_{stuff} Nstuff在一个数据集中是确定值,而 N t h i n g N_{thing} Nthing并不是一个定值。训练阶段,确定实例数量 N i n s t N_{inst} Ninst是根据GT完成,推理阶段,采用mask pruning来确定 N i n s t N_{inst} Ninst。全景头的第一步需要生成一个tensor Z Z Z,其尺寸是 ( N s t u f f + N t h i n g , H , W ) (N_{stuff}+N_{thing},H,W) (Nstuff+Nthing,H,W)

掩码修剪(mask pruning):在推理过程中,从实例分割头中得到输出框、掩码和预测类标签后,就可以跟据mask pruning来确定哪个mask被用来构造全景logits。具体方法是首先执行与类无关的非最大值抑制(IoU阈值0.5),然后对剩余box的预测类概率进行排序,剔除概率小于阈值(0.6)的box。对于每个类,创建一个与图像大小相同的画布。然后,将该类的mask插值到图像scale,并按照概率的递减顺序将它们逐个粘贴到相应的画布上。每当粘贴一个mask,如果当前mask和已存在于当前mask之上的mask的交集大于阈值(0.3),就放弃这个mask。否则,需要将非相交部分粘贴到画布上。语义头和全景头的logits是输入图像的原始尺度。

首先将 X s t u f f X_{stuff} Xstuff填充到 Z Z Z的前 N s t u f f N_{stuff} Nstuff个维度,对于实例 i i i,从实例头可得其mask logits Y i Y_i Yi(28×28),box B i B_i Bi和class ID C i C_i Ci。训练阶段 B i B_i Bi C i C_i Ci都来自GT,推理阶段时 B i B_i Bi C i C_i Ci都来自mask R-CNN的预测。第 i i i个实例可以从语义头获得表示 X m a s k i X_{mask_i} Xmaski(大小H×W,并且在box B i B_i Bi外的值都为零)。然后通过双线性插值和在box外补零插值 Y i Y_i Yi直到与 X m a s k i X_{mask_i} Xmaski到相同尺寸,记为 Y m a s k i Y_{mask_i} Ymaski(大小H×W),第 i i i个实例最终表示为 Z N s t u f f + i = X m a s k i + Y m a s k i Z_{N_{stuff}+i}=X_{mask_i}+Y_{mask_i} ZNstuff+i=Xmaski+Ymaski。只要用所有实例的表示填充 Z Z Z后,便可以沿着通道维度来预测像素的类——若最大值落在前 N s t u f f N_{stuff} Nstuff维,则它属于一个stuff类,否则其最大值的index代表其instance ID。

推理阶段,一旦预测了instance ID,仍需要确定每个instance的class ID,可使用Mask R-CNN预测的 C i n s t C_{inst} Cinst或语义头预测的 C s e m C_{sem} Csem确定。文章采用了一个启发式规则:对于任一instance,需要得知哪些pixel对应于它(沿着 Z Z Z的通道维度取argmax等于pixel的instance ID),对于这些像素首先检查 C i n s t C_{inst} Cinst C s e m C_{sem} Csem的一致性,如一致,class ID = C i n s t C_{inst} Cinst,如不一致,统计这些 C s e m C_{sem} Csem的mode,记作 C ^ s e m \hat C_{sem} C^sem,如果mode的频率>0.5且 C ^ s e m \hat C_{sem} C^sem属于stuff,则class ID = C ^ s e m \hat C_{sem} C^sem,否则class ID = C i n s t C_{inst} Cinst。【mode具体是何意,求教】

Unknown Prediction: UPSNet的一种新机制,允许UPSNet将一个pixel分类为未知类,而不是做出错误的预测。文章的解释是如果一个错误是不可避免的,拒判的好处是只会让一个类的FN+1,不会让另一个类的FP+1,无论是thing类还是stuff类都一样可以拒判,这样能比给出一个错判下的评价指标PQ高。计算额外未知类的logits是 Z u n k n o w n = max ⁡ ( X t h i n g ) − max ⁡ ( X m a s k ) Z_{unknown}=\max{(X_{thing})}- \max{(X_{mask}}) Zunknown=max(Xthing)max(Xmask),其中 X m a s k X_{mask} Xmask X m a s k i X_{mask_i} Xmaski沿着通道维度concate起来的,大小为 N i n s t × H × W N_{inst}×H×W Ninst×H×W,最大值也是沿着通道维度取得的,文章给出的解释是对任一pixel,如果 max ⁡ ( X t h i n g ) > max ⁡ ( X m a s k ) \max{(X_{thing})}> \max{(X_{mask}}) max(Xthing)>max(Xmask),则很可能会错过一些实例【为什么这么说,求教】。为了生成unknown类的GT,训练时随机采样30%的GT masks并且设置其为unknown;在评价时,忽略属于unknown类的像素,设置其为void。

Loss Function: UPSNet一共8个loss,语义分割两个(全图交叉熵损失+像素级分类RoI损失),全景分割一个(全图像素分类损失),RPN两个(分类损失和回归损失),实例分割三个(分类损失,回归损失,mask分割损失)。这8个loss在不同加权下结果也不相同,消融实验发现loss平衡策略最优——即确保所有loss的大致规模相同可以得到较好的结果。

实验结果:
全景分割(UPSNet & DeeperLab)_第5张图片可以看出,新网络在backbone不是很复杂的情况下任然取得了不错的成绩。
 

DeeperLab

文章提出了一种bottoom-up,single-shot的全景图像解析方法。本文的关键点在于:

  1. 提出了一个简单的、全卷积的方法,以single-shot的方式同时处理语义分割和实例分割的任务,相比之前多个复杂独立的模块、多次inference操作等有很大优势。
  2. 提出了新的parsing covering(PC)指标,基于区域来评判图像解析结果,避免了PQ度量可能过度强调小物体的缺点。使用PQ和PC作为评价标准。
  3. 提出几种用于图像解析的神经网络,能显著降低高分辨率输入的内存占用情况。这些创新包括:广泛地应用深度可分离卷积(extensively applying depthwise separable convolution),使用带两层预测头的共享解码输出(using a shared decoder output with simple two-layer prediction heads),扩大卷积核的大小而不是增加网络的深度,应用space-to-depth及depth-to-space而不是上采样,采用困难样本挖掘策略(performing hard data mining)(详细的消融研究显示了实践中这些策略的影响)。
    所谓bottom-up需要结合Related Work理解。实例分割中,top-down的方法通过增强state-of-the-art检测器得到的框获得instance masks。bottom-up的方法采用两阶段的处理过程,由分割模型得到的像素级预测聚合形成实例预测。

网络结构如下所示(采用encoder-decoder的形式,语义分割和实例分割来自共享的decoder输出,再经过融合获得最后的图像解析结果):

全景分割(UPSNet & DeeperLab)_第6张图片

对于图像解析任务来说,输入需要较高的分辨率(文章基于 Mapillary Vistas数据集,分辨率大小为1441×1441)会造成大量的内存占用及冗余。如何平衡准确率和内存占用是一个问题。

Encoder:
Xception-71(获得较高的分辨率,目的在于高精度)或加宽版MobileNetV2(轻量级网络,用于更快地推理,目的在于高速度),并在末尾加了ASPP(目的是增加感受野),encoder输出的特征图stride为16,即其空间分辨率等于每个空间维度上的输入大小降采样16倍。

  1. 空洞空间金字塔池化结构(ASPP)首次在DeepLabV2中提出,特点是以多尺度来分割目标物体。通过不同sample rates的filters对应不同大小的感受野,来获得多尺寸下的语义信息。具体操作是,对一张图片并行地采用不同尺寸的空洞卷积操作,得到多尺度特性,不同sample rate提取的特征经过单独后处理和融合进而生成最终的结果。
全景分割(UPSNet & DeeperLab)_第7张图片
  1. 加宽版MobileNetV2: 虽然标准的MobileNetV2在输入大小为224×224的ImageNet图像分类任务中表现较好,但对于较高输入分辨率的图像解析任务,其有限的感受野(491×491)无法捕捉大范围的上下文信息。正如Xception-71那样,叠加更多3×3的卷积是增大感受野的一种方式,然而增加的额外的网络层会造成大量的内存占用。考虑到计算资源有限,将MobileNetV2中的所有3×3的卷积替换为5×5的卷积。这种方法在不增加内存占用的条件下有效地增加了感受野的大小(981×981),计算量会稍有增加。本文称其为加宽版MobileNetV2。

Decoder:
Decoder的目的是恢复目标物边界的细节信息,借鉴了DeepLabV3+。文章采用将encoder输出的激活层的feature map(stride=16)与backbone的较低层次的feature map(stride=4)进行融合。ASPP的输出与低层feature map分别被1×1 conv降维然后concat。

在concat前,DeepLabV3+再上采样已经降维后的ASPP的输出,但上采样会带来内存消耗,于是采用space-to-depth (S2D)。
后面还使用两个7x7的depthwise conv来增大感受野,通道数为4096。然后通过depth-to-space (D2S)降维来实现上采样操作,得到一个通道数为256,stride为4的feature map,作为image parsing处理的输入。具体过程见下图:
全景分割(UPSNet & DeeperLab)_第8张图片

全景分割(UPSNet & DeeperLab)_第9张图片

Image Parsing Prediction Heads:
图像解析包括5个预测头,都是由两个卷积层(7×7和1×1各一个)组成。其中,一个预测头有256个滤波器(第一个7x7的卷积核的通道数为256),用于语义分割;另外四个预测头有64个滤波器(第一个7x7的卷积核的通道数为64),用于类别无关的实例分割。

  1. Semantic Segmentation Head:最小化bootstrappd cross-entropy loss并且用了hard example mining,只回传top-K errors。文章设置的 K = 0.158 × N K=0.158×N K=0.158×N N N N为图像中所有像素的个数。

文章提出的bootstrappd cross-entropy loss如下
l = − 1 K ∑ i = 1 N w i ⋅ 1 [ p i , y i < t K ] ⋅ log ⁡ p i , y i l =-\frac{1}{K} \sum_{i=1}^{N}{w_i \cdot 1[p_{i,y_i} < t_K] \cdot \log{p_{i,y_i}}} l=K1i=1Nwi1[pi,yi<tK]logpi,yi其中 y i y_i yi是pixel i i i的目标类, p i , j p_{i,j} pi,j是pixel i i i预测属于 j j j类的后验概率, 1 [ x ] = 1 1[x]=1 1[x]=1 if x x x is TRUE and 0 0 0 otherwise。 t K t_K tK设置为损失在top-K的pixel。文章对于area小于64的instance,其pixel的权值 w i = 3 w_i=3 wi=3,否则设为 w i = 1 w_i=1 wi=1。通过这样做,网络被训练成同时关注奇异像素(hard pixel)和small instance。

  1. Instance Segmentation Heads: 定义了4个预测头。
    a) the keypoint heatmap:预测像素是否位于关键点中心半径为 R R R的圆内。标准的sigmoid交叉熵损失。
    b) the long-range offset map:预测像素到所有关键点的位置偏移,对每个像素的long-range信息编码。L1损失。
    c) the short-range offset map:类似于long-range,仅关注关键点半径 R R R内的像素。L1损失。
    d) the middle-range offset map:预测关键点对之间的偏移。L1损失。
    如下图所示:
全景分割(UPSNet & DeeperLab)_第10张图片

Prediction Fusion:
将4个预测融合到一个类不相关的instance segmentaion map,再最终融合semantic和instance segmentation map。

  1. Instance Predicton:Recursive offset refinement、Keypoint localization、Instance detection、Assignment of pixels to instances。 重点是预测每个像素与其相应实例的关键点之间的不同关系,将其融合以形成类别不相关的实例分割。
  2. Semantic and Instance Prediction Fusion:从语义分割开始,被预测为‘stuff’被分配唯一的instance label。其他pixel的instance label通过实例分割确定,其semantic label由预测语义标签的多数票决定。

实验结果:

全景分割(UPSNet & DeeperLab)_第11张图片

DeeperLab 作为新的全景分割算法,其在精度和速度之间取得了很好的平衡,论文中做了大量实验和tricks。

 

参考文献

  1. Panoptic Segmentation: paper
  2. UPSNet: paper
  3. DeeperLab: paper
  4. UPSNet参考文档
  5. UPSNet网络结构
  6. DeepLabV2: paper
  7. DeepLabV3+: paper
  8. DeepLabV3+参考文档
  9. DeeperLab参考文档

你可能感兴趣的:(图像分割)