全景分割论文阅读:Real-Time Panoptic Segmentation from Dense Detections(CVPR2020)

标题:基于密集检测的实时全景分割
作者:Arjun Bhargava Allan Raventos Vitor Guizilini Chao Fang Jerome Lynch Adrien Gaidon
机构:Toyota Research Institute; University of Michigan, Ann Arbor
论文地址:https://arxiv.org/abs/1912.01202
项目地址:https://github.com/TRI-ML/realtime_panoptic

摘要

全景分割是一个复杂的场景理解任务,因为既需要及时的实例分割和语义分割结果,又需要高分辨率。目前的顶尖的方式都不能实时运行,并且简化这些网络的结构从而提高效率的方式会降低精度。
在本文中,我们提出了一种新的单次全景分割网络,该网络利用密集检测和全局自我注意力机制实时运行,并且性能接近最新技术。 我们引入了一种新颖的无参数掩码构造方法(是否与UPSNet head类似??),该方法通过有效地重用来自对象检测和语义分割子任务的信息,大大降低了计算复杂性。 生成的网络具有简单的数据流,无需重新采样功能图,从而实现了显着的硬件加速。 我们在Cityscapes和COCO基准上进行的实验表明,相对于我们的网络而言,相对性能下降3%时,在1024×2048分辨率下,以30 FPS的速度工作,当前的最新技术可将推理速度提高多达440%
全景分割论文阅读:Real-Time Panoptic Segmentation from Dense Detections(CVPR2020)

介绍

  • 回顾全景分割任务定义及实例和语义分割两个子任务,提到之前的方式都只关注精度。
  • 为了解决实时性问题,本文在现存的架构中发现了两个可以改进的点:
    第一个发现:最准确的实例分割方法遵循“先检测再分割”的理念(现在不是了哈哈),但是在“检测”阶段会丢弃大量信息。 比如,Proposal bbox会经过NMS等滤波过程,最后筛选出最优的结果。这种选择策略会丢弃由网络生成的排名较低的提议,即使它们可能与label有很大的重叠。 相反,我们建议重用NMS丢弃的密集边界提案以直接恢复实例蒙版,即无需重新采样特征或对后处理进行聚类
    第二个发现:其次,我们观察到语义分割捕获了与检测相同的大部分信息(比如类别预测),尤其是在现有的全景分割框架中。因此,在语义分割和检测流之间共享计算可以显着降低总体复杂度。

主要贡献有三点:
(i)通过无参数全局自注意力机制重用丢弃的对象检测输出,引入了一种新的全景分割方法,该方法扩展了密集对象检测和语义分段。
(ii)我们提出了用于实时全景分割的单发框架,该框架可实现与图1所示的当前技术水平相当的性能,但推理速度最高可提高4倍;
(iii)我们自然地扩展了我们提出的方法,该方法可以在弱监督的情况下工作。

相关工作

  • Instance Segmentation
  • Panoptic Segmentation

Panoptic from Dense Detections

Problem Formulation

对于整体全景分割预测

P ( x , y ) = ( c , k ) , c ∈ 1 , . . . , N , k ∈ N P(x,y)=(c,k),c ∈{1, ...,N},k ∈ N P(x,y)=(c,k),c∈1,...,N,k∈N

其中 P ( x , y ) P(x,y) P(x,y)表示每个像素点 ( x , y ) (x,y) (x,y)的预测结果,c是语义类别ID,k是实例ID(所有stuff类为0),N是包含填充( N s t u f f N_{stuff} Nstuff​)和事物( N t h i n g s N_{things} Nthings​)类的类别总数。

对于语义分割分支

对每个像素都去预测它的语义类别概率 P ˆ s e m ( x , y , c ) = S ( x , y ) [ c ] , S ( x , y ) ∈ R N Pˆ_{sem}(x, y, c)= S(x, y)[c], S(x, y) ∈ R^N Pˆsem​(x,y,c)=S(x,y)[c],S(x,y)∈RN
(那么S就是每个像素点的N个通道值)

对于密集bbox预测分支
对每个像素都预测至少一个bbox:
B ( x , y ) = B , B = ( b , c ) , b = ( x 1 , x 2 , y 1 , y 2 ) ∈ R 4 , c ∈ 1 , . . . , N t h i n g s B(x, y)= B, B =(b,c), b =(x_1,x_2,y_1,y_2) ∈ R^4,c ∈{1, ...,N_{things}} B(x,y)=B,B=(b,c),b=(x1​,x2​,y1​,y2​)∈R4,c∈1,...,Nthings​
其中 ( x 1 , y 1 ) (x_1,y_1) (x1​,y1​)和 ( x 2 , y 2 ) (x_2,y_2) (x2​,y2​)是像素 ( x , y ) (x,y) (x,y)所属的边界框B的左上角和右下角的坐标; c是对应边界框的预测类别ID。
而对于语义分割和bbox检测分支(实例分支)来说,都可以通过全卷积网络直接学习和预测。

Parameter-Free Mask Construction

这个模块是用来生成Instance mask的!注意,上面bbox分支只是获得了给每个像素点分配的预测bbox和类别。

有了预测的S和B,文章介绍了一种利用全局自注意机制的无参数实例掩码生成算法

方法流程
我们首先NMS从B获得了一组简化的Bbox Proposal。

B q u e r y = B j , B j = ( b j , c j ) B_{query} = {Bj}, Bj =(bj,cj) Bquery​=Bj,Bj=(bj,cj)

然后对于每个query bbox B j {Bj} Bj,构建一个全局mask概率图:

M ( x , y , j ) = ˆ P l o c ( x , y , j ) ⋅ ˆ P s e m ( x , y , c j ) M(x, y, j)= ˆP_{loc}(x, y, j) · ˆP_{sem}(x, y, c_j) M(x,y,j)=ˆPloc​(x,y,j)⋅ˆPsem​(x,y,cj​)

这里呢, ˆ P l o c ( x , y , j ) ˆP_{loc}(x, y, j) ˆPloc​(x,y,j)表示像素在第j个bbox内的估计概率。其计算的公式:

P ˆ l o c ( x , y , j ) = I o U ( B ( x , y ) , B j ) Pˆloc(x, y, j)=IoU(B(x, y), B_j) Pˆloc(x,y,j)=IoU(B(x,y),Bj​)

B ( x , y ) B(x, y) B(x,y)是全部的Boxes集合, B j B_j Bj​上面提到的NMS处理后的少量精确bbox。最后设置一个门限值滤掉一些global mask probability map。

有了语义结果和生成的实例mask结果,为了得到最后的全景分割结果,文章采用了Panoptic Segmentation那篇论文的策略。

网络

方法流程图
全景分割论文阅读:Real-Time Panoptic Segmentation from Dense Detections(CVPR2020)
可以看到整个方法的流程还是很清楚的,输入一张图片,分为两个分支:Semantic Segmentation(S)和Dense Bounding Boxes(B)。然后对得到的密集Proposal Bboxes (the global set of boxes B)进行非极大值抑制(NMS)等滤波操作得到最后的Bounding Box精确框。然后将得到的精确框( B q u e r y B_{query} Bquery​)与 the global set of boxes B做IOU计算,引入Self-attention,得到初步的instance mask结果。然后再与semantic Segmentation结果做一个优化,得到最后的instance mask。经过最后简单merge步骤,得到Panoptic Segmentation。

merge步骤:Then, we combine those segments with semantic segmentation results by resolving any overlap between thing and stuff classes in favor of the thing class (i.e., a pixel with a thing and stuff label is assigned the thing label and its instance id).

网络结构图
全景分割论文阅读:Real-Time Panoptic Segmentation from Dense Detections(CVPR2020)
可以看到,文章将特征提取块后面的整个一部分称为Panoptic Head(有点怪,明明里面还是像之前的UPSNet一样,两个分支。只是这里复了semantic 分支的特征来对boundingbox做分类/或者说就是将一个类似于maskRCNN的网络里面的两个分支做了改动,复用了semantic分支的特征来为boundingbox分类。而且前面不是说的是:无参的Panoptic head吗。所以文章前面说的Panoptic head只是最后merge部分的算法操作。)

具体是怎么做的呢:对于每个FPN level输出 F i F_i Fi​,如图所示有两个分支,一个location和一个semantic。每个分支都有一个tower,每个tower包含4个卷积block(Conv+GroupNorm+Relu)。这里的tower对整个FPN是共享参数的。
然后location分支直接做中心点预测和bounding box offsets,从而来做bbox的回归。语义分支则输出语义分割预测结果,同时bounding box的类别预测也直接从语义分支获取。最后将每个FPN level F i F_i Fi​经过两个分支的结果上采样并Concatenate。得到最终的Global semantic输出和名为Global Levelness的输出(没看懂这个Levelness是用来干嘛的…前面好像也没提到),经过上文提到的instance mask生成和最后的merge算法,就得到了最后的结果。

损失函数

一个bounding box regression损失(融合了IOU损失)
一个中心点预测损失(使用BCE损失)
一个语义分割损失
一个boc分类损失
一个levelness损失(levelness:每个位置(x,y)的边界框所属的FPN级别(Nl =每个位置的FPN级别数量+1 logits,其中0保留给背景像素),levelness告诉我们在全局密集边界框预测B的全局集合中应包括哪个 ˆ b x y ( i ) ˆb^{(i)}_{xy} ˆbxy(i)​) ???没看懂用来干嘛的
一个instance mask construction损失
具体看论文了。

结果

文章在Cityscopes和COCO上做了实验。
全景分割论文阅读:Real-Time Panoptic Segmentation from Dense Detections(CVPR2020)
全景分割论文阅读:Real-Time Panoptic Segmentation from Dense Detections(CVPR2020)

从结果上看,不算好…速度也并没有写的那么好。和之前的方法比确实快了那么一点点。文章说的30FPS是经过TensorRT编译之后的结果,精度上还会比上面表格里的值下降一些。

总结

这篇论文这样看完以后,发现论文的结果其实并不是那么好。所谓的实时其实也是经过TensorRT等附加加速工具实现,本身网络结构设计的速度和其他的网络相差不大。并且在指标上并没有较大提升。而且不知道是自己没看懂还是文章没写清楚,特别是那个Levelness,文章说加入后提升了1个PQ点,但是不知道具体是怎么用的。并且文章的方法对于全景分割来说,没有太大创新点,融合策略都是直接使用的之前最早提出全景分割论文的那个方法,算是比较粗糙的融合了。
唯一的亮点感觉就是特征复用了,从而实现提速???。
感觉还有很多地方需要解释,文章的烧灼实验根本就没写,也不知道各个部分的贡献有多大。比如特征复用对速度的提速有多大,对精度的影响是怎样的?特别是对于从dense bbox生成instance mask那部分,不是应该对生成的mask质量做一个评价???根本不知道这样生成的mask质量怎么样啊。

上一篇:多元方程岭回归


下一篇:【好题】【IPSC2003】 Got Root? - 无向图删边游戏