引言
迪士尼媒体与娱乐分发(DMED)负责管理和分发海量媒体资产,包括新闻、体育、娱乐与专题节目、剧集、营销和广告等,职责十分广泛。

我们团队隶属于 DMED 技术的内容平台部门,专注于媒体标注工作。在日常工作中,我们自动分析各类内容,这对我们机器学习工作流程的效率和模型准确性提出了持续的挑战。
我们的几位同事最近讨论了通过切换到使用 PyTorch 的端到端视频分析流水线所获得的效率提升,以及我们如何处理动画角色识别。我们诚邀您阅读我们之前的文章了解更多详情。
虽然转向端到端的 PyTorch 流水线是任何公司都能受益的解决方案,但动画角色识别是一个迪士尼独有的概念和解决方案。
在本文中,我们将重点讨论活动识别。这是一个各行各业都面临的共同挑战,但在媒体制作领域应用时具有一些特殊的机遇,因为我们可以结合音频、视频和字幕来提供解决方案。
多模态实验
处理多模态问题增加了常规训练流水线的复杂性。对于每个样本拥有多种信息模式,意味着多模态流水线必须具备专门的实现方式来处理数据集中的每种模式。通常在处理步骤完成后,流水线还需要将输出进行合并或融合。
我们最初的多模态实验是使用 MMF 框架完成的。MMF 是一个用于视觉和语言多模态研究的模块化框架。MMF 包含最先进的视觉和语言模型的参考实现,并支持了 Meta AI 研究部门的多个研究项目(如 2020 年 PyTorch 生态日展示的这张海报所示)。随着近期 TorchMultimodal(一个用于大规模训练先进多模态模型的 PyTorch 库)的发布,MMF 凸显了人们对多模态理解日益浓厚的兴趣。
MMF 通过对流水线所有元素进行模块化管理,处理了这种复杂性。它通过针对特定模块的一系列不同实现,涵盖了从模态处理到处理后信息融合的各个环节。
在我们的场景中,MMF 是尝试多模态的一个很好的切入点。它使我们能够通过结合音频、视频和隐藏式字幕快速迭代,并在特定多模态模型上进行不同规模的实验,从而实现了从单 GPU 到 TPU Pods 的跨越。
多模态 Transformer
基于 MMF 的工作台,我们的初始模型是基于每种模态特征的串联,随后演进为包含基于 Transformer 的融合模块的流水线,用于结合不同的输入模式。
具体而言,我们使用了与 Meta AI 研究团队合作开发的 MMFTransformer 融合模块。这是一个基于 VisualBERT 的实现,我们对其进行了必要的修改,使其能够处理文本、音频和视频。
尽管使用现成的 MMFTransformer 实现获得了不错的结果,但我们离目标仍有距离,且基于 Transformer 的模型需要比我们现有规模更多的数据。
寻找对数据需求较小的解决方案
为了寻找对数据需求较小的解决方案,我们团队开始研究 MLP-Mixer。这种新架构由 Google Brain 团队提出,为计算机视觉任务中卷积或自注意力等既定事实上的架构提供了一种替代方案。
MLP-Mixer
Mixer 变体的核心思想在于用多层感知机(MLP)替代 Transformer 中使用的卷积或自注意力机制。这种架构上的变化提高了模型在高数据状态下的性能(尤其是相对于 Transformer 而言),同时也引发了一些关于卷积和自注意力层中隐藏的归纳偏置的问题。
这些方案通过将图像切分成块、将这些块展平为一维向量,并通过一系列 Mixer 层来处理,在解决图像分类任务方面表现出色。

受到 Mixer 架构优势的启发,我们团队寻找了与我们在视频分类中尝试解决的问题之间的并行性:具体来说,我们处理的不是单张图片,而是一组需要分类的帧,以及作为新模态的音频和隐藏式字幕。
重新诠释 MLP-Mixer 的活动识别
我们的方案采用了 MLP-Mixer 的核心思想——即在序列和转置序列上使用多个多层感知机——并将其扩展为一个多模态框架,使我们能够用同一架构处理视频、音频和文本。
对于每种模态,我们使用不同的提取器来提供描述内容的嵌入(embeddings)。给定每种模态的嵌入,MLP-Mixer 架构解决了决定哪种模态最重要的问题,同时也权衡了每种模态对最终标签的贡献程度。
例如,在检测笑声时,有时关键信息存在于音频或画面中,而在某些情况下,我们会在隐藏式字幕中获得强烈的信号。
我们尝试使用 ResNet34 分别处理每一帧并获得一系列嵌入,同时使用名为 R3D 的视频专用模型,两者分别在 ImageNet 和 Kinetics400 上进行了预训练。

为了处理音频,我们使用预训练的 ResNet34,并移除最终层,以便从音频频谱图中提取二维嵌入(对于 224×224 的图像,我们最终得到 7×7 的嵌入)。

对于隐藏式字幕,我们使用预训练的 BERT-large,除了嵌入层和层归一化层(LayerNorms)外,冻结所有其他层。

一旦提取出每种模态的嵌入,我们将它们串联成一个单一序列,并将其通过一组 MLP-Mixer 块;接下来,我们使用平均池化和一个分类头来获得预测结果。

我们的实验是在一个自定义的手动标注的活动识别数据集上进行的,该数据集包含 15 个类别。根据实验可知,这些类别具有难度,无法全部仅通过单一模态准确预测。
这些实验表明,我们的方法显著提升了性能,特别是在低/中数据量级(7.5 万个训练样本)的情况下。
在仅使用文本和音频时,我们的实验显示,与在最先进主干网络提取的特征之上使用分类器相比,准确率提高了 15%。
在使用文本、音频和视频时,与使用 Meta AI 的 MMF 框架(利用类似 VisualBERT 的模型结合更强大的先进主干网络来融合模态)相比,我们的准确率提高了 17%。
目前,我们将初始模型扩展到了涵盖 55 个活动类别和 45 个事件类别。我们期望在未来改进的挑战之一是纳入所有的活动和事件,即使是那些频率较低的活动。
解读 MLP-Mixer 模态组合
MLP-Mixer 是多层感知机的串联。粗略地说,这可以近似为一种线性运算,即一旦训练完成,权重固定,输入将直接影响输出。
假设了这种近似,我们也假设对于由 NxM 个数字组成的输入,我们可以找到一个 NxM 的矩阵,(按元素相乘时)可以近似 MLP-Mixer 对某个类别的预测。

我们将这个矩阵称为“模版(stencil)”。如果我们能获取它,就能发现输入嵌入的哪些部分对特定预测负责。
你可以把它想象成一张在特定位置有孔的打孔卡。只有那些位置的信息才会通过并对特定预测做出贡献。因此,我们可以测量输入在这些位置的强度。

当然,这是一种过度简化,不存在一个能完美代表输入对某一类别的所有贡献的唯一模版(否则意味着问题可以线性解决)。因此,这仅应用于可视化目的,而非作为精确的预测器。
一旦我们为每个类别获得了一组模版,就可以在不依赖任何外部可视化技术的情况下轻松测量输入贡献。
要找到模版,我们可以从一个“随机噪声”模版开始,通过 MLP-Mixer 进行反向传播,优化它以最大化特定类别的激活。

通过这样做,我们可以获得许多有效的模版,并使用 K-means 将它们聚类为相似的模版,然后平均每个聚类,将其缩减为少数几个。
利用 Mixer 实现两全其美
作为图像分类模型使用的 MLP-Mixer,在没有卷积层的情况下需要大量数据,因为缺乏归纳偏置(这是该模型整体上的优点之一)在低数据领域工作时反而成了弱点。
当被用作一种组合由大型预训练主干网络预先提取的信息的方式时(而不是作为完全端到端的解决方案),它们表现得非常出色。Mixer 的优势在于寻找不同输入之间的时序或结构一致性。例如,在视频相关任务中,我们可以使用强大的预训练模型提取帧嵌入,该模型了解帧级别正在发生什么,并使用 Mixer 以序列方式理解这些信息。
这种使用 Mixer 的方式使我们能够在数据有限的情况下工作,并获得比 Transformer 更好的结果。这是因为 Mixer 在训练过程中似乎更稳定,并且似乎会关注所有输入,而 Transformer 倾向于崩溃并只关注某些模态或序列的一部分。
致谢:我们感谢 Meta AI 研究部门和合作伙伴工程团队的合作。