论文笔记:Panoptic-DeepLab: A Simple, Strong, and Fast Baseline for Bottom-Up Panoptic Segmentation

核心思想:

  1. 一种高效的bottom-up全景分割方法,比two-stage更快
  2. 一个统一的backbone,分出两个结构非常相似的头部,实现两种任务:一个是one-stage的实例分割,一个是语义分割,最终通过后处理将二者集成起来
  3. one-stage实例分割实际上是class-agnostic(类别无关)的offset回归 + 实例中心heatmap
  4. 这个框架可以用任意的语义分割的代替,具有很强的灵活性

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方面:

  1. Backbone:基于ImageNet Pretrain,在最后一层加上空洞卷积
  2. ASPP模块: 用于提取multi-scale的context
  3. Decoder: 基于DeepLab V3修改了2部分,包括引入了1/8尺度的skip-connection,以及每次上采样之后加上了5x5的卷积。至此,语义分割和实例分割的分支结构都完全相同。这么做的一大优势在于各任务的梯度能够更均衡,这样的多任务网络能够更好地收敛
  4. 语义分割的头部是一个很常见的FCN
  5. 实例分割:
    1. 通过实例的质心 + 实例对应的每个像素点对于质心的偏移量来表征一个实例
    2. 对于质心的回归用L2,偏移量的回归用L1
      论文笔记:Panoptic-DeepLab: A Simple, Strong, and Fast Baseline for Bottom-Up Panoptic Segmentation

全景分割(语义分割+实例分割后处理)

本文的后处理主要包括2部分,如Fig. 2所示:一个是将实例的质心和偏移量组合起来,形成若干实例(原图每个目标(thing)都会带有实例id);另一个是将语义分割的结果和实例分割结果高效地归并在一起

  1. 实例的质心后处理:对最终输出的Feature Map进行NMS(实际上是Max Pooling,保留Pool前后未改变的坐标,作为实例的中心):

    1. k = 7
    2. thres = 0.1
    3. top-k = 200
  2. 根绝offset的组合:根据offset map,需要找到每个offset对应的中心点。给定坐标点(i,j)(i,j),它的Offset是O(i,j)O(i,j),本文将(i,j)(i,j)对应的实例label定义为O(i,j)O(i,j)(i,j)(i,j)所指向的坐标点最近的中心点:
    k^i,j=argminθCk((i,j)+O(i,j))2\hat{k}_{i,j} = \mathop{\arg\min}_{\theta} || C_k - ((i,j) + O(i,j))||^2

  3. 将实例分割与语义分割的结果组合:

    1. 需要说明的是,这里通过offset + center得到的实例,是没有类别的
    2. 而类别的分数,是从语义分割结果中取的
    3. 对每个像素点的分数进行重新整合,即:
      Score(Objectness)Score(Class)Score(Objectness) \cdot Score(Class)
  • Score(Objectness)Score(Objectness)是实例分割中每个点heatmap的得分
  • Score(Class)Score(Class)是语义分割中每个点的置信度