原文首发微信公众号【自动驾驶之心】:一个专注自动驾驶与AI的社区(https://mp.weixin.qq.com/s/NK-0tfm_5KxmOfFHpK5mBA)
摘要
全监督学习需要大量的标签数据,对分割任务而言,人工标注十分昂贵,因此基于框的弱监督实例分割获得了广泛的关注。本文提出一种新的single-shot框监督实例分割方法,将水平集(level-set)与CNN巧妙地结合起来。具体来说,模型以端到端的方式通过基于连续Chan-Vese能量的函数迭代地学习一系列水平集。本文基于SOLOv2上实现弱监督实例分割。
方法
算法的整体框架如上图所示。具体来说,基于SOLOv2[48]按位置动态分割目标并预测全图大小的实例Mask,为了促进框监督实例分割,本文将每个实例Mask视为其对应目标的水平集函数 φ。此外,本文利用输入图像和深层特征作为输入来进化水平集,其中使用框投影函数来鼓励网络在每一步自动估计初始水平集 φ0。每个实例的水平集都在框内迭代优化。
图像分割中的水平集模型
首先简单回顾下水平集方法[7, 36, 45],其将图像分割表述为一个连续的能量最小化问题, 在Mumford-Shah水平集模型 [36],给定图像的分割是通过找到参数轮廓来获得的,该轮廓将图像平面划分为N个不相交区域,Mumford-Shah能量泛函如下所示:
Chan和Vese[7]后来将 Mumford-Shah泛函简化为变分水平集,目前已经比较成熟[31, 34, 46, 52]。具体可以如下推导:
框监督实例分割
本文提出的方法利用基于Chan-Vese 能量模型[7]的水平集演化,仅使用目标框来实现高质量的实例分割。目标框内的水平集演化:给定输入图像,目标是通过在边界框内隐式演化水平集来预测目标的边界。SOLOv2将图像划分为S×S个网格,每个网格最多预测一个H×W大小的实例。本文将目标框内的每个正样本视为水平集 φ(x, y),其对应的输入图像 I(x, y) 的像素空间称为 Ω,即 Ω ∈ B。C 是分割边界,其将目标框区域划分为两个不相交的区域,即前景目标和背景。
为了获得每个实例的准确边界,本文通过最小化以下能量函数来学习一系列水平集 φ(x, y):
与传统的Heaviside函数[7] 不同,sigmoid函数更加平滑,可以更好地表达预测实例的特征,提高训练过程中水平集演化的收敛性。c1、c2定义如下:
能量函数F在训练期间可以使用梯度反向传播进行:
上述项的最小化可以看作是沿着能量函数下降的隐式曲线演化。实例的最优边界 C 是通过迭代拟合 φi 来最小化能量 F 得到的,如下所示:
输入数据项:输入图像代表了基本的低级特征,包括形状、颜色、图像强度等。然而,这些低级特征通常会随着光照变化、不同的材料和运动模糊而变化,使得水平集演化的鲁棒性降低。除了归一化图像之外,本文还考虑嵌入身侧特征以获取更稳健的结果。为此,本文使用SOLOv2中FPN输出的所有特征进一步提取高阶特征。此外,提取后的高阶特征经过tree filter[27, 41]进行增强,其利用最小生成树来建模长期依赖关系并保留目标结构。水平集初始化:传统水平集方法对初始化很敏感。本文使用框投影函数[44]以鼓励模型在每一步自动生成初始水平集 φ0 的粗略估计。即将GT投影至x轴和y轴并计算投影差异。
训练和推理
损失函数:损失函数同SOLOv2一致,包含两项:分类损失和实例损失:
其中分类损失为Focal Loss,实例损失如下:
推理:水平集的进化只用于训练阶段,推理时不需要,因此与原始SOLOv2相同。
实验结果
COCO测试集结果如下:
Pascal VOC验证集结果如下:
可视化: