个人论文精读笔记,主要是翻译+心得,欢迎旁观,如果有兴趣可以在评论区留言,我们一起探讨。
Paper: https://arxiv.org/pdf/2111.12933.pdf
Code: https://github.com/Alibaba-MIIL/ML_Decoder
文章目录
- 0. 摘要
- 1. 介绍
- 2. 方法
- 2.1 Baseline分类头
- 2.2 回顾-Attention and Transformer-Decoder
- 2.3 ML-Decoder
- 3. 实验研究
- 3.1 查询类型比较
- 3.2 比较不同分类头
- 3.3 Zero-shot学习
- 4. 实验结果
- 4.1 多标签分类
- 4.2 Zero-shot学习
- 4.3 单标签分类
- 5. 结论与未来工作
0. 摘要
-
翻译
本文介绍了一种新的基于注意力的分类头——ML-Decoder。ML-Decoder通过查询预测类标签的存在,与全局平均池化相比,它能够更好地利用空间数据。通过重新设计解码器架构,并使用一种新颖的组解码方案,ML-Decoder具有很高的效率,并且可以很好地扩展到数千个类。与使用更大的主干相比,ML-Decoder始终提供更好的速度-精度权衡。ML-Decoder也是通用的——它可以作为各种分类头的临时替代品,并且在与单词查询操作时推广到不可见的类。新颖的查询扩充进一步提高了其泛化能力。使用ML-Decoder,我们在几个分类任务上取得了最先进的结果:在MS-COCO多标签上,我们达到了91.4%的mAP;在NUS-WIDE的zero-shot上,我们达到了31.1%的ZSL(Zero shot learning) mAP;在ImageNet单标签上,我们在没有额外数据或蒸馏的情况下,用vanilla ResNet50主干达到了80.7%的新最高分。 -
笔记
- 摘要主要讲了下ML-Decoder不同于一般的全局平均池化,通过查询来预测类别能更好的利用空间信息;
- 跟更大的backbone相比,ML-Decoder能更好权衡速度-精度;
- ML-Decoder也是通用的——它可以作为各种分类头的临时替代品,并且在与单词查询操作时推广到不可见的类;
- 最后展示了下实验数据,能在不同数据集上多标签分类的任务达到SOTA的性能;
1. 介绍
先说了一下图像分类的概念,可以根据图像中的物体分配一个或多个标签,那么分配一个标签的就是单分类,多个标签就是多分类。然后单分类需要对输出结果做softmax操作,softmax操作其实就是把输出的多个类别通过运算缩放到0~1之间的值,我们可以称为概率值,然后对于每个物体预测的所有类别之和为1,具体可以参考这篇博文。再说回多分类,其实自然图片通常包括多个对象,那么就需要多标签分类。然后作者介绍了下他的做法:类似处理多任务问题,分别独立地预测每个类别。然后介绍了业界一般的做法:通过图神经网络利用标签相关性,改进损失函数、预训练方法和主干,在多标签分类领域取得了显著的成功。
极端分类时,我们需要预测大量类的存在(通常是数千或更多),迫使我们的模型和训练方案是高效和可扩展的。多标签零次学习(ZSL)是多标签分类的扩展,在推理过程中,网络尝试识别看不见的标签,即在训练过程中未使用的其他类别的标签。这通常是通过文本模型在可见类(用于训练)和不可见类之间共享知识来实现的。
分类网络通常包含主干和分类头。主干输出空间嵌入张量,分类头将空间嵌入张量转换为预测逻辑。在单标签分类中,这通常是通过全局平均池化 (GAP)完成的,然后是一个全连接层。基于GAP的分类头也用于多标签分类。然而,由于需要识别具有不同位置和大小的多个对象,这可能会使平均池的使用不是最优的。最近,一些研究提出了基于注意力分类头的多标签分类方法。有论文提出一种双流注意力框架,用于从全局图像到局部区域的多类别物体识别。还有论文提出了简单的空间注意分数,然后将其与类别无关的平均池化特征相结合。还有论文提出了一个具有可学习查询的池化transformer,用于多标签分类,获得了顶级结果。(具体哪篇论文请参考原文)
基于GAP的分类头简单而有效,并且由于它们具有固定的空间池化成本,因此可以很好地随类数量的增加而扩展。然而,它们提供了次优结果,并且不能直接应用于ZSL。基于注意力的分类头确实改善了结果,但通常成本很高,即使对于具有少量类别的数据集也是如此,并且对于极端的分类场景实际上是不可行的。它们也没有自然延伸到ZSL。
在本文中,我们介绍了一种新的分类头,称为ML-Decoder,它为单标签、多标签和零采样分类提供了统一的解决方案,并取得了最先进的结果(见图1)。ML-Decoder的设计基于原始的transformer-decoder,进行了两大修改,显著提高了其可扩展性和效率。首先,它通过去除冗余的自关注块,将解码器在输入查询数量上的二次依赖关系降低为线性依赖关系。其次,ML-Decoder使用一种新颖的组解码方案,它不是为每个类分配查询,而是使用固定数量的查询,这些查询通过称为组全连接(group
fully-connected)的新体系结构块插值到最终数量的类。使用组解码,ML-Decoder还享有固定的空间池成本,并且可以很好地扩展到数千个类。
ML-Decoder灵活高效。它可以用可学习的或固定的查询进行同样好的训练,并且可以在训练和推理期间使用不同的查询(见图2)。这些关键特性使ML-Decoder适合ZSL任务。当我们为每个类分配查询并使用单词查询训练MLdecoder时,它可以很好地泛化到看不见的查询,并显着改进了以前最先进的ZSL结果。我们还证明了组解码方案可以扩展到ZSL场景,并在训练过程中引入新的查询增强以进一步促进泛化。
本文的贡献可以总结如下:
- 我们提出了一种新的分类头,称为ML-Decoder,它为多标签、零标签和单标签分类提供了统一的解决方案,并具有最先进的结果。
- ML-Decoder可以作为全局平均池化的替代方案。它简单而高效,与更大的主干或其他基于注意力的头相比,它提供了更好的速度和精度权衡。
- ML-Decoder新颖的设计使其可扩展到分类数千类。互补的查询增强技术也提高了它对不可见类的通用性。
- 我们通过对常用分类数据集(MS-COCO、Open Images、NUS-WIDE、PASCAL-VOC和ImageNet)的综合实验验证了ML-Decoder的有效性。
- 笔记:
以上是翻译带一点补充,然后是Intro,是介绍关于分类、多分类各大家的做法,然后提出自己的做法,并且总结了下自己的贡献。比较关键的几点在最后的贡献也总结了,好像也没啥其他好写的了= =下面看具体的方法,方法我就不翻译了,直接带理解的做笔记。
2. 方法
先是回顾baseline分类头,包括 GAP-based 和 Attention-based。然后再介绍本文的重点ML-Decorder,包括他的优点以及介绍他在CV多重任务中什么适用的,多重任务当然就包括多标签分类、ZSL、单标签分类。
2.1 Baseline分类头
首先是统一一套框架,backbone+cls head的结构:
cls head又分为GAP-based和Attention-based,GAP-based就是用全局平均池化算子把backbone输出的tensort减到一维,然后全连接层转换为N个输出,N为类别,GAP通常处理单标签分类任务,有一定的泛化性,有些论文也把GAP作为多标签分类的baseline。
对于Attention-based的分类头,可以更好的使用空间数据,并提高结果,具体看下面。
2.2 回顾-Attention and Transformer-Decoder
这里回顾了transformer-decoder并且说明了ML-Decoder与之的区别。首先Attention的定义如下,Q、K、V分别为3个输入向量
多头的输出为:
图中展示了transformer-decoder和ML-Decoder的区别,FF是前馈全连接层。token池化阶段是在token嵌入的维度D上进行简单池化,以产生N个输出。
2.3 ML-Decoder
2.3.1 动机
transformer-decoder分类头有个缺点,计算成本是类别的平方。 导致类别越多,速度越慢,或者不可行。如Open Images(9600个类),从计算成本的角度来看,这类方法实际上是不可行的。另外,变压器-解码器作为分类头只适用于多标签分类。一个更普遍的基于注意力的头部,也可以处理其他任务,如单一标签和ZSL,将是有益的。
2.3.2 ML-Decoder设计
详细说明图3中,对于transformer-decoder,ML-Decoder做了哪些修改。
(1)移除Self-attention:
我们首先观察到,在推理过程中,transformer-decoder的self-attention模块对输入查询提供了固定的转换。然而,当查询进入cross-attention模块时,在进行注意操作之前,它们要经过一个投影层(参见公式1)。在实践中,投影层可以将查询转换为任何想要的输出,使自注意模块冗余。因此,我们可以去除自关注层,同时仍然保持分类头的相同表达性,并且不会降低结果。我们将在3.1节中验证这一点。通过消除自关注,我们避免了昂贵的模块,并将ML-Decoder在输入查询数上的二次方关系变为线性关系,使其更加实用和高效。
(2)组编码(Group-decoding)
在极端的分类场景中,即使分类头与类别数量的线性依赖关系也可能代价高昂。我们希望打破这种耦合,使交叉关注模块及其后的前馈层与类的数量无关,与GAP操作相同。为此,我们没有为每个类分配一个查询,而是使用固定数量的组查询K作为输入(参见图3)。
然后看图4,很明显只跟K有关而不跟N相关。
对组解码方案的一些额外观察和见解:
- 使用全解码(g = 1),每个查询检查单个类的存在性。使用组解码,每个查询检查几个类的存在性。我们选择以随机的方式把班级分成几组。通过语义接近对类进行聚类是另一种选择,但需要一个繁琐的聚类过程,并且可能需要对每个数据集进行调优的额外超参数。在第3.2节中,我们将展示随机分组聚类足以提供与全解码方案相当的结果。
- 在flops方面,组全连接层相当于基于gap的头部中的全连接层(N × D乘法)。两者在类的数量上都是线性相关的,但在实践中,即使对于数千个类,它们的计算开销也很小。就内存消耗而言,在单个操作中执行完全连接在一起的两个任务比连续执行它们更有效,因为不需要存储大型中间映射。
- ML-Decoder中唯一依赖于输入图像大小的组件是cross-attention模块。我们可以把cross-attention层想象成空间池,类似于GAP。对于组解码,ML-Decoder具有固定的空间池开销,与N无关。
(3)Non-learnable查询
用于多标签分类的transformer-decoder只有在可学习的查询下才能获得最佳结果。然而,我们观察到查询总是被输入到一个多头注意层,该注意层对查询应用了一个可学习的投影计算(参见公式1)。因此,将查询权重设置为可学习的是多余的——可学习的投影可以将任何固定值查询转换为可学习查询获得的任何值。我们将在第3.1节中验证这一点,表明使用可学习或固定查询训练ML-Decoder时获得相同的准确性。除了简化训练过程之外,使用固定查询将使我们能够进行ZSL。
2.3.3 ML-Decoder for ZSL
接下来,我们将介绍在多标签ZSL场景中使用ML-Decoder所需的适应性,并讨论ML-Decoder的关键特性,使其适合该任务。我们还将证明组解码方案可以扩展到ZSL,并提出新的查询增强功能,进一步提高ML-Decoder的泛化性。
基于NLP的查询:我们首先介绍一个具有完整解码方案的ZSL ML-Decoder版本(每个标签都有一个相应的查询)。如前一节所讨论的,输入查询可以是可学习的,也可以是固定的。对于ZSL,我们使用固定的基于nlp的查询——对于每个标签,使用语言模型提取单词嵌入向量,并将其设置为输入查询。我们还在组全连接层中使用共享投影矩阵(在Eq. 3中设置Wk = W)。使用基于nlp的查询和共享投影矩阵,语义信息可以在推理期间从可见(训练)类传播到不可见(测试)类,从而实现泛化。
ML-Decoder功能:ML-Decoder包含几个有利的功能,使其非常适合ZSL。首先,它的注意机制是基于向量之间的点积相似度(Eq. 1)。由于NLP词嵌入保留了这种点积语义相似度[15],因此未见的标签更有可能与解码器内最相似的键和值匹配。此外,具有共享投影矩阵的MLDecoder允许可变数量的输入查询,并且对查询的顺序不敏感。这是有益的,因为在ZSL中,我们对不同的类集执行训练和测试,因此对不同的查询集执行训练和测试。对于ZSL,我们只对可见标签进行训练,并对不可见类进行推理,而对于广义ZSL (GZSL),我们对不可见和可见标签集的并集进行推理。
组解码:组解码(K < N)需要修改才能在ZSL设置中工作。在附录B中,我们详细介绍了ZSL组解码的变体。
查询增强:通过基于nlp的查询,MLDecoder自然地扩展到ZSL任务。然而,我们希望应用专门的训练技巧来进一步提高其通用性。在计算机视觉中,对输入图像进行增强以防止过拟合,并提高对未见过的新图像的泛化能力是一种常见的做法。
类似地,我们引入查询扩展来鼓励对不可见的类查询进行泛化。第一个增强是random-query,它向输入查询集添加额外的随机值查询,并为这些添加的查询分配一个表示“随机”的正基础真值标签。第二个增强是查询噪声,我们在每批输入查询中添加一个小的随机噪声。
请参见附录中的图8,以了解增强的示例。在第3.3节中,我们将展示查询增强鼓励模型识别以前没有遇到过的新查询向量,并提高ZSL分数。我们还尝试了查询截断增强,即每批删除查询的随机部分。然而,在我们的实验中,这种技术并不是有益的。
2.3.4 ML-Decoder for Single-label Classification
先前提出的大多数基于注意力的分类头都是用于多标签分类的,这也是我们在工作中关注的主要任务。然而,我们的ML-Decoder设计使其能够在其他计算机视觉任务(如单标签分类)中用作基于gap的磁头的直接替代品,如图2所示。
在多标签分类中,基于注意的头部的主要动机是需要识别几个不同位置和大小的物体。我们将在4.3节中展示ML-Decoder的好处更普遍,并且完全适用于单标签问题,其中图像通常包含单个对象。
3. 实验研究
在这部分,我们将为我们提出的ML-Decoder分类头带来消融测试和内部比较。首先,我们将使用不同类型的输入查询测试ML-Decoder。然后,我们将ML-Decoder与其他分类头进行比较,例如transformer-decoder和基于GAP的分类头。最后,我们将利用增强查询和群解码对ZSL进行消融研究。
3.1 查询类型比较
如第2.3.2节所述,由于注意模块中的线性投影,ML-Decoder在使用可学习或固定查询时保持相同的表达性。在表7中,我们比较了MS-COCO多标签数据集上不同类型查询的ML-Decoder结果(参见附录C以获得MS-COCO的完整训练细节)。
事实上,我们看到可学习的、固定随机的和固定基于NLP的单词查询都产生了相同的准确率,88.1% mAP,正如预期的那样。为了减少学习参数的数量,我们将使用固定查询。
3.2 比较不同分类头
TResNet-M 的backbone相当于Resnet50
在图5中,我们在MS-COCO上比较了mAP分数与基于gap和ML-Decoder分类头的失败,具有三种不同的架构- tresnet, TResNet-M, TResNet-L(在运行时相当于ResNet34, ResNet50和ResNet101)。
3.3 Zero-shot学习
从表中可以明显看出,随机查询和附加噪声都有助于模型泛化到不可见类的能力。当同时应用这两种方法时,我们看到未见过的课程的mAP分数增加了1.2%。我们还测试了查询增强对所见类的影响。在MS-COCO和NUS-WIDE上,添加查询扩展对所见类的mAP分数没有影响(MS-COCO为88.1%,NUS-WIDE为22.7%)。这与3.1节的结果一致,在3.1节中,可学习查询和固定查询在所见类上提供相同的结果。使用查询增强的好处是可以更好地泛化到不可见的类。
在表4中,我们比较了ZSL任务的组解码器和全解码器。附录B描述了对ZSL组解码方案的修改。
从表4中我们可以看到,组解码方案也适用于ZSL场景,与完全解码相比,mAP分数略有下降。
4. 实验结果
在本节中,我们将在流行的多标签、ZSL和单标签分类数据集上评估基于ml解码器的解决方案,并将结果与已知的最先进技术进行比较。
4.1 多标签分类
4.2 Zero-shot学习
4.3 单标签分类
5. 结论与未来工作
本文介绍了一种新的基于注意力的分类头——ML-Decoder。通过去除冗余的自关注层并使用新颖的组解码方案,ML-Decoder可以很好地扩展到数千个类,并且比使用更大的主干提供更好的速度-精度权衡。ML-Decoder可以很好地处理固定查询或随机查询,并在训练和推理时使用不同的查询。通过基于单词的查询和新颖的查询增强,ML-Decoder还可以很好地泛化到不可见的类。大量的实验分析表明,ML-Decoder优于基于GAP分类头的多个分类任务,如多标签,单标签和Zero-shot,并取得了新的最先进的结果。
我们未来的工作重点是将ML-Decoder的使用扩展到其他计算机视觉任务,包括分类,如目标检测和视频识别。我们还将探索更普遍地使用群解码方案来处理任何空间嵌入张量,并将尝试将其应用于其他领域和任务,如分割,姿态估计和NLP相关问题。