这是我入门zero-shot segmentation读的第一篇论文,日后会继续沿着这个方向研究,欢迎大家一起分享,也欢迎大家多多点赞关注收藏!
1. 出处
2021 CVPR
2. Motivation
深度学习在有大量标注数据的实例分割任务中取得了很好的效果。但在医学领域,工业界很难获取到大量的数据,而且标注工作需要具备专业技能的人去做。这就导致这些任务中,未见过的类别,没有有标注的数据。
另外,对于open-set实例分割任务,不可能标注所有类别,很多未标注的unseen classes也需要被分割出来。
因此,缺乏有标注数据,深度学习方法无法完成这样的分割任务。
Zero-shot segmentation面临2个主要挑战:
-
如何对unseen classes进行实例分割
引入预训练词向量中包含的额外的语义知识,将seen classes和unseen classes关联起来。使用seen classes中的语义词向量和图像数据来建立起视觉-语义映射关系,将其从seen classes迁移到unseen classes
提出了zero-shot detector和Semantic Mask Head(SMH)来检测并分割unseen instance
-
如何降低背景和unseen classes的混淆
由于unseen classes在训练的时候没出现过,所以模型很容易将unseen classes误判成背景。解决这个问题的关键就是:背景类的representation
当前,背景类的representation有2个缺陷:
(1)background现有的语义表示是不合理的,之前的工作使用"background"的词向量来表示背景类,但在视觉任务中,从无标注的text数据中学到的简单词向量不够用来表达复杂的背景;
(2)background类已有的语义表示是固定的,难以适应不同图像中变化的背景
为了获得合理的动态适应的词向量来表示背景类,提出了Background Aware RPN(BA-RPN)和Synchronized Background Strategy (Sync-bg)
3. Solution
提出了ZSI,zero-shot实例分割。不仅检测出所有unseen物体,而且能够精确分割出unseen实例
训练阶段,模型在seen data上训练,测试阶段,模型对seen实例和unseen实例进行分割。
提出的方法由几部分组成:
-
Zero-shot Detector
-
Semantic Mask Head
-
Background Aware RPN
-
Synchronized Background Strategy
4. 方法模型
4.1 setting
训练:来自seen classes的图像和词向量,在COCO训练集中选择seen classes图像
测试:来自seen classes和unseen classes的图像和词向量,在COCO验证集中选择unseen classes图像,这些图像可能包含seen和unseen classes
4.2 base detector
Faster R-CNN
4.3 整体结构
对于一个输入图像,获得每个proposal的visual feature和背景词向量。然后使用Sync-bg同步Zero-shot Detector和Semantic Mask Head的背景类词向量。
4.3.1 Zero-Shot Detector
用于学习seen classes数据中视觉和语义概念之间的关系,并迁移到unseen classes objects。最后,将分类分支,换成semantic-classification分支。
semantic-classification分支结构:encoder-decoder结构
使用Te将visual feature encode成semantic feature,然后使用Td将semantic feature解码成visual feature. L_R为重构损失函数。
decoder模型和重构损失使得网络可以学到更具判别性的visual-semantic alignment
推理过程中,将Td移除,然后通过与W_u和W_s做矩阵乘法,得到seen和unseen classes分数
4.3.2 Semantic Mask Head
主要用途:通过visual-semantic映射关系对unseen instances进行实例分割。
Semantic Mask Head能够从seen classes学到visual-semantic映射关系,并进行转换,用于对unseen instances进行分割.
整体结构是encoder-decoder结构
encoder E是1*1的卷积层结构,将visual features映射到语义空间上,从语义词向量中获得分割结果。
**引入decoder的目的:**引入decoder进一步获得更高质量的visual features和语义词向量之间映射关系.decoder将语义词向量解码成visual features.
使用300维的词向量作为每类的语义表示,因此encoder E用于将输入的visual feature转换成通道数为300的semantic feature
每个300*1element是一个词向量,为了得到每个element的分类得分(计算得分的目的是,对每个像素点进行分类),需要计算每个element词向量和所有seen和unseen classes词向量之间的相似度。
最后有个分类模块,两个分支,一个用于seen classes,另一个用于unseen classes。
W_s-Conv是一个fixed 1*1卷积层,采取所有seen classes的词向量和背景类W_s作为权重,W_u-Conv也是权重为W_u的1*1卷积层。
W_s和W_u和Zero-Shot Detector中的相同,都是词向量矩阵,前者是seen classes和背景类对应的词向量,后者是unseen classes和背景类对应的词向量。
以上两个模块的总结:
在zero-shot detector中,词向量W_s和W_u作为固定的全连接层的权重值,将目标分成n+1类,n表示seen和unseen classes,1表示背景类。
在Semantic Mask Head,W_s和W_u再次被用作W_s-Conv和W_u-Conv的权重,将像素分成n+1类。
4.3.3 BA-RPN and Synchronized Background
已有的背景类词向量没有利用visual infomation,只是在大量的文本数据中学到的,因此,无法有效的表示复杂的背景类。
BA-RPN能够将视觉-语义学习过程引入到原始的RPN中,来学习一个表示背景类的更合理的词向量。
BA-RPN使用一个全连接层T将visual feature转换成语义特征,使用300*2维全连接层W_bf,得到背景-前景二元分类得分。W_bf可以看作是分别表示前景和背景的词向量。W_bf通过训练进行优化,因此我们可以学到一个新的词向量v_b用于背景类别。
新的背景词向量就可以用于替换zero-shot detector和SMH中原来的那个。
但问题在于,在不同的图像中,背景表示应该是不同的,在BA-RPN学到的背景词向量仍然是固定的。BA-RPN和整个ZSI框架的训练过程是分开的,相当于前者训练好的背景词向量提供给后者,后者不会对v_b进行更新,导致背景学习受限于BA-RPN,zero-shot detector和SMH的优势没有被利用好。
W_bf优化后,需要不仅能够用于计算前景背景概率,而且还应该拿到Zero-shot Detector和SMH中。
为解决以上问题,提出了Synchronized Background Strategy,算法过程如下:
- 每一步训练,将visual features从backbone前向传播到BA-RPN,得到背景类词向量v_b,和每个proposal的visual features,
- 通过将背景词向量替换成v_b,来更新zero-shot detector中的W_s和SMH中的W_s-Conv
- 然后,将visual features前向传播到zero-shot detector和SMH
- 计算损失,并反向传播梯度值,更新被训练的参数
在inference阶段
对于每一个输入,BA-RPN可以适应性的产生对应的背景词向量,Synchronized Background Strategy可以同步这种适应性的词向量,更新zero-shot detector中的W_s和W_u,以及SMH中的Ws-Conv和Wu-Conv
5. 疑问
-
SMH模块中,最后进行推理的时候,图像中既包括seen classes也包括unseen classes,得到semantic word-vectors后,既要往seen分类器,也要往unseen分类器中输入吗?
-
300*2和B*2里边为何要*2?
得到前景和背景对应的概率,类似于Faster R-CNN中RPN判断anchor是前景还是背景
-
Synchronized Background Strategy有何意义?
通过BA-RPN对W_bf优化后,需要不仅能够用于计算前景背景概率,而且还应该拿到Zero-shot Detector和SMH中。
所以SBS能够将V_b更新到Zero-shot Detector和SMH中,进行反向传播,迭代更新。
-
Zero-shot论文中,训练的时候只有seen classes没有unseen classes吗?如果是这样,那是如何驱动模型能够成功预测unseen classes的呢?
也就是core idea
-
Zero-shot论文中,检测器检测出来的内容有无限制,限制在某些类别范围内?总不能word2vec里所有类别都能检测出来吧?
inference的时候,只提供相应数据集的base classes和novel classes对应的词向量,所以只能检测出数据集有的类别
6. 启发
6.1 core idea
在seen classes上,训练得到visual feature和semantic information的映射关系,将这种关系迁移到unseen classes上,进而能根据novel词向量,推断出他的visual feature,并正确分割
6.2 缺陷
看到这里了,麻烦点个关注呀!