# 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 set
S(1张或k张图像),一张输入图像
- 首先从
中随机均匀选取图像标签对 - 然后从上述标签的语义掩码中随机均匀的选取一个类别
并生成二分掩码 即 对应的标签,相当于做二分类,前景和背景。 support set
的生成方式为:随机均匀的从剩下的数据 中选取一个类别为l
的图像掩码对
目标函数:
分别是两个分支上的网络参数 是网络输出的mask
中的概率 上述采样策略采样的训练数据和
# 3.4扩展到k-shot
k-shot
分割,support set
中包含 k
个图像标签对,support set
中的k个图像,生成参数k
的分类器的集成。分类器的结果有较高的精确率而召回率较低(high precision low recall),因此论文将k个分类器的结果进行了逻辑或。