视频里藏着两条时间线,AI要怎么同时看懂

2014年,如果你问一个计算机视觉研究者"深度学习能不能识别视频里的动作",大概会得到一个尴尬的沉默。
图像识别领域,深度学习已经靴子落地了。2012年AlexNet横空出世,把图片分类任务打得服服帖帖,准确率碾压所有手工设计的特征。但视频呢?视频不就是一堆图片叠起来吗?
事实证明,不是这么简单。
在这篇论文发表之前,最好的视频动作识别方法用的还是一种叫做"密集轨迹"的手工特征。
密集轨迹*:一种传统的视频特征提取方法,通过追踪视频中密集分布的点随时间的运动轨迹,手工设计规则来描述动作特征。
这类手工方法在标准测试集上能做到85%以上的准确率,而当时所有试图用深度神经网络处理视频的方案,都没能真正超过它。有人试过直接把3D卷积网络怼上去处理视频,结果效果平平,甚至不如手工特征。这不是深度学习不行,是大家还没找到正确的姿势。
这篇来自牛津大学的论文,作者是Karen Simonyan和Andrew Zisserman,给出了一个答案。有意思的是,这两人几个月后又发表了另一篇论文,叫VGGNet,后来成了图像识别领域的经典模型之一。可以说,这篇视频识别的论文和VGGNet是同一个时期、同一个课题组的孪生研究,一个专注图像,一个专注视频,思路上有共通之处。
这篇论文的核心突破是:它第一次让纯深度学习方法在视频动作识别上真正打赢了手工特征,而且不是小赢,是全面超越。
视频比图片难在哪
先说清楚一件事,视频识别到底难在什么地方。
一张图片,你要识别的是"这是什么"。一段视频,你要识别的是"发生了什么"。多出来的这个"发生",藏着时间维度的信息,也就是动作本身的动态过程。
举个例子,一张照片里一个人张开双臂,你分辨不出他是在跳舞、拥抱还是准备摔倒。但如果给你连续几秒的视频,一切都清楚了。
问题是,怎么让神经网络"看懂"这种随时间变化的动态信息?
早期的直觉是,既然图片可以用2D卷积网络处理,视频不就是加了一个时间维度吗?那就用3D卷积,把时间也当作一个空间维度来卷积。
这个思路听起来合理,实际操作中却处处碰壁。3D卷积需要海量的视频数据来训练,而当时能用的视频数据集,规模远远比不上ImageNet那种几百万张图片的图像数据集。数据不够,网络学不到东西,效果自然上不去。
这就好比让一个厨师同时学做菜和学开车,教材却只有平时教做菜的十分之一。厨艺没学好,车也没学会开,两头落空。如果不解决数据不足这个根本问题,无论网络设计得多精巧,都是在沙地上盖楼。
拆开时间和空间,分别处理
这篇论文给出的解法,思路上其实挺朴素:既然一个网络同时学空间信息和时间信息学不好,那就拆成两个网络,一个专门学空间,一个专门学时间,最后把两边的结果合起来。
这就是这篇论文最核心的设计,叫做双流卷积网络。
双流卷积网络*:将视频识别任务拆分成两个独立的卷积神经网络分支,一个处理静态画面(空间流),一个处理运动信息(时间流),最后融合两者的预测结果。
空间流这一支很好理解,它处理的就是视频里的单帧画面,本质上跟处理普通图片的卷积网络没什么区别。它能学到的是"画面里有什么",比如背景里有游泳池,有球场,画面中央有个人形。这类信息对识别动作也很有帮助,毕竟你在游泳池边看到的动作,大概率是跳水或游泳,不太可能是打冰球。
时间流这一支才是真正的创新点,它不看原始画面,看的是光流。
光流*:描述视频中像素点在连续帧之间移动方向和速度的一种表示方式,本质上是把"运动"这件事可视化成了一张张箭头图。
具体来说,研究者把两帧画面之间每个像素的运动方向和运动幅度计算出来,变成一张新的"图片"。这张图片上看不到人脸、看不到颜色,只有密密麻麻的箭头,标示着画面里每一处在往哪个方向、以多快的速度移动。把这样的光流图喂给一个卷积网络,网络学到的就纯粹是"动作"本身,和背景、光线、颜色这些干扰信息完全脱钩。
这个设计背后的思路是,把"是什么"和"怎么动"这两件事彻底拆开处理,让两个网络各自专注一件事,而不是逼一个网络同时兼顾两种完全不同性质的信息。
这就像批改学生作文,如果同时要看语法对不对、内容有没有新意,老师很容易顾此失彼。有的老师会分成两轮,第一轮只看语法错误,第二轮只看立意和结构,最后综合两轮的评分给出最终成绩。这样每一轮的判断标准单一、清晰,不容易互相干扰。如果两件事混在一起同时判断,注意力被拉扯,反而两头都判断不准。
论文的实验数据证实了这个设计的价值。如果只用空间流网络,单独测试,准确率大概是73%左右。如果只用时间流网络,单独测试,准确率能达到83%左右,说明动作信息本身包含的判别力,比背景画面还要强。而把两条流结合起来,最终准确率冲到了88%。
这组数字很值得琢磨。单独看背景画面,只能对七成左右的动作做出正确判断。但如果你完全不看画面内容,只看动作的运动轨迹,反而能认对八成多。这说明一件事,动作识别这件事,动作本身远比背景更关键,这也是为什么后来学界对光流信息的重视程度这么高。
数据不够,那就借数据
刚才提到,视频数据集规模不够,是深度学习在视频领域一直没打赢手工特征的重要原因。这篇论文怎么解决这个问题?
答案是迁移学习加多任务训练的组合拳。
迁移学习*:先在数据量充足的任务上训练模型,再把学到的知识迁移到数据量有限的目标任务上,避免从零开始训练。
空间流网络这一支,直接借用了在ImageNet图像数据集上预训练好的网络参数。ImageNet有一百多万张标注图片,训练出来的网络已经学会了怎么识别边缘、纹理、物体轮廓这些通用的图像特征。把这些参数拿过来,在视频动作数据集上稍微微调一下,空间流网络就能站在巨人的肩膀上,不用从零学起。
时间流网络这一支麻烦一些,因为光流图这种数据形式,在ImageNet之类的图像数据集里根本不存在,没法直接迁移预训练参数。研究者的解法是,把两个不同的视频动作数据集放在一起联合训练,用一种多任务学习的方式,让网络同时学习预测两个数据集各自的分类标签,这样即使单个数据集规模有限,合并起来的数据总量也能撑起训练需求。
这个操作背后的逻辑是,数据不够,那就想办法凑,凑的方式可以是借用别处已经训练好的知识,也可以是把几个小数据源拼成一个大数据源。
这跟备考的道理很像。假设你要考一门冷门语言,教材稀缺,但你发现另一门语法结构类似的语言教材很多。你可以先靠那门教材打好语法基础,再针对冷门语言做专项练习,而不是从零开始死磕稀缺教材。如果没有这一步迁移,你可能因为练习量不够,连基本规则都掌握不牢,更别说应对复杂题型了。
论文用实验验证了这套组合拳的效果。如果时间流网络不做任何预训练或数据增强,直接在有限的数据上训练,过拟合问题会很严重,模型在训练集上表现不错,换到测试集上就崩。加上多数据集联合训练之后,准确率有明显提升,证明了数据不足问题确实可以通过巧妙的训练策略缓解,而不是必须等更大规模的数据集出现才能往前推进。
两条流怎么融合
拆成两条流分别处理只是第一步,最后还得把两边的判断结果合并成一个最终答案。
这篇论文尝试的融合方式相对直接,主要是在两个网络各自输出预测分数之后,做加权平均,或者训练一个简单的分类器把两组分数当作新的输入特征,重新做一次判断。
这个环节看起来技术含量不算最高,但它其实解决了一个很现实的矛盾:两个网络各自都不完美,空间流会被复杂背景误导,时间流对光照变化或摄像机自身的抖动比较敏感。把两者结合,相当于让两个各有短板的专家互相补台。
这就像看病时找了两个医生分别诊断,一个是内科专家,一个是影像科专家,两人各自给出判断后,再让主治医生综合两边的意见做最终决策。单独一个医生的判断可能有偏差,但两个角度的信息叠加起来,误诊率会明显降低。如果只信一个医生的一次判断,误诊的代价可能就是延误治疗。
实验数据显示,融合之后的准确率比任何单一流都高,这也印证了空间信息和时间信息确实是互补的,不是重复的。
下面这张表格总结了论文里几个关键的实验对比结果。
| 方法 | UCF-101数据集准确率 |
|---|---|
| 仅空间流网络 | 约73% |
| 仅时间流网络 | 约83% |
| **双流网络融合** | **约88%** |
| 同期最好的手工特征方法(改进版密集轨迹) | 约85%-87% |
从这张表能看出,双流网络的融合结果,已经稳稳超过了当时手工特征方法的最好成绩。这在2014年是一件大事,意味着深度学习在视频这个更复杂的任务上,终于追平并超越了积累多年的手工设计智慧。
这句话的分量,不亚于两年前AlexNet在图像识别上引发的震动。区别在于,AlexNet证明深度学习能在静态图像上碾压传统方法,而这篇论文证明,深度学习经过恰当的结构设计,同样能在动态视频这个更难的战场上取胜。
后来的故事
这篇论文提出的双流架构,后来成了视频动作识别领域一个绕不开的基准框架,很多后续工作都是在这个骨架上做改进。
2016年,林特和涂等研究者提出了时序分段网络,这篇论文进一步优化了双流网络如何处理长视频的问题。原始的双流网络只能处理很短的视频片段,时序分段网络把整段视频切成若干段,分别提取特征再汇总,让网络能感知更长时间跨度里的动作演变,在多个数据集上把准确率又往上推了几个百分点。
2017年,卡雷拉和齐塞尔曼(注意,齐塞尔曼正是这篇双流网络论文的作者之一)发表了I3D网络的论文,提出把双流网络里的2D卷积全部替换成3D卷积,并且巧妙地用图像预训练的参数来初始化3D卷积核,解决了3D卷积网络之前一直缺数据、难训练的老问题。I3D在多个动作识别数据集上刷新了当时的最好成绩,这也说明双流的思路和3D卷积的思路,后来找到了融合的方式,而不是互相取代的关系。
从2014年到2017年,短短三年,视频动作识别这个领域从"深度学习打不过手工特征"走到"深度学习成为绝对主流",这篇双流网络论文正是这条路上的第一块奠基石。
写在后面
这篇论文最让我意外的一点是,时间流单独跑分居然比空间流还高。直觉上背景画面信息量更大,应该更好判断,但实际是运动本身的判别力更强。这提醒我,做任务拆解的时候,不能凭直觉猜哪部分信息更重要,得靠实验说话。
另一个值得琢磨的细节是,这篇论文和VGGNet几乎是同一批人同一时期的产物,一个啃图像,一个啃视频。这说明真正推动一个领域往前走的,往往不是孤立的灵光一闪,而是团队长期扎在一个方向上,同时打通几个相邻问题。
双流网络没解决的问题也很明显,它对光流的依赖意味着计算光流本身就要花不少功夫,而且两条流是分开训练、事后融合的,网络内部并没有真正学会"空间信息怎么影响时间理解"这种更深层的交互。这个问题后来被3D卷积网络和更复杂的时空联合建模方式接手解决,但那已经是另一段故事了。
Q&A
Q1:双流卷积网络是什么?
A:双流卷积网络是牛津大学研究者在2014年提出的视频动作识别模型,把任务拆成两个独立的神经网络分支,一个处理静态画面的空间流,一个处理运动信息的时间流,最后融合两边的预测结果,准确率达到约88%,首次让深度学习方法在视频动作识别上超越了手工特征方法。
Q2:为什么双流网络要把空间和时间分开处理?
A:因为一个网络同时学习画面内容和动作变化效果不好,数据也不够支撑。拆成两个网络后,空间流专注学"画面里有什么",时间流通过光流图专注学"动作怎么变化",实验证明分开处理后融合的效果比混在一起处理好很多。
Q3:光流在这篇论文里起什么作用?
A:光流是把视频里每个像素点的运动方向和速度转化成图像的一种表示方式,不包含颜色或背景信息,只有运动轨迹。研究者用光流图训练时间流网络,让网络专注学习动作本身,实验中光流单独训练的准确率约83%,比只看画面的空间流更高,证明动作信息比背景信息更关键。