此篇文章是transformer在细粒度领域的应用。
问题:Transformer还未应用在图像细分类领域中
贡献点:1.vision transformer的输入把图像切分成patch,但是是没有overlap的,文章改成切分patch用overlap(这只能算个trick)
2.Part Selection Module
通俗讲就是最后一层的输入与vision transformer不同,即把最后一层前的所有层(红框所示)的权重累乘,再筛选出权重大的token拼接起来作为第L层的输入。
首先第L-1层的输出原本是这样的:
前面某层的权重如下:
其中下标l的取值范围为(1,2,...,L-1)
假设有K个self-attention head,那么每个head中的权重为:
其中上标i的取值范围为(0,1,...,K)
则对最后一层前面的所有层累乘权重:
然后选择权重最大的A_k个token作为最后一层的输入。
所以经过处理后,其输入可表示为:
从模型架构上看,可以发现红框内带有箭头的token是被选中了的,也是经权重累乘后权值大的token,右侧蓝色框代表选中的token对应的patch。
3.Contrastive loss
作者说细粒度领域不同类别之间的特征很相似,因此单纯用交叉熵损失来学习特征是不够的,在交叉熵损失后加了新的Contrastive loss,这个损失里引入了余弦相似度(用来估计两个向量的相似情况),向量越相似余弦相似度越大。
作者提出此loss function的目的是缩小不同类别“分类token”的相似程度,最大化相同“分类token”的相似程度,通俗说就是不同类的尽量不相似,同类的尽量相似。Contrastive loss其公式如下:
其中a是人为设定的常量。
所以总体函数为:
实验:
在细分类的几个数据集上与CNN和ViT进行比较,为SOTA