SegFix: Model-Agnostic Boundary Refinement for Segmentation

paper:https://arxiv.org/abs/2007.04269

code:https://github.com/openseg-group/openseg.pytorch

本文提出了一种模型无关的后处理方案,即用内部像素的预测代替原来不可靠的边界像素预测,以提高由任何现有分割模型生成的分割结果的边界质量。该方法仅对输入图像进行两步处理:(i)定位边界像素;(ii)识别每个边界像素对应的内部像素(通过学习从边界像素到内部像素的方向来建立对应关系)。

该方法不需要先验信息的分割模型,达到接近实时的速度。实验验证,SegFix减少了cityspace数据集中各种先进模型(ADE20K和GTA5)所生成的分割结果的边界误差。

动机:现有的分割模型大多不能很好地处理边界上的误差预测。作者对比了三个模型的直方图误差,如图1(错误像素数到物体边缘的距离的统计)可以看到,距离边界越远的像素越有可能被很好地分类,并且有很多误差分布在沿边界约为5像素的范围内。

图1

提出了一种新方法来学习边界像素和内部像素的对应关系,即提出了一种新的模型无关的后处理方法来减少边缘误差,即用对应的内部像素的标签代替边缘像素的标签。使用边界映射和方向映射隐式编码边界像素的相对距离信息,偏移映射可以直接应用于各种方法,而不需要进行任何再训练。

主要包括2步:第一步是定位边界像素,第二步是找出每一个边界像素所关联的内部像素。我们采用一个向量去表示每个边界像素跟其对应内部像素的对应关系,这个向量从边界像素出发,指向一个内部像素。

1)首先要先确定物体边界:用卷积来预测一个binary mask来表示边界。1表示边界,0表示other
2)学习一个从边界pixel到内(外)部pixel的方向
3)让边界pixel沿着这个方向移动特定的距离即可确定该边界pixel。

训练阶段,我们首先将图像输入到主干网络中来预测特征图,然后应用边界分支预测二值边界图和应用方向分支预测方向图,我们将边界损失和方向损失分别应用到预测的边界图和方向图上。在测试阶段,我们首先将模型执行到图像上,以生成偏移量映射,然后根据偏移量图对现有方法的分割结果进行细化。

 边缘预测分支

边界分支实现为1×1conv→BN→ReLU,输出通道256个。然后我们应用线性分类器和上采样预测,生成最终的边界图B;训练时由真值boundary map监督约束,使用二值交叉熵损失作为边界损失,学习良好的边缘检测。

 方向预测分支

边界分支实现为1×1conv→BN→ReLU,输出通道256个。然后我们应用线性分类器和上采样预测,生成最终的方向图D;预测所有位置的像素与之最近的同类像素的方向,这里的方向不是连续的,而是对[0,2π)量化成m个值后的结果;

训练时使用真值direction map监督该分支生成的离散方向,使用多分类交叉熵损失(standard category-wise cross-entropy loss)来作为方向预测损失。

offset branch

用来转换预测得到的D(已经乘过了B )到坐标偏移图offset_map:不同的方向会被映射到不同的坐标偏移值。重新对现有方法在边界区域的预测结果进行调整。

最终通过坐标映射(the grid-sample scheme [Spatial transformer networks]),重新对现有方法在边界区域的预测结果进行调整。基于偏移映射对粗略标记图进行细化。用不同的箭头表示不同的偏移向量。在粗略标签图中红色标记错误位置,在精确标签图中箭头方向标记相应的修正位置。

  真值生成和分析

先从ground-truth分割图生成distance map,再在此基础上生成boundary map和direction map,过程如图3(b)。

(1)    distance map

对于每个像素而言,distance map上都记录了它相距属于其他类别像素的最小欧式距离。这实际上也表示了像素到边界的距离。

首先将真值mask分解成K个binary map (0 or 1),每个map关联着不同的类别(语义类别、实例类别),K表示图像中包含的类别数量。之后在每个binary map上独立计算distance map,这里使用了scipy的函数scipy.ndimage.morphology.distance_transform_edt() 。这个函数用于距离转换,计算图像中非零点到最近背景点(即0)的距离。它被用在每个类别独立的binary mask上,正好计算的就是相距于其他类别(每个binary mask上的0表示的就是“其他类别”)的最小欧氏距离。

计算完各个mask后,再计算一个融合的distance map来实现对于所有的K个distance map的集成。

(2)    boundary map

使用融合后的distance map,对其使用一个预设的阈值进行划分,小于阈值的作为边界区域的像素,大于阈值的认为在特定目标区域内部。因为距离值越小,说明越接近边界。

(3)    direction map

这里在未合并的K层distance map上,分别使用9×9的Sobel滤波器。基于Sobel滤波器的方向是在[0°,360°)内,并且每个像素位置的方向都指向邻域内部距离目标边界最远的像素。整个方向范围被均匀划分成m=8类,然后每个像素的方向被赋值成对应的方向类别

  实验结果

backboneHRNet、DeepLab V3等。

数据集:Cityscapes and GTA5

参数设置:初始学习率为0.04,权值衰减为0.0005,裁剪大小为512×512,批量大小为16,并训练80K次迭代。0.9的“poly”学习率策略。

数据增强:随机水平翻转、随机裁剪和随机亮度抖动。

评价指标:mask F-score and top-1 direction accuracy 对预测的二值边界图进行mask F-score,对预测的方向图进行方向精度评定。

定量评价:用mIoU分类度量区域分割的整体性能边界;F-score用于测量距离上有小松弛的预测掩模的边界质量。

语义分割任务
实例分割任务

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注