ACNet: 特别的想法,腾讯提出结合注意力卷积的二叉神经树进行细粒度分类 | CVPR 2020
论文提出了结合注意力卷积的二叉神经树进行弱监督的细粒度分类,在树结构的边上结合了注意力卷积操作,在每个节点使用路由函数来定义从根节点到叶子节点的计算路径,结合所有叶子节点的预测值进行最终的预测,论文的创意和效果来看都十分不错
来源:晓飞的算法工程笔记 公众号
论文: Attention Convolutional Binary Neural Tree for Fine-Grained Visual Categorization

Introduction

细粒度分类(Fine-Grained Visual Categorization, FGVC)是图片分类的一个分支,由于类别间的相似性非常大,一般人比较难区分,所以是个很有研究意义的领域。受神经树研究的启发,论文设计了结合注意力卷积的二叉神经树结构(attention convolutional binary neural tree architecture, ACNet)用于弱监督的细粒度分类,论文的主要贡献如下:
- 提出结合注意力卷积的二叉神经树结构ACNet用于细粒度分类,在树结构的边上结合了注意力卷积操作,在每个节点使用路由函数从而定义从根节点到叶子节点的计算路径,类似于神经网络。这样的结构让算法有类似于神经网络的表达能力,以及能够从粗到细的层级进行特征学习,不同的分支专注于不同的局部区域,最后结合所有叶子节点的预测值进行最终的预测
- 添加attention transformer模块来加强网络获取关键特征进行准确分类
- 在三个数据集CUB-200-2011、Stanford Cars和Aircraft上达到了SOTA
Attention Convolutional Binary Neural Tree

ACNet包含4个模块,分别是主干网络(backbone network)、分支路由(branch routing)、attention transformer和标签预测(label prediction),如图2所示。将ACNet定义为$(\mathbb{T},\mathbb{O})$,$\mathbb{T}$为树状拓扑结构,$\mathbb{O}$为树边的操作集。论文使用满二叉树$\mathbb{T}={\mathcal{V},\mathcal{E}}$,$\mathcal{V}={v_1,...,v_n }$为节点,$\mathcal{E}={e_1,...,e_k }$为边,对于树深$h$,共$n=2h-1$节点,$k=2h-2$边。每个节点为路由模块,决定下一个计算节点,边采用attention transformer进行操作。另外,满二叉树$\mathbb{T}$采用了非对称结构,例如左边使用两个transformer模块,右边使用一个transformer模块,这样有利于提取不同尺寸的特征
Architecture
Backbone network module
由于细粒度类别的关键特征都是高度局部的,需要使用相对较小的感受域来提取特征,因此主干网络使用截断的VGG-16网络,输入改为$448\times 448$
Branch routing module
分支路由用来决定子节点的选择,结构如图2b所示,$k$-th层的$i$-th路由模块$\mathcal{R}_i^k(\cdot)$由$1\times 1$卷积和global context block组成

global context block的大概结构如上图a所示,来自GCNet的论文中。在context modeling和fusion步骤使用了simplified NL block,在transform步骤使用了SE block,这个模块能够很好地结合上下文信息来提取特征,最后使用global average pooling、element-wise square-root、L2正则化以及sigmoid激活的全连接层输出标量$[0,1]$
假设分支路由模块$R_i^k(x_j)$输出样本$x_j\in X$到右边节点的概率为$\phi_i^k(x_j)\in [0,1]$,则输出到左边节点的概率为$1 - \phi_i^k(x_j)$,概率越大的节点对最终结果的影响越大
Attention transformer

Attention transformer模块用于加强网络获取关键特征的能力,在$3\times 3$卷积后面插入结构如图2c所示的attention模块,该模块的旁路输出一个大小为$\mathbb{R}^{C\times 1\times 1}$的channel attention map对输入特征进行加权
Label prediction
对于ACNet的每个叶子节点,用标签预测模块$\mathcal{P}i$来预测目标$x_j$的类别,$r_i^k(x_j)$为目标$x_j$从根节点到k层第i个节点的累计概率,预测模块由$1\times 1$卷积层、max pooling层、L2归一化层、全连接层和softmax层组成,通过求和所有的叶子节点的预测结果和路径累计概率的乘积得到最终的预测$\mathcal{C}(x_j)={\sum}{i=1}{2{h-1}}\mathcal{P}_i(x_j)r_i^h(x_j)$

最终的预测结果$\mathcal{C}(x_j)$的各项和为1,论文对其进行了证明,有兴趣的可以去看看,主要基于叶子节点的累计概率和为1,各叶子节点的预测结果和也为1
Training
Data augmentation
在训练阶段,使用裁剪和翻转操作进行数据增强,首先将图片缩放至短边512像素,然后随机裁剪到$448\times 448$,随机进行翻转
Loss function

ACNet的损失函数由两部分组成,分别为叶子节点预测产生的损失以及最终结果产生的损失。$h$为树高,$y*$为GT,$L(\mathcal{P}_i(x_j),y)$为最终预测结果的负对数似然损失,$L(\mathcal{P}(x_j),y^)$为第$i$个叶子预测结果的负对数似然损失
Optimization
主干网络使用在ILSVRC上预训练的模型,使用"xavier"进行所有卷积层的随机初始化,整个训练过程包含两阶段,第一阶段固定主干网络训练60周期,第二阶段则使用小学习率对整个网络进行200周期的fine-tune
Experiments
训练共需要512G内存,8张V100,下面的实验主要跟弱监督的细粒度算法进行对比,即不需要额外的标注的细粒度算法
CUB-200-2011 Dataset

Stanford Cars Dataset

Aircraft Dataset

Ablation Study

Effectiveness of the tree architecture

如图5所示,使用树状结构能够显著提升准确率,使用Grad-CAM产生heatmap来对叶子节点对应的响应区域进行可视化,发现不同的叶子节点关注的特征区域各不一样
Height of the tree

Asymmetrical architecture of the tree

论文对比左右路径的attention transformer数的对称性对识别的影响
Effectiveness of the attention transformer module
如图5所示,attention transformer模块能够有效地提升模型的准确率
Components in the branch routing module


论文发现不同的分支路由模块关注的特征区域也不一样,图6的可视化结果分别为图2的R1、R2和R3节点使用Grad-CAM得到的响应区域
CONCLUSION
论文提出了结合注意力卷积的二叉神经树进行弱监督的细粒度分类,在树结构的边上结合了注意力卷积操作,在每个节点使用路由函数来定义从根节点到叶子节点的计算路径,结合所有叶子节点的预测值进行最终的预测,论文的创意和效果来看都十分不错
如果本文对你有帮助,麻烦点个赞或在看呗~
更多内容请关注 微信公众号【晓飞的算法工程笔记】

ACNet: 特别的想法,腾讯提出结合注意力卷积的二叉神经树进行细粒度分类 | CVPR 2020的更多相关文章
- 腾讯推出超强少样本目标检测算法,公开千类少样本检测训练集FSOD | CVPR 2020
论文提出了新的少样本目标检测算法,创新点包括Attention-RPN.多关系检测器以及对比训练策略,另外还构建了包含1000类的少样本检测数据集FSOD,在FSOD上训练得到的论文模型能够直接迁移到 ...
- ACM MM | 中山大学等提出HSE:基于层次语义嵌入模型的精细化物体分类
细粒度识别一般需要模型识别非常精细的子类别,它基本上就是同时使用图像全局信息和局部信息的分类任务.在本论文中,研究者们提出了一种新型层次语义框架,其自顶向下地由全局图像关注局部特征或更具判别性的区域. ...
- CARS: 华为提出基于进化算法和权值共享的神经网络结构搜索,CIFAR-10上仅需单卡半天 | CVPR 2020
为了优化进化算法在神经网络结构搜索时候选网络训练过长的问题,参考ENAS和NSGA-III,论文提出连续进化结构搜索方法(continuous evolution architecture searc ...
- 增量学习不只有finetune,三星AI提出增量式少样本目标检测算法ONCE | CVPR 2020
论文提出增量式少样本目标检测算法ONCE,与主流的少样本目标检测算法不太一样,目前很多性能高的方法大都基于比对的方式进行有目标的检测,并且需要大量的数据进行模型训练再应用到新类中,要检测所有的类别则需 ...
- 商汤提出解偶检测中分类和定位分支的新方法TSD,COCO 51.2mAP | CVPR 2020
目前很多研究表明目标检测中的分类分支和定位分支存在较大的偏差,论文从sibling head改造入手,跳出常规的优化方向,提出TSD方法解决混合任务带来的内在冲突,从主干的proposal中学习不同的 ...
- 旷世提出类别正则化的域自适应目标检测模型,缓解场景多样的痛点 | CVPR 2020
论文基于DA Faster R-CNN系列提出类别正则化框架,充分利用多标签分类的弱定位能力以及图片级预测和实例级预测的类一致性,从实验结果来看,类该方法能够很好地提升DA Faster R-CNN系 ...
- 我熬夜读完这份“高分宝典”,竟4面拿下字节跳动offer
前言 怎样的契机? 实际上,目前毕业已经两年时间了,在大学时就已经开始关注字节跳动的发展.一开始,我是电气自动化专业的,大二清楚目标之后就转计算机了,大四进了一家小型的互联网公司实习,具体就不说哪家了 ...
- [转]腾讯研发类笔试面试试题(C++方向)
https://blog.csdn.net/Xiongchao99/article/details/73381280 1.C和C++的特点与区别? 答:(1)C语言特点:1.作为一种面向过程的结构化 ...
- zz Must read
http://www.opengpu.org/forum.php?mod=viewthread&tid=965&extra=page%3D1 游戏引擎剖析(Game Engine An ...
随机推荐
- postman设置全局变量及参数化
笔者第一次记录使用过程,仅供参考 测试过程中接口的前缀都是一样的,所以我们可以将这个前缀作为全局变量来使用 首先,打开postman点击这里的小齿轮设置 在这里就可以进行变量的一个添加,添加好之后记住 ...
- 高性能RabbitMQ
1,什么是RabbitMq RabbitMQ是实现了高级消息队列协议(AMQP)的开源消息代理软件(亦称面向消息的中间件).RabbitMQ服务器是用Erlang语言编写的,而集群和故障转移是构建在开 ...
- Python python 五种数据类型--数字
一:Number 数字 不可变类型 整型(Int) - 通常被称为是整型或整数,是正或负整数,不带小数点. 长整型(long integers) - 无限大小的整数,整数最后是一个大写或小写的L.(P ...
- Python Tkinter Grid布局管理器详解
Grid(网格)布局管理器会将控件放置到一个二维的表格里.主控件被分割成一系列的行和列,表格中的每个单元(cell)都可以放置一个控件. 注意:不要试图在一个主窗口中混合使用pack和grid (1) ...
- Java实验五参考答案
1.找错误 btOK.setOnAction( new EventHandler<ActionEvent> { public void handle (ActionEvent e) { S ...
- Activiti网关--并行网关
1.什么是并行网关 并行网关允许将流程分成多条分支,也可以把多条分支汇聚到一起,并行网关的功能是基于进 入和外出顺序流的: fork 分支: 并行后的所有外出顺序流,为每个顺序流都创建一个并发分支. ...
- HDU1166(线段树 +更新单点,求区间总和)、HDU1754(线段树 + 更新单点,求区间最大值)
线段树简单应用 先附上几张图便与理解,大佬文章传送门1.传送门2 HDU1166:题目描述 线段树 +更新单点,求区间总和 代码如下(递归版) #include<iostream> #in ...
- 关于C#三层架构增删改查中的“添加”问题
关于“添加”功能的实现比较简单: 先来一个简单的界面: 然后是代码: ··采用的是三层架构的思想写的·· 在DAO中的方法为: (使用了动软自动生成代码) 希望对您有所帮助!
- 个人hexo博客(静态,无后台)搭建
博客搭建 1.工具安装 安装Node.js,其中包含Node.js和npm(包管理器) 利用npm安装cnpm(淘宝的npm,速度在国内更快) npm install -g cnpm --regist ...
- MTK Android 权限大全
Android权限大全 1.android.permission.WRITE_USER_DICTIONARY允许应用程序向用户词典中写入新词 2.android.permission.WRITE_SY ...