CVPR2020|比CNN更强有力,港中文贾佳亚团队提出两类新型自注意力网络
关注极市平台公众号(ID:extrememart),获取计算机视觉前沿资讯/技术干货/招聘面经等
原文链接:比CNN更强有力,港中文贾佳亚团队提出两类新型自注意力网络
Exploring Self-attention for Image Recognition
paper:https://hszhao.github.io/papers/cvpr20_san.pdf
code:https://github.com/hszhao/SAN
该文是香港中文大学贾佳亚老师团队投于
CVPR2020
的一篇关于动态滤波器卷积的文章。对动态滤波器卷积实现不明白的小伙伴可能看该文会非常费力。本文首先在不改变原文意思的基础上进行简单的翻译与介绍,在后续的文章中本人将从另一个角度(当双边滤波遇到深度学习
)对该文进行解析并进行复现和转换。
Abstract
近期的研究表明:自注意力可以作为图像识别模型的基础模块而存在。作者探索了自注意力机制的变种并对其在图像识别中的有效性进行了评价。作者考虑了两种形式的自注意力机制:(1) pairwise self-attention
,它是标准点积注意力的扩展,本质上是一组操作;(2) patchwise self-attention
一种比卷积更强有力的的操作,其对应的模型明显优于标准卷积版本。作者还通过实验验证了所提表达方式的鲁棒性,并证实自注意力网络从鲁棒性和泛化性能方面均优于标准卷积网络。
看完上面这一段介绍,大家有没有感觉看的云里雾里,不知所云。这到底是个什么鬼?没关系,下面的原文翻译会让你更加的不知所云,拭目以待!
Method
在卷积网络中,网络中的OP有两个作用:(1) 特征聚合(feature aggregation),对局部近邻特征采用核参数进行加权得到输出特征;(2) 特征变换(feature transformation),它有后接线性映射以及非线性函数达成(即BatchNorm+ReLU
)。
作者认为:前述两个功能可以解耦。如果可以采用一种特殊的机制进行特征聚合,那么采用感知器(它包含线性映射与非线性函数)进行逐点特征变换。作者主要聚焦于特征聚合部分进行研究。其实说白了就是尝试提出一种特殊的机制替代标准卷积。
常规卷积通过固定核进行特征聚合,即全图权值共享,不会随特征内容而自适应变化,同时参数量会随着聚合特征数量增加而增加。鉴于此,作者提出几种特征聚合机制并构建了一个高性能图像识别框架(它交错执行特征聚合(自注意力)和特征变换(逐点感知器))。
作者探索了两种类型的自注意力机制:(1) pairwise self-attention
;(2) patchwise self-attention
.
Pairwise Self-attention
首先,给出Pair Self-attention
的定义:
yi=∑j∈Riα(xi,xj)⊙β(xj)y_i = \sum_{j \in \mathcal{R}{i}} \alpha(x_i, x_j) \odot \beta(x_j) yi=j∈Ri∑α(xi,xj)⊙β(xj)
其中,⊙\odot⊙表示Hadamard
乘积xix_ixi表示特征图在i位置处的特征向量,R(i)\mathcal{R}(i)R(i)表示局部近邻空间。函数β\betaβ将对输入局部特征进行编码并将被用于特征聚合,聚合参数为自适应参数并通过α(xi,xj)\alpha(x_i, x_j)α(xi,xj)确定。
α(xi,xj)\alpha(x_i,x_j)α(xi,xj)构成了该自注意力的核心,它用于计算待聚合特征的权值。为简化不同自注意力的描述,对其进行分解得到如下形式:
α(xi,xj)=γ(δ(xi,xj))\alpha(x_i, x_j) = \gamma(\delta(x_i, x_j)) α(xi,xj)=γ(δ(xi,xj))
其中,而δ\deltaδ则根据待聚合成对特征xi,xjx_i, x_jxi,xj输出一个特征向量,而γ\gammaγ函数则据此输出用于特征聚合的权值标量。γ\gammaγ函数使得可以尽可能的去探索xi,xjx_i,x_jxi,xj之间的相关性,而不需要考虑维度对齐问题。
作者探索了下面几种形式的相关函数δ\deltaδ,其中ψ,ϕ\psi, \phiψ,ϕ表示可训练的变换,两者具有相同的输出维度。
- Summation: δ(xi,xj)=ψ(xi)+ϕ(xj)\delta(x_i, x_j) = \psi(x_i) + \phi(x_j)δ(xi,xj)=ψ(xi)+ϕ(xj)
- Subtraction: δ(xi,xj)=ψ(xi)−ϕ(xj)\delta(x_i, x_j) = \psi(x_i) - \phi(x_j)δ(xi,xj)=ψ(xi)−ϕ(xj)
- Concatenation: δ(xi,xj)=[ψ(xi),ϕ(xj)]\delta(x_i, x_j) = [\psi(x_i), \phi(x_j)]δ(xi,xj)=[ψ(xi),ϕ(xj)]
- Hadamard product: δ(xi,xj)=ψ(xi)⊙ϕ(xj)\delta(x_i, x_j) = \psi(x_i) \odot \phi(x_j)δ(xi,xj)=ψ(xi)⊙ϕ(xj)
- Dot product: δ(xi,xj)=ψ(xi)Tϕ(xj)\delta(x_i, x_j) = \psi(x_i)^{T}\phi(x_j)δ(xi,xj)=ψ(xi)Tϕ(xj)
Position Encoding
pair self-attention
的一个突出特征:特征向量xjx_jxj是独立的进行处理,仅依赖于近邻特征计算权值,而不会依赖范围之外的其他特征。为了对模型提供空间上下文信息,作者对其进行了扩展并编码的位置信息。编码方式如下:
将水平和垂直坐标分别进行归一化,归一化到[−1,1][-1, 1][−1,1].归一化后的两个坐标系进行拼接并融入另一个可训练的线性子网络,该子网络将输出每个位置(i,j)(i,j)(i,j)的位置编码信息。作者采用近邻点坐标与中心点的差值进行位置信息编码,该位置编码信息将增广前述δ(xi,xj)\delta(x_i, x_j)δ(xi,xj)并产生协同作用。
Patchwise Self-attention
作者研究的另一种自注意力机制为patchwise self-attention
,其公式定义如下:
yi=∑j∈R(i)α(xR(i))j⊙β(xj)y_i = \sum_{j \in \mathcal{R}(i)} \alpha(x_{\mathcal{R}(i)})_j \odot \beta(x_j) yi=j∈R(i)∑α(xR(i))j⊙β(xj)
其中xR(i)x_{\mathcal{R}(i)}xR(i)表示块特征向量,α(xR(i))\alpha(x_{\mathcal{R}(i)})α(xR(i))表示同空间维度的块特征向量构成的tensor。
在patchwise self-attention
中,作者允许构建的额权值向量直接作用于β(xj)\beta(x_j)β(xj),该权值集成了更多的近邻特征向量信息。需要注意的是:patchwise self-attention
不再是一组操作,它不再具有pairwise self-attention
的置换不变性,它可以自适应的从不同位置编码不同的特征信息,从而具有强于卷积的性能。
类似的,作者对α(xR(i))\alpha(x_{\mathcal{R}(i)})α(xR(i))进行解耦表示为:
α(xR(i))=γ(δ(xRi))\alpha(x_{\mathcal{R}(i)}) = \gamma(\delta(x_{\mathcal{R}_i})) α(xR(i))=γ(δ(xRi))
类似地,作者研究了下面几种形式的δ\deltaδ函数:
- Star-product: δ(xRi)=[ψ(xi)Tϕ(xj)]∀j∈R(i)\delta(x_{\mathcal{R}_i}) = [\psi(x_i)^T\phi(x_j)]_{\forall j \in \mathcal{R}(i)}δ(xRi)=[ψ(xi)Tϕ(xj)]∀j∈R(i)
- Clique-product: δ(xRi)=[ψ(xj)Tϕ(xk)]∀j,k∈R(i)\delta(x_{\mathcal{R}_i}) = [\psi(x_j)^T\phi(x_k)]_{\forall j,k \in \mathcal{R}(i)}δ(xRi)=[ψ(xj)Tϕ(xk)]∀j,k∈R(i)
- Concatenation: δ(xRi)=[ψ(xi),ϕ(xj)]∀j∈R(i)\delta(x_{\mathcal{R}_i}) = [\psi(x_i), \phi(x_j)]_{\forall j \in \mathcal{R}(i)}δ(xRi)=[ψ(xi),ϕ(xj)]∀j∈R(i)
Self-attention Block
上图给出了本文所提出的自注意力机制在残差模块中嵌入示意图。输入特征图将经由两个处理流:(1)左边分支用于评估输出注意力权值;(2)右边分支将对输入进行线性变换,为更有效的处理进行降维。前述两个分支的输出将通过Hadamard
乘积进行特聚合,聚合后特征将经由规范化操作+非线性激活与最后的非线性层得到与输入同等通道的输出。
看到这里,不知道各位小伙伴是否看懂了作者想要表达的意思?反正我第一次看的时候是没看懂,也不知道到底是怎么做的,看的云里雾里一塌糊涂。没关系,我后面会提供一种更为通用的解释来介绍上述两种自注意力机制。
Network Architectures
前面基本上已经把本文的核心全部介绍完毕了,那么接下来就是要说明一下如何利用前述提到的两种模块搭建一个完成的神经网络了。
ResNet
不愧是深度学习的里程碑,万能油网络啊,太多太多的网络都是在ResNet
的基础上进行修改发paper,造就了太多的高质量paper
(比如Res2Net, ResNeXt, MobileNetV2
等)。
没有任何意外,作者还是在ResNet
的基础上进行改造。下表为改造模型参数列表,作者提供了三种深度的网络SAN10, SAN15, SAN19
,它们分贝对应ResNet26, ResNet38, ResNet50
。
前面给出了作者改造的网络结构:SAN系列。我们从下面几个部分针对该系列模型进行简单的分析。
- Backbone: SAN的骨干部分包含5个阶段,不同阶段具有不同的空间分辨率,最终输出32倍下采样的特征。每个阶段包含不同数量的自注意力模块,相邻的两个阶段参考``DenseNet
通过过渡层(过渡层的作用是降低空间分辨率并提升通道数)桥接。在五个阶段之外,后接一个分来Head模块,该模块由全局均值池化、全连接层以及
softmax`构成。 - Transition:过渡层的用于降低特征空间分辨率,因此可以降低计算复杂度提升感受野。过渡层由
BatchNorm、ReLU、MaxPool以及1x1卷积
(用于扩增通道维度)构成。 - Footprint:局部范围R(i)\mathcal{R}(i)R(i)用于控制特征聚合的上下文数量,为平衡计算复杂度和效果,作者在后四个阶段的只注意模块中设为7×77\times 77×7,而第一个则设为3×33\times 33×3(出于计算复杂度、显存消耗考虑)。
- Instantiations:通过调节网络不同阶段的自注意力模块的数量控制网络的容量,相关配置参数将上表,基本上是参考
ResNet
进行设置的。
Comparison
上表对比了自注意力模块与常规卷积、标量注意力机制之间的区别所在。
- Convolution:常规卷积具有固定的核权值,不会随内容而变化,但和权值会跨通道变化(但这种变化是训练确定的,很难说是真正意义上的通道自适应);
- Scalar Attention:标量注意力的聚合权值会根据内容随位置发生变换,但存在跨通道共享。
- Vector attention:作者所设计的自注意力模块则同时具有内容自适应与通道自适应性。
Experiments
作者在ImageNet
数据集上进行了所提方法的实验与验证。相关训练信息如下:
Epoch
:100Learning rate
: cosine learning rate with base 0.1Standard data augmentation
: random crop, random flip, normalizeSyncSGD
: momentum=0.9, weight decay=0.0001Label Smoothing
: regularization coefficient=0.1BatchSize
: 256.关于自注意力模块的几个参数设置为:r1=16,r2=4r_1=16,r_2=4r1=16,r2=4,权值共享的通道数设为8.
上图给出了所提SAN与对标ResNet
的性能差异对比。从中可以看到:(1) pairwise
模型媲美甚至优于对标的ResNet
模型;(2)patchwise
模型以极大的优势超越了对标的ResNet
。
上表对比了自注意力模块中不同相关函数下的性能,从中可以看到:(1)对于pairwise
模型而言,summation、subtraction以及Hadamard乘积
具有相似的精度,并优于其他两种相关函数;(2)对于patchwise
模型而言,concatenation
取得最佳性能。
上表对比了自注意力模块中不同映射函数的性能对比。从中可以看到:(1)对于pairwise
模型而言,两个全连接层即可取得最佳性能;(2) 对于patchwise
模型而言,不同的配置具有相似的性能(考虑到内存占用与计算量问题,作者最终选用了两个全连接层的配置)。
上表验证了自注意力模块中使用三个离散变换函数的必要性。从中可以看到:使用三个独立的变换函数具有最佳性能,使用独立变换函数的另外一个优势是降低计算复杂度。
上表对比了自注意力模块中不同局部范围(即卷积核尺寸)下的性能对比。从中可以看到:(1)在常规卷积中,提升卷积核尺寸会提升计算复杂度与内存占用;(2)在SAN中,性能先随核尺寸增大而提升,而后达到饱和。对于pairwise
模型而言,提升核尺寸对于参数没有任何影响。综合考量后,作者将核尺寸设置为7×77\times77×7。
最后,作者评价了位置编码在pairwise模型中的重要性,结果见上表。从中可以看到:位置编码具有很重要的影响:位置编码能带来5%的性能提升。
此外,作者从两个方面验证了模型的鲁棒性。(1) 旋转鲁棒性(见上表),pairwise
模型具有更佳的抗旋转性鲁棒性,这也与前面提到的patchwise
不具有置换不变性不谋而合;(2) 对抗鲁棒性(见下表),patchwise
具有更佳的对抗攻击鲁棒性;(3)相比常规卷积网络,自注意力网络具有更佳的鲁棒性和泛化性能。
Conclusion
作者研究了自注意力在图像识别模型中的有效性,作者提出了两种形式的自注意力:pairwise
与patchwise
。作者通过实验得到以下几点重要发现:
- 基于
pairwise
的网络取得了匹配甚至超越纯卷积网络的性能,这意味着计算机视觉中深度学习的成功并非与卷积网络紧密相连,还有其他的方案具有媲美甚至更优的判别能力(比如permutation- and cardinality-invariance); - 基于
patchwise
的网络取得了超越纯卷积网络的性能,这意味着块自注意力可能在其他计算机视觉中取得更好的性能增益; - 相比标量(scale/dot-product)自注意力机制(当前主流注意力机制),向量(vector)自注意力更有力且具有明显优势。
△关注极市平台,获取最新CV干货
CVPR2020|比CNN更强有力,港中文贾佳亚团队提出两类新型自注意力网络相关推荐
- 腾讯优图贾佳亚:当AI进入产业应用时代时,计算机视觉技术更应该服务于人才对!...
作者 | 刘晶晶 出品 | CSDN云计算(ID:CSDNcloud) 从移动支付的自动贩卖机到刷脸支付的智能货柜: 从亲自到柜台验证到人脸核身远程开卡: 从排队买票.排队进门的糟糕旅游体验到提前预约 ...
- 腾讯优图贾佳亚:人工智能的多模态发展
https://www.toutiao.com/i6714210231108239876/ "人工智能的终极应用距离我们到底还有多久?" 贾佳亚的答案是:可能还需要50-100年. ...
- 【转】贾佳亚港中文团队冠军技术分享:最有效的COCO物体分割算法
转自:http://www.sohu.com/a/201822261_473283 [新智元导读]物体分割(instance segmentation)是如今视觉领域最热最核心的一个问题.在这届国际图 ...
- 港中文周博磊团队:无监督条件下GAN潜在语义识别指南
点击上方"机器学习与生成对抗网络",关注"星标" 获取有趣.好玩的前沿干货! 作者:Yujun Shen.Bolei Zhou 机器之心编译 参与:蛋酱.魔 ...
- 腾讯优图一年记:贾佳亚的专访笔记
腾讯优图一年记:贾佳亚的专访笔记 关于规模 关于服务 业务成熟的原因 我们选择任务时考虑的因素有三点(目标:尽量高效利用资源) 关于技术与需求之间的gap 学术的人才来工业界的优势 学术界与工业界的g ...
- 腾讯优图实验室贾佳亚:加入优图第一年 | 专访
机器之心原创,作者:邱陆陆. 贾佳亚是 2017 年 5 月加入优图实验室,担任总经理一职的.1 年 3 个月之后,他以「可以看到.可以感受到.可以用到」为标准,精选了优图实验室的一众技术,在上海完成 ...
- 华科出身,师从贾佳亚,从鹅厂到创业,90后如何登上胡润U30?
作者 | 八宝粥 出品 | CSDN(id:CSDNnews) 随着AI 技术的发展,国内外涌现出一大批基于AI 落地的工业项目,例如无人车,巡检机器人.仓储智能系统等等.2019年,一家以 AI 视 ...
- 离开腾讯首创业,贾佳亚谈人工智能 2.0 革命,技术究竟该如何变革?
关注上方"深度学习技术前沿",选择"星标公众号", 资源干货,第一时间送达! 一周前,原腾讯杰出科学家.优图实验室 X-Lab 负责人贾佳亚离职并创立了一家新的 ...
- 尘埃落定!AI 大牛贾佳亚离开腾讯优图,创立思谋科技,投身差异化 AI 创业
2020-02-28 01:05 导语:祝福!!! 雷锋网AI 科技评论消息,原腾讯杰出科学家.优图实验室X-Lab负责人.香港中文大学计算机科学工程系终身教授贾佳亚近日创立一家新的 AI 公司- 思 ...
最新文章
- 在SAP PI中建立场景
- perl中的几个模块使用.
- Web 压力测试工具 --Apache AB
- IOCP之accept、AcceptEx、WSAAccept的区别
- js判断是微信、QQ内置浏览器打开页面
- treemap 倒序_EXCEL按条件倒序提取,倒数第三次成绩?
- 元素隐式具有 “any” 类型,因为类型“Shared”没有索引签名问题解决思路
- 事件EVENT与waitforsingleobject的使用以及Mutex与Event的区别
- Windows监听进程是否退出C++
- Java 用反射设置对象的属性值
- java辅助百度贴吧_【图片】【共同上进】新手java代码辅助代写贴,新手福音! 申精!_java吧_百度贴吧...
- C语言基础练习题初学者可参考
- 计算机操作系统-操作系统的定义
- WinEdit编辑器中中文乱码
- TriCore 与 RT-Thread(TC264 移植)
- vue 组件自己不能删除自己,$destroy从组件树上删除+从视图上消失
- t460p和t470p对比评测_老模具小升级 ThinkPad T470p商务本评测
- 【转载】关于Python Beautifulsoup的详细说明
- 【Linux】单网卡设置双ip的方法
- docker cuda的devel和runtime包