实例分割之SOLO: Segmenting Objects by Locations

SOLO: Segmenting Objects by Locations

code

 

实例分割之SOLO: Segmenting Objects by Locations_第1张图片

实例分割主要有两大类方法:

  • 一种是“detect-then-segment”,即先检测bbox,再分割目标,如Mask R-CNN。这类方法比较依赖于目标框的检测精度,当目标不适合用矩形框标记时,这类方法将不再适用;
  • 另一种是为每个像素学习一个嵌入向量,再通过后处理(如聚类算法)得到实例。

与Mask R-CNN这类实例分割相比,SOLO不必检测目标框,可直接得到实例的像素分割结果。若不能简单地用矩形框标记目标,那么采用Mask R-CNN这类先检测矩形框,再分割目标的方法,显然是不合适的。此时,SOLO不失为一种可尝试的方案。

SOLO思想:

  • 将图片分为S*S个格子,每个格子负责预测落在该格子中的目标的实例掩码(Mask Branch)和类别(Category Branch)。
  • 其中,每个实例的掩码为基于全图大小的语义分割图,采用二分类方式,分为前景和背景。

实例分割之SOLO: Segmenting Objects by Locations_第2张图片

实例分割之SOLO: Segmenting Objects by Locations_第3张图片

Loss Function

  • 对于类别分支Category Branch,采用Focal Loss。
  • 对于实例掩码分支Mask Branch,采用dice loss。

但是,SOLO在预测实例掩码时,有S*S个分割图,而其中有很多是冗余的(并不是每个格子都有目标,那么必然有的分割图是无用的,多余的)。为节省资源,作者将分割图分解为X方向的分割图和Y方向的分割图,叫Decoupled head。如下图所示。

实例分割之SOLO: Segmenting Objects by Locations_第4张图片

对于最终的实例分割mask,为Y-branch与X-branch掩码对应位置相乘后的结果。假如格子坐标为(i,j),那么,最终的Mask为Y-branch上第i个掩码与X-branch上第j个掩码对应位置相乘的结果。

Decoupled head在节省计算资源的同时,精度并未降低。

参考:

https://blog.csdn.net/qq_36530992/article/details/103857123

你可能感兴趣的:(实例分割)