核心思想
本文采用基于度量学习的方式实现小样本学习任务,但与其他基于度量学习的方式不同,本文通过比较图像与类别之间的局部描述子(Local Descriptor),来寻找与输入图像最接近的类别。本文的灵感来自于朴素贝叶斯最近邻算法(Naive-Bayes Nearest-Neighbor,NBNN),根据这一算法作者有两点发现:一、如果将一幅图像的特征信息压缩到一个紧凑的图像级别的表征(换言之就是用一个特征向量或者特征图来表示一张图片),这将会损失许多有区分度的信息,而且这种损失在训练集较少的情况下是无法被恢复的。二、如果采用图片与图片之间的比较,直接使用局部特征进行分类是不可能的,这是因为即使是相同类别的两幅图片,他在局部区域上特征也有很大的差别(比如都是狗,但是不同狗的尾巴区别也很大)。基于这两点观察,作者提出了本文的算法深度最近邻神经网络(Deep Nearest Neighbor Neural Network ,DN4),首先对于图像特征描述,作者并没用采用图像级的特征向量,而是使用若干个局部描述子,每个局部描述子对应图片中的一个局部区域;其次,在分类时,作者同样采用了kNN算法,但是与比较两幅图之间的相似性的方法不同,作者比较输入图像与每个类别的局部描述子之间的相似程度,并借此进行分类,这是因为对于一个类别的物体,其公共的特征还是比较接近的。具体的实现方式如下图所示
如图所示,整个网络分成两大部分:嵌入特征提取网络与最近邻分类器。首先对于嵌入特征提取网络采用全卷积神经网络,不带有全连接层,因此输出为维的张量,如果将“每一条”长度为的特征向量看做一个局部描述子(因为卷积神经网络中的卷积和池化操作,会将图像压缩,因此输出特征图中的一个像素,其实代表了原图中的一个局部图块),则一共可以得到个长度为的局部描述子:
然后对于支持集中每个类别中的每幅图像,都能够得到一个由个局部描述子构成的描述向量。得到查询图像的描述向量,对于其中的每个局部描述子,在每一个类别中都寻找到与其距离最接近的个局部描述子,则查询图像与类别之间的相似性可以通过对局部描述子之间的余弦相似性求和来得到
最后选择相似程度最高的那一类别作为预测结果。
实现过程
网络结构
特征提取网络采用4层卷积神经网络,最近邻分类器使用KNN搜索。
损失函数
与常规的基于度量学习的算法相同。
训练策略
与常规的基于度量学习的算法相同。
创新点
- 将基于度量学习的小样本学习算法中的图像级别的特征向量,改为局部描述子
- 将图像与图像之间的相似性度量,通过求和方式改为图像与类别之间的相似性度量
算法评价
本文最重要的思想在于使用局部描述子取代简单的图像特征向量,虽然结构上并没有什么变化,只不过取消了全连接层,但是在思想上是有很大区别的。之前的特征向量是希望特征提取网络能够将图像特征高度抽象化,将其转化为一个对位置不敏感的向量,在进行比较时也是直接度量两个图像对应的特征向量之间的距离,这对于小样本学习来讲可能比较困难。而本文则这种特征描述要求放宽到局部区域上了,我不要求两张图片每个位置都很相似,但要求你最相似的k个区域是非常接近的,这就消除了类内差异和背景混淆的问题。这一思想其实与之前解读的一篇文章《Spot and Learn: A Maximum-Entropy Patch Sampler for Few-Shot Image Classification》非常接近,根据实验结果来看相对于其他的基于度量学习的算法,如Matching Network和Prototypical Network,效果都有明显的改善。
如果大家对于深度学习与计算机视觉领域感兴趣,希望获得更多的知识分享与最新的论文解读,欢迎关注我的个人公众号“深视”。