3.2.2 NetVLAD
VLAD的弊端在于它是一个不可导的函数,原因在于其中的分配系数无法求导。因此,无法插入到现代卷积神经网络中进行端到端学习,NetVLAD便应运而生。相比于VLAD,NetVLAD 可以作为一层插入到整体的神经网络中,NetVLAD的参数和网络中其他层的参数一起可以端到端利用误差反向传播(Error Backpropogation)进行学习。NetVLAD被用于2017年YouTube-8M 竞赛的冠军方案(Miech et al.,2017)和2018年YouTube-8M 竞赛的冠军方案(Skalic & Austin,2018)。
和VLAD 相似,NetVLAD的计算过程也可分为以下3步。
(1)特征“聚类”。和VLAD 不同,我们并不是真正对帧特征进行聚类,从而得到聚类中心
。NetVLAD 将聚类中心
当作可学习的参数,让网络进行学习,所以这一步是带引号的“聚类”。
(2)特征分配。VLAD 使用的分配系数取值是一种硬分配策略,无法求导,使得网络不能利用误差反向传播进行学习。因此,NetVLAD 将其转化为软分配(Soft Assignment)机制,使其变得平滑可导

(3.5)
此时可以认为分配系数是帧特征
属于第
个“聚类中心”的概率,并满足
。
特征分配涉及一组参数,令

(3.6)
以帧特征作为输入,特征分配可以通过一个全连接层和Softmax 激活函数实现,其中全连接层的参数为
。对于帧特征
,经过该全连接层和Softmax 激活函数之后,可以得到
,它的第
维是
。
(3)差值求和。和VLAD 相同,NetVLAD的输出也是一组特征,每个输出特征的维度
和帧特征
维度一致,每个输出特征
对应一个“聚类”中心
。输出特征
的定义为

(3.7)
可以看出,这一步的计算公式和VLAD 形式上是一样的,区别只是在于的计算方法不同。另外,如果读者对于第1步特征“聚类”中如何将
当作可学习的参数有疑问,我们可以对这一步的公式进行变形:

(3.8)
可以看出,在式(3.8)的第二项中,首先对进行求和,之后乘以
。这一步可以用一个全连接层实现,
就是全连接层的参数,该全连接层没有偏置项(Bias),从而可以学习“聚类”中心
。
最后,NetVLAD 还有两个规范化操作,首先是内部规范化(Intra-normlization),每个“聚类”内部各自进行规范化:

(3.9)
式(3.9)中的“”表示将
的计算结果赋值给
。然后是整体的
规范化:

(3.10)
最终将这维的向量
拼接为一个
维的向量作为NetVLAD 最终的输出:

(3.11)
图3-4是NetVLAD的实现。对于一个视频,首先对视频进行抽帧,之后每帧图像前馈一个图像分类模型,得到帧特征,作为NetVLAD的输入,对应图3-4的最左侧。图3-4 左下角涉及一组全连接层:“全连接层,
”,它们的参数是共享的,都是NetVLAD 第 2 步特征分配计算过程中的
。帧特征
各自经过一个共享参数的全连接层和Softmax 激活函数,得到
,其中,
,它的第
维是
。

图3-4 NetVLAD计算流程图
随后在图3-4中间紫色部分存在个单元,每个单元对应一个“聚类”,图中展示了其中第 1个单元的计算过程。第 1个单元接受两组输入,一组是帧特征
,另一组是
。计算过程包括两个部分:第一部分是将
分别相乘后相加,得到
,见紫色单元的左侧和右上方;第二部分是将
相加,之后经过一个全连接层:“全连接层,
”。和图3-4 左下方的全连接层不同,不同单元中的全连接层不共享参数,其中第
个单元(对应第
个聚类)的全连接层参数为
,经过全连接层之后的结果为
,见紫色单元的右下方。最后将两部分的结果相减,得到第 1个单元的特征
。以此类推,第
个单元从
和
中计算得到
。最终,每个
各自进行内部规范化,之后
整体再进行
规范化,得到最终的特征
作为NetVLAD的输出。
以上介绍的是对图像分类模型的全连接层特征进行 NetVLAD 汇合。另一种汇合策略是将 NetVLAD 汇合的位置提前,对conv5层(即图像分类模型的最后一个卷积层)特征进行 NetVLAD 汇合(Girdhar et al.,2017)。相比于第帧的全连接层特征是一个向量
,其卷积层特征是一个张量
,这可以看作有
个空间位置,每个位置对应一个
维的特征向量,令
表示第
帧、第
个空间位置对应的特征向量,如图3-5所示。

图3-5 卷积特征可以看作有个空间位置,每个空间位置对应一个
维特征向量
基于该卷积特征的等效理解,基于卷积特征的NetVLAD 操作也可以分为以下3步。
(1)特征“聚类”。这里仍然是个“聚类中心”
。
(2)特征分配。此时表示特征
属于第
个“聚类中心”的概率,并满足
:

(3.12)
在特征分配的实现方面,基于全连接层特征的特征分配,可以用全连接层和Softmax 激活函数实现,如图3-6(a)所示,对于第
帧图像的全连接层特征
,经过全连接层和Softmax 激活函数之后得到
,其中全连接层的参数
分别由
组成。而基于卷积特征
的特征分配可以用
卷积层和Softmax 激活函数实现,如图3-6(b)所示,对于第
帧图像的卷积层特征
,经过
卷积层和Softmax 激活函数之后得到
,其中卷积层的参数为
和
,由于
的后两维都是1,其本质上是一个二维矩阵,和
等价,而
则和
完全相同。
(3)差值求和。这里输出也是一组特征,每个输出特征的维度是
,其计算过程需要将原先的一重求和扩展为三重求和,既要对时间维度求和,又要对空间维度求和:

(3.13)

图3-6 特征分配的全连接层和卷积层实现
最后,我们总结一下 NetVLAD 的参数量和输出特征维度。第 1 步特征“聚类”需要对个“聚类中心”
进行学习,每个“聚类中心”维度
,因此需要
参数;第 2 步特征分配需要一个全连接层或
卷积层对
的参数
进行学习,需要
参数(忽略偏置项参数
);第 3 步差值求和不需要额外的参数。
总之,NetVLAD的参数量是,总的输出特征维度和VLAD相同,均为
。