机器学习

ActionVLAD算法详解

2022-11-19  本文已影响0人  ce0b74704937

文章地址: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表示一个特征的维度。
VLAD的计算流程如下:

  1. 对全部的特征N*D进行K-means聚类,获得K个聚类中心,记为C_k
  2. 通过以下公式,将N*D的特征转为shape为K*D的特征,公式如下:
    V(j, k)=\sum^N_{i=1}a_k(x_i)(x_i(j)-c_k(j)), k\in K, j\in D
    公式中x_i表示第i个局部特征,c_k表示第k个聚类中心,x_ic_k都是D为向量。a_k(x_i)表示符号函数,如果x_i不属于聚类中心c_ka_k(x_i)=0;如果x_i属于聚类中心c_ka_k(x_i)=1

从上式中,可以看出最终的V(j, k)特征是所有原始特征与聚类中心的差值,可以理解为是去除了特征本身的特征分布差异,只保留了局部特征与聚类中心的分布差异。

二、NetVLAD层

由上面所说,VLAD里面存在符号函数所以为了能将VLAD融入网络的训练中,需要将公式中的符号函数a_k从hard assignment改为soft assignment,公式如下:
\overline{a_k}(x_i)=\frac{e^{-\alpha||x_i -c_k||^2}}{\sum_{k'}e^{-\alpha||x_i -c_{k'}||^2}}

将上面公式展开,可以将分子分母的e^{-\alpha||x_i||^2}抵消,得到下面公式:
\overline{a_k}(x_i)=\frac{e^{w_k^Tx_i+b_k}}{\sum_{k'}e^{w_{k'}^Tx_i+b_{k'}}}
其中,w_k=2\alpha c_k, b_k=-\alpha ||c_k||^2

所以NetVLAD用公式表示如下:
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))

说明:NetVLAD中的符号同传统的VLAD

三、ActionVLAD

ActionVLAD用公式可以表示如下:
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])

上式中T表示总帧数,t\in{1, ..., T}。N表示每帧图片提取出的特征数量空间维度(例如,一张图片经过网络后空间大小为25\times 25,那么N=625),i\in{1, ..., N}

从ActionVLAD的公式可以很明显的看出是NetVLAD在时序上的扩展。

四、ActionVLAD网络

ActionVLAD网络如下图所示:


7.png

从上图可以看出:

  1. action vlad网络采用1了rgb和光流两种流
  2. actionvlad层可以很自然的作为一层融入到网络中去

到这里ActionVLAD网络原理基本介绍完毕,对于ActionVLAD层应该放在哪个位置,具体效果如何,可以看文章的一些消融实验。

上一篇下一篇

猜你喜欢

热点阅读