腾讯提结合ACNet进行细粒度分类,效果达到最新SOTA | CVPR 2020
作者 | VincentLee
来源 | 晓飞的算法工程笔记
细粒度分类(Fine-Grained Visual Categorization, FGVC)是图片分类的一个分支,由于类别间的相似性非常大,一般人比较难区分,所以是个很有研究意义的领域。受神经树研究的启发,论文设计了结合注意力卷积的二叉神经树结构(attention convolutional binary neural tree architecture, ACNet)用于弱监督的细粒度分类,论文的主要贡献如下:
提出结合注意力卷积的二叉神经树结构ACNet用于细粒度分类,在树结构的边上结合了注意力卷积操作,在每个节点使用路由函数从而定义从根节点到叶子节点的计算路径,类似于神经网络。这样的结构让算法有类似于神经网络的表达能力,以及能够从粗到细的层级进行特征学习,不同的分支专注于不同的局部区域,最后结合所有叶子节点的预测值进行最终的预测;
添加attention transformer模块来加强网络获取关键特征进行准确分类;
在三个数据集CUB-200-2011、Stanford Cars和Aircraft上达到了SOTA。
注意力卷积的二叉神经树
ACNet包含4个模块,分别是主干网络(backbone network)、分支路由(branch routing)、attention transformer和标签预测(label prediction),如图2所示。将ACNet定义为,为树状拓扑结构,为树边的操作集。论文使用满二叉树,为节点,为边,对于树深,共节点,边。每个节点为路由模块,决定下一个计算节点,边采用attention transformer进行操作。另外,满二叉树采用了非对称结构,例如左边使用两个transformer模块,右边使用一个transformer模块,这样有利于提取不同尺寸的特征
架构
Backbone network module
由于细粒度类别的关键特征都是高度局部的,需要使用相对较小的感受域来提取特征,因此主干网络使用截断的VGG-16网络,输入改为
Branch routing module
分支路由用来决定子节点的选择,结构如图2b所示,-th层的-th路由模块由卷积和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激活的全连接层输出标量。
假设分支路由模块输出样本到右边节点的概率为,则输出到左边节点的概率为,概率越大的节点对最终结果的影响越大。
Attention transformer
Attention transformer模块用于加强网络获取关键特征的能力,在卷积后面插入结构如图2c所示的attention模块,该模块的旁路输出一个大小为的channel attention map对输入特征进行加权。
Label prediction
对于ACNet的每个叶子节点,用标签预测模块来预测目标的类别,为目标从根节点到k层第i个节点的累计概率,预测模块由卷积层、max pooling层、L2归一化层、全连接层和softmax层组成,通过求和所有的叶子节点的预测结果和路径累计概率的乘积得到最终的预测。
最终的预测结果的各项和为1,论文对其进行了证明,有兴趣的可以去看看,主要基于叶子节点的累计概率和为1,各叶子节点的预测结果和也为1。
训练
Data augmentation
在训练阶段,使用裁剪和翻转操作进行数据增强,首先将图片缩放至短边512像素,然后随机裁剪到,随机进行翻转。
Loss function
ACNet的损失函数由两部分组成,分别为叶子节点预测产生的损失以及最终结果产生的损失。为树高,为GT,为最终预测结果的负对数似然损失,为第个叶子预测结果的负对数似然损失。
Optimization
主干网络使用在ILSVRC上预训练的模型,使用"xavier"进行所有卷积层的随机初始化,整个训练过程包含两阶段,第一阶段固定主干网络训练60周期,第二阶段则使用小学习率对整个网络进行200周期的fine-tune。
实验
训练共需要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得到的响应区域。
结论
论文提出了结合注意力卷积的二叉神经树进行弱监督的细粒度分类,在树结构的边上结合了注意力卷积操作,在每个节点使用路由函数来定义从根节点到叶子节点的计算路径,结合所有叶子节点的预测值进行最终的预测,论文的创意和效果来看都十分不错。
论文地址:https://arxiv.org/abs/1909.11378
【end】
◆
原力计划
◆
《原力计划【第二季】- 学习力挑战》正式开始!即日起至 3月21日,千万流量支持原创作者!更有专属【勋章】等你来挑战
推荐阅读
如何用 CNN 玩转 AlphaGo 版的五子棋?
训练数据也外包?这家公司“承包”了不少注释训练数据,原来是这样做的……
微信iOS版内测暗黑模式;涉嫌恶意举报,社交平台Soul运营合伙人被批捕;AWS推出基于Linux开源操作系统
区块链和大数据一起能否开启数据完整性的新纪元?
Soul App 高管被捕,恶意举报导致竞品被下架
以太坊2.0、分片、DAG、链下状态通道……概述区块链可扩展性的解决方案!
你点的每个“在看”,我都认真当成了AI
相关文章:

asp.net mvc view中支持多个实体强类型小技巧
在MVC的开发过程中,在一个View里面可能需要调用多个对象,可是传统的方法是一次只能压入一个对象到View里面,这点并不像Castle框架的MVC好用,在Castle里面,可以很方便的把对象压入到前台Html里面,然后通过Ve…

使用指针做函数返回值
使用指针做函数返回值 1、当使用指针做为函数的返回值时,主函数处的char *p;将获得调用函数char *pf;的值,即一个地址值,如oxAE72。此时需要我们注意的是该地址值所指向的空间是否存在(即已向操作系统声明注册,不会被释放&#x…

Android Studio快捷键每日一练(2)
原文地址:http://www.developerphil.com/android-studio-tips-of-the-day-roundup-2/ 12、复制行 苹果:CmdD Windows:CtrlD 顾名思义,就是拷贝当前行并粘贴在下一行,整个过程无需和剪贴板交互。这个功能配合行移动快…
C语言字符char和整型int的关系
C语言并无char类型,就是用Int表示char的!char占一个字节,在C语言所有类型中最小。 char *占4字节(32位),8字节(64位) 在C语言中,实际上字符型数据在内存中是以二进制形式…
PyTorch关键算法疑似侵权,Facebook被起诉
作者 | 神经星星来源 | HyperAI超神经(ID:HyperAI)近期,一纸诉讼书引起社区的广泛讨论。该诉讼由创业公司 Neural Magic 发起,指控 Facebook 发布到 GitHub 的神经网络软件,使用了他们开发的核心算法。而泄露机密的人&…

大数据高效复制的处理案例分析总结
一个老客户提出这样的需求,希望将SQLServer中的某个表的数据快速复制到SQLite数据库里面以便进行定期的备份处理,数据表的记录大概有50多万条记录,表有100个字段左右,除了希望能够快速做好外,效率是第一位的࿰…

memset函数使用详解
1.void *memset(void *s,int c,size_t n) 总的作用:将已开辟内存空间 s 的首 n 个字节的值设为值 c。 2.例子 #include void main(){ char *s"Golden Global View"; clrscr(); memset(s,G,6); printf("%s",s); getchar(); ret…
节后招人平均工资9000上热搜,为什么有些人去哪里都值钱?
我”荒“了。这是很多中国AI企业的现状。《人民日报》报道称,我国AI的人才缺口超过500万,供求比例仅为1:10!很多企业已经开始面临“人才荒”的窘境,外媒爆料说,中国企业已经不断在硅谷挖人了!目…

关于定于如何弄的漂亮点
</div></div><div class"panel"><h5 οnclickshowhidediv("sidebar_rss");>订阅博客</h5><div class"panel-content" id"sidebar_rss" style"display: block"><ul class"list&…

Happy New Year 2016
大学之前的时间都是按天来过的,期盼着一天一天地快快长大,期盼着过年穿新衣,阖家团聚,其乐融融; 大学的时间都是按周来过的,根据每周的课表周而复始,虽然单调但也是自由自在,简单充实…

HashTable原理与实现
memcached中hashtable部分的源码,hash部分的源码主要分布在assoc.h/c、hash.h/c中,总得来说代码比较简单,这里就稍微介绍一下。hashtable通常包括哈希函数和解决冲突的方法两个最主要的因素,memcached使用的哈希函数为Bob Jenkins…

as3自定义加载图片类
ImageLoader.as类: package{ import flash.display.Bitmap; import flash.display.Loader; import flash.display.Sprite; import flash.events.Event; import flash.events.ProgressEvent; import flash.net.URLRequest; /** * 图片加载类…
想成为一个数据科学家却不知道从何下手?这份路线图带你打开数据科学大门!...
作者 | Jane译者 | 火火酱 责编 | 徐威龙出品 | AI科技大本营(ID:rgznai100)你想成为一名数据科学家吗?你对数据科学了解很多,想知道关于数据科学天花乱坠的宣传都在讲什么吗?那好,你算是来对了地方。在过去…

bzoj 1691: [Usaco2007 Dec]挑剔的美食家
Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 621 Solved: 280[Submit][Status][Discuss]Description 与很多奶牛一样,Farmer John那群养尊处优的奶牛们对食物越来越挑剔,随便拿堆草就能打发她们午饭的日子自然是一去不返了。现在,Farmer…

PHP内核中的哈希表结构
https://github.com/HonestQiao/tipi/commit/17ca680289e490763a6a402f79afa2a13802bb36 下载:https://github.com/HonestQiao/tipi/tree/master/book/sample/chapt03 原文地址:http://www.nowamagic.net/librarys/veda/detail/1344 PHP中使用最为频…
应聘苹果数据科学家,你需要知道些什么?
作者 | Jay Feng译者 | 孙薇,责编 | 屠敏头图 | CSDN 下载自东方 IC出品 | CSDN(ID:CSDNnews)以下为译文:苹果公司是全球最大的技术公司之一,从事电子消费产品、计算机软件以及在线服务的设计、开发并销售工…

python 利用模板文件生成配置文件
2019独角兽企业重金招聘Python工程师标准>>> gen.py: __author__ fuhan from jinja2 import Template a{name:a} b{name:b} mode_dict { a:a, b:b } def gen_config(tplt_file, modea): with open(tplt_file, r) as r: tplt Template(r.read()) config mode_dic…

利用Apache的ab命令做Benchmark性能测试
测试系统性能,例如httpsqs # ab -k -c 10 -n 100000 "http://127.0.0.1:1218/?namexoyo&optput&dataabc ab是Apache超文本传输协议(HTTP)的性能测试工具。 其设计意图是描绘当前所安装的Apache的执行性能,主要是显示你安装的Apache每秒可…
MySQL 狠甩 Oracle 稳居 Top1,私有云最受重用,大数据人才匮乏! | 中国大数据应用年度报告...
整理 | 屠敏出品 | CSDN(ID:CSDNnews)科技长河,顺之者昌,错失者亡。在这个技术百态之中,中国专业的 IT 社区CSDN 创始人&董事长蒋涛曾多次在公开活动中表示,开发者是对技术变革最敏感的人群。这不仅源于…

MAC安装OpenXenManager管理Xenserver
官方文档:https://github.com/OpenXenManager/openxenmanager要求:Python 2.7pyGTK 2.16ConfigObjRavenGTK-VNC(仅限Linux)Debian / Ubuntu Linux软件包依赖项:python2.7 python-gtk2 glade python-gtk-vnc python-gla…
用Flutter + Dart快速构建一款绝美移动App
作者 | Wojciech Kuroczycki译者 | 弯月来源 | CSDN(ID:CSDNnews)如今,与前端或移动相关的新框架层出不穷。所有从事Web开发的人都应该熟悉各种目不暇接的新方法以及针对复杂问题的轻量级解决方案。我们不再因为没有现成的技术而烦恼…

自己写的单链表
link.c #include <stdio.h> #include <malloc.h> #include <string.h> #include <stdlib.h> #include "link.h"/**** 这是一个计算HASH值的算法**/ int time33(char* arKey,int arlength){int h 0;int i;for(i0;i<arlength;i){h h*3…

假装不知道有尽头(博弈论的诡计)
《笑林广记》中记载这样一则笑话。 有一个人去理发铺剃头,剃头匠给他剃得很草率。剃完后,这人却付给剃头匠双倍的钱,什么也没说就走了。一个多月后的一天,这人又来理发铺剃头。剃头匠还记得他上次多付了钱,觉得此人阔绰…

Java Script 第四节课 Java Script的隐式转换
<!DOCTYPE html><html><head><meta charset"utf-8"><title></title><script type"text/javascript">/*if(exp){exp为true的代码段;}else{exp为false的代码段;}*///其它类型转换成布尔类型假的有var a;//undefin…
深入理解malloc和free
1.为什么free是void*,那么它怎么知道要释放多少内存? 《UNIX环境高级编程》 《C语言编程常见问题解答》 《你必须知道的495个C语言问题》 《UNIX环境高级编程》 2.free源码 内存控制块结构定义 struct mem_control_block {int is_available;int si…

根据IP和MAC查端口
进入交换机的命令提示符.输入show ip arp 查出IP地址跟MAC 地址的对照表.再输入show mac-address-table,看一下这个MAC是从哪个端口学到的转载于:https://blog.51cto.com/124130/271033
“数学不好,干啥都不行!”骨灰级程序员:其实你们都是瞎努力!
之前很多程序员读者向我们反馈:1)数据结构、编程语句,核心原理都是数学,不会数学搞编程好难,后来发现各种东西还要概率论,还要推收敛!近似还要知道泰勒展开!2)做算法优化…

转:秒杀系统架构分析与实战
原文出处: 陶邦仁 欢迎分享原创到伯乐头条 0 系列目录 秒杀系统架构 秒杀系统架构分析与实战1 秒杀业务分析 正常电子商务流程 (1)查询商品;(2)创建订单;(3)扣减库存&a…

Visual Studio中的《C# 语言规范》
无意中的无意发现了个好东西——《C# 语言规范》,您不用到处下载,它就在您的Visual Studio安装目录中,例如:F:\Program Files\Microsoft Visual Studio 9.0\VC#\Specifications\2052\CSharp Language Specification.doc 这是它的目…
超轻量级中文OCR,支持竖排文字识别、ncnn推理,总模型仅17M
整理 | AI科技大本营光学字符识别(OCR)技术已经得到了广泛应用。比如发票上用来识别关键字样,搜题App用来识别书本上的试题。近期,这个叫做chineseocr_lite的OCR项目开源了,这是一个超轻量级中文ocr,支持竖…