最近在看Class Agnostic的物体检测/分割,今天分享三篇文章
1、进入主题之前,先介绍这方面主要用到的数据集
Class Agnostic是一个通用的方法,可以用在很多任务上面。
Class Agnostic需要的数据集大概是图片信息+标签(bounding box, mask之类),看到的主要在 PASCAL VOC 2012 和COCO数据集上做。
一般网络的设计都是两个分支的,一个是support branck,提供图片和label,另外一个是query brach,提供图片信息,label由网络预测。
2、相关工作
2.1、Few-shot learning
主要用于学习transferable knowledge,使网络可以泛化到之带有少量标签的新的类别物体。比如识别带有少量标签的物体。
用一个网络学习特征和一个网络学习相似性
few-shot learning的方法主要可以总结为两种
- 1 metric learning approach 这个方法主要学习一个关于query images和sample images的projection functions。
- 2 meta-learning
2.2、 Few-show semantic segmentation
泛化segmentation能力。一般是两个分支。
2.3 Co-Segmentation
这个工作的目标是在像素级别分割图片中相同的实例,一般一次分割出一类。比如几张图片里都有人,狗,猫,最后出来是某一类的分割结果。
2.4 Co-Detection
检测出相同的实例,需要类别信息。
2.5 Co-Generate Object Proposal
这个是想通过一系列的object candidates中的信息来提高proposals的质量
2.6 Co-Localization
定位出多张图片中同个物体的位置
3、文章
3.1首先是2019年cvpr文章 CANet: Class-Agnostic Segmentation Networks with Iterative Refinement and Attentive Few-Shot Learning
这篇文章作者开源了大部分代码。
总结
这篇文章实现了 class agnostic semantic segmentation,效果不错不过也是到百分之50多,对于每张图片,只能预测出一个前景目标的mask.
3.1.1、文章的目标:
假设有一个训练的数据集,希望在另一个带有少量标签的数据集上能做出很好的预测。这里的预测指分割。
任务:
1)有一个support training set
S
=
{
(
x
s
i
,
y
s
i
(
c
)
)
}
i
=
1
k
S = \{(x^i_s, y^i_s(c))\}^k_{i=1}
S={(xsi,ysi(c))}i=1k,
x
s
i
x^i_s
xsi 是RGB图片, $y^i_s
是
m
a
s
k
.
2
)
一
个
q
u
e
r
y
(
t
e
s
t
)
s
e
t
,
是mask.\\ 2)一个query(test) set,
是mask.2)一个query(test)set,Q = {x_q,y_q©}
,
,
,y_q©$是gt
那么输入就是训练的support图片,mask,和query图片。目标就是得到query的mask了。
同一张图可能会有多个类别,所以query不同的类别的时候,gt对应的mask是不同。
3.1.2、方案
文章的网络结果如下。
整个网络包括dense comparison module(DCM)和iterative optimization module(IOM)模块。图片是1-shot网络结构,k-shot网络结构和1-shot相似,多了attention mechanism模块。
3.1.2.1 Dense Comparison Module
这部分包括两个分支。一个是support set输入,一个是query set输入。这个模块分为了前面的特征提取器和后面的比较模块。
特征提取器用的是 ResNet-50, 文章中作者认为太过浅层的信息是比较low-level cues,比如边缘、颜色。而太过深层的信息是object-level方面比如物体类别。但是又希望网络能够分割出新的类别。不需要很强的物体类别信息,选择了ResNet第二层和第三层的信息。并且在训练的过程中这部分参数固定的。
Dense Comparisin这里图片的前景可能有很多物体。但是其实只需要目标物体。作者先利用mask,在前景上做global average pooling, 得到特征向量后,再和query image的图片特征concatenate一起,然后再提特征。
mask在这里可以提取出目标的特征。如果网络能够学到目标的特征,那么也许在测试中就不需要这个mask了?或者换另一种方式学习,这样就可以抛掉这个mask了
3.1.2.2 Iterative Optimization Module
这部分主要是把第一次预测mask作为信息,用来提高预测准确度。从代码看,具体实现起来,就是把测试的时候得到的mask,作为输入,迭代几次。
3.1.2.3 Attention Mechanism for k-shot Segmentation
这部分是为了fusion k-shot设置下的信息。这部分包含两个模块,卷积+max pooling,卷积+average pooling,并且给attention 分支加了权重。
3.2 Segmenting Unknown 3D Objects from Real Depth Images using Mask R-CNN Trained on Synthetic Data
总结
感觉这篇文章就是把maskrcnn用在了depth上,大数据的训练实现了class agnostic。本文的一个亮点是提供了一个数据集,该数据集既有合成的,又有对应真实数据集。
既然简单地分成了前景和背景,那么其他的检测?分割的方法也可以这么做。
而且只是要简单地分割成前景背景,太多的rgb信息反而容易形成混淆。深度图训练效果会比较好。
3.2.1 WISDOM-Sim和WISDOM-Real
3.2.2 Synthetic Depth MASK R-CNN(SD Mask-rcnn)
- 1 将深度图看成灰度图,改成三通道。
- 2 将类分成两类,前景和背景
- 3 depth输入改成512*512
- 4 网络主框架从ResNet 101改成ResNet 35
- 5 设置mean pixel value
从这张图看,但训练的图片越多,还有类别越多,效果会越好。
3.3 Class Agnostic Image Common Object Detection
这篇文章发在了tip,文章的introduction,related work介绍了很多,对于刚看这个方向的值得好好看一看。
3.3.1目标
直接发现两张图片中相同的物体,而不需要知道他们的类别。
3.3.2框架
输入是两张图片,输出是,网络框架包括locating module和matching module。输出是物体对。