当前位置: 代码迷 >> 综合 >> AdaptIS: Adaptive Instance Selection Network论文解读
  详细解决方案

AdaptIS: Adaptive Instance Selection Network论文解读

热度:77   发布时间:2023-10-20 17:58:16.0

AdaptIS是ICCV2019的论文,实际上并不出名,没有得到太多的关注。但这篇文章也是有很大亮点的。它可以用来做实例分割,同时也可以被扩展为全景分割框架。它的亮点是,只用一个目标身上的点,就可以分割出这个目标实例的分割掩码。
论文地址和官方开源地址:here

研究背景

实例分割目前有两个方向:

  • 先检测,后分割,代表有MasKrcnn, PANet。先检测目标区域,在单独为这个区域的目标做二值分割。
  • 学习embedding空间,在这个空间中,相同目标的像素的特征向量挨得很近,不同的目标的像素的特征向量挨得很远,然后应用聚类算法得到每个目标的分割掩码。

AdaptIS不同于上面的两种主流。
他直接优化目标的mask和网络预测结果。先检测再分割的实例分割,虽然也有mask loss,但我们可以认为这是间接去优化网络的mask预测和maskGT,毕竟要先检测。也不同于第二种主流,第二种主流依靠一些损失函数,拉开不同目标的距离,聚拢相同的目标的距离。

当然,说它是做实例分割也不完全准确,因为使用方法和主流方法不一样。主流的实例分割,仅送入一张图像,就得到每个目标的类别,位置和mask。但是AdaptIS不仅需要一张图像,还需要用户指定一个点,网络输出某个目标的mask预测,指定的点就落在这个目标身上。见下图
AdaptIS: Adaptive Instance Selection Network论文解读

不过作者提出了一个point proposal分支来预测候选点,在benchmark上测试时,也未必要先指定点。

Method

这篇论文的核心是AdaIN,我曾经在我的另一篇博客(最强换脸算法)中介绍的论文中,就用到了这个adain。实际上,在风格迁移个Style-GAN都用到了这个。Ada是Adaptive的意思。有了它,网络可以在同一张图像,不同的AdaIN向量作输入的情况下,输出不一样的预测。
AdaptIS: Adaptive Instance Selection Network论文解读
上图仅仅是全部框架的一部分,完成最简单的功能所需要的结构:输入图像和点(x,y),输出落于(x,y)位置的目标的分割图。
Backbone提取图像的特征不多说,对于不同BackBOne输出的特征图大小可能和原图不一样,统一双线性插值到原图大小,记作FFF

AdaIN

从F中取出点(x,y)位置的特征向量,记作P,通过由一系列全连接层组成的controller Network,得到Q。
这个AdaIN的思想极其简单,就是把Q的均值和方差赋予输入的特征图。

def adaptive_instance_normalization(content_feat, style_feat):assert (content_feat.size()[:2] == style_feat.size()[:2])size = content_feat.size()style_mean, style_std = calc_mean_std(style_feat)content_mean, content_std = calc_mean_std(content_feat)normalized_feat = (content_feat - content_mean.expand(size)) / content_std.expand(size)return normalized_feat * style_std.expand(size) + style_mean.expand(size)
  • 首先计算输入特征图A的均值和方差,不跨通道计算,所以均值和方差都是C维向量
  • 计算另一个特征图B的均值和方差,在AdaptIS中,B是这个Q向量,则省去这步。
  • 对特征图A归一化,转而用B的均值和方差。

Instance Selection Network

点(x,y)输入到Relative CoordConv中,得到两个通道的特征图,和Backbone输出的特征图拼在一起,送进INstance selection network。结合AdaIN,就能输出所选择的目标分割了。
这个Relative CoordConv不是什么特别的玩意,没有任何参数,输入就是点的xy坐标。这一步就是想把目标点的先验位置送进网络中。Relative CoordConv是由CoordConv改进得到的。Relative在这里的含义就是所有坐标以点(x,y)为原点,重新计算一下相对于(x,y)的坐标。这个坐标是要归一化到-1到1的。把小于x-R (y-R) 的值设置为-1,把大于x+R (y+R)的值设置为1。然后每个点的xy坐标组成一个通道为2的特征图。
所以这个过程没有任何参数,得到的结果应该是:离(x,y)越近的点,其向量应该很接近(0,0)。

训练过程

在一张图像中,随机向其中的一个目标随机选取K个点,组成一个batch。然后按照上述过程,得到预测mask,用GT mask训练,loss选择是 Focal loss的改进版,源码中叫做normalize_focal_loss。

作者认为,向同一个目标中选取k个点,可以推动网络对属于同一个目标的不同点,产生相似的mask。
AdaptIS: Adaptive Instance Selection Network论文解读

Class-agnostic instance segmentation

一个图像有很多目标。AdaptIS针对某一个点做实例分割,并不是全图范围上的。对于一组候选点,如何聚合这些分割mask到一张图上,作者采用了一种基于贪心算法的简单高效办法,这里不多介绍了。

扩充为全景分割

因为我不做全景分割,这部分我不介绍,但是提出的proposal branch还是要介绍一下的。
在公开数据集上测试,不可能先为每个目标先选出一些点,然后统一测试得到全图范围的分割mask。如何能让网络自动的选出目标身上的点呢,这就是proposal branch的作用了。
这个proposal branch的结构就是三层卷积层
AdaptIS: Adaptive Instance Selection Network论文解读

将AdaptIS的结构训练好之后,冻结参数,然后加上proposal branch。在图像中选择一个目标,在这个目标身上选几个点。经过冻结住的AdaptIS,得到mask,和GT做IOU,选出IOU前20%大的对应的点,这些点被认为是正样本,其他点是负样本,参与训练proposal branch的训练。loss就用简单的BCE。
这里我认为有两点改进

  • 可以设置双阈值,前20% 的是正样本,后50% 的是负样本。其他的是ignore。
  • 只针对某个目标取点,其他为取点的目标,都被认为是负样本了。可能会给网络带来歧义。用一个mask消除其他目标的梯度,仅保留被取点目标的梯度。就是用一个0-1mask乘到proposal branch的输出上。
  相关解决方案