【实例分割】SOLO:Segmenting Objects by Locations

【实例分割】SOLO:Segmenting Objects by Locations

实例分割主要有两大类别,而这两大类方法都不够直接。

  1. 自上而下即detect-then-segment:太依赖于目标检测的准确率
  2. 自下而上:为每个像素学习一个嵌入向量(有点像Cornernet),该方法依赖于每个像素的嵌入学习和分组后处理。

出发点:一张图片中的实例基本的不同是什么?要么具有不同的中心点,要么具有不同的大小。所以是否可以直接利用这两个信息去区分实例?
实现:引入”实例类别“,也就是量化的中心点位置和物体大小,根据实例的位置和大小为实例中的每个像素分配类别。

  • 中心点位置
    一张图片可以被分为S×SS\times S个网格,所以定义S2S^2中心点位置类别。将这些类别加在通道上,对应的通道负责对应网格的实例掩码。
  • 大小
    利用FPN来预测多种尺度大小的实例。

相关工作

Top-down

  1. FCIS:将RPN生成的ROIs和位置敏感分数图结合在一起
  2. Mask R-CNN:给Faster R-CNN添加了分支
  3. PANet:在Mask R-CNN的基础上增强了特征表示来提高精度
  4. Mask Scoring R-CNN:添加了mask-IoU分支去估计mask的质量并且打分去提高精度
  5. TensorMask:在给定的滑动窗口里分割。

缺点:太依赖于anchor

Bottom-up

  1. SGN将实例分割问题分解为一系列子分组问题。
  2. SSAP学习像素对的亲和力金字塔,即两个像素属于同一实例的概率,并通过级联图分区顺序生成实例。

缺点:精度不高,需要分组后处理

Direct
没有直接利用mask annotations进行训练,也没有直接预测实例mask和类别。

  1. AdaptIS
  2. PolarMask

模型结构

【实例分割】SOLO:Segmenting Objects by Locations
如何解决卷积带来的平移不变性?
创建一个与输入相同的空间大小的张量,其中包含像素坐标,这些坐标被标准化至[-1,1]。若原始输入大小为H×W×DH\times W\times D,则新输入张量的大小为H×W×(D+2)H\times W\times (D+2),其中最后两个通道为xyxy像素坐标,从而提供全局位置信息。
【实例分割】SOLO:Segmenting Objects by Locations
对于类别预测分支,当网格(i,j)(i,j)center region有大于阈值的重叠的则认为是正例。center region定义为(cx,cy,ϵw,ϵh)(c_x,c_y,\epsilon w,\epsilon h)的区域,中心点并不是bbox的中心,而是质心,其中ϵ=0.2\epsilon=0.2。这来源于center sampling,在Foveabox和FCOS中都有所体现。对于每个正例都有一个二值的mask,也就是在上分支中标记出正例所在的grid后,找到其所对应下分支S2S^2的通道中的一个通道进行标注。

【实例分割】SOLO:Segmenting Objects by Locations

实验

【实例分割】SOLO:Segmenting Objects by Locations