文章地址:https://rohitgirdhar.github.io/ActionVLAD/
代码地址:https://github.com/rohitgirdhar/ActionVLAD/
该文章由CMU、Adobe、法国国立计算机及自动化研究院联合提出,被CVPR2017收录。
该文章的创新点在于将vlad使用到动作分类任务上,而该文章中使用的VLAD是由文章《NetVLAD: CNN architecture for weakly supervised place recognition》提出(该文章发表在CVPR2016上)的可训练VLAD层基础上的扩展。所以下面先来介绍一下VLAD。
一、传统的VLAD
假设现在有特征维度为
N
∗
D
N*D
N∗D,其中N表示特征的个数,D表示一个特征的维度。
VLAD的计算流程如下:
- 对全部的特征
N
∗
D
N*D
N∗D进行K-means聚类,获得K个聚类中心,记为
C
k
C_k
Ck
- 通过以下公式,将
N
∗
D
N*D
N∗D的特征转为shape为
K
∗
D
K*D
K∗D的特征,公式如下:
V
(
j
,
k
)
=
∑
i
=
1
N
a
k
(
x
i
)
(
x
i
(
j
)
−
c
k
(
j
)
)
,
k
∈
K
,
j
∈
D
V(j, k)=\sum^N_{i=1}a_k(x_i)(x_i(j)-c_k(j)), k\in K, j\in D
V(j,k)=∑i=1Nak(xi)(xi(j)−ck(j)),k∈K,j∈D
公式中
x
i
x_i
xi表示第i个局部特征,
c
k
c_k
ck表示第k个聚类中心,
x
i
x_i
xi和
c
k
c_k
ck都是D为向量。
a
k
(
x
i
)
a_k(x_i)
ak(xi)表示符号函数,如果
x
i
x_i
xi不属于聚类中心
c
k
c_k
ck,
a
k
(
x
i
)
=
0
a_k(x_i)=0
ak(xi)=0;如果
x
i
x_i
xi属于聚类中心
c
k
c_k
ck,
a
k
(
x
i
)
=
1
a_k(x_i)=1
ak(xi)=1。
从上式中,可以看出最终的
V
(
j
,
k
)
V(j, k)
V(j,k)特征是所有原始特征与聚类中心的差值,可以理解为是去除了特征本身的特征分布差异,只保留了局部特征与聚类中心的分布差异。
二、NetVLAD层
由上面所说,VLAD里面存在符号函数所以为了能将VLAD融入网络的训练中,需要将公式中的符号函数
a
k
a_k
ak从hard assignment改为soft assignment,公式如下:
a
k
‾
(
x
i
)
=
e
−
α
∣
∣
x
i
−
c
k
∣
∣
2
∑
k
′
e
−
α
∣
∣
x
i
−
c
k
′
∣
∣
2
\overline{a_k}(x_i)=\frac{e^{-\alpha||x_i -c_k||^2}}{\sum_{k'}e^{-\alpha||x_i -c_{k'}||^2}}
ak(xi)=∑k′e−α∣∣xi−ck′∣∣2e−α∣∣xi−ck∣∣2
将上面公式展开,可以将分子分母的
e
−
α
∣
∣
x
i
∣
∣
2
e^{-\alpha||x_i||^2}
e−α∣∣xi∣∣2抵消,得到下面公式:
a
k
‾
(
x
i
)
=
e
w
k
T
x
i
+
b
k
∑
k
′
e
w
k
′
T
x
i
+
b
k
′
\overline{a_k}(x_i)=\frac{e^{w_k^Tx_i+b_k}}{\sum_{k'}e^{w_{k'}^Tx_i+b_{k'}}}
ak(xi)=∑k′ewk′Txi+bk′ewkTxi+bk
其中,
w
k
=
2
α
c
k
w_k=2\alpha c_k
wk=2αck,
b
k
=
−
α
∣
∣
c
k
∣
∣
2
b_k=-\alpha ||c_k||^2
bk=−α∣∣ck∣∣2
所以NetVLAD用公式表示如下:
V
(
j
,
k
)
=
∑
i
=
1
N
e
w
k
T
x
i
+
b
k
∑
k
′
e
w
k
′
T
x
i
+
b
k
′
(
x
i
(
j
)
−
c
k
(
j
)
)
V(j, k)=\sum^N_{i=1}\frac{e^{w_k^Tx_i+b_k}}{\sum_{k'}e^{w_{k'}^Tx_i+b_{k'}}}(x_i(j)-c_k(j))
V(j,k)=∑i=1N∑k′ewk′Txi+bk′ewkTxi+bk(xi(j)−ck(j))
说明:NetVLAD中的符号同传统的VLAD
三、ActionVLAD
ActionVLAD用公式可以表示如下:
V
[
j
,
k
]
=
∑
t
=
1
T
∑
i
=
1
N
e
−
α
∣
∣
x
i
t
−
c
k
∣
∣
2
∑
k
′
e
−
α
∣
∣
x
i
t
−
c
k
′
∣
∣
2
(
x
i
t
[
j
]
−
c
k
[
j
]
)
V[j, k]=\sum^T_{t=1}\sum^N_{i=1}\frac{e^{-\alpha||x_{it} -c_k||^2}}{\sum_{k'}e^{-\alpha||x_{it} -c_{k'}||^2}}(x_{it}[j]-c_k[j])
V[j,k]=∑t=1T∑i=1N∑k′e−α∣∣xit−ck′∣∣2e−α∣∣xit−ck∣∣2(xit[j]−ck[j])
上式中T表示总帧数,
t
∈
1
,
.
.
.
,
T
t\in{1, ..., T}
t∈1,...,T。N表示每帧图片提取出的特征数量空间维度(例如,一张图片经过网络后空间大小为
25
×
25
25\times 25
25×25,那么N=625),
i
∈
1
,
.
.
.
,
N
i\in{1, ..., N}
i∈1,...,N。
从ActionVLAD的公式可以很明显的看出是NetVLAD在时序上的扩展。
四、ActionVLAD网络
ActionVLAD网络如下图所示:
从上图可以看出:
- action vlad网络采用1了rgb和光流两种流
- actionvlad层可以很自然的作为一层融入到网络中去
到这里ActionVLAD网络原理基本介绍完毕,对于ActionVLAD层应该放在哪个位置,具体效果如何,可以看文章的一些消融实验。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)