《IOG:Interactive Object Segmentation with Inside-Outside Guidance》论文笔记

参考代码:Inside-Outside-Guidance
paper数据集:Pixel-ImageNet

1. 概述

导读:这篇文章提出了一种新的交互式分割算法,其通过inside-outside guidance(IOG)引导分割网络生成更加精细的分割结果(也就是目标bounding box的左上和右下两个顶点和目标中心的点)。inside guidance是指目标区域的中心位置的点,用以标明前景信息,而outside guidance是目标区域之外的点,用以标明背景信息。这样进行交互引导的好处体现为:
1)outside的两个点可以排除其它目标和背景的影响;
2)inside的点可以排除bounding box内部无关区域的干扰;
3)交互的方式简单明确,从而不像之前的一篇文章DEXTR在一些极端情况下交互困难;
4)文章的方式还支持更多点的引导,从而指导生成更加精细的分割结果;
文章的方法不仅分割准确,而且在不经过域适应的情况下展现出了较好的泛化能力。对于那些只有bounding box标注的数据集文章提出了一种两阶段的解决办法用以生成高质量的分割mask,这里可以参考文章的“Extension to datasets with box annotations only”章节。

之前的方法DEXTR使用上下左右的四个目标边界进行引导,也取得了很好的分割结果,但是在一些极端的case下便出现了问题以及一些不方便的地方:

  • 1)寻找目标准确的上下左右4个边界是需要耗费较多心力的;
  • 2)在下面的(a)图中可以看到这样的引导方式存在目标细长带来标注困难和不同目标重叠带来定义模糊的问题;
    《IOG:Interactive Object Segmentation with Inside-Outside Guidance》论文笔记_第1张图片
    而文章的方法是通过2个outside和1个inside点组合而成,其中2个outside点会通过推理得到另外的两个点,从而组成了包含目标的5个点,可以排除上述目标描述方式的缺陷,见上图(b)所示。

在进行运算的时候文章的方法会对初始给定的bounding box进行几个像素的扩展,在根据得到的4个背景点信息和1个前景点信息进行目标分割,见下图(c)所示:
《IOG:Interactive Object Segmentation with Inside-Outside Guidance》论文笔记_第2张图片
使用文章给出的交互方式可以极大提升交互的效率,并且还可以通过后期加点的方式对不准确的信息进行修正,在使用3个点的情况下文章在PASCAL数据集下为93.2%的mIoU,而使用4个的时候达到了94.4%。

2. 方法设计

2.1 inside-outside引导


inside guidance:
文章的inside guidance用于标明需要分割的目标,见图2的c图所示。为了模拟人工标注的时候对目标中心点的选取,文章提出了一个策略:选择那些原理目标边界最远的点。使用 O \mathcal{O} O代表目标中的像素点,则可以计算一个距离图 D D D,则像素点 i i i其在距离图上的描述为:
D i = min ⁡ ∀ j ∈ O d i s t ( i , j ) D_i=\min_{\forall j\in\mathcal{O}}dist(i,j) Di=jOmindist(i,j)
其中使用到的距离是欧式距离。这里的 j j j个人认为是边界上的点,具体的还需要看了代码之后才明了。则对应可能的中心点采样就描述为了:
k = arg max ⁡ ∀ i ∈ O D i k=\argmax_{\forall i\in\mathcal{O}}D_i k=iOargmaxDi
其实在文章的代码里面就是写的目标内部到目标mask边界最远的点(看作是,因为边界之外就是背景了),那么不就是中心么?代码中使用的是下面的这个函数:

scipy.ndimage.distance_transform_edt()

outside guidance:
文章对于外部引导的打点事较为简单的,并不需要很贴合的bounding box,只需要相对贴合就行了,见图2的a,b图所示。

标注的点信息在算法中的表达:
对于标注点的表达文章使用的2D高斯分布的heatmap形式,其对应的生成代码参考:

def make_gaussian(size, sigma=10, center=None, d_type=np.float64):

    """ Make a square gaussian kernel.
    size: is the dimensions of the output gaussian
    sigma: is full-width-half-maximum, which
    can be thought of as an effective radius.
    """
    x = np.arange(0, size[1], 1, float)
    y = np.arange(0, size[0], 1, float)
    y = y[:, np.newaxis]

    if center is None:
        x0 = y0 = size[0] // 2
    else:
        x0 = center[0]
        y0 = center[1]

    return np.exp(-4 * np.log(2) * ((x - x0) ** 2 + (y - y0) ** 2) / sigma ** 2).astype(d_type)

生成的heatmap按照标注是否为前景氛围2个channel的信息,因而输入网络的是5个channel的信息。在进行标注边界确定的时候还会对背景区域进行relax,参考图2的d图。文章使用上面的交互引导方式具有以下两点考量:

  • 1)可以灵活设置前景背景的交互点数量,从而在分割精度与效率上实现很好平衡;
  • 2)通过点的位置和裁切操作可以定位背景区域和目标大致的尺寸,进而编码更多的先验信息;

2.2 文章的网络结构

文章的算法是在ResNet-50的基础上添加PSP模块组成的基础分割架构,但是在基础的分割架构上文章发现其在边缘部分的效果很差,见下图所示:
《IOG:Interactive Object Segmentation with Inside-Outside Guidance》论文笔记_第3张图片
对此结合多阶段的优化策略,文章将分割网络的解码器部分划分为CoarseNet和FineNet部分,分别用于粗分割和进一步优化,其结构见下图所示:
《IOG:Interactive Object Segmentation with Inside-Outside Guidance》论文笔记_第4张图片
对于各部分其贡献度见下表所示:
《IOG:Interactive Object Segmentation with Inside-Outside Guidance》论文笔记_第5张图片

2.3 更多交互点引入

为了提升分割的精度和性能需要更多的交互用以补充先验知识,对于该补充的先验知识文章是通过添加一个Refinement部分实现的(在进行PSP模块之前),参考图4的c部分。这样不仅可以不用之前的编码网络(由于额外点的不确定性),而且还可以加快网络的运行速度。

对于额外点的引入文章中提到是根据每次分割之后错误区域进行指引,从而下次infer的时候确定额外点的位置,使用这种迭代优化的策略给整体的性能带来了一定的提升(但是目前2021.03.24给出的代码里面是没有包含对应的部分的),见下图所示:
《IOG:Interactive Object Segmentation with Inside-Outside Guidance》论文笔记_第6张图片

3. 实验结果

性能比较
《IOG:Interactive Object Segmentation with Inside-Outside Guidance》论文笔记_第7张图片

你可能感兴趣的:(图像&视频分割,交互式分割)