论文标题:Learning Attentive Pairwise Interaction for Fine-Grained Classification
针对目标:细粒度图像分类
论文来源: AAAI 2020
下载地址:https://arxiv.org/pdf/2002.10191.pdf
code地址: 未开源
论文坑点:对设备要求极高,按照论文中消融实验的结果,batch_size设为120,另外还要构造成图像对,才能达到论文的 88.6 acc
论文槽点:这篇论文写的太大白话了点,额。。。
动机
以往的大部分相关论文都是从单个图像中去寻找目标的判别性区域,这样一来,网络比较不同目标的能力还有待提升。人类在辨别类似的目标的时候,经常是将类似目标成对的进行比较,发现不同,进而判断出分别属于那一类。 讲真,我现在都还是分不清柴犬和秋田犬!!!放一起比较我也比较不来,尴尬。
本文看点
- 互向量学习 (Mutual Vector Learning)
- 门向量生成 (Gate Vector Generation)
- 成对交互 (Pairwise Interaction)
- 分数排序正则化(Score Ranking Regularization)
- 图像对的构建(Pair Construction)
训练阶段
网络结构:
我们按照网络结构一步一步走。
1.互向量学习
一对输入图片,通过CNN特征提取器(Resnet101)获取两个特征向量
x
1
x_1
x1,
x
2
x_2
x2(特征图经过全局平均池化得到的特征向量)。将
x
1
x_1
x1,
x
2
x_2
x2拼接,再经过两个全连接层(上图中的MLP)得到互向量
x
m
x_m
xm:
x
m
=
f
m
(
[
x
1
,
x
2
]
)
x_m = f_m([x_1,x_2])
xm=fm([x1,x2])其中
f
m
f_m
fm为 MLP 操作。
如此一来, x m x_m xm就结合了 x 1 x_1 x1, x 2 x_2 x2的特征。
2.门向量生成
在学习到 互向量
x
m
x_m
xm 后,可以将
x
m
x_m
xm和
x
1
x_1
x1,
x
2
x_2
x2进行比较,进而可以找到两张图片中目标特征上的区别。政治考试中的共性和个性吧,是这个意思吧?hahaha~~
具体来说,分别将
x
m
x_m
xm和
x
1
x_1
x1,
x
2
x_2
x2相乘,然后经过
s
i
g
m
o
i
d
sigmoid
sigmoid 激活。
g
i
=
s
i
g
m
o
i
d
(
x
m
⊙
x
i
)
,
i
∈
{
1
,
2
}
\mathbf{g}_{i}=sigmoid\left(\mathbf{x}_{m} \odot \mathbf{x}_{i}\right), i \in\{1,2\}
gi=sigmoid(xm⊙xi),i∈{1,2}
门向量
g
i
g_i
gi有什么用?可以作为一种注意力向量,用来找到两张图片中不同特征,该功能在成对交互能够体现。
3.成对交互
两个特征向量
x
1
x_1
x1,
x
2
x_2
x2,两个门
g
1
g_1
g1,
g
2
g_2
g2,根据网络结构图可以看出来,向量与门两两组合,进行一些操作,得到四个向量。从公式角度来看,
x
i
x_i
xi经过
g
i
g_i
gi门 的注意力引导,加强或者减弱了某些通道,再与自身相加得到输出。
x
1
self
=
x
1
+
x
1
⊙
g
1
x
2
self
=
x
2
+
x
2
⊙
g
2
x
1
other
=
x
1
+
x
1
⊙
g
2
x
2
other
=
x
2
+
x
2
⊙
g
1
\begin{aligned} \mathbf{x}_{1}^{\text {self}} &=\mathbf{x}_{1}+\mathbf{x}_{1} \odot \mathbf{g}_{1} \\ \mathbf{x}_{2}^{\text {self}} &=\mathbf{x}_{2}+\mathbf{x}_{2} \odot \mathbf{g}_{2} \\ \mathbf{x}_{1}^{\text {other}} &=\mathbf{x}_{1}+\mathbf{x}_{1} \odot \mathbf{g}_{2} \\ \mathbf{x}_{2}^{\text {other}} &=\mathbf{x}_{2}+\mathbf{x}_{2} \odot \mathbf{g}_{1} \end{aligned}
x1selfx2selfx1otherx2other=x1+x1⊙g1=x2+x2⊙g2=x1+x1⊙g2=x2+x2⊙g1
因此,
x
i
self
{x}_{i}^{\text {self}}
xiself强化了属于自身的特定特征区域,
x
i
other
{x}_{i}^{\text {other}}
xiother则强化了属于另一个类别的特征区域。
可以看出来,身体结构对左边的鸟更重要,喙对于右边的鸟更重要(根据 self 和 other 判断)。
4.分数排序正则化
成对交互的下一步就是分类了。
将
x
i
j
x_{i}^{j}
xij经过softmax打分,得到概率值。
p
i
j
=
softmax
(
W
x
i
j
+
b
)
\mathbf{p}_{i}^{j}=\operatorname{softmax}\left(\mathbf{W} \mathbf{x}_{i}^{j}+\mathbf{b}\right)
pij=softmax(Wxij+b)
使用
C
E
l
o
s
s
CEloss
CEloss作为损失函数,另外,作者定义了一个分数排序正则化
L
r
k
\mathcal{L}_{rk}
Lrk
所以最终的损失函数为:
L
=
L
c
e
+
λ
L
r
k
\mathcal{L}=\mathcal{L}_{c e}+\lambda \mathcal{L}_{r k}
L=Lce+λLrk
权重因子
λ
\lambda
λ设为1。
其中:
L
r
k
=
∑
i
∈
{
1
,
2
}
max
(
0
,
p
i
other
(
c
i
)
−
p
i
self
(
c
i
)
+
ϵ
)
\mathcal{L}_{r k}=\sum_{i \in\{1,2\}} \max \left(0, \mathbf{p}_{i}^{\text {other}}\left(c_{i}\right)-\mathbf{p}_{i}^{\text {self}}\left(c_{i}\right)+\epsilon\right)
Lrk=i∈{1,2}∑max(0,piother(ci)−piself(ci)+ϵ)
ϵ
\epsilon
ϵ 为惩罚项,设为0.05。
L
r
k
\mathcal{L}_{rk}
Lrk作用是让
p
i
other
{p}_{i}^{\text {other}}
piother 的优先级更低。
5.图像对的构建
- 随机选择 N c l N_{cl} Ncl 个类别;
- 对于第1步中的每个类别,随机选择
N
i
m
N_{im}
Nim 个训练图片。
如此一来 就得到了 N c l ∗ N i m N_{cl}*N_{im} Ncl∗Nim张图片。将 N c l ∗ N i m N_{cl}*N_{im} Ncl∗Nim张图片送进特征提取器提取特征。通过欧式距离计算不同图像之间的特征距离,对于每张图像就可以选出同一个类别中特征距离最小的图片和不同类别中特征距离最小的图片。于是,每张图片可以得到两对图像对,一个batch中有 2 ∗ N c l ∗ N i m 2*N_{cl}*N_{im} 2∗Ncl∗Nim对图像,意味着 4 ∗ N c l ∗ N i m 4*N_{cl}*N_{im} 4∗Ncl∗Nim张图像。论文中表示 N c l = 30 , N i m = 4 N_{cl}=30,N_{im}=4 Ncl=30,Nim=4 才行,啊,,这,抱歉,我玩不起啊。
测试阶段
由于API-模块是即插即用的模块,测试阶段可以直接将其断开,通过backbone提取的特征,直接用于分类。
实验结果
CUB数据集的结果
总体来说,API-Net的思路很有意思,但是结果并没有惊艳到我,因为它对资源的需求很大。Resnet50作为backbone,
相比ECCV2018 NTS-Net 要高0.2,相比CVPR2019的DCL-Net,还有0.1的差距。