您的当前位置:首页正文

论文阅读(56)Low-shot visual recognit

来源:要发发知识网

1. 论文相关

In IEEE International Conference on Computer Vision (ICCV), 2017

image.png

2.摘要

2.1 摘要

小样本视觉学习能够从很少的例子中识别新的对象类别是人类视觉智能的一个标志(hallmark)。现有的机器学习方法不能一概而论。为了在这个基础性问题(foundational problem)上取得进展,我们提出了一种复杂图像上的小样本学习基准,它模仿了实用识别系统所面临的挑战。然后,我们提出(1)表示正则化技术(representation regularization techniques),和(2)对数据匮乏的类使用的幻觉技术去生成额外的训练实例(techniques to hallucinate additional training examples for data-starved classes)。我们的方法共同提高了卷积网络在小样本学习中的有效性,在具有挑战性的imagenet数据集上使新类的单样本精度提高了2.3×。

2.2 主要贡献

总的来说,我们的贡献如下:
(1)我们的第一个贡献是基于具有挑战性的ImageNet1k数据集的小样本学习基准。如图1所示,我们的基准测试分两个阶段实现。在表示学习阶段,学习者在一组具有许多训练实例的基类上调整其特征表示。在小样本学习阶段,学习者接触到一组新的类,每个类只有几个例子,并且必须在基本类和新类的联合标记空间上学习分类器。这个基准模拟了一个场景,在这个场景中,学习器被部署在实际使用条件下,并且必须从很少的训练数据中快速学习新的概念。与以往的小样本学习测试(如[13,25])不同,我们在基础类和新类上测量学习器的准确性。这提供了一个健全的检查,以确保新类的准确性不会以牺牲基类的性能为代价。该评估协议遵循了在像ImageNet这样的流行基准上评估图像分类器的标准方法,从而简化了小样本学习与典型的数据丰富场景的比较。

(2)接下来,我们研究如何在基准上提高学习器的表现。我们建立在这样的直觉之上:类内变化的某些模式在类别之间是通用的(例如,姿势转换)。我们提出了一种新类的“幻觉”方法,通过从基类转移变化模式来实现新类的“幻觉”。这些额外的例子提高了15点(绝对)在新类上的top-5的准确性,同时也保持了在基类上的准确性。

(3)最后,我们证明在第一阶段学习的特征表示对小样本泛化能力有很大的影响。具体地说,我们建立了一个损失函数来惩罚在大数据集和小数据集上学习的分类器之间的差异,然后将这种损失与特征激活的正则化联系起来。我们证明,简单的正则化特征激活(simply regularizing feature activations)可以在不损害基类性能的情况下,将新类的单样本top-5的准确率(绝对值)提高9个点。把这种更好的表现和幻觉策略(hallucination strategy)结合起来,我们的进步会比基线高出18个点。

2.3 主要思想

(1) If we were given the set of all such category-independent transformations, then we can hallucinate as many new examples for each novel category example as there are transformations.
(2)

image.png

3. 小样本学习基准(A low-shot learning benchmark)

我们的目标是建立一个模拟实际情况的小样本学习基准。目前的识别系统需要在昂贵的硬件上进行几天甚至几周的训练,以开发良好的特征表示。经过训练的识别系统可以作为服务部署,供下游应用程序使用。这些下游应用程序可能需要识别新类别的能力,但它们可能既没有所需的训练数据,也没有重新训练模型所需的基础设施。因此,有两个自然阶段:在第一阶段,我们有数据和资源来训练大型标记数据集上的复杂特征提取程序;在第二阶段,我们希望以最小的计算和数据成本为我们的剧目(repertoire)添加其他类别。

我们的小样本学习基准实现了类似的设置。它采用一个学习器,两个训练阶段和一个测试阶段。假设学习器由特征抽取器和多类分类器组成。基准对每个组件的特定形式是不可知的。

在表示学习(representation learning,训练阶段1)中,学习器接收到一组固定的基本类别,以及一个数据集,该数据集包含中每个类别的大量示例。学习器使用设置其特征提取器的参数。

在第二阶段,我们称之为小样本学习(low-shot learning),学习者被赋予了一组必须学会区分的类别。是基本类别和看不见的新类别的混合。对于每一个新的类别,学习器只能获得个正样本(positive examples),其中。对于基本类别,学习器仍然可以访问。然后,学习者可以使用这些示例及其特征提取器来设置其多类分类器的参数,同时还可以选择修改特征提取器。

在测试阶段,学习的模型从一组以前看不见的测试图像的组合标签空间预测标签。为了测量小样本学习精度的可变性(variability),我们重复5次小样本学习和测试阶段,每次随机抽取新类别的例子。我们报告了这些试验的平均准确度和标准差。

最简单也是最常用的基线方法是在表示学习阶段训练一个带有标记交叉熵损失的ConvNe,然后在小样本学习阶段训练一个新的线性分类器。我们现在在这个基础上显示出显著的改进,首先是通过一个新的策略产生额外的训练示例(第4节),然后通过改进表示学习本身(第5节)。

4. 更好的小样本学习(Better low-shot learning through generation)

在小样本学习阶段,我们的目标是只从几个例子中为新类别训练好的分类器。直观地说,挑战在于这些例子几乎没有捕捉到类别内部的变化(intra-class variation)。例如,如果这一类是一种特殊的鸟类,那么我们可能只有栖息在树枝上的鸟的例子,而没有一种在飞行中。然后,分类器可能会错误地得出这样的结论:这一新颖的类别只包括栖息的鸟类。

然而,这种变化模式在许多鸟类中是常见的,包括我们在基类中遇到的那些。从我们所看到的许多基类示例中,我们可以理解将栖息的鸟图像与相应的飞行中鸟的图像相关联的转换,然后使用此转换来为我们的新鸟类别“幻觉”附加示例(“hallucinate” additional examples)。如果我们得到了所有这些与类别无关的变换的集合,那么我们就可以对每一个新的类别实例产生与变换一样多的新实例。

但是,我们没有可以应用的预定义转换集。但我们可以采用非参数方法。任何两个属于同一类别的例子和都代表着一种似是而非的转变(plausible transformation)。然后,给出一个新的类别示例,我们希望应用到发送到的转换。也就是说,我们要完成转换“类比”:。

我们通过训练一个函数来实现这一点,该函数将三个示例的连接(concatenated)特征向量作为输入。它产生一个“幻觉”特征向量(与具有相同的维数),对应于将的变换应用于。我们使用带有三层全连接层的MLP实现。

我们首先描述如何训练,然后展示如何在小样本学习阶段使用生成的示例。

4.1. 学习产生新的例子(Learning to generate new examples)

为了训练,我们首先从基类中收集完整的类比数据集。为此,我们首先将每个基本类别中的示例的特征向量聚类为固定数量的簇(100)。这是为了保持计算复杂性可控。接下来,对于一个类别中的每对质心和,我们从另一个类别中搜索另一对质心和,使和之间的余弦距离最小化。我们将所有余弦相似性大于零的四元组收集到一个数据集中。关于转换类比的示例,请参见图2。

image.png

我们现在使用数据集来训练。每四元组,我们给生成器输入。让是生成器的输出。然后我们最小化以下公式:

image.png

是生成器的输出和正确的目标类比的平均均方误差。

是分类损失,其中是表示学习期间学习的基类上的固定线性分类器,是分类器在示例上的对数损失。

4.2. 使用生成的示例进行小样本学习(Using generated examples for lowshot learning)

我们生成的示例不太可能像实际示例那么好,但是当只有几个实际示例时,应该会为分类器提供有用的偏置(bias)。因此,我们希望仅在实际示例数较少时才依赖生成的示例。

具体地说,我们有一个超参数(通过交叉验证设置),这是我们希望每个新类别拥有的最小示例数。如果一个新类别的实际实例的实际数量小于,则我们另外生成个幻觉实例(hallucinated examples)。为了生成新类别的合成示例(synthetic example),我们从这一类的个实例中采样种子样本的特征向量,随机均匀选择一个基类的一对簇质心和。然后我们把这个三元组传给生成器,并将产生幻觉的特征向量和标签的添加到训练集中。然后,我们以通常的方式在实际数据和生成数据的混合数据集上训练logistic回归分类器。

5. 小样本学习的更好表现(Better representations for low-shot learning)

现在我们来谈谈如何改进表示学习,以便更好地进行小样本学习。如上所述,学习器由特征提取器和分类器组成。表示学习的目标是一个很好的特征抽取器:能够从几个例子学习一个有效的分类器。直观地说,我们的目标是减少在大数据集上训练的分类器和在小数据集上训练的分类器之间的差异,以便在小数据集上训练的分类器更好地泛化。

我们首先描述一个建议,将这个目标编码在一个损失中,这个损失可以在表示学习过程中最小化。然后,我们画出几个备选方案的连接。

5.1. 平方梯度量级损失(Squared gradient magnitude loss,SGM)

我们假设分类器是线性的,例如ConvNet的最后一层。表示基类图像的大型标记数据集。通常,训练特征提取器和分类器涉及到最小化关于和的分类目标:

image.png

其中是线性分类器在一个带有标签的示例上的多类逻辑损失:

image.png

我们将此训练程序修改如下。通过考虑多个小训练集 和,我们在基础类上模拟了小样本学习实验。

然后我们希望减少在大数据集上训练的分类器(使用特征抽取器)和在这些小数据集上训练的分类器之间的差异。

在上训练的分类器是。在上训练分类器涉及解决最小化问题:

image.png

我们希望这个目标的最小值匹配。换句话说,我们希望最小化。在中是凸的(图3),因此这一个必要充分条件是,在处的梯度为0,表示。一般来说,越接近的全局最小值,梯度的量级越小。因此,我们希望最小化:

image.png

梯度有一个简单的表示形式:

image.png image.png

其中是类的数目,当y=k时,否则为0,如等式(3)中所定义。

image.png

我们考虑这个损失的一个极端版本,其中只有一个例子(x,y)。在这种情况下:

image.png image.png

是对于错误分类的数据点给更高的示例权重。因此,损失成为特征激活的加权L2正则化。

我们的最终损失,我们称之为SGM的平方梯度大小,平均了中所有的例子。

image.png

我们通过最小化SGM损失和原始分类目标的直接线性组合来训练我们的特征表示。

image.png

通过交叉验证获得。

5.1.1 批量SGM(Batch SGM)

上面,我们用单子集作为我们的小训练集。另一种选择是考虑我们在SGD期间看到的每一小批示例作为。因此,我们在上对平均损失的平方梯度大小进行惩罚,得到损失项:。在每次SGD迭代中,我们的总损失就是这个损失项和标准分类损失的总和。注意,因为这个损失是在小批量上定义的,所以每个小批量中每个类的示例数是一个随机变量。因此,这种损失,我们称之为“批处理SGM”,优化了可能的小样本值分布的预期损失。

5.2. 基于特征正则化的方案(Feature regularizationbased alternatives)

在公式(9)中,可以证明(见补充)。因此,在实际应用中,SGM损失主要由控制,要大得多。这表明一个简单的平方范数作为一个损失:

image.png

虽然正则化(L2 regularization)是一种常见的技术,但请注意,这里我们是正则化特征表示,而不是正则化权重向量。正则化特征向量范数一直是防止退化解(prevent degenerate solutions)的无监督学习方法的主要内容[35],但据我们所知,在有监督分类中没有考虑到它。

我们还可以考虑其他正则化表示的方法,例如正则化:

image.png

我们还评估了文献中提出的其他形式的特征正则化。第一个是dropout[20],它曾在早期的ConvNet架构中使用[24],但最近的架构(如ResNets[19])避开了它。另一种形式的特征正则化包括最小化特征之间的相关性[6,7]。我们还比较了多元损失[30],它被证明可以提高迁移学习的性能。

5.2.1 为什么特征正则化有帮助?(Why should feature regularization help?)

当分类器和特征抽取器联合学习时,特征抽取器可以选择在特征向量中编码差别较小的信息,因为分类器可以学习忽略这些信息。然而,在小样本阶段学习新的分类器时,学习器将没有足够的数据从其表示中识别出不可见类的区别特征。最小化特征激活的规范可能会限制学习器可以将什么编码到特征中,从而迫使它只编码有用的信息。

5.3. 基于度量学习的方法(Metriclearning based approaches)

单样本学习的一种常见方法是学习一个很好的距离度量,该度量可以推广到看不见的类。我们训练了一个以三元损失为代表基线的ConvNet。三元损失以三元组的例子作为输入,其中和属于同一类别,而不是:

image.png

这种损失鼓励和的距离至少要比和的距离远。

6. 实验与讨论(Experiments and discussion)

6.1. 小样本学习设置(Lowshot learning setup)

我们使用ImageNet1k challenge数据集进行实验,因为它有很多类,类内变化很大。我们将1000个ImageNet类别随机分为389个基本类别和611个新类别(列在补充材料中)。

我们评估的许多方法都有需要交叉验证的超参数。因为我们对新类的泛化感兴趣,所以我们不想在测试的同一组类上进行交叉验证。因此,我们通过将基本类别划分为两个子集(193个类别)和(196类)和新类分为(300类)和(311类)。然后,为了交叉验证超参数,我们在小样本学习和测试阶段为学习器提供了,并在组合标签集上评估top-5的准确性。超参数设置,给予最高的top-5精度然后冻结。然后,我们使用这些超参数设置,为学习者提供,进行最后的实验。本文中所有报道的数字都在。

我们的测试图像是mageNet1k验证集的一个子集:我们只是将其限制为只包含感兴趣的类()中的示例。性能是通过测试图像上每个值(每个类别的新示例数)的top-1和top-5精度来衡量的。在小样本训练阶段,我们使用不同的新样本,分别报告5次实验的平均值和标准差。

为了分解最终的性能指标,我们分别报告新类和所有测试样本的平均准确性。虽然我们关注的是新类,但是我们需要确保在新类上的良好性能不会以在基类上的较低精度为代价。

6.2. 网络架构和训练细节(Network architecture and training details)

对于我们的大多数实验,我们使用一个小的十层ResNet架构[19]作为我们的特征抽取器(详情见补充材料)。当在所有1000种类型的ImageNet上进行训练时,它给出了16.7%的验证前5错误率(中心裁剪),使其类似于AlexNet[24]。我们使用这种架构是因为它的训练速度相对较快(2 days on 4 GPUs),并且类似于最先进的架构。注意,如[19]所述,ResNet架构不使用dropout。稍后,我们将展示一些使用更大和更深的ResNet-50架构的实验。

在所有的表示学习实验中,除了三元组嵌入(triplet embedding)外,网络都是从零开始在基类上训练90个epoch。学习率从0.1开始,每30个阶段除以10。重量衰减固定在0.0001。对于三元组嵌入,我们首先使用softmax分类器和log loss对网络进行90个epoch的预训练,然后使用三元组损失对网络进行进一步训练,从0.001的学习率开始。当损失停止减少时,我们停止训练(55个epoch)。使用这个时间表是因为三元网络从无到有训练缓慢,如[37]所述。

对于引入新损失的方法,有一个超参数控制新损失的权重。dropout也有一个类似的超参数,用于控制哪些激活哪些被丢弃。我们通过交叉验证来设置这些超参数。

对于我们的生成器,我们使用一个三层MLP和ReLU作为激活函数。我们还在末尾加上一个ReLU,因为是非负的。所有隐藏层的维数都是512。

在小样本学习阶段,我们使用SGD训练线性分类器10000次迭代,最小批量为1000。我们交叉验证学习率。

6.3.类失衡训练(Training with class imbalance)

小样本基准造成严重不平衡的分类问题。在小样本学习中,基础类可能有成千上万个例子,而每一个新颖的类只有几个例子。我们使用两种简单的策略来缓解这个问题。首先,在训练分类器时,我们对新类进行过采样,然后在每个类内均匀采样。第二,在小样本学习过程中,通过加入权值衰减来正则化多类logistic分类器的权值。我们发现分类器正则化项的权重影响很大,需要交叉验证。

6.4. 结果(Result)

6.4.1表示学习的影响(Impact of representation learning)
image.png

我们在图4中绘制方法的子集,并在表1和表2中显示完整的数字集。图中显示了新类以及新类和基础类组合的平均top-5的准确度,平均超过5次小样本学习试验。标准偏差很低(通常小于0.5%,见补充材料),并且太小,无法清晰地显示为误差条。TOP-1精度和数值见补充材料。我们注意到:

(1)当仅在基类上测试时,许多方法的性能类似(未显示),但它们的性能在小样本场景中有很大差异,特别是很小的时候。因此,基类的准确性并不能推广到新类,特别是当新类的训练实例很少时。
(2)Batch SGM, SGM和L2 总体表现最佳,对较小的表现更好。对于对较小的的小类(n=1或2),它们提高了10分以上的新类精度,对于n>10,它们提高了3个百分点以上的新类精度。也提高了小样本的性能,但增益要小得多。
(3)对于较小的n,Dropout与SGM相当,但在所有类的准确度方面,Dropout都接近或低于基线。从经验上讲,Dropou也降低了特征范数,这表明隐式特征正则化可能解释了其中一些增益。
(4)三元损失(Triplet loss)提高了n较小时的准确度,但当n=20时,在所有类别的准确度方面比基线值差5个百分点。虽然三元损失的更复杂变体可以提高性能[37],但特征正则化既有效又简单得多。
(5)decov loss[7]为更高的n值提供了边际增益,但其性能优于特征正则化方案。

作为一个附加的实验,我们还尝试微调所有基类示例和小部分新类示例的基线表示。我们发现,这并没有提高冻结表示的性能(见表1和表2中的Baseline-ft)。这表明微调表示不仅代价高昂,而且在小样本学习场景中也没有帮助。

image.png image.png
6.4.2 生成样本的影响(Impact of generation)

图5显示了在新类上和基+新类上的top-5的精确度,我们的生成方法应用于基线表示和SGM特征表示之上。数字在表1和表2中。请注意,我们仅在以下情况下生成示例:n<k,基线表示时k=20,SGM为k=5(见第4.2节)。我们观察到,生成的示例在用于基线表示的新类上为n=1,2提供了超过9个点的大增益。当使用SGM表示时,增益较小,但显著。

我们还将我们的生成策略与常见的数据增强形式(纵横比和比例抖动、水平翻转、亮度、对比度和饱和度变化)进行了比较。数据增强只提供了很小的改进(大约1个百分点)。这证实了我们的生成策略产生了比简单的数据扩充更多样和有用的训练示例。

image.png
6.4.3 与其他小样本学习方法的比较(Comparison to other low-shot methods)

我们还比较了最近提出的两种小样本学习方法:匹配网络[46]和模型回归[47](matching networks 和model regression)。模型回归训练一个小的MLP从一个小数据集上训练的分类器回归到整个数据集上训练的分类器。然后,它使用这个回归器的输出来调整在小样本学习阶段学习到的分类器。匹配网络提出了一种最近邻方法,对嵌入进行端到端的训练,以完成小样本学习任务。我们将这两种技术应用于基线表示。

对于这两种方法,各自的论文只对新类进行评价。相反,现实世界的识别系统需要区分缺乏数据的新概念和包含大量数据的基类。我们对这些方法进行了调整,使其能够同时处理基类和新类,如下所示。对于模型回归,我们只对新的类使用基于模型回归的正则化,而其他分类器则使用标准权值衰减进行正则化。我们使用一对所有分类器来匹配原始作品。

匹配网络要求在测试期间将训练数据集保存在内存中。为了使这个简单,我们使用每类100个例子,新类相应地过采样(oversampled)。

这些方法与我们的方法之间的比较如图6所示。我们发现模型回归比基线有显著的改善,但是我们的生成策略对值较小的情况更有效。模型回归也损害了值较高的整体精度。

匹配网络在新的类上工作得很好。在总体性能方面,在基线表示的基础上,它们比我们的生成方法表现更好,但比结合SGM表示的生成方法表现更差,特别是对于n>2。此外,匹配网络基于最近邻,并将整个训练集保存在内存中,这使得它们在测试时比我们的简单线性分类器要昂贵得多。

image.png
6.4.4 更深入的网络(Deeper networks)

我们还对ResNet-50网络体系结构的方法进行了评估,以测试我们的结论是否扩展到目前正在使用的更深层次的convnet(表1和表2)。首先,即使有了基线表示,而且没有任何生成,我们发现更深层次的体系结构也会提高所有小样本场景的性能。然而,我们的SGM损失和我们的生成式策略进一步提高了这种性能。对于n=1,2,我们对新类的最终top-5的准确度仍然高出8个百分点以上,并且我们的总体准确度大约高出3个百分点,这表明我们的贡献可以推广到更深更好的模型。

7. 结论

参考资料

论文下载

代码