前言
Fine-grained Recognition: Accounting for Subtle Differences between Similar Classes这是AAAI2020的Paper。首先这不是一篇垃圾论文,虽然没有开源代码。作者是苏黎世联邦理工学院,2020年QS世界大学排名中列第6位。Inception Institute of Artificial Intelligence也是全球顶尖的人工智能研究院。虽然有人评价他的gradient-boosing loss华而不实,实际作用不大,但是其中的想法还是很有启发意义的。
话不多说,开始正文,如有不足,还请斧正
正文
Motivation
由文题Fine-grained Recognition: Accounting for Subtle Differences between Similar Classes 可知,这篇论文关注的是细粒度识别文题中相似类之间的细微差别的问题。
由此可以抓住两个重点:1. Subtle Differences 2.Similar Classes
论文的两个亮点1. diversification block 2.gradient-boosting loss正是解决这两个问题的法宝
回过头来想一想,为什么会有这个问题呢?
第一,以鸟的识别为例,鸟头的位置会成为网络区别不同类的关键位置(对梯度的贡献跟有效),然而如羽毛和其他位置也对网络性能的增强也有作用,但是普通的网络忽视了这些部位的作用。下面的第二行是普通网络的attention map,第三行是作者网络的attention map 作者的diversification block就是为了解决这个问题
第二,最常使用的CE loss(交叉熵损失函数)considering all negative classes equally,从人的角度,我们应该对困难样本多加学习,对难题多加训练,作者通过(gradient-boosting loss)达到这个目的,这是在CE loss的基础上做改进的(The gradient-booting loss focuses on difficult (confusing) classes for each
image and boosts their gradient)
下面重点讲解diversification block 和gradient-boosting loss
Model
先简单说一下整个流程:
- 采用一个backbone进行特征提取,最终得到2048*C(这里的C是class 不是channel) 2048应该是height * width的结果,但是我暂时还不知道是多少乘多少
- 然后将每个 Mc input进diversification block,output *Mc’*然后进行GAP(global average pooling)最终用gradient boosting loss进行评判
diversification block
DB(diversification block)的核心内容在于:使用Mask图抑制(suppress)显著性最强的区域,迫使网络学习其他部位,现在问题就在于:
1. where to suppress?
2. how to suppress?
对于第一个问题:
首先根据生成的Mask二值图判断是否被抑制,值为1的点表示需要被抑制,0的点表示不需要被抑制
对于第二个问题:
-
Peak Suppression
随机抑制高峰位置,因为它们是对于分类器来说最有区分度的位置。对于特征图最大的位置,使用伯努利分布来判断是否遮罩 -
Patch Suppression
还需要使用patch suppression的原因是:Peaks are the most discriminative regions,but there are other discriminative regions as well that encompass more subtle inter-class differences
论文中这一步的解释有点繁琐,简单来说就是:peak suppression只是对高峰像素点就行进行抑制(抑制之后的图称为 ),但是还有一些虽然不是高峰值但是也是值得抑制的部位,所以先对特征图随机(同样是根据伯努利分布随机)分patch,然后随机的对每个patch进行抑制(抑制之后的图称为 )然后总的图为 。
这里有个小问题需要注意: 在对Patch进行抑制的时候,patch块中的像素值可能已经在peak suppression操作中被抑制过了,所以要略过这写被抑制过的点,不然就会出现mask上为2的值,这样就不是二值图了。 -
最后通过如下公式决定是否抑制和抑制强度, 为Activation Suppression Factor文中设置为0.1
直观上的效果如图:
黑色部分表示抑制区域,由于是随机抑制,难免会产生一些问题,想一下有没有改进方案!!
Gradient Boosting Loss
文中对这部分的解释也有点繁琐,下面我就用言简意赅的文字介绍一下:
作者提出了gradient-boosting cross entropy(GCE)来关注负类中置信度最高的k个类。根据阈值,将所有样本划分为两类,GCE只作用于negative class那一类。
**所以这里我就有一个问题:**只有网络在后期的时候才能知道哪些是positive classes 哪些是negative classes,所以在前期使用这个loss是不是不合理。
至于此GCE loss 有Boosting作用,论文中只给出证明,在这里我就不赘述。
Training and Inference
简单一句话:训练的时候使用diversification block,测试的时候不使用
Experiment
总结
- proposed a novel approach to better discriminate closely related categories in fine-grained classification task
- method has two novel components: (a) diversification block that forces the network to find subtle distinguishing features between each pair of classes and (b) gradient-boosting loss that specifically focuses on maximally separating the highly similar and confusing classes.
- solution is both simple and elegant, leads to higher accuracy and demonstrates better computational efficiency
不足在于:
- 随机的选取suppress的区域,不是很合理。
- GCE 的作用在放在训练初期不合理。