# One-Shot Learning for Semantic Segmentation论文阅读笔记

2017年佐治亚理工大学的团队发表在CVPR上的工作。

# 1.总结

One-Shot Learning 的常用方法:

flowchart LR
O[Oneshot] --> A
O --> B
O -->C
O -->D
A[fine-tune] --> A1[过拟合]
A --> A2[step,学习率等超参数难以确定]
B[meta-learn] --> B1[无法通过1个样本度量分割的大量特征]
C[SiameseNetwork]
D[MetricLearning]
  • meta-learning:在限定条件的有限样本上训练后,在新的类别可取得比较好结果的分类器。进一个,语义分割是在像素级的分类,因此可借用 meta-learning学习分类器,对分割图像的每个像素做分类来实现分割。但一张图像中由很多稠密特征,oneshot方法不能够较好地度量这些特征。

# 2.提出的方法

  • 两个分支,第一个分支采用有标签图像作为输入,输出一个参数化向量。第二个分支使用第一个分支的参数输出和一张新的图像作为输入,输出一个新类别的掩码图像。

  • 为了评估 oneshot learning分割的效果,在 PASCAL VOC 2012数据集定义了一个新的基准。一部分类别数据用作训练,另一部分在训练时未用的类别数据用做测试。PASCAL VOC包含 20个类,比 one-shot分类方法常用的数据集的类别要少,如 Omniglot,ImageNet (1000),通常认为 few-shot learning方法需要数据集有比较多的类别。
  • k-shot learning,对 k个图像分别应用 oneshot-learning以产生 k个分割结果,再对其进行逻辑或,得到最终的结果。
  • 作者假设论文中的算法之所以能在未见过的类别上输出比较好的效果,是得益于在 ImageNet数据集上的预训练。

# 3.Oneshot图像分割的问题描述

训练数据的类别和测试数据的类别没有交集,使用训练数据训练网络,然后用少量的标注测试数据作为 support set来拟合一个模型,基于训练的模型和拟合的模型,输入一个测试数据,输出分割结果。

在预训练数据中移除 overlapping classes也不会影响本文中提出的方法。

# 3.1从少量的标注数据中生成参数

基于 VGG16修改:

  • Masking,对 SupportSet中的图像用标签掩码后作为输入,不输入背景
  • Weight Hashing,在 VGG的最后一层添加权重哈希,将 1000维的向量哈希成 4097维的,如果使用全连接网络来实现的话,很容易导致过拟合。

# 3.2稠密特征提取

去掉输出层的全卷积网络,输出是 4096维度的特征图,用以和 suport set分支生成的参数做逻辑回归后,得到最终的分割结果。

# 3.3训练过程

训练过程是通过模仿 one shot任务来实现,其做法是每个迭代从训练数据集中随机选取一个 support setS(1张或k张图像),一张输入图像及相应的标签掩码训练过程中的数据生成策略:

  • 首先从中随机均匀选取图像标签对
  • 然后从上述标签的语义掩码中随机均匀的选取一个类别并生成二分掩码对应的标签,相当于做二分类,前景和背景。
  • support set的生成方式为:随机均匀的从剩下的数据中选取一个类别为 l的图像掩码对

目标函数:

L(η,ς)=ES,Iq,MqDtrain[m,nlogpη,ς(Mqmn|Iq,S)]
  • 分别是两个分支上的网络参数
  • 是网络输出的 mask中的概率
  • 上述采样策略采样的训练数据

# 3.4扩展到k-shot

k-shot分割,support set中包含 k个图像标签对,,使用 support set中的k个图像,生成参数,可以理解成是 k的分类器的集成。分类器的结果有较高的精确率而召回率较低(high precision low recall),因此论文将k个分类器的结果进行了逻辑或。

(adsbygoogle = window.adsbygoogle || []).push({});

# 参考资料