3.2.3 NeXtVLAD

NetVLAD的弊端在于NetVLAD 看似参数量img不大,但是输出特征维度img太高,导致随后用于分类的全连接层参数量过大。假设有img个类别,分类层的参数量为img,例如,当img时,img很大。但是,如果直接减少聚类数img又会限制模型表示能力。NeXtVLAD在NetVLAD 基础上降低 NetVLAD 最终输出的特征维度和参数量,NeXtVLAD被用于2018年YouTube-8M 竞赛的季军方案(Lin et al.,2018a),并且是2018年YouTube-8M 竞赛中表现最优的单模型。

从 NetVLAD 到 NeXtVLAD的基本思想类似于从 ResNet(见 2.1.6 节)到 ResNeXt(见 2.1.11 节),ResNeXt在ResNet的基础上对特征进行分组,各个分组内卷积之后再进行合并。具体地说,相比于VLAD和NetVLAD的计算过程分为3步,NeXtVLAD的计算过程整体分为以下4步。

(1)特征升维分组。这是NeXtVLAD相比于VLAD和NetVLAD新增的步骤。NeXtVLAD的输入也是帧特征img,其中img。首先通过一个全连接层(如果使用卷积层特征作为输入,则对应一个img卷积层)将特征升维到img,其中img。随后类似于分组卷积,将每个特征img分为imgimg,其中imgimg是两个超参数,满足img,这使得img的维度低于帧特征img的维度。

(2)特征聚类”。“聚类中心”img仍然有img个,每个“聚类中心”的维度和分组后特征img保持一致,因此维度降为img。和NetVLAD一样,这些“聚类中心”仍然由网络学习得到,本质仍然是全连接层的参数。

(3)特征分配。回顾 NetVLAD 对每个“聚类中心”有一个分配系数img,表示帧特征img属于第img个“聚类中心”的概率。而 NeXtVLAD 因为涉及特征分组,因此帧特征img对每个特征分组的每个“聚类”中心各有一个分配系数,表示分组后的特征img属于第img个“聚类中心”的概率:

img

(3.14)

img

(3.15)

和NetVLAD 类似,分配系数的计算可以通过全连接层(如果使用卷积层特征作为输入,则对应img卷积层)和Softmax 激活函数实现。两者的区别在于,NetVLAD 只需要一个全连接层,或者说不同帧特征img共享全连接层参数;而 NeXtVLAD 需要img个全连接层,对应img个分组,其中第img个全连接层的参数为img。对于升维后的帧特征img,需要同时经过这img个全连接层和对应的Softmax 激活函数,其中经过第img个全连接层和Softmax 激活函数之后,可以得到img,它的第img维是img

除此之外,每个分组还有一个权重系数img

img

(3.16)

img

(3.17)

类似地,权重系数可以通过一个全连接层(如果使用卷积层特征作为输入,则对应img卷积层)和Sigmoid 激活函数实现,其中全连接层的参数为img。对于升维后的帧特征img,经过该全连接层和Sigmoid 激活函数之后,可以得到img,它的第img维是img

(4)差值求和。在进行差值求和时,既对每个分组独立进行差值求和,又将不同分组按权重相加:

img

(3.18)

图3-7是NeXtVLAD的实现。和图3-4 相比,图3-7 做了一些变形,以缩小图像左右宽度。在输入帧特征img之后,NeXtVLAD 首先会使用全连接层将特征升维到img,其中img,随后传入图3-7中下的两个部分。其中一部分又分为img个单元,每个单元对应一个分组,其中第img个分组利用以img为参数的全连接层和Softmax 激活函数计算img。另一部分通过以img为参数的全连接层和Sigmoid 激活函数计算img

随后在图3-7中右侧存在img个单元,包括img个“聚类”和img个分组,图中展示了其中的第img个单元的计算过程。该单元接受两组输入,一个输入是分组之后的特征img,另一个输入是img对应位置相乘的结果,即img。该单元内部计算过程和NetVLAD 类似,分别计算img。其中,第img个“聚类”的全连接层的参数为img,同一“聚类”img下不同分组img的全连接层是共享的。最终输出是img,每个img各自进行内部规范化,之后img整体再进行img规范化,得到最终的特征img作为NeXtVLAD的输出。

img

图3-7 NeXtVLAD计算流程图

最后,我们总结一下 NeXtVLAD 的参数量和特征维度。第 1 步,特征升维分组需要一个全连接层进行特征升维,参数量为img;第 2 步,“聚类中心”需要的参数量为img;第 3 步,特征分配中计算分配系数需要的参数量为img、计算权重系数需要的参数量为img;第 4 步,差值求和不需要额外的参数。总之,NeXtVLAD的参数量是img,特征维度是img。NeXtVLAD的输出特征是一组特征img,每个输出特征的维度是img。因此,总的输出特征维度是img,小于NetVLAD的输出特征维度img

相比于NetVLAD的参数量是img,NeXtVLAD的参数量反而增加了。但是,如果考虑到后续全连接层的参数,NetVLAD的总参数量是img,主导项是img,而 NeXtVLAD的总参数量是img,主导项img。可以看出,NeXtVLAD通过分组处理的操作,能大幅降低随后的分类层的参数,最终减少了总参数量。

将 VLAD、NetVLAD、NeXtVLAD 三者进行对比,如表3-1所示。

表3-1 VLAD、NetVLAD、NeXtVLAD 参数量和特征维度对比

img