问题动机
因为各类之间微小的差异和相关标注数据的缺乏,每个类别训练样本通常遵循长尾分布,其中许多类的训练样本很少,或者没有,细粒度图像分类(Fine-grained visual classification, FGVC)一直是一项非常具有挑战性的任务。目前主要是通过定位最具有辨别力的区域来提高网络捕捉细微差距以解决问题,目前多是用预训练骨干网络找到特征区域的锚框来实现,然而目前寻找锚框的机制都比较复杂,而且捕捉的锚框往往会覆盖特征图的绝大部分区域,无法有效发挥作用。
相关工作
捕捉局部特征
以前,一些研究先显式地寻找零件来定位有用的部件,再进行监督学习。然而,这类数据集的注释十分昂贵,而且不一定准确,于是目前更多是使用只有图像标签的弱监督标签数据集。
关于提取部件,有使用Mask R-CNN来提取对象的判别区域,也有提出构建数据库对分类结果进行排序的方法。这些方法都需要设计一个专门的模块来提取各个部件的特征区域。部分研究直接使用这些局部部件进行分类,但是这样就忽略了部件之间的联系。而且因为人工智能机制本身的问题,神经网络会更倾向于使用范围更大的锚框来保证包含所需的部件,甚至部件会包括特征图的绝大部分区域,这样不但失去了提取特征的作用,而且还会加入大量的背景冗余信息。
特征融合
另一种方法是通过学习更加丰富的特征来获得更好的结果,比如之前看过的双线性池化CNN架构,通过将特征图分别输入两个独立的卷积神经网络,最后将输出的结果矩阵相乘输出融合后的的特征,这种方法很方便作为主干网络集成到其他网络架构上,然而这些方法往往不可解释,难以让人理解哪些部分帮助区分细微差别的子类别,所以很难持续进行改进。
简介
最近Vision Transformer在计算机视觉领域表现出了强大的性能,其中的自注意力机制和图像块的方法可以很好的捕捉图像中的重要区域,从而促进分类性能。于是作者以ViT为基础,根据细粒度图像分类任务的特性,提出了TransFG。作者对ViT做出了很多改进和调整以进一步提高性能,同时保持框架的简洁。
TransFG的主要亮点如下:
- 优化了ViT将图片分割成小块的方法,新的分割方法让小块之间有部分重合,从而避免将较小的重要特征拆开
- 根据多头注意力机制的特性,作者提出了一种去除多头注意力机制中冗余信息的方法,仅将融合了全局信息的最重要小块送入转换层。
- 为了进一步提高相似类别间的距离,缩小同类样本间的距离,作者提出了一种新的损失函数,作者称为对比损失。
TransFG在细粒度图像分类的多个基准数据集中取得了目前最新性能,首次验证了ViT再细粒度图像识别任务上的可行性,同时可以对判别区域进行可视化,更好的理解架构和分类原理
方法核心
小块分割
原本的ViT会将输入的图像拆成多个不重合的小块,再展平送入Transformer中。因为细粒度图像识别差异的重要区域本身也很小,传统分割方法很可能导致将特征拆分成两块。于是作者提出了交叠滑动窗口,和图像卷积类似,每次划分小块时会有部分交叠,为了更容易理解,作者使用了和卷积一样的参数描述交叠区域。假设图像的尺寸为(H,W)
,小块的尺寸为P
,每次滑动的步长为S
,图片会被划分为N
个小块,公式为
对于任意两个小块,两者交叠的区域大小为 像素,这部分信息可以有效提高小块之间的联系。从精度上考虑,步幅肯定越小越好,但是这样会大幅度增加计算量,所以需要有所取舍。
选择模块
对于十分相似的两类之间,可能分类的依据只有非常小的部分,其中ViT中的多头注意力机制就非常擅长提取微小的特征模块,为了充分利用这种能力,作者改进了ViT中的多头注意力机制。
TransFG架构中最重要的部分就是要从上述分割的小块中定位重要的部分。假设多头注意力机制中一个批量大小为B
,有K
个注意力头,在最后一层前,共有L-1
个Transformer模块,小块的数量为N
,标签类为1
。因为注意力机制会计算每个查询和每个键值对的关系,在自注意力机制中,查询和键值对都是自己,其中查询、键、值的尺寸就是小块的数量N
,所以各层原始注意力的权重尺寸为(B,K,N+1,N+1)
根据之前的研究,原始注意力权重无法直接对应各个输入块的重要性,尤其是模型的高层。所以作者对输入特征做了一个融合,将各层的原始注意力权重矩阵相乘,得到的新的注意力权重融合了从低层到高层的注意力信息,去除标签类后的权重层尺寸为(B,K,N)
。
接下来,对每个注意力头选择值最大的那个小块,再将分类标记和这些小块连接起来作为输入序列输入到最后一个Transformer层中。因为这些小块之前通过自注意力机制融合了全局上下文信息,同时又去除了非重要部分的影响,还能强制最后一个Transformer层关注不同层之间的差异,从而有效提高性能
对比损失
由于在细粒度任务中,相似类别之间的差异非常小,所以需要为相似类别之间添加一个对比损失。该损失函数需要最小化不同类别之间的相似度,最大化相同类别之间的相似度。为了防止损失函数的数值被相似度很小的样本支配,作者引入了一个恒定常数,当相似度小于该数之后,直接忽略该样本的对比损失。
在批量中,对于相同标签的样本,相似度越大损失越小,对于不同标签的样本,如果相似度过大,会被附加额外损失,相似度小于该常数后,就不附加额外损失。
最后总的损失则是交叉熵损失加上对比损失。
实验
精度分析
作者发现,在CUB-200-2011数据集上,TransFG比其他所有架构都更优秀,在斯坦福汽车数据集上也有这很强的竞争力。
在CUB-200-2011数据集上,和目前最优的架构StackedLSTM相比,TransFG实现了1.3%精度的改进,达到了91.7%,和ViT相比,有1.4%精度的改进,这在细粒度分类数据集上是个很大的突破。其中性能接近的StackedLSTM训练阶段十分混乱复杂,在实际中几乎没有可用性,S3N架构使用多个ResNet-50作为分支,大幅度增加了计算量和模型复杂性
在斯坦福汽车数据集上的精度为94.8%,表现不如PMG的95.1%和API-Net的95.3%,不过差距很小,作者认为,可能是因为汽车数据集上的背景比其他数据集更简单清晰,所以该架构着力于在复杂背景找出主体和最重要区域在这个数据集上表现不是最佳。然而就算这样,仍然相对于ViT有1.1%的改进
斯坦福狗是一个更具有挑战性的数据集数据集,物种之间的差距更加细微,TransFG达到了92.3%的精度,超过了其他以CNN为主干的架构约2%
在NABirds数据集上相比于ViT架构并不多,仅有0.9%的提升,不过比SOTA高1.6%
iNat2017是一个大规模复杂的数据集,作者发现ViT为基础的架构在这类挑战性的大型数据集上普遍强于ResNet。凭借TansFG方法的简洁性和可解释性,首次达到了70%以上的准确率,并且以3.5%大幅度优于SOTA。
消融实验
作者在CUB-200-2011数据集上对本文的提出的各个方法做了消融实验,验证各方法的有效性
小块分割
在纯ViT架构上应用重叠分割的方法,得到了0.2%的提升。重叠小块所需的计算成本约为原本的250%~300%,不过在细粒度分类任务上,并不是很在乎训练时间,这样的成本也是可以接受的
选择模块
在ViT上使用选择模块之后,Transformer最后一层只对最具判别力的小块进行采样,通过这种方式,强迫网络丢弃一些无用的标记,并从重要的部分学习,模型精度从90.3%提升至91%
对比损失
在纯ViT中使用了对比损失后,精度提高了0.4%,在TransFG中使用对比损失,精度提高了0.5%,这足以证明对比损失可以有效的扩大相似子类别之间的距离,通过混淆矩阵的可视化可以发现,对比损失有效降低了相似类别之间的余弦相似度
关于对比损失的边界距离α,作者发现,较小的话,负类样本会占主导,而较高的值又会影响模型学习足够的信息来判断相似类别,从而影响性能,其中0.4是最佳值
判别区域可视化
作者对该架构的判别区域进行了可视化,其中红框是指选择模块选择的最重要的小块,为了图片整洁,作者只显示了最重要的4块。灰图是图像的整体注意力图,作者平均了所有头部的注意力权重。作者发现,TransFG有效的抵抗了背景的干扰,从图片中捕捉到了对判别图像最重要的区域,比如鸟的眼睛、嘴巴、翅膀、爪子,同时忽略了树枝;汽车的车门、灯、车顶等
总结
作者在本文中对基础ViT进行改进,以用在细粒度图像分类任务上,提出了TransFG架构,其中使用的三种方法十分简洁,可解释也较强,很容易移植到其他架构上继续进行性能提升。这也证明了其实判别物体种类并不是需要特别大的特征区域,仅仅是数个被拆分的小块之间的联系也足以对相似度很高的细粒度数据集进行判别,其中Transformer架构可以有效的处理这些小块之间的内部联系。引入对比损失可以提高分类标记的判别能力。以上研究为后来的工作带来启发。比如
- 因为有了交叠区域,必然会产生不必要的冗余,计算性能也受到了挺大的影响,是否有办法进一步优化这样的采样方法
- 为了找出最重要的小块,作者将同一个头的
L-1
层的注意力相乘,然后选出每个注意力头提取出的最重要的信息,然而研究表明,各个注意力头的提取特征的性能是不一样的,有可能性能较差的头提取出的最重要小块的重要性并不如性能最好的头的次优小块,那能否对所有头的信息进行汇总,再从中挑选出若干个最重要的小块,其中小块的数量是否也可以设置为超参数进行调整,或者由模型自主学习 - 关于对比损失函数,根本目的都是让同类更近,异类更远,作者根据基于余弦损失的相似度来计算损失,而研究表明角度距离比余弦距离对角度的影响更直接,是否可以使用角度距离来评估损失。
- 而且作者选择将对比损失和交叉熵损失相加,能否直接整合成一个损失函数,综合性的评估同类之间的距离。
- 在细粒度任务中,让异类更远明显需要更高的权重,因为相似类别的差距十分微小,能否进一步改进损失函数,提高对相似度很大的不同类别的损失