个人论文精读笔记,主要是翻译+心得,欢迎旁观,如果有兴趣可以在评论区留言,我们一起探讨。
Paper: https://arxiv.org/pdf/2209.06585v2.pdf
Code: https://github.com/openvinotoolkit/deep-object-reid/tree/multilabel
多标签图像分类允许从给定图像中预测一组标签。与每个图像只分配一个标签的多类分类不同,这种设置适用于更广泛的应用程序。在这项工作中,我们回顾了两种流行的多标签分类方法:基于transformer的分类头和标签关系信息图处理分支。尽管基于transformer的分类头被认为比基于图的分支获得更好的结果,但我们认为,通过适当的训练策略,基于图的方法可以显示出很小的精度下降,同时在推理上花费更少的计算资源。在我们的训练策略中,我们引入了度量学习修正,而不是非对称损失(ASL),这是多标签分类的公认标准。 在每个二元分类子问题中,它使用来自主干的L2归一化特征向量进行操作,并强制正负样本的归一化表示之间的角度尽可能大。这提供了比二元交叉熵损失对非归一化特征更好的识别能力。利用所提出的损失和训练策略,我们在MS-COCO、PASCAL-VOC、NUS-Wide和Visual Genome 500等广泛的多标签分类基准上获得了单模态方法的SOTA结果。我们的方法的源代码可作为OpenVINO™培训扩展的一部分。
尽管在一个图像上存在多个标签比只有一个硬标签更自然,但多标签分类的发展并不那么深入。由于缺乏专门的多标签数据集,研究人员将MS-COCO (Lin等人,2014年)和PASCAL VOC (Everingham等人,2009年)等一般目标检测数据集转变为具有挑战性的多标签分类基准,通过移除来自数据注释的边界框并只利用它们的类标签。
尽管最近在解决上述基准方面取得了进展,但最新的工作主要集中在得到的模型准确性上,而没有考虑计算复杂性(Liu et al ., 2021)或使用过时的训练技术(Chen et al ., 2019),同时引入了有前途的模型架构。
在这项工作中,我们正在重新审视最新的多标签分类方法,提出适合实时应用的轻量级解决方案,并改进现有模型的性能-准确性权衡。
本文的主要贡献如下:
从历史上看,多标签分类受到的关注不如多类别场景,但尽管如此,该领域仍有很大进展。通过开发高级损失函数(Baruch等人,2021)、标签共现模型(Chen等人,2019;Yuan et al ., 2022),设计高级分类头(Liu et al ., 2021;Ridnik等,2021b;Zhu and Wu, 2021),并通过探索注意力区域来发现考虑物体空间分布的架构(Wang et al ., 2017;高、周,2021)。
传统的方法是将一个多标签分类任务转化为一组二值分类任务,通过优化二值交叉熵损失函数来求解。每个单类分类子任务都存在严重的正负不平衡。训练数据集包含的类越多,我们在每个单类子任务中得到的负面信息就越多,因为图像通常只包含大量类的一小部分。改进的非对称损失(Baruch等人,2021),降低了权重和硬阈值,容易获得负样本,显示了令人印象深刻的结果,在多个流行的多标签数据集上达到了最先进的结果,而无需任何复杂的架构技巧。这些结果表明,正确选择损失函数对多标签分类性能至关重要。
另一个有希望的方向是设计特定于类别的分类器,而不是在主干网产生的单个特征向量上使用完全连接的层。这种方法也不会引入额外的训练步骤,只会略微增加模型的复杂性。(Zhu和Wu, 2021)的作者提出了一种替代全局平均池化层的方法,该层对于每个类别生成特定类特征。利用紧凑的Transformer分类头来产生这些特征(Liu et al ., 2021;Ridnik et al ., 2021b)被证明更有效。这种方法通过使用可学习的嵌入查询来假定池化特定于类的特性。
考虑对象位置的分布,或统计标签关系需要数据预处理和额外的假设(Chen等人,2019;Yuan et al, 2022)或复杂的模型架构(Wang et al, 2017;高、周,2021)。例如,(Chen et al ., 2019;Yuan et al ., 2022)通过词嵌入表示标签;然后在这些标签表示上构建一个有向图,其中每个节点表示一个标签。然后在此图上学习堆叠GCNs以获得一组对象分类器。该方法依赖于将标签表示为单词的能力,这并不总是可能的。空间分布建模需要在模型中放置一个类似rcnn的模块(Girshick et al, 2014) (Wang et al, 2017;Gao和Zhou, 2021),这大大增加了训练链条的复杂性。
在本节中,我们将描述整个训练链条和我们的方法的细节。我们的目标不仅是获得有竞争力的结果,而且要使训练对最终用户更友好,更适应数据。因此,遵循(Prokofiev和Sovrasov, 2022)中描述的原则,我们使用轻量级模型架构、超参数优化和早期停止。
我们选择了EfficientNetV2 (Tan and Le, 2021)和TResNet (Ridnik et al, 2021a)作为执行多标签图像分类的基础架构。也就是说,我们在TResNet-L、EfficientNetV2、小型和大型上进行了所有的实验。在这些主干之上,我们使用了两种不同的特征聚合方法,并比较了它们的有效性和性能。
作为基于transformer的特征聚合方法的代表,我们使用ML-Decoder (Ridnik et al, 2021b)分类头。它提供多达K个特征向量(其中K是类的数量)作为模型输出, 而不是在使用标准全局平均池化(GAP)分类头时使用单个类无关向量。我们将x
(维度为C × H × W)作为模型输入,那么带参数W的模型F产生一个降尺度多通道特征图F = FW (x) (维度为S x H/d × W/d),其中S为输出通道数,d为空间降尺度因子。然后将该特征映射传递给ML-Decoder头部:v = MLD(f) (维度为M × L),其中M为嵌入维数,L≤K为解码器中的组数。最后,向量v通过(Ridnik et al, 2021b)中描述的全连通投影(如果L = K)或组全连通投影(如果L < K)投影到K类对数。在我们的实验中,我们设置L = min(100,K)。此外,我们L2规范化了投影中所有点积的参数,以防我们需要将度量学习损失附加到MLDecoder分类头。
(Chen et al ., 2019)的图处理分支的原始结构假设在该分支中生成分类器,然后将其直接应用于由主干生成的特征。这种方法与基于transformer的分类头或任何其他原始空间特征的处理不兼容,如CSRA (Zhu和Wu, 2021)。为了减轻这种限制,我们建议采用图1所示的体系结构。
图1:提出的基于GAT(graph attention)的特征重加权方法的总体示意图。使用GAT从标签关系图中获得的特征对CNN空间特征中的通道进行重加权。然后,对重新加权的特征进行池化操作以获得向量表示。最后,将得到的向量输入到二元分类器Wj中,并使用本文介绍的AAM损失进行优化。
我们使用条件概率的估计来构建Z(标签相关性矩阵),而不是完全依赖于GLOVE和计算余弦相似度。
我们用图注意层处理输入,得到输出h(维度为S×K)。然后,我们通过最大池化操作得到最具影响力的特征,并得到权重R的S次方,用于CNN空间特征的进一步加权得到 f ~ \widetilde{f} f 。接下来,我们将全局平均池化和最大池化操作并行应用于 f ~ \widetilde{f} f ,并将结果求和,得到最终的潜在嵌入 v ~ \widetilde{v} v 。嵌入的 v ~ \widetilde{v} v 最后被传递给二值分类器。我们可以将加权特征传递给ML-Decoder或任何其他特征处理模块,而不是应用简单的空间池。
使用图注意力(GAT)分支对transformer头的特征重新加权的主要优点是在推理阶段的计算和模型复杂性开销很小。由于GAT分支对任何图像都具有相同的输入,因此在开始对结果模型进行推理之前,我们可以只计算一次其执行的结果。同时,GAT需要标签的向量表示。如果我们对所有标签(甚至单个单词)都有有意义的描述,则可以通过文本到向量模型生成这种表示。这个条件并不总是成立:一些数据集可能有未命名的标签。在这种情况下,如何为标签生成表示仍然是一个悬而未决的问题。
这里作者描述了他的GAT方法以及端到端的解决方案,至于后面的GAP结构,作者提出也可以换成ML-Decoder检测头,而不是说一定要换,这里我开始看的时候还以为换成MLD才是最终形态,但从后面的实验看来应该不是,这篇重磅的创新点还是图1的GAT结构以及后面的AAM。
最近,非对称损失(Baruch等人,2021)已成为执行多标签分类的标准损失选项。根据设计,它会用改进的二值交叉熵损失惩罚每个logit。正负样本的不对称处理允许ASL减少负样本的损失权重,以解决正负不平衡问题。但从模型的辨别能力角度来看,这种方法还有改进的余地。
角边缘损失比交叉熵损失产生更多的判别分类特征,这是识别任务必须具备的特性(Deng等人,2018;Wen等,2021;Sovrasov and Sidnev, 2021)。
我们建议将(Baruch等人,2021)和(Wen等人,2021)的范例结合起来,为多标签分类构建更强的损失。表示ML-Decoder生成的归一化类嵌入vj的点积结果(用骨干或接GAT-based分类头),第j个二值分类器Wj为cos。然后,对于训练样本x和相应的嵌入集v,我们将不对称角边缘损失(AAM)表示为:
公式中,s为尺度参数,m为角余量,k为正负加权系数,r+、r−为来自ASL的加权参数。尽管有大量的超参数,但其中一些可以安全地固定(如来自ASL的r+和r−)。变化s的影响在增加s时达到饱和(见图2b),如果这个参数的合适值足够大,我们不需要精确地调整它。另外,m的值应该接近于0,因为它在一定程度上复制了s和r的效果,甚至会带来AAM负部分的不希望的增加(见图2a)。第4.5节提供了对超参数的详细分析。
这里主要就是讲这个loss–AAM,结合了ASL和度量学习,这两者我之前都没学过所以看的云里雾里的,这个需要先验知识,看后面有时间补上,先看个大概。
与我们之前的工作一样(Prokofiev和Sovrasov, 2022),我们的目标是使多标签分类的训练链路可靠、快速和自适应数据集,因此我们使用以下组件:
评判标准
我们采用常用的指标来评价多标签分类模型:所有类别的平均精度(mAP),总体精度(OP),召回率(OR),F1-measure(OF1)和每个类别的精度(CP),召回率(CR),F1-measure(CF1)。我们使用mAP作为主要度量标准;在对各种方法进行高级比较时提供其他方法。在每个需要置信度阈值的操作中,阈值0.5被替换。上述指标的确切公式可以在(Liu et al ., 2021)中找到。
MS-COCO数据集上的测试
表2给出了MS-COCO的结果。对于这个数据集,我们设置s = 23, lr = 0:007, r−= 1,r+=0。在AAM损失的情况下,我们可以使用TResNet-L作为主干来获得最先进的结果。同时,结合ML-Decoder和AAM损耗的efficientnetv2优于带ASL的TResNet-L,同时消耗的FLOPS减少3.5倍。GCN/GAT分支的性能比ML-Decoder稍差,但在推理的边际计算成本上仍然优于EfficientNetV2-s + ASL。
Pascal-VOC测试结果见表3。我们设置s = 17, lr = 0:005, r−= 2,r+ = 1在这个数据集上训练我们的模型。我们对GAT分支的修改在使用EfficientNet-V2-s时优于ML-Decoder,而AAM损耗则提供了一个小的性能提升,并允许使用TResNet-L实现SOTA。此外,在Pascal-VOC上,使用所有考虑的附加图分支或头部的EfficientNet-V2-s显示了比使用ASL的TResNet-L更好的速度/准确性权衡。
这里的GAT re-weighting,我理解就是作者图1的端到端的解决方案,然后ML-Decoder + AAM是来验证AAM的有效性,这里code我初步看作者开源的也是基于EfficientNet-V2-s的backbone的GAT re-weighting的代码。
这里就直接截屏了,就是控制变量做实验,验证模块的有效性
为了演示每个组件对整个管道的影响,我们将它们逐一添加到基线中。
作为基准(baseline),我们采用了使用SGD优化器的EfficientNetV2-s骨干网和ASL损耗。我们将ASL损失和学习率的所有超参数设置为(Baruch et al ., 2021)。我们在所有的实验中使用3.5节中描述的训练策略。
在表6中,我们可以看到除了添加GAT分支之外,每个组件都带来了改进。ML-Decoder有足够的能力来学习标签相关信息,因此提供GAT分支的进一步线索不会改善结果。此外,我们可以看到r参数的调整对AAM损失是有益的,但是度量学习方法本身即使没有它也会带来改进。最后,将GAT分支添加到ML-Decoder并没有提高准确性,这表明来自GAT的附加信息没有给MLDecoder提供新的线索。
在这项工作中,我们重新审视了两种流行的多标签分类方法:基于变压器的头和标签图分支。我们通过应用我们的训练策略和现代技巧包来改进这些方法的性能,并引入一种新的多标签分类损失,称为AAM。该损失结合了ASL损失和度量学习方法的特性,并允许在流行的多标签基准上获得有竞争力的结果。尽管我们证明了图分支的执行非常接近基于变压器的头,但基于图的方法有一个主要缺点:它依赖于语言模型提供的标签表示。未来工作的方向可能是开发一种方法,该方法将建立一个依赖于直接从图像中提取的表示的标签关系图,而不涉及潜在无意义的标签名称。