本文作者:Uno Whoiam | 公众号:林木蔚然读书会 https://zhuanlan.zhihu.com/p/246105364 本文已由原作者授权,不得擅自二次转载
[ICCV2019] IRNet:Weakly Supervised Learning of Instance Segmentation with Inter-pixel Relations
论文地址:
https://openaccess.thecvf.com/content_CVPR_2019/papers/Ahn_Weakly_Supervised_Learning_of_Instance_Segmentation_With_Inter-Pixel_Relations_CVPR_2019_paper.pdf
本篇论文相对而言不是那么容易理解,初学者需要仔细阅读并结合许多相关的论文才能大致明白思路,在利用 image-level 弱监督信号进行实例分割训练这条道路上,本论文的确在综合利用前人成果的基础上做出了一定程度的创新,考虑到全网没有搜到较为完整的解读,在此将个人的理解进行整理,供读者参考。
实例分割任务作为一个需要检测物体的位置同时对其进行分割,是一项复杂且重要的计算机视觉任务。主流的基于卷积神经网络的方法需要大量的像素级标注数据进行训练才能得到良好的结果,因此具有较高的应用成本。该论文致力于降低其数据的标记成本。
为了降低数据标注成本,该论文不采用像素级标注数据,而是使用 image-level 的标签对模型进行训练。(作为代价,方法和训练相对而言显得比较复杂)
该论文首先利用相对廉价的 image-level 标签训练好 IRNet,然后使用 IRNet 在原数据上生成 像素级实例标签,最后利用这些生成的像素级实例标签训练Mask R-CNN得到最终模型。接下来将简单介绍:
1. IRNet 是如何生成像素级实例标签
2. 如何训练 IRNet
3.1 IRNet 是如何生成像素级标签?
IRNet总共有三个分支,首先第一个分支,利用训练好的分类网络(使用 image-level 标签就可以训练),去掉其全局池化层后,就可以当做一个粗糙的语义分割网络使用,其输出的CAMs(Class Attention Maps,or Class Activation Maps)能大致定位每一类物体的位置。
x 为位置,
为最后分类层的权重。
参考论文:Learning Deep Features for Discriminative Localization Learning Deep Features for Discriminative Localization
第二个分支 displacement field 主要对物体的中心进行预测,表示的是每个点到距离中心点向量,颜色代表向量的角度,饱和度代表向量的长度。为了方便理解,我对此图进行了一些注解,x 表示点所在的位置,
表示当点与中心的预测偏移。考虑到预测得到的偏移不一定准确,可以通过迭代的方式对每个点的预测进行优化:
该公式的含义如下图所示:
也就是说,每个点通过多次迭代,会一点点靠近中心点,而中心点具有较小的偏移值(图上偏白),那么反过来,我们就可以通过先找到一团具有较小偏移值的点,当做中心位置,然后找到通过加上
可以到达这部分中心位置的点,这样就可以得到一个无类别instance 的所有像素。
将无类别的 instance map 与第一个分支的CAM结合,就可以得到每个instance map的类别,即 instance-wise CAMs,此时已经有了 instance segmentation 的结果。
第三个分支是物体边界预测,同时也表示像素之间的相似关系,即物体边界同侧具有相似性,物体边界异侧不具有相似性。
将物体边界和 instance-wise CAMs 结合即可将边界外的部分去除,得到更准确的 instance segmentation 结果。在具体的方法上,使用的 random-walk 算法,可参考:
[CVPR2017] Learning random-walk label propagation for weakly-supervised semantic segmentation. [CVPR2017] Convolutional random walk networks for semantic image segmentation.
3.2 如何训练 IRNet
用于生成 CAM 的分类网络如何训练就不必赘述了,主要描述一下如何训练 displacement field 以及 class boundary maps。
该论文的方法只使用 image-level 的标签,因此根本无法得到物体的位置和边界,这样要想用物体中心的位置和边界的位置作为监督信号便无从谈起,而作者巧妙地利用了“步步为营”和“隔山打牛”的策略绕开了这两个问题。
首先,CAM 可以提供物体大致的位置,但还太模糊,没关系,我们先将每个像素赋予其具有最高置信度对应的类别,如果对于最高具置信度的值较低,则标记位置 为 ignore。
然后“步步为营”,只考虑局部,对于每个像素都有一个半径为
的邻域,一对像素如果在彼此邻域中,记做像素对
,如果二者具有相同的类别,记做正像素对
,如果类别不同记做负像素对
,对于标记 ignore 的像素则不予考虑其像素对的关系。
由于由像素对距离较近,可以假定,前景正像素对
应该在同一个物体中,具有相同的预测中心,x 表示像素坐标,D 表示中心偏移向量:
那么定义像素对的坐标差与其偏移向量差相等:
令:
这样就有了优化目标,即 loss 为最小化二者 L1 差别:
并且根据质心的公式,同一个instance的所有像素中心偏移相加应该为0:
虽然没办法知道一个 instance 对应的所有像素,从而优化这个目标,但是可以对背景的正像素对进行优化:
如上所述,通过利用像素对之间的关系,达到了在不知物体中心的情况下训练模型预测中心偏移 displacement field 的目的。接下来将描述作者如何通过“隔山打牛”训练 class boundary maps 分支。
由于不知道物体的边界,直接训练是不可能的,怎么办呢?作者引入像素对关联度:
其中 B 表示边界,
表示像素对之间的一条线所有像素。所以这是什么意思呢?很简单,即,虽然我们不知道边界在哪,边界两边的像素具有较低的关联度才对,如果像素对之间有边界存在,即 :
显然两个像素关联度低,反之,则关联度高。
那么,关联度高的像素对,即正像素对之间应当没有边界,而负像素对之间则应当有边界,如此就得到了优化目标:
这便是一招隔山打牛。
了解完这些 loss,训练也就简单了,优化各 loss 之和即可:
最后提一提 IRNet 的结构:
从论文贴出来的结果来看,的确取得了相当大的性能突破,在使用image-level作为监督信号的情况下,得到了甚至比 boundin box 作为监督信号更好的结果。
该论文最关键的地方在于对 CAM 信息的充分挖掘,利用邻域像素对之间的关系作为约束,使用迂回战术,从而得到物体边界以及物体中心预测的关键信息,使得仅利用 image-level 标签来获取 instance segmentation 标签成为可能。