• ActionVLAD算法详解


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

    1. 对全部的特征 N ∗ D N*D ND进行K-means聚类,获得K个聚类中心,记为 C k C_k Ck
    2. 通过以下公式,将 N ∗ D N*D ND的特征转为shape为 K ∗ D K*D KD的特征,公式如下:
      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)),kK,jD
      公式中 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)=keαxick2eαxick2

    将上面公式展开,可以将分子分母的 e − α ∣ ∣ x i ∣ ∣ 2 e^{-\alpha||x_i||^2} eαxi2抵消,得到下面公式:
    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)=kewkTxi+bkewkTxi+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=αck2

    所以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=1NkewkTxi+bkewkTxi+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=1Ti=1Nkeαxitck2eαxitck2(xit[j]ck[j])

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

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

    四、ActionVLAD网络

    ActionVLAD网络如下图所示:
    在这里插入图片描述

    从上图可以看出:

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

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

  • 相关阅读:
    分闸合闸电源监视继电器JZZS-1120/DC220V
    c++架构师需要掌握哪些知识
    AI 语音机器人系统怎么搭建
    LT1931
    智能BI,如今走到了哪一步?
    [车联网安全自学篇] 五十八. Android安全之APK内存敏感信息泄露挖掘【静态分析】
    如何快速理解复杂业务,系统思考问题?
    《古诗词里的快意人生》读后感
    4S店汽车行业万能通用小程序源码系统 在线预约试驾+购车计算器 源码完全开源可二次开发
    C++标准模板(STL)- 类型支持 (定宽整数类型)(INT8_C,INTMAX_C,UINT8_C,UINTMAX_C,格式化宏常量)
  • 原文地址:https://blog.csdn.net/liuxiaoheng1992/article/details/127947494