Attention Convolutional Binary Neural Tree for Fine-Grained Visual Categorization

来自于CVPR2020的一篇文章,
原文链接:https://arxiv.org/abs/1909.11378
代码发布地址: https://isrc.iscas.ac.cn/gitlab/research/acnet.(应该是暂时还没有发布,一直在留意,很期待)
论文提出了使用注意力卷积的二叉神经树进行细粒度分类,在树结构的边上进行注意力卷积操作,每个节点使用路由函数来定义从根节点到叶子结点的计算路径,结合所有叶子结点的预测值进行最终的预测。
思维导图
在这里插入图片描述
Model
在这里插入图片描述
整个的ACNet model由4部分组成,包括backbone、Branch Routing、Attention Transformer、Label Prediction。
符号定义:
定义一个pair ( T , O ) (\Bbb{T},\Bbb{O}) (T,O)。其中 T \Bbb{T} T代表树的拓扑, O \Bbb{O} O代表沿着 T \Bbb{T} T边的操作集。
二叉树定义为 T = V , ε \Bbb{T}={\mathcal{V},\mathcal{\varepsilon}} T=V,ε,其中 V = v 1 . v 2 . . . . v n \mathcal{V}={v_1.v_2....v_n} V=v1.v2....vn是节点的集合,n是节点的数量。 ε = e 1 , e 2 , . . . , e k \mathcal{\varepsilon}={e_1,e_2,...,e_k} ε=e1,e2,...,ek代表的是节点之间的边的集合,k是边的总数。因为使用的是完整的二叉树,所以边的总数是 n = 2 h − 1 , k = 2 h − 2 n=2^h-1,k=2^h-2 n=2h1,k=2h2 h h h就是 T \Bbb{T} T的高度啦。

Architecture

Backbone network module. 在实验中使用的是VGG-16(retaining the layers from conv1_1 to conv4_3)和ResNet-50 (retaining the layers from res_1 to res_4)
Branch routing module. 这个模块决定了将sample发送到哪个child(left or right),如Figure2(b)所示,第K层的第i个 routing module用 R i k ( . ) \mathcal{R}_i^k(.) Rik(.)使用 1 × 1 1\times 1 1×1的卷积层进行表示,后面接一个简化的non-local(NL) block 和Squeeze-Excitation(SE)block,后者与前者在context modeling and fusion step共享相同implementation和transform step,以这种方式,集成上下文信息来更好的描述对象。之后使用average pooling、element-wise square-root and L2-normalization和一个具有sigmoid激活函数的全连接层来产生一个在【0,1】范围内的标量,来表示sample交给left child or right child的概率, ϕ i k ( x j ) ∈ [ 0 , 1 ] , i = 1 , . . . , 2 k − 1 \phi_i^k(x_j)\in [0,1],i=1,...,2^{k-1} ϕik(xj)[0,1]i=1...2k1表示第j层的样本 x j ∈ X x_j\in X xjX被交给right child产生routing module R i k ( x j ) \mathcal{R}_i^k(x_j) Rik(xj)的输出概率,交给left child的概率就是1- ϕ i k ( x j ) \phi_i^k(x_j) ϕik(xj),超过0.5就发送给对应的child。
在这里插入图片描述
Attention transformer. 此模块的详细结构如上图所示,将ASPP模块嵌入到Attention transformer中,它能够产生多个特征图,每个特征图的特征具有不同的比例、感受野和attention module。通过4个不同扩张率 i . e . 1 , 6 , 12 , 18 i.e.1,6,12,18 i.e.1,6,12,18的parallel dilated convolutions可以产生multi-scale feature maps。融合特征图之后再传递给kernel size为 1 × 1 1\times 1 1×1,stride为1的卷积核。在ASPP之后再插入一个attention module (如上图红色部分),来指导网络专注于有意义的特征以获得准确的结果。
Label Prediction. 对于ACNet中的每一个叶子结点,使用标签预测模型 P i ( i . e . i = 1 , . . . , 2 h − 1 ) \mathcal{P_i}(i.e. i=1,...,2^{h-1}) Pi(i.e.i=1,...2h1)来预测对象 x j x_j xj的subordinate category。 r i k ( x j ) r_i^k(x_j) rik(xj)是对象 x j x_j xj从根节点到第k层的第i个节点的累积概率,例如,根节点到 R i k ( . ) \mathcal{R}_i^k(.) Rik(.)的路径是 R 1 1 , R 1 2 , . . . , R 1 k \mathcal{R}_1^1,\mathcal{R}_1^2,...,\mathcal{R}_1^k R11R12,...,R1k,那么也就是说一直选择的是left child,那么 r i k ( x j ) = ∏ i = 1 k ϕ 1 i ( x j ) r_i^k(x_j)=\prod_{i=1}^k \phi_1^i(x_j) rik(xj)=i=1kϕ1i(xj)。这个模块的具体结构如Fig.2所示, batch normalizationlayer, a convolutional layer(kernel size 1 × 1,) a max pooling layer, a sqrt and L2 normalization layer, and a fully connected layer。那么第j个对象 x j x_j xj的最终概率 C ( x j ) \mathcal{C}(x_j) C(xj)计算为所有叶子结点的累和乘以通过branch routing modules的累积概率。 C ( x j ) = ∑ i = 1 2 h − 1 P i ( x j ) r i h ( x j ) \mathcal{C(x_j)}=\sum_{i=1}^{2^{h-1}}\mathcal{P}_i(x_j)r_i^h(x_j) C(xj)=i=12h1Pi(xj)rih(xj)。需要注意的是 x j x_j xj所有下级类别的置信度总和为1.
在这里插入图片描述

Training

Data augmentation. 使用裁剪和旋转来扩充数据,首先重新旋转缩放的图像,使其较短的一边为512 pixels,然后随机裁剪448 × \times × 448大小的patches,并随机旋转作为数据集。
Loss function. 从ACNet的结构,我们其实就可以很明显的看出它的损失函数是怎么构成的,它包括两部分,即叶子结点的预测损失和最终的预测损失。损失函数通过对叶节点的所有预测求和得出
在这里插入图片描述
h h h就是 T \Bbb{T} T的高度, L ( C ( x j ) , y ∗ ) L(C(x_j),y^*) L(C(xj),y)是最终预测 C ( x j ) \mathcal{C(x_j)} C(xj)的negative logarithmic likelihood loss, y ∗ y^* y是ground truth label, L ( P i ( x j ) ) L(\mathcal{P}_i(x_j)) L(Pi(xj))是叶子结点的negative logarithmic likelihood loss。

Result

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
整个论文思路并没有很复杂,但是创新点很有意思,一直觉得传统的数据结构和神经网路找到一个好的契合点进行融合,可能会产生意想不到的火花。二叉树本身是一个比较特殊的数据结构,用它来跟神经网络进行结合,然后叶子结点的预测和最终的预测来产生联合损失,再加上Attention Module,得到很棒的效果。

评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值