论文阅读之“NeXtVLAD: An Efficient Neural Network to Aggregate Frame-level Features for Large-scale VId...

  这是第2届YouTube 8M短视频分类大赛的第3名的论文。论文内容主要是是对NetVLAD进行改进。NetVLAD的一大缺点在于编码后得到的特征维度太高了。假设NetVLAD中簇的数量是,每个簇中心向量的维度是,那么编码后每个视频对应的表示向量维度就是。后面再接个隐层将编码特征嵌入到低维空间中,那么这个隐层包含的参数就有个(在比赛中设定N=2048、K=128、H=1024,那么这一层的参数就有268435456个),参数太多会造成很多问题,除去计算和存储上的冗余,还会导致难以优化和过拟合等问题。
  问题的关键就在于编码特征向量维度太大,但是如果直接减小簇的数量或者簇中心向量的维度又会造成编码性能的下降,毕竟模型参数数量隐式地影响了表达能力。如何能在降低维度的同时又能保证模型性能呢?首先我们看下比赛中NetVLAD模型的流程图:

论文阅读之“NeXtVLAD: An Efficient Neural Network to Aggregate Frame-level Features for Large-scale VId..._第1张图片
NetVLAD流程图.png
虚线框中是VLAD编码过程,该部分包含参数有
个。其中,用于生成占有概率
的FC层有
个参数,簇中心向量表示矩阵有
个参数。虚线框输出的编码特征是
维的向量。虚线框外的FC层是为了将编码特征映射到低维空间中,包含参数有
个。所以这个可学习降维过程共有
个,其中FC层占大头。所以改进的关键在于减少虚线框输出向量的维度,但是要保证虚线框的拟合能力。直接减少
或者
是不可行的,因为这样会损害虚线框中网络的拟合能力。所以作者借鉴了ResNeXt中“分”的思路,对虚线框中的网络结构进行了调整。
  下面先来看下ResNeXt是如何对ResNet进行改进的,下图是ResNet和ResNeXt的对比图:
论文阅读之“NeXtVLAD: An Efficient Neural Network to Aggregate Frame-level Features for Large-scale VId..._第2张图片
ResNet和ResNeXt的对比图.png
通过对比图我们很容易看出,ResNeXt所做的工作就是将原本一个通道完成的工作分为多个通道来共同完成。原论文中也给出了两种模型的具体参数对比表:
论文阅读之“NeXtVLAD: An Efficient Neural Network to Aggregate Frame-level Features for Large-scale VId..._第3张图片
ResNet-50和ResNeXt-50的具体参数对比.png
可看出改变了结构的ResNeXt在参数数量上并没有大的变化,也就是说,ResNeXt的贡献并不是对ResNet进行模型压缩,而是为模型增加更多的非线性函数,增加模型的拟合能力。这里可能就会造成一点小小的疑惑:既然ResNeXt并不能降低模型参数数量,那么基于ResNeXt的思想对NetVALD进行改进有什么用啊?我们要的改进就是要降低参数数量啊!
  别急,接下来就来看下NeXtVLAD是如何基于ResNeXt的思想来改进的。首先还是先来看下具体的流程图:
论文阅读之“NeXtVLAD: An Efficient Neural Network to Aggregate Frame-level Features for Large-scale VId..._第4张图片
NeXtVLAD流程图.png
我们来看下结构改动的地方有:

  1. 输入数据发生了变化。新模型中先对进行升维得到,再对进行分组得到,此时数据的维度变化是;
  2. 簇中心矩阵发生了变化。输入数据维度发生了变化,相应的簇中心矩阵也要发生变化,新模型中簇中心矩阵的维度变化是;
  3. 权重系数的计算发生了变化。由于原数据进行分组,维度上增加一维,所以相应的占比概率的维度也要增加一维。具体变化是:。同时,由于最后还要将各组的结果综合起来,因此增加了一个新的变量,维度是。
    两者的不同其实可以从编码公式上体现出来,下面是两者的编码公式:
    \begin{align} (NetVLAD) \quad & v_{ijk}=\alpha_k(x_i)(x_{ij}-c_{kj}),i\in\left\{ 1,...,M \right\},j\in\left\{ 1,...,N \right\},k\in\left\{ 1,...,K \right\} \\ (NeXtVLAD) \quad & v_{ijk}^g=\beta_g(\dot{x}_i)\alpha_{gk}(\dot{x}_i)(\tilde{x}_{ij}^g-c_{kj}),g\in\left\{ 1,..,G \right\},i\in\left\{ 1,...,M \right\},j\in\left\{ 1,...,\cfrac{\lambda N}{G} \right\},k\in\left\{ 1,...,K \right\} \end{align}

我们再来看看参数的变化:

  1. 虚线框内。原来NetVLAD的参数量是,现在NeXtVLAD的参数量是,两者比较其实就是比较和的大小。一般取值大于1,所以前者肯定比后者小。也就是说,结构改变后,虚线框内的参数数量反而增加了。这意味着什么?编码部分的网络的拟合能力并没有削弱,相反,由于新加入了一个网络,可以认为编码网路的拟合能力更强了。
  2. 虚线框外。此时FC层的输入数据维度是,所以NeXtVLAD中FC层的参数数量减少为NetVLAD的倍。

总得来说,就是框里面的参数增加了,框外面参数减少了,总参数减少了。“减少模型参数”的目标达到了,同时框里面的参数增加了,非线性也增加了,说明编码特征的性能也没有降低,“保持模型性能”的目标就也达到了。

你可能感兴趣的:(论文阅读之“NeXtVLAD: An Efficient Neural Network to Aggregate Frame-level Features for Large-scale VId...)