这是第2届YouTube 8M短视频分类大赛的第3名的论文。论文内容主要是是对NetVLAD进行改进。NetVLAD的一大缺点在于编码后得到的特征维度太高了。假设NetVLAD中簇的数量是,每个簇中心向量的维度是
,那么编码后每个视频对应的表示向量维度就是
。后面再接个隐层将编码特征嵌入到低维空间
中,那么这个隐层包含的参数就有
个(在比赛中设定N=2048、K=128、H=1024,那么这一层的参数就有268435456个),参数太多会造成很多问题,除去计算和存储上的冗余,还会导致难以优化和过拟合等问题。
问题的关键就在于编码特征向量维度太大,但是如果直接减小簇的数量或者簇中心向量的维度又会造成编码性能的下降,毕竟模型参数数量隐式地影响了表达能力。如何能在降低维度的同时又能保证模型性能呢?首先我们看下比赛中NetVLAD模型的流程图:
NetVLAD流程图.png
下面先来看下ResNeXt是如何对ResNet进行改进的,下图是ResNet和ResNeXt的对比图:
ResNet和ResNeXt的对比图.png
ResNet-50和ResNeXt-50的具体参数对比.png
别急,接下来就来看下NeXtVLAD是如何基于ResNeXt的思想来改进的。首先还是先来看下具体的流程图:
NeXtVLAD流程图.png
- 输入数据
发生了变化。新模型中先对
进行升维得到
,再对
进行分组得到
,此时数据的维度变化是
;
- 簇中心矩阵发生了变化。输入数据维度发生了变化,相应的簇中心矩阵也要发生变化,新模型中簇中心矩阵
的维度变化是
;
- 权重系数的计算发生了变化。由于原数据进行分组,维度上增加一维,所以相应的占比概率
的维度也要增加一维。具体变化是:
。同时,由于最后还要将各组的结果综合起来,因此增加了一个新的变量
,维度是
。
两者的不同其实可以从编码公式上体现出来,下面是两者的编码公式:
我们再来看看参数的变化:
- 虚线框内。原来NetVLAD的参数量是
,现在NeXtVLAD的参数量是
,两者比较其实就是比较
和
的大小。一般
取值大于1,所以前者肯定比后者小。也就是说,结构改变后,虚线框内的参数数量反而增加了。这意味着什么?编码部分的网络的拟合能力并没有削弱,相反,由于新加入了一个网络,可以认为编码网路的拟合能力更强了。
- 虚线框外。此时FC层的输入数据维度是
,所以NeXtVLAD中FC层的参数数量减少为NetVLAD的
倍。
总得来说,就是框里面的参数增加了,框外面参数减少了,总参数减少了。“减少模型参数”的目标达到了,同时框里面的参数增加了,非线性也增加了,说明编码特征的性能也没有降低,“保持模型性能”的目标就也达到了。