论文简介
- 题目:《Prototypical Networks for Few-shot Learning》
- 论文链接
原型网络是小样本图像分类上重要的一篇论文,这篇工作所提供的方法可以说是有用且经典的。现在很多新的论文工作会用原型网络做比较,又或者会在原型网络的基础上做创新,自己搞一个分类器来水论文(当然,级别一般不会太高)。
这篇博客主要分为两部分
- 我会尽量简单地介绍这篇论文的思想,以及我们写论文时可以借鉴的地方 ,可以进行创新的地方
- 我会用代码展示原型网络的分类效果。
论文思想
首先,希望大家能够简单地去读一下这篇论文再来看我的博客。有了上一篇博客的介绍,相信不难读懂。
为了方便理解,我们将工作分为上游和下游两个阶段。
上游阶段,主要训练一个CNN来进行特征提取,下游阶段,则利用原型网络分类器完成小样本图像分类工作。
上游阶段
在小样本图像分类中,CNN这样的骨干网络的作用,就是用来做图片的特征提取工作。它将图像转化为一个高维向量表示。CNN的训练,是在小样本图像分类的上游阶段。不论你如何去训练一个CNN,只要它能合理的提取图像特征,都可以用来完成小样本图像分类的工作。甚至你将其他工作中的训练好的CNN网络剥离下来,不进行调整,用到这篇原型网络的工作中去,它依然能表现出良好的性能。上游阶段主要就是训练好一个用于特征提取的CNN。 如何训练CNN,不是这篇工作重点(因为这篇工作训练CNN骨干网络的效果不行),重点是下游阶段原型网络如何完成小样本图像分类。
下游阶段
下游阶段,我们先描述几个概念:
- 样本空间
- 原型
然后我们再介绍原型网络如何进行小样本图像分类,这样就很好懂了。
样本空间
首先,提出这样一个样本空间的概念。我们知道,当图片输入到CNN卷积网络中以后,经过卷积层的处理,最终我们会得到一组高维的向量。这个高维的向量,则代表着这张图片。
如果我们将这个高维向量放到高维的坐标系中去,那么这个高维的坐标系就可以称为一个样本空间。
所以,我们可以想象到,同类型的图片经过CNN卷积后得到的高维向量应该是相似的,那么同类的高维向量在样本空间中的分布也应该是相近的
如上图,这是手写字母的图片经过卷积层后得到的高维向量在高维样本空间的分布。我们可以明显发现,同种字母的向量在分布上是接近的。
原型
那么根据样本空间中同类图像向量相近的规律,这篇论文提出了原型的概念,即prototype。 原型是什么呢?
作者把同一类中所有图像的高维向量加和求平均,得到的一个平均高维向量,代表同一类图片的原型
原型 = (所有同类图片向量和) / (该类图片个数)
那么,在样本空间中,这个原型的向量空间分布,应该是在所有同类向量中间。
如上图所,这是一个样本空间。每一个小圆代表一个图像的高维向量在样本空间的分布。同种颜色的圆表示同一类图片,黑色的小圆表示该类样本的原型。我们可以发现,原型恰好处于该类图片向量的中间。
原型网络怎样进行图片分类?
如果我们需要进行图片分类的工作,我们会有训练集 D t r a i n D_{train} Dtrain和测试集 D t e s t D_{test} Dtest。假设是ImageNet1000数据集, D t r a i n D_{train} Dtrain和 D t e s t D_{test} Dtest中则都有1000个类别。对于 D t r a i n D_{train} Dtrain中的1000个类,我们用上面算原型的方法,计算出这个1000个类的原型。
知道1000个类的原型后,我们如何进行测试集 D t e s t D_{test} Dtest分类呢?
我们将每一个测试集样本和这1000个类别的原型一起放入到高维样本空间中去,测量待分类样本与1000个原型的距离,距离测试样本最近的原型就是该样本的类别。
如上图所示,白色的小圆(
X
X
X)是我们的待分类样本,而白色的小圆距
C
2
C_2
C2这一类别的原型最近(黑色小圆),所以
X
X
X被分类为
C
2
C_2
C2类别。
原型网络怎样进行小样本分类?
在上一篇博客里,我们讲了小样本图像分类中的支持集与查询集。我们只要将上一小节里的训练集 D t r a i n D_{train} Dtrain和测试集 D t e s t D_{test} Dtest替换为支持集和查询集就可以使用原型网络完成小样本图像分类工作。
下一篇博客我将会用代码带大家跑通用于小样本图像分类的原型网络,欢迎大家关注我。