作者 | VincentLee

来源 | 晓飞的算法工程笔记

导读:论文提出了类似于dropout作用的diversification block,通过抑制特征图的高响应区域来反向提高模型的特征提取能力,在损失函数方面,提出专注于top-k类别的gradient-boosting loss来优化训练过程,模型在ResNet-50上提升3.2%,算法思路巧妙,结构易移植且效果也不错,值得学习。

简介

在FGVC(fine-grained visual categorization)上,一般的深度学习模型都是通过学习输入图片到输出标签的映射,这样会导致模型倾向于专注少部分显著区域来同时区分模糊的种群内(inter-class)相似性和种群间(intra-class)的变化。

如图1所示,一般的深度学习模型的attention经常密集地集中在小部分区域,因此只会提出有限的特征。因此,论文建议分散attention来构建多样的分布在特征图上的特征。因为在特征层面进行attention分散,在预测时则需要反过来,例如只关注最相似的类别来提高模型的辨别能力。通过关注相似的类别以及分散模型的attention,论文实际是在让模型避免对训练集的overfiting,增加泛化能力。论文的主要贡献如下:

  • 提出gradient-boosting loss,通过适当地调整梯度更新的幅度来解决高度相关类别的模糊部分

  • 提出diversification block,掩盖显著的特征,从而迫使网络去寻找外观相似的类别的不易察觉的不同点

  • 论文提出的方法能够加速模型的收敛以及提高识别的效果

方法

论文提出的方法能简单地接到所有分类网络中,结构如图2所示。使用论文的方法,需要将主干网络的所有global pooling layer和最后的fully conntected layer替换成1x1 convolution,ouput channel等于类别数,模型主要包含两个部分:

  • diversification module,用于迫使网络去获取更多不易察觉的特征,而非专注于明显特征

  • gradient boosting loss,使模型在训练时专注于容易混淆的类别

Diversification Block

考虑如图2中个类别的多标签分类任务,为训练图片,是对应的GT,diversification block的输入是类别特定(category-specific)的特征图 ,由修改后的主干网络输出。标记,其中是对应类别的独立特征图。diversification block的核心思想是抑制中的明显区域,从而迫使网络去提取其它区域的特征,主要面临两个问题:1) 抑制哪些特征?2) 怎么抑制?

  • Mask Generation

下面解释如何产生用于指明抑制区域的mask,定义,是二值抑制mask对应特征图,1表示抑制,0表示不抑制。

  1. Peak suppression

首先对特征图的峰值进行随机抑制,因为这是对分类器最显著的部分,是的峰值mask,'*'是element-wise的相乘,而是服从伯努利分布的随机值,即有的概率为1。

  1. Patch suppression

  将每个分成多个固定大小的patch,定义l行m列的patch为,为patch的集合

  对应的抑制mask,跟峰值的mask一样,使用伯努利分布对块进行赋值,随机值为1的块将整块进行抑制,

  由于只考虑非峰值点,因此将峰值点的值设为0

  最后将两种mask相加得到最后的抑制mask

  • Activation Suppression Factor

  为抑制后的特征图,为抑制因子,后面的实验设置为0.1

   在进行特征抑制后,对特征进行global average pooling来获取最后的置信度

Gradient-boosting Cross Entropy Loss

   diversification module用于发现更多不易察觉的细微特征,而gradient-boosting loss则是避免容易混淆的类别的误分

  • Loss Function

  论文认为,目前使用最广的交叉熵损失函数平均地考虑了所有的负类别,而在细粒度分类中,模型更应该关注相似的负类别,因此提出gradient-boosting cross entropy(GCE),只专注于top-k个负类别

   首先定义为所有的负类别,,为所有负类别的得分,为负类别的top-k类别集合,将分别top-k集合和非top-k集合

   对交叉熵进行改造,只考虑top-k类别的计算,k一般设置为15

  • Gradient Boosting

   公式13和公式14分别是交叉熵和GCE的梯度回传公式

   根据公式10和公式11的定义,可以发现公式15的包含关系

因此可以推出GCE的梯度是要比交叉熵的梯度要大的,使用GCE能够让模型专注于区分混淆类别。

训练和推理

diversification block仅在训练阶段使用,在测试阶段不再使用,改为将完整的特征图输入到global average pooling中。

实验


实验在5个最常用的数据机上进行

Quantitative Results

其中两个数据集的结果如表2、表3所示,可以看到,论文提出的方法在效果上的提升还是挺不错的,而且参数量比较小,在另外几个数据集上,论文提出的方法也是比其它方法要出色

Ablation Study

  • Diversification block (DB)

使用diversification block能让ResNet-50的性能提升0.8%

  • Gradient-boosting loss

如表4所示,使用gradient-boosting loss能让ResNet-50+DB从86.3%提升到87.7%,提升要比其它损失函数方法要好。

  • Suppressing Factor

从实验看出,抑制因子对实验结果影响挺大的,选择0.1的时候表现最好。

  • Choices of k

top-k的数量选择对结果影响也是比较大的,选择top-15的时候效果最好。

  • Convergence Analysis

从图5可以看出,论文提出的方法收敛速度更快,尽管可以看到原始方法在训练集上的准确率比论文提出的方法要好,但是在测试集的表现不好,这说明原始方法对训练集有点过拟合了。

Qualitative Results

从图4可以看出,论文提出的方法提取了更多的特征区域。

ImageNet Results

为了进一步验证论文提出的模型的效果,在ImageNet上进行了实验。由于论文的方法专注于难样本,因此在50轮后的训练才进行对比,可以看到论文的方法的效果在ImageNet上还是不错的。

结论

论文提出了diversification block以及gradient-boosting loss,diversification block通过随机抑制响应高的区域引导模型学习更多的不易察觉的特征,有点类似dropout的思想,而gradient-boosting loss则让模型专注于top-k个类别的学习,加大对应类别的梯度回传,使得训练收敛更快且提升性能。总体而言,论文的思路清晰,而且效果还是有的,可以实验下,然后当作基本方法加入到平时网络的架构中,特别是后面的gradient-boosting loss。

论文地址:https://arxiv.org/abs/1912.06842

(*本文为AI科技大本营转载文章,转载请联系原作者)

精彩推荐

1、评选进行中,参与投票即有机会参与抽奖,60+公开课免费学习

2、【Python Day——北京站】现已正式启动,「新春早鸟票」火热开抢!2020年,我们还将在全国多个城市举办巡回活动,敬请期待!活动咨询,可扫描下方二维码加入官方交流群~

CSDN「Python Day」咨询群 ????

来~一起聊聊Python

如果群满100人,无法自动进入,可添加会议小助手微信:婷婷,151 0101 4297(电话同微信)


推荐阅读

  • 云计算的 2020:云原生崛起,重新定义软件

  • Kubernetes 将何去何从?

  • 数十名工程师作战5天,阿里达摩院连夜研发智能疫情机器人

  • 阿里云免费开放一切AI算力,加速新型冠状病毒新药和疫苗研发

  • 疫情之下「在家办公模式」开启,你该选择哪些远程协同工具?

  • Python、Go、JavaScript、Rust 将长盛 5 年

  • 比特币区块链将分道扬镳、Libra 苦难继续,2020 区块链进入关键时期

  • 你点的每个“在看”,我都认真当成了AI

反向R?削弱显著特征为细粒度分类带来提升 | AAAI 2020相关推荐

  1. 基于深度学习的细粒度分类研究及应用

    本文主要介绍深度学习图像分类的经典网络结构及发展历程,就细粒度图像分类中的注意力机制进行了综述,最后给出了汽车之家团队参加CVPR2022细粒度分类竞赛所使用的模型及相关算法.参赛经验等,同时介绍了该 ...

  2. R语言构建xgboost模型:基于叶子索引衍生出新的特征并进行独热编码(one-hot encoding)之后构建新的模型、比较加入叶子索引特征的模型的分类性能提升

    R语言构建xgboost模型:基于叶子索引衍生出新的特征并进行独热编码(one-hot encoding)之后构建新的模型.比较加入叶子索引特征的模型的分类性能提升 目录

  3. Transformer在细粒度分类上的应用

    TransFG :Transformer在细粒度分类上的应用 摘要 1.引言 2.相关工作 ==细粒度视觉分类== **==Transformer==** 3.方法 3.1作为特征提取的vision ...

  4. 深度学习之细粒度分类

    目录 一.概述 资源 什么是细粒度图像分类 意义 细粒度图像分类的挑战 细粒度分类常用方法 二.基于定位-识别的方法 2.1 强监督 2.1.1 Part-based R-CNN 2.1.2Pose ...

  5. 基于深度学习的细粒度分类调研1

    细粒度分类: 细粒度分类(识别)的概念其实非常简单,即模型需要识别非常精细的子类别.一般识别出物体的大类别(比如:计算机.手机.水杯等)较易,但如果进一步去判断更为精细化的物体分类名称,则难度极大. ...

  6. 细粒度分类网络 RACNN 论文翻译

    racnn论文翻译 论文原地址http://openaccess.thecvf.com/content_cvpr_2017/papers/Fu_Look_Closer_to_CVPR_2017_pap ...

  7. 细粒度分类数据集汇总

    医疗图像更多的是小样本学习,那么如何选择一个小样本数据集来针对各个算法进行比较,从而选择最好的算法,故整理了小样本学习相关的数据,也就是常用的细粒度分类数据 简单的小样本分类的每个类别的图片或者语料大 ...

  8. 腾讯提结合ACNet进行细粒度分类,效果达到最新SOTA | CVPR 2020

    作者 | VincentLee 来源 | 晓飞的算法工程笔记 细粒度分类(Fine-Grained Visual Categorization, FGVC)是图片分类的一个分支,由于类别间的相似性非常 ...

  9. CVPR 2020 细粒度分类挑战赛冠军方案:数据增强+知识蒸馏,效果大幅提升

    本文转载自机器之心. 近日,支付宝天筭安全实验室在 CVPR FGVC(细粒度视觉分类)workshop 举办的植物病理学挑战赛(Plant Pathology Challenge)中夺冠.本文介绍了 ...

最新文章

  1. 关于方程a^x=1(mod m)的最小x解
  2. php取消转译代码,PHP在我不需要的时候进行转义
  3. 谁是对象谁是类?你搞清楚了吗?
  4. python库之numpy
  5. 华为 MindSpore 喊你来开发 10 大 AI 模型,260 万奖金怎能没你一份?
  6. windows10风格 springboot mybatis 项目框架源码 shiro 集成代码生成器
  7. 【转】如何把Matlab中的m文件转化成C语言代码
  8. var a=function和function b有什么区别
  9. EXCEL-VBA函数:公历转农历,返回格式YYYY-MM-DD
  10. C++ 输出日志到 DbgView
  11. suse12 sp4,sp5镜像资源分享
  12. phpstudy和php,phpstudy与xampp区别
  13. matlab simulink单相桥式逆变电路
  14. iconfont 彩色图标的使用
  15. 笔记本风扇声音大怎么办
  16. 禁止使用搜狗浏览器打开QQ邮箱,更换成其他邮箱
  17. ubuntu双系统引导梅花_Win10+ubuntu 双系统安装顺顺利利!
  18. 三十岁了学python还可以吗-三十岁了还可以学编程吗?只要你想,只要你做,什么时候都不晚...
  19. 创建一个背景色为蓝色的Pygame窗口
  20. Dota 游戏中的攻击与伤害分析

热门文章

  1. 二叉树的层次遍历 II
  2. CSS盒模型及边距问题
  3. l5如何通过路由走api版本回退查找设置
  4. Android入门——电话拨号器和4种点击事件
  5. 【人在职场】能力与价值
  6. 中国移动与苹果联姻 三星在华霸主地位或遭取代
  7. 低速自动驾驶车辆的定位与建图
  8. 状压DP Hiho-1044 状态压缩
  9. point-to-point(点对点) 网口
  10. 2016年度工作总结