分离 3D 卷积运算
本文是视频深度学习方法系列的第三篇文章。写这一系列文章是为了概述视频深度学习的发展历程,为该领域的研究人员或从业者提供相关背景知识。因为视频数据在实际应用中大量增加(例如,物联网视频、自动驾驶汽车和社交媒体应用),对时序视觉数据(视频)的分析的重要性日益增加,仅从单个图像/帧中提取有用信息往往是不够的。
在本系列的前两篇文章中,我概述了早期的视频深度学习,和广泛应用的、彻底改变了深度学习在视频中的应用的双流网络架构。本文将进一步深入探讨 3D 卷积神经网络(把 2D CNN 扩展到视频领域)。因为神经网络的性能比双流网络差,所以神经网络最开始并没有得到关注。后续的研究大大改善了其数据效率(保证网络性能所需要的数据量)和整体性能,才使其逐渐获得认可。
本文将首先概述促进 3D CNN 优化的因素,然后概述与优化 3D CNN 性能相关的主要研究进展,包括分离 3D 卷积、膨胀 3D 卷积和时间范围的扩大。这些研究进展在优化 3D CNN 性能方面发挥了关键作用。
前言
正如上一篇文章所述,双流网络架构是首批基于 CNN 的视频架构,与手工提取视频特征相比,它在视频学习任务方面的性能有持续的提高。双流方法被社区广泛应用,并在之后用于开发架构变体,对其他架构方法的探索相应地减少了,所以双流网络架构在一段时间内占据主导地位。但是我们仍面临一些亟待解决的问题,最终促进了其他深度学习方法(如 3D CNN)的出现。
什么是 3D 卷积?
3D CNN 是一个深度学习架构,由多个连续的 3D 卷积层组成。正如第一篇文章所述,3D 卷积是通过对四维数据输入的四维内核(在空间和时间上)进行卷积来运算的。数据输入和内核的四个维度分别是两个空间维度、通道维度(例如,RGB 图像有三个通道)和时间维度(即视频帧的数量),具体请看下图。
连续帧的 3D 卷积
上述卷积运算采用了一个 2x3x3x3 的卷积核(即跨越 2 个连续的帧,3 个通道,空间维度为 3x3),并将这个核在三个连续的 RGB 帧上进行卷积,产生一个输出表征。需要注意的是,在内存容量足够的情况下,内核的时间维度(本例中数量为 2)可以增加,以跨越任意数量的连续帧。因此,3D 卷积的输出表征本质上是存在于时间与空间上的(即捕获每一帧的空间信息和相邻帧的时间信息)。
缺少 AlexNet 时刻
随着视频深度学习新方法的开发,研究人员不断将其与深度学习对图像的处理相比较。2012 年用于图像分类的 AlexNet 架构的开发,比基于手工制作特征的方法有了巨大的改进(5-10%的绝对改进)。因此,尽管常见的视频架构(如双流架构)表现强劲,但其影响力无法与图像处理深度学习所带来的范式转变相提并论,那么,如何才能在视频领域中产生这样的 “AlexNet 时刻”。
制约视频深度学习性能的两个因素
深度学习在视频领域取得的成果非常有限,主要有两个主要原因:
- 缺少大规模、有注释的视频数据
- 视频深度学习架构太过复杂
相较于图像数据,密集注释的视频数据更难找到/制作。因此,在相当长的一段时间内,用于人类动作识别(HAR)(最常见的视频学习任务之一)的数据集都很小(例如,HMDB51 和 UCF101)。
在小数据集上训练模型有很大的局限性,许多研究人员推测,创建更大规模的数据集有助于促进视频学习方法实现 AlexNet 等级的性能优化。因此,许多更大规模的视频数据集被开发出来(例如,Kinetics、ActivityNet、Dynamic Scenes 等),在一定程度上解决了视频数据集方面的问题。
除了缺乏大规模的数据集,单纯把一般的深度学习模型扩展到视频领域,也导致计算量和参数复杂性的增加。例如,与图像模型相比,3D CNN 有更多参数,因为每个卷积核都多了一个时间维度。也就是说,每个卷积运算在计算其输出的同时,要考虑多个视频帧(与考虑单个帧/图像的 2D 卷积不同),卷积参数的数量与帧数成线性关系,具体见下图。
3D 卷积参数的比例与帧数有关
这个增加的时间维度导致 3D CNN 需要更高的计算成本和数据需求,才能获得足够的训练,进而具有普适性。因此,早期的 3D CNN 的性能比不上简单的、参数低的架构,这些架构只需少量数据就能够学习有意义的表征。
如何优化视频深度学习的性能?
缺乏“AlexNet 时刻”表明,较简单的架构(如双流网络)无法满足视频深度学习的需要,我们需要更强大的架构。与简单架构相比,3D CNN 具有更大的表示容量,包含许多参数,并能将时间推理融入其卷积运算。 因此,如果能解决数据量不足和参数复杂的问题,3D CNN 的就表现出良好的性能。
收集较大的视频数据集可以有效缓解数据不足导致的问题。但相较于图像识别数据集,高质量的视频数据仍然非常有限。此外,视频深度学习研究者普遍认为,数据不足会是一个持续的问题,因为与单个帧或图像相比,视频数据本质上更难注释。因此,研究人员开始研究更有效的 3D CNN 变体,希望能在数据有限的情况下获得更好的性能。
解决 3D 卷积的不足
研究人员调查了以更高的计算效率和更合理的方式利用 3D 卷积的几种途径,主要有两种方法:
- 只在较少的网络层中使用 3D 卷积,并允许其余层进行 2D 卷积运算。
- 将 3D 卷积分离为单独的 2D 空间和 1D 时间卷积运算,并依次应用。
尽管只在一部分网络层中使用 3D 卷积是一个简单的概念,但分离 3D 卷积可能需要更多解释。内核为 Fx3x3x3 大小的 3D 卷积代表 F 个连续帧的标准大小的内核。分离 3D 卷积背后的主要观点是,单一的运算可以被分离成两个依次执行的卷积运算:一个是单独应用于每一帧的空间卷积,一个是聚合每一帧输出特征的时间卷积。在实践中,这样的分离卷积运算被实现为两个大小分别为 1x3x3x3 和 Fx1x1x1 的 3D 卷积,从而将可训练参数的数量从 Fx3x3x3 减少到 F+3x3x3,具体见下图:
分离 3D 卷积
这里,我们使用 2x2 的空间分辨率来节省空间,但 3x3 的卷积在实践中是标准的。与全 3D 卷积相比,这种分离的方法有几大优点。首先,它大大减少了卷积运算中的参数数量——它是一种对其标准对应物的低等级近似。尽管这意味着所产生的网络具有较少的表示容量(即可以学习的转变数量更加有限),但训练所需的数据更少(由于参数的减少),计算量也减少了。
除了减少可训练参数的数量外,这种方法还增加了网络内应用的非线性的数量(即在每个卷积组件后而非整个 3D 卷积后应用元素的非线性),对整个网络的性能有积极的效果。此外,分离卷积的 2D 组件现在可以用预先训练好的图像分类权重(例如, ImageNet)来初始化,从而利用更大规模的图像识别数据集来改进视频深度学习的性能。
用 3D CNN 改善视频理解
通过探索更有效的架构变体,研究人员能够大幅提高 3D CNN 的性能,超越其他常用架构(例如,双流网络)。 这种性能的提高通常是通过利用分离 3D 卷积,仔细选择使用 3D 卷积(相对于 2D 卷积)的层,开发利用大型图像识别数据集来提高视频理解的方法。
在这一节中,我将首先总结一些基于视频的早期学习任务的分离 3D 卷积运算,这些任务是使用较老的、性能较差的视频深度学习架构进行的。然后,我将概述最近的 3D CNN 架构,这种架构利用预先训练好的 2D CNN 来大幅提高性能。最后,我会解释这种高性能的架构是如何与高效的 3D CNN 架构相结合的,使 3D CNN(当与一些改进训练的一般技巧结合时)超过之前简单架构的性能。
分离方法
分离的时空 CNN。[5] 最先探讨了分离 3D 卷积,作者声称 3D CNN 的效果是有限的,因为
- 没有大规模的、有监督的视频数据;
- 3D 卷积需要大量的训练数据来保证良好的效果,因为它包含许多参数。
因此,必须开发一些方法来减少 3D 卷积使用的训练参数,在有限的数据体系内学习高质量的时空特征。
后来提出的方法(即 FstCN)将整个网络架构分为独立的空间和时间组件。特别是,网络的初始层只包含学习单帧表征的 2D 空间卷积,随后的网络层包含捕捉相邻帧之间的关系的 1D 时间卷积。这种方法类似于之前讨论过的 3D 卷积的分离,但是分离运算的空间和时间成分不是以交替的方式应用,而是被分离到不同的网络区域(即所有的空间卷积层被首先应用,然后所有的时间卷积层被应用)。
这种方法偏离了上一节中描述的基本思想,即通过依次应用单独的空间和时间卷积来近似 3D 卷积。这两种方法的区别描述如下,其中 [5] 遵循的方法被表示为“分离架构”。
3D CNN 的不同分离
有趣的是,[5] 的方法是由把 3D 卷积分离为空间和时间卷积序列的想法所激发的。然后,最终的架构并没有遵循这个方法,而是选择在网络的不同区域应用空间和时间卷积。由于作者没有为这个选择提供具体的理由,所以后续的文章研究了更接近于前面讨论的原始分离的架构。
伪 3D ResNets。[8] 中探讨了将每个 3D 卷积层分离为一个单独的空间和时间卷积依次应用的想法。与之前的文章类似,作者认为 3D CNN 架构(如 C3D)的性能很差,原因是当卷积运算扩展到多个帧时,会出现大量的参数。尽管这种 3D 卷积的表现容量很高(即从数据中学习大量不同特征的能力),但没有足够的训练数据来学习有用的表征,而且进行全 3D 卷积的计算成本也很高。
幸运的是,3D 卷积的分离方法会导致计算复杂性和可训练参数数量的减少。在 [8] 中,作者从 3D ResNet 架构[13] 开始,用一对 2D 空间(即用 1x3x3x3 的内核进行卷积)和 1D 时间(即用 Fx1x1x1 的核进行卷积,其中 F 是所考虑的相邻帧的总数)卷积取代所有 3D 卷积运算。除了按顺序应用这些运算外,作者还试图以并行和混合并行/顺序的方式应用这些运算,下图是对所考虑的选项的描述:
顺序、平行和混合分离 3D 卷积
在研究了这些变化之后,作者发现性能最高的架构在整个网络中使用了不同的分离卷积的混合,认为这种多样性有助于提高网络性能。通过采用这种改进的分离架构,并利用最近的几项改进神经网络训练的进展(如批量正常化、残差连接等),该网络能够超越以前的 3D CNN 变体(如 C3D[11])和其他最新的方法(如双流网络[2])。这种改进甚至也可以在更大、更先进的数据集(如 ActivityNet 和 Dynamic Scene)上观察到。然而,该网络因过于复杂而受到批评,原因是使用了各种不同的卷积类型,产生了一个特殊的、非同质化的架构。
2D CNN 的重新组合
膨胀 2D 网络。如上所述,有效利用 3D CNN 的最大阻碍之一是缺乏足够的训练数据。在图像识别领域,这种大规模的数据集(如 ImageNet)被广泛使用,因此 2D CNN 的性能远远超过了其他方法(如手工制作或基于机器学习的方法)。因此,人们开始思考,在这种基于图像的数据集上学习的表征是否可以转移到视频领域。这个问题在 [6] 中得到了回答——双流膨胀 3D CNN 架构(I3D)出现了。
I3D 架构的主要思想是,从一个预先训练好的图像识别架构开始,通过时间“膨胀”其参数。实际上,这是将一个预先训练好的、大小为 3x3x3 的 2D 卷积核,在时间上复制 F 次,以创建一个包含 F 个相邻帧、大小为 Fx3x3x3 的 3D 卷积核。然后,用这个 3D 内核内的权重除以 F,以确保卷积输出的预期幅度得到保留(即新内核的输出值不应比以前大 F 倍)。膨胀 2D 卷积核的描述如下:
2D 卷积核被膨胀成 3D 卷积核
利用这个想法,[6] 的作者可以采用一个高性能的图像识别架构(这种情况下使用的是 inception v1 架构[12])来膨胀卷积核,并将得到的架构用于视频学习任务。这种方法非常有效,因为它允许在学习有用的视频表征的同时,利用大型图像数据集(因为网络参数是用来自图像识别任务的预训练权重初始化的)。因此,某种程度上,缺乏大规模的视频数据集的影响变小了,原因是人们可以用现有的大规模图像数据集作为补充视频数据。
在提出 I3D 架构后,作者进一步探讨了只膨胀网络中的某些层,发现并不是所有的网络层都必须是 3D 的——只在需要的地方利用 3D 卷积就可以减少计算。此外,作者还发现,利用双流方法(即在 RGB 和光流输入上训练两个独立的模型,然后在测试时合并其预测)就能提高人类动作识别的性能。这个发现在随后的研究中得到了巩固,双流方法甚至在后来的 3D CNN 架构中得到了大量的使用。后续发现 [6] 的最终建议(即具有两个独立的光流和 RGB 流的 I3D 架构)性能非常好,远超之前的普通架构(如 3D CNN、分离 3D CNN、虚构的双流架构等) 的性能。
对膨胀的网络进行分离。I3D 架构的绝佳性能在随后的研究被大量利用。值得注意的是,这个架构使用了全 3D 卷积,如前所述,它的计算成本很高,而且包含许多参数。因此,我们有理由怀疑,分离的 3D 卷积是否可以提高 I3D 架构的性能和效率。两个几乎同时发表的论文[9, 10] 探讨了这个问题。
在 [9] 中,作者从 I3D 网络架构开始,探讨了对其每个 3D 卷积进行分离的不同可能性。特别是,作者研究了 i)哪些网络层应该有 3D 与 2D 卷积;ii)这些 3D 卷积应该如何实现。在探索不同的选项时,作者发现在网络的早期层利用分离的 3D 卷积,在后期层利用 2D 卷积(即“底重”架构)能产生最好的性能,从而使网络性能优于 2D 和全 3D 的卷积。这个结果意味着运动建模(即学习相邻帧之间的关系)是一个低/中层次运算,应该在网络的早期层中处理。
同样地,[10] 的作者研究了 I3D 架构的可能变化,但得出了一个截然不同的结果——作者发现只有在后期的网络层中才需要 3D 卷积。因此,他们提出的架构在早期的网络层中使用 2D 卷积,然后在后期的网络层中使用分离的 3D 卷积(一个“头重脚轻”的架构)。这个方法更好地平衡了速度和准确度,因为 3D 卷积只在特征图被降采样的后几层被利用。然而,与之前的文章类似,[10] 的作者发现,进行这种修改后的 I3D 架构的最佳性能仍然是通过双流方法(为 RGB 和光流输入提供单独的网络流)实现的。
在高层次上,[9, 10] 中的建议表明,尽管 I3D 架构的性能非常不错,但通过以下方式可以获得更好的性能:i)仔细选择利用 3D 卷积的层,以及 ii)用参数较少的分离变体取代全 3D 卷积。这样的改变进一步提高了 I3D 的性能,产生了一个 3D CNN 架构,其性能超过了人类动作识别(以及像人类动作检测这样更复杂的定位任务)的许多先进的方法。
长跨度的 3D 卷积
除了提出分离和膨胀的 3D 卷积,同时期的文章还研究了 3D 卷积的最后一个可以用来提高其性能的属性:时间范围。简单来说,3D 卷积的时间范围是卷积运算中的帧的数量。如前所述,3D 卷积的内核大小为 Fx3x3x3,其中 F 是时间范围或计算卷积输出时的帧数。
虽然时间范围通常被设定为一个固定值(通常在 16 帧左右 [2,5]),但 [1] 的作者广泛研究了 3D CNN 的不同 F 设置,发现在 3D 卷积中,帧数越多(例如,100 帧而不是 16 帧)越能提高网络性能。这个概念是有意义的,因为更复杂的、基于视频的任务可能源于视频中出现的长期时间关系。尽管这种方法产生了更高的计算成本(更大的 3D 卷积核),[1] 的作者通过简单地降低输入视频的空间分辨率来缓解这一问题,并发现这样产生的架构优于时间范围较短的架构。
因为 [1] 的方法使用了过时的网络架构,导致其性比更简单的视频架构差(如双流网络)。然而,在 [9] 中,作者再次研究了在分离 I3D 网络的背景下使用较长的时间范围,结果显示增加的时间范围再次提高了网络的性能。这个结果表明,使用较长的输入片段有利于提高包含长期时间关系的学习任务的性能。作者认为,以前缺乏对这种长期时间关系的正确理解,原因是早期的人类动作识别数据集可以用从一个或几个相邻帧中提取特征。
总结
本文概述了 3D CNN 成为视频深度学习的可行架构的发展历程。尽管由于缺乏足够的训练数据,导致早期的 3D CNN 变体参数表现不佳,但最终通过以下方式改善了性能:
- 开发参数较少的 3D 卷积的分离变体;
- 只在必要的层中使用 3D 卷积;
- 尽可能利用通过 2D 图像识别数据集训练的参数。
利用所有这些技巧的模型 [9, 10] 明显优于之前的 2D、3D 和双流方法,特别是在使用较长的片段作为输入时。
尽管这些高效的 3D CNN 架构很有效,但在对大量的视频数据进行学习时,仍然隐含着对时间和空间的对称性处理。不幸的是,时间往往与空间不完全相同,对动作的建模高度依赖于帧内物体的速度,而物体很可能移动缓慢或根本不移动。这样的认识导致了用于视频深度学习的改进型 SlowFast 网络[14]的开发(将在下一篇文章中介绍)。
感谢大家阅读这篇文章,希望本文能对大家有所帮助。如果有任何问题,欢迎在下方评论。
参考文献
[1] https://arxiv.org/abs/1604.04494
[2] https://arxiv.org/abs/1406.2199
[2] https://arxiv.org/abs/1604.06573
[3] https://arxiv.org/abs/1611.02155
[4]https://papers.nips.cc/paper/2012/hash/c399862d3b9d6b76c8436e924a68c45b-Abstract.html
[5] https://arxiv.org/abs/1510.00562
[6] https://arxiv.org/abs/1705.07750
[7] https://ieeexplore.ieee.org/document/6165309
[8] https://arxiv.org/abs/1711.10305
[9] https://arxiv.org/abs/1711.11248
[10] https://arxiv.org/abs/1712.04851
[11] https://arxiv.org/abs/1412.0767
[13] https://arxiv.org/abs/1611.02155
[14] https://arxiv.org/abs/1812.03982
原文作者:Cameron R. Wolfe, Ph.D.
原文链接:https://towardsdatascience.com/deep-learning-on-video-part-three-diving-deeper-into-3d-cnns-cb3c0daa471e