论文链接:
rethinking spatiotemporal feature learning: speed-accuracy trade-offs in video classification
Google Research & University of California San Diego
1. 文章想回答的3个问题
- 我们是否真的需要3d conv? 如果需要的话,哪些层我们应该让他是3d的,哪些层可以是2d的?这个设置依赖于特定的数据集和任务吗?
- 在时间和空间维度上联合做卷积是否很重要?还是说单独在时间和空间维度上分别做卷积也是足够用的?
- 我们如何用上述问题的答案来提升算法的精度,速度和内存占用呢?
围绕这3个问题,组织的实验有:
为了回答第一个问题,本文在I3D的基础上进行network surgery.
(1) Bottom-Heavy-I3D:在网络的低层级使用3D时域卷积,在高层级使用2D卷积
(2) Top-Heavy-I3D:在网络的低层级使用2D卷积,在高层级使用3D时域卷积。
我们发现Top-Heavy-I3D模型更快,这个不难理解,因为它只在抽象层的feature map上进行3D,这些feature map往往比低层级的feature map尺寸上更小。另一个发现是Top-Heavy-I3D模型通常还更加精确,这还挺惊讶的,因为毕竟它忽略了低层级的motion cues(见2.2节)。
为了回答第二个问题,我们将3D conv用 2D spatial conv + 1D temporal conv代替(称它为S3D, separable 3D CNN,思想和R(2+1)D,P3D是一样的)。S3D通常比标准的3D conv参数少很多,计算上也更加高效。惊讶的是,它也比原始的I3D模型更加高精度。实验结果显示从seperable conv得到的效果增益和从top-heavy网络设计得到的效果增益相当(见2.4节)。
为了回答第三个问题,我们将以上两个问题的答案结合,设计了一种新的网络结构 S3D-G,spatio-temporal gating mechanism。在Kinetics,Something-something,UCF101,HMDB等数据集上都比baseline方法的精度更高。(见2.6节)
2. Network surgery
2.1 将所有3D conv替换成2D conv
将I3D中所有的3D conv替换成2D conv,如图Fig.2(a)(b)所示。然后在kinetics Full和something-something上进行训练测试。训练时都是按照正常的帧顺序输入,测试时考虑正常序和倒序两种帧顺序。结果如Table 1所示。
我们可以发现I2D的表现在正常序和倒序是稳定的,这符合续期。而I3D在Kinetics-Full数据集上正常序和倒序表现一致,而在Something-something数据集上倒序的精度低很多。我们认为这是因为Something-something这个数据集需要更细致的特征来区分视觉信息上非常相似的动作类别,例如“Pushing something from left to right” 和“Pushing something from right to left”。
2.2 将部分3D conv替换成2D conv
虽然我们从2.1的实验中看到3D conv能够提高精度,但是它的计算量太大了。所以在本节中,我们讨论将部分3D conv替换成2D。我们以I2D作为起点,从低层级逐渐向高层级inflate 2D conv到3D,来得到Bottom-Heavy-I3D。同样我们也从高层级逐渐向低层级inflate 2D conv到3D,来得到Top-Heavy-I3D。
我们在Mini-Kinetics-200和Something-something数据集上训练和测试,结果如Fig.4所示,蓝色实线(top heavy I3D)比蓝色虚线(bottom heavy I3D)在相同的FLOPS下的acc高很多。top heavy I3D的速度优势是先天的(在小的feature map上进行计算),同时Top-Heavy-I3D也比Bottom-Heavy-I3D在精度上更有优势,这可能说明3D conv对于在高层更具语义的层级里建模时间特征更加有效。
2.3 分析learned filters的权重分布
为了验证上述观察,我们分析了在Kinetics-Full上训练的I3D模型的权重。Fig.5展示了不同层的权值的分布,可以看到低层级来看,权重还是主要分布在t