写在前面
本?是?篇细粒度分类领域性能达到 state of art 的?章分析。之前?直对细粒度分类领域不太了解,直到最近开始做?些分类任务时发现,直接使??般图像分类领域的 cnn 模型,例如 resnet、efficientnet 等,效果并不好,模型的分辨能?不?以区分特征很相近的类别,例如不同病变级别的癌细胞。
因此,我们的模型需要更强的特征区分能?,这个时候有两种思路,?种是上?脸识别领域的各种 large margin loss,另?种就是细粒度分类。这篇?章是笔者近期尝试下来性能?较好的?作,在这?谈下??的理解。
?章思路
这篇?章的动机并不复杂,通过在普通分类模型中加?两个操作:AttentionCropping 和 Attention Dropping,使模型实现 See Better Before Looking Closer。通俗的来讲,就是训练过程中在原图基础上 crop 出感兴趣区域,然后将 crop 出来的区域以及剩下的区域加?训练集,实现?个在线数据增强的效果。咋?看,?常简单合理,而且扩展性很好,在该框架的基础上可以做很多改进。这也是我决定尝试这篇?章的原因,代码好写啊。
模型结构
那么问题来了,如何做 Attention Cropping 呢?这?作者也进?了详细的描述。如图,?先对原图进?特征提取得到 Feature Maps (BxCxNxN),再经过?个普通卷积得到 Attention Maps (BxMxNxN),利??成的 Attention Maps 来指导 crop 的区域。
为了让 Attention Maps 能够正确地知道出模型 crop 出正确的感兴趣区域,需要施加?个深度监督,作者也给出了解决办法。这?其实借鉴了《Bilinear CNN Modelsfor Fine-grained Visual Recognition》中的 bilinear pooling,只不过作者这?引?了Attention Maps,因此就变成了bilinear attention pooling,原理其实是?样的,通过 Feature Maps (BxCxNxN) 和 Attention Maps (BxMxNxN) 点积,?成Feature Matrix (Bx(C*M)) ,然后对这个特征矩阵进?监督,要求每个类别的特征矩阵相似。这样?的就达到了,每次 crop 都能集中在感兴趣区域。
还有个需要注意的点是,?章中提到,模型训练和预测的流程是不?样的,训练?到了原图,crop 图和 drop 图的预测结果,?测试过程的伪代码如下,只?到了原图和 crop 图,将测试结果进行平均,想想也合理,训练结束后默认 crop 的都是准确的感兴趣区域了。
实验结果
不出意外,该方法在各个数据集上都达到了SOTA,而且对比传统的cnn模型涨点非常多。个人认为,在实际生活中,很多图像分类问题都可以理解为细粒度分类,比如人脸、车辆、建筑等等,因此这篇文章还是非常实用的。
写在最后
笔者亲?尝试了这篇?章的?法,在我自己的数据集上涨了5个点,还是很work的,重点是即插即?,实现起来很?便,推荐?家尝试,如有疑问,可以在评论区相互交流哈。
本文暂时没有评论,来添加一个吧(●'◡'●)