跳转到主要内容
博客

迪士尼如何通过 PyTorch 的多模态方法改进活动识别

引言

迪士尼媒体与娱乐发行部 (DMED) 的职责之一是管理和分发海量的媒体资产,包括新闻、体育、娱乐和专题节目、系列节目、营销和广告等。

我们的团队作为 DMED 技术内容平台组的一部分,专注于媒体标注。在日常工作中,我们自动分析各种内容,这不断挑战着我们机器学习工作流的效率和模型的准确性。

我们的一些同事最近讨论了我们通过切换到使用 PyTorch 的端到端视频分析流水线所实现的工作流效率,以及我们如何进行动画角色识别。我们邀请您阅读这篇先前的帖子,了解更多详情。

虽然转换为端到端 PyTorch 流水线是任何公司都可以受益的解决方案,但动画角色识别是一个迪士尼独有的概念和解决方案。

在本文中,我们将重点关注活动识别,这是一个跨行业的普遍挑战——但在媒体制作领域加以利用时,它具有一些特殊的机会,因为我们可以结合音频、视频和字幕来提供解决方案。

多模态实验

处理多模态问题会增加通常训练流水线的复杂性。每个示例具有多种信息模式意味着多模态流水线必须具有特定的实现来处理数据集中的每种模式。通常在此处理步骤之后,流水线必须合并或融合输出。

我们最初的多模态实验是使用 MMF 框架完成的。MMF 是一个用于视觉和语言多模态研究的模块化框架。MMF 包含最先进的视觉和语言模型的参考实现,并为 Meta AI 研究部门的多个研究项目提供了支持(如 PyTorch 生态系统日 2020 上展示的这幅海报所示)。随着最近 TorchMultimodal 的发布,一个用于大规模训练最先进多模态模型的 PyTorch 库,MMF 凸显了人们对多模态理解日益增长的兴趣。

MMF 通过模块化管理流水线的所有元素来处理这种复杂性,通过一系列广泛的不同实现用于特定模块,从模态处理到处理后信息的融合。

在我们的场景中,MMF 是实验多模态的绝佳切入点。它使我们能够通过结合音频、视频和隐藏式字幕快速迭代,并在不同规模的级别上使用某些多模态模型进行实验,从单个 GPU 转移到 TPU Pods。

多模态 Transformer

在基于 MMF 的工作台中,我们的初始模型基于每种模态特征的拼接,并演变为包含基于 Transformer 的融合模块以组合不同输入模式的流水线。

具体来说,我们使用了与 Meta AI 研究团队合作开发的名为 MMFTransformer 的融合模块。这是基于 VisualBERT 的实现,并增加了必要的修改以使其能够处理文本、音频和视频。

尽管 MMFTransformer 的开箱即用实现取得了不错的结果,但我们离目标仍很远,而且基于 Transformer 的模型需要比我们现有数据量更多的数据。

寻找数据需求更低的解决方案

为了寻找数据需求更低的解决方案,我们的团队开始研究 MLP-Mixer。这种新架构由 Google Brain 团队提出,它为计算机视觉任务中已经确立的事实标准架构(如卷积或自注意力)提供了一种替代方案。

MLP-Mixer

混合变体的核心思想是用多层感知器取代 Transformer 中使用的卷积或自注意力机制。这种架构上的改变有利于模型在高数据量情况下的性能(特别是相对于 Transformer),同时也引发了一些关于卷积和自注意力层中隐藏的归纳偏置的问题。

这些提议通过将图像分割成块,将这些块展平为一维向量,并通过一系列 Mixer 层来很好地解决图像分类任务。

受基于 Mixer 架构的优势启发,我们的团队寻找与我们试图解决的视频分类问题之间的并行性:具体来说,我们不是只有一张图像,而是有一组需要分类的帧,以及以新模态形式出现的音频和隐藏式字幕。

重新解读 MLP-Mixer 的活动识别

我们的方案采纳了 MLP-Mixer 的核心思想——在序列和转置序列上使用多个多层感知器,并将其扩展到一个多模态框架,使我们能够使用相同的架构处理视频、音频和文本。

对于每种模态,我们使用不同的提取器来提供描述内容的嵌入。给定每种模态的嵌入,MLP-Mixer 架构解决了决定哪种模态可能最重要的问题,同时还权衡了每种模态对最终标签的贡献程度。

例如,在检测笑声时,有时关键信息在音频或帧中,而在某些情况下,我们会在隐藏式字幕中发现强信号。

我们尝试使用 ResNet34 分别处理每一帧并获得一系列嵌入,以及使用名为 R3D 的视频专用模型,它们分别在 ImageNet 和 Kinetics400 上进行了预训练。

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

对于隐藏式字幕,我们使用预训练的 BERT-large,除了嵌入和 LayerNorms 外,所有层都已冻结。

一旦我们从每种模态中提取了嵌入,我们就将它们连接成一个单一序列,并通过一组 MLP-Mixer 块;接下来我们使用平均池化和分类头来获得预测。

我们的实验是在一个自定义的手动标注的活动识别数据集上进行的,该数据集包含 15 个类别,我们通过实验知道这些类别很难,并且无法使用单一模态精确预测所有类别。

这些实验表明,使用我们的方法在性能方面有显著提升,尤其是在低/中数据量(75K 训练样本)的情况下。

当只使用文本和音频时,我们的实验结果显示,与在最先进骨干网络提取的特征之上使用分类器相比,准确性提高了 15%。

使用文本、音频和视频,我们发现准确率比使用 Meta AI Facebook 的 MMF 框架提高了 17%,该框架使用类似 VisualBERT 的模型结合了更强大的最先进骨干网络的模态。

目前,我们已将初始模型扩展到涵盖多达 55 个活动类别和 45 个事件类别。我们期望未来改进的挑战之一是包含所有活动和事件,甚至那些不那么频繁的。

解读 MLP-Mixer 模式组合

MLP-Mixer 是多层感知器的串联。这可以非常粗略地近似为线性操作,因为一旦训练完成,权重就固定了,输入将直接影响输出。

一旦我们假设这种近似,我们也假设对于由 NxM 个数字组成的输入,我们可以找到一个 NxM 矩阵,该矩阵(当按元素相乘时)可以近似 MLP-Mixer 对一个类别的预测。

我们将这个矩阵称为“模板”,如果我们能够访问它,我们就能找到输入嵌入的哪些部分对特定预测负责。

你可以把它想象成一张打孔卡,在特定位置有孔。只有那些位置的信息才能通过并对特定预测做出贡献。因此我们可以测量那些位置的输入强度。

当然,这是一种过度简化,不会存在一个完美的唯一模板来精确表示输入对一个类的所有贡献(否则就意味着问题可以线性解决)。因此,这只应用于可视化目的,而非作为精确的预测器。

一旦我们为每个类别准备了一组模板,我们就可以毫不费力地测量输入贡献,而无需依赖任何外部可视化技术。

为了找到模板,我们可以从一个“随机噪声”模板开始,并通过 MLP-Mixer 反向传播来优化它,以最大化特定类别的激活。

通过这样做,我们最终可能会得到许多有效的模板,我们可以使用 K-means 将它们聚类成相似的模板并对每个聚类进行平均,从而将其减少到少数几个。

使用 Mixer 兼顾各方优势

MLP-Mixer 作为一种不带卷积层的图像分类模型,需要大量数据,因为缺乏归纳偏差——这是该模型整体上的一个优点——在低数据域中工作时却是一个弱点。

当它们被用作结合先前由大型预训练骨干网络提取的信息的方式时(而不是用作完整的端到端解决方案),它们就会大放异彩。Mixer 的优势在于寻找不同输入之间的时间或结构连贯性。例如,在视频相关任务中,我们可以使用一个强大且预训练的模型从帧中提取嵌入,该模型能够理解帧级别上发生的事情,然后使用 Mixer 以顺序方式理解它。

这种使用 Mixer 的方式使我们能够在有限的数据量下工作,并且仍然获得比 Transformer 更好的结果。这是因为 Mixer 在训练过程中似乎更稳定,并且似乎会关注所有输入,而 Transformer 倾向于崩溃并只关注序列中的某些模态/部分。

致谢:我们要感谢 Meta AI Research 和 Partner Engineering 团队在此次合作中提供的帮助。