论文笔记:Panoptic-DeepLab: A Simple, Strong, and Fast Baseline for Bottom-Up Panoptic Segmentation
核心思想:
- 一种高效的bottom-up全景分割方法,比two-stage更快
- 一个统一的backbone,分出两个结构非常相似的头部,实现两种任务:一个是one-stage的实例分割,一个是语义分割,最终通过后处理将二者集成起来
- one-stage实例分割实际上是class-agnostic(类别无关)的offset回归 + 实例中心heatmap
- 这个框架可以用任意的语义分割的代替,具有很强的灵活性
Intro
- 全景分割的目的:对每个像素点给予不同的label + instance ID(如果对于stuff,比如地面,背景,不需要instance ID)
- 总体来说目前有2种流行思路:Top-down & Bottom-up:
- Top-down方式基本上可以认为在Mask-RCNN的基础上接一个语义分割的头部,但是这种方式会造成语义分割和实例分割之间的冲突(因为一个像素点可能被实例分割成一类,但语义分割又变成了另一类),为了解决这个问题,就需要通过某种设定的方式来融合语义分割的score + 实例分割的score
- 由于top-down的方式会有一个很长的pipeline(RPN + RCNN/Mask),外加一个semantic,因此通常会比较慢
- bottom-up:先生成语义分割的信息,然后根据语义分割以及其他信息将语义分割的同类、同实例的像素点归并到一起
- bottom-up系列和top-down相比更快,性能更低
Panoptic-DeepLab整体结构
整体结构如Fig.1 所示。包含4方面:
- Backbone:基于ImageNet Pretrain,在最后一层加上空洞卷积
- ASPP模块: 用于提取multi-scale的context
- Decoder: 基于DeepLab V3修改了2部分,包括引入了1/8尺度的skip-connection,以及每次上采样之后加上了5x5的卷积。至此,语义分割和实例分割的分支结构都完全相同。这么做的一大优势在于各任务的梯度能够更均衡,这样的多任务网络能够更好地收敛
- 语义分割的头部是一个很常见的FCN
- 实例分割:
- 通过实例的质心 + 实例对应的每个像素点对于质心的偏移量来表征一个实例
- 对于质心的回归用L2,偏移量的回归用L1
全景分割(语义分割+实例分割后处理)
本文的后处理主要包括2部分,如Fig. 2所示:一个是将实例的质心和偏移量组合起来,形成若干实例(原图每个目标(thing)都会带有实例id);另一个是将语义分割的结果和实例分割结果高效地归并在一起
-
实例的质心后处理:对最终输出的Feature Map进行NMS(实际上是Max Pooling,保留Pool前后未改变的坐标,作为实例的中心):
- k = 7
- thres = 0.1
- top-k = 200
-
根绝offset的组合:根据offset map,需要找到每个offset对应的中心点。给定坐标点,它的Offset是,本文将对应的实例label定义为与所指向的坐标点最近的中心点:
-
将实例分割与语义分割的结果组合:
- 需要说明的是,这里通过offset + center得到的实例,是没有类别的
- 而类别的分数,是从语义分割结果中取的
- 对每个像素点的分数进行重新整合,即:
- 是实例分割中每个点heatmap的得分
- 是语义分割中每个点的置信度