最佳做法

本页介绍有关准备数据、评估模型和提高模型性能的最佳做法。

准备数据

  • 您用于训练的数据应尽可能接近要进行预测的数据。例如,如果您的用例涉及模糊的低分辨率视频(例如,监控摄像头的视频片段),那么您的训练数据应由模糊的低分辨率视频组成。一般来说,您还应该考虑为训练视频提供多种角度、分辨率和背景。
  • 您的训练数据应满足特定最低要求:

    • 您的所有数据都应该带有标签。
    • 您的标签必须是有效字符串(无英文逗号)。
    • 所有视频片段都应该具备有效时间戳。您的片段必须具有开始时间和结束时间,并且结束时间必须大于 0 且小于视频的总时长,开始时间必须早于结束时间。
    • CSV 中的所有视频 URI 必须存储在可访问的 Cloud Storage 存储分区中。
    • 您的数据至少应该包括 2 个不同的类别,其中每个类别至少包含 10 个数据项。
  • 您拥有的训练和测试数据越多越好。模型越强大,需要的数据就越多。

  • 训练良好模型所需的数据量取决于不同因素:

    • 类别的数量。您拥有的唯一类别越多,每个类别需要的样本就越多。
    • 类别的复杂性或多样性。神经网络可快速区分跑步视频和游泳视频,但是若要对 30 种不同的舞蹈风格进行分类,需要的样本会多很多。
    • 训练多标签模型比训练多类别模型更加困难。如果在大多数情况下,每个样本只有 1 个标签,请考虑使用多类别模型训练,而不要使用多标签模型。
  • 根据经验,如果您的类别独特且数量很少,则每个类别至少应有 200 个训练样本;如果各类别之间的差异比较细微,且您有超过 50 个不同的类别,则每个类别的训练样本应超过 1000 个。

  • 如果模型包含的数据高度不均衡,请避免对其进行训练。在许多情况下,每个类别的样本数量都不相等。如果差别不大,情况就没有那么糟糕。然而,如果存在更严重的不均衡(例如,一些类别出现的次数比其他类别多 10 次以上),就会产生问题。虽然 AutoML Video 会尝试修正类别不均衡的情况,但这种情况不是模型训练的理想配置。

如需了解详情,请参阅准备数据的相关信息。

拆分数据

在机器学习中,您通常需将数据集划分为三个不同的子集:训练数据集、验证数据集和测试数据集。训练数据集用于构建模型。该模型在搜寻训练数据中的模式时会尝试多种算法和参数。在模型识别出模式后,它会使用验证数据集来测试算法和模式。模型会从训练阶段识别出的算法和模式中选出表现最佳的。

在识别出表现最佳的算法和模式之后,使用测试数据集测试它们的错误率、质量和准确度。您应该拥有一个单独的测试数据集,用于独立测试您的模型。

系统使用验证和测试数据集是为了避免模型出现偏差。验证阶段使用的最佳模型参数可能会产生指标偏差。在验证阶段结束后使用测试数据集来评估模型质量可得到无偏差的评估结果。

拆分数据时,请遵循以下最佳做法:

  • 建议所有数据集(也称为数据集拆分)都代表相同群体,拥有类似的视频,且标签分配类似。

    当您提供您的数据时,AutoML Video 会自动将数据拆分为训练数据集、验证数据集和测试数据集。您也可以自行分配训练拆分标签。所有样本应来自单个视频或来自多个视频。如果只有少数几个视频,且视频不同或者视频中的标签分配不同,则情况可能比较危险。这是因为 AutoML Video 是在视频级别生成训练-验证-测试拆分结果的。

    例如,如果您只有 3 个视频,其中包含数千个带注释的视频片段,但一些类别仅存在于单个视频中,则可能会发生这样的情况:针对一些标签,模型不进行训练,因而在预测过程中可能会漏掉这些标签。

  • 避免数据泄露。如果算法能够在模型训练期间使用其本不应使用的信息,且在未来的预测过程中将不提供该信息,则视为数据泄露。这可能会导致训练数据集、验证数据集和测试数据集的结果过于乐观;但当要求对未来不可见的数据进行预测时,其表现可能不尽人意。

    一些泄露的示例包括:基于取镜视角或光线条件(早晨/傍晚)的偏差;与没有解说员的视频相比,更偏向于有解说员的视频;基于视频的偏差,视频的某些标签来自特定区域、语言群体、解说员,或者包含同一个徽标。

    为避免数据泄露,请执行以下操作:

    • 拥有一组多样化的视频和视频片段样本。
    • 检查视频,以确保没有隐藏提示(例如,带有正样本的视频在下午拍摄,而带有负样本的视频在早晨拍摄)。

如需了解详情,请参阅准备数据的相关信息。

数据源示例

如需查看数据源的示例,请参阅以下公开提供的视频数据集:

  • UCF-101:动作识别数据集(101 个类别;多类别;13320 个短视频/样本)
  • HMDB-51:人体运动数据库(51 个类别;多类别;6849 个短视频/样本)
  • Kinetics:用于动作识别的大规模数据集(400/600/800 个类别;多类别;超过 400000 个短视频/样本)
  • Something-Something:有操作对象的人体动作(174 个类别;220847 个视频/样本)
  • AVA:带有密集注释的原子化视觉动作(80 个类别;多标签;430 个 15 分钟视频剪辑中包含 158 万个注释)

训练模型

根据您的需求,相同的数据可用于训练不同模型,并生成不同的预测类型。此外,针对相同数据训练同一模型产生的结果可能会略有差异。神经网络模型训练涉及随机的操作,因此无法保证做到通过相同的输入来训练完全相同的模型,因而预测结果可能会略有不同。

如需了解详情,请参阅管理模型的相关信息。

评估模型

模型训练完成后,您可以通过验证数据集和测试数据集或者您自己的新数据集来评估性能。

常见的分类指标包括:

  • 曲线下面积 (AUC),也称为“接收者操作特征曲线下面积”。该曲线绘制了不同分数阈值时基于误报概率的召回率。AUC 值的范围在 0.5 到 1.0 之间。该指标主要用于二元分类问题。
  • 精确率/召回率曲线下面积 (AuPRC),也称为平均精确率 (AP)。它是基于召回率值范围的精确率值的积分。这是对二元问题的最佳解释。
  • 平均精确率均值(mAP 或 MAP)可被视为基于多个类别或标签的平均精确率 (AP) 指标的平均值。有时,mAP 和 AP 可互换。
  • 准确率表示正确分类的样本的比率。
  • 对于二元和多类别问题,您还可以单独检查各个置信度分数阈值时的精确率和召回率。
  • 如果多类别标签的数量不太多,您可以检查混淆矩阵,该矩阵显示了哪些标签错误地分类到哪些预测。或者,界面会向您显示混淆矩阵中分类错误的主要类别。

并非所有指标都可以用于不同的视频分类问题。例如,考虑多个类别(多类别问题)时,或者如果每个样本有多个有效标签(多标签问题),对二元分类中精确率和召回率的直观理解会变得更加不明确。特别是对于后一种情况,没有一个得到广泛采用的指标。但是,您可以考虑使用平均精确率指标来做出评估决策。

但请记住,基于单个数字或指标评估模型性能过于简单。可以考虑参考不同指标和精确率/召回率曲线图等,或参考分类有误的样本的分配(例如在混淆矩阵中)。

下面是评估模型时的一些其他有用提示:

  • 请留意训练数据集和测试数据集中标签的分配。如果数据集不均衡,高准确率指标可能具有误导性。默认情况下,每个样本在评估过程中具有相同权重,因此出现次数更频繁的标签可能权重更高。例如,如果正标签的数量比负标签多 10 倍,并且网络决定将所有样本一律分配给正标签,虽然您仍然可以达到 91% 的准确率,但这并不表示经过训练的模型有用。

  • 您还可以尝试使用 scikit-learn 通过 Python 脚本等来分析评估依据和预测标签。在该工具中,您可以研究在评估过程中以不同方式对标签进行加权:常见方法包括宏平均(按类别计算指标,然后取平均值)、加权(按类别计算指标,然后以基于单个类别频率的权重为基础取平均值)、微(每个样本具有相同权重,不受任何潜在不均衡的影响)。

  • 调试模型主要是调试数据,而非模型本身。如果在推送到生产环境前后,您的模型在您评估其性能时开始以非预期的方式运行,您应返回并检查数据,看看有哪些方面可以改进。

如需了解详情,请参阅评估模型的相关信息。

在 Google Cloud Platform Console 中评估模型

AutoML Video 界面评估标签页上,您可以使用模型基于测试样本的输出和常见机器学习指标来评估您的自定义模型的性能。该标签页会显示有关您模型的以下信息:

  • 模型输出
  • 分数阈值
  • 真正例、真负例、假正例和假负例
  • 精确率和召回率
  • 精确率/召回率曲线。
  • 平均精确率

在 Google Cloud Platform Console 中读取模型评估数据时,请注意以下几点:

  • AutoML Video 会从您的测试数据中提取视频片段样本,对模型提出全新的挑战。模型会针对每个样本输出一系列数字,用于表示每个标签与该样本相关的程度。如果该数字较大,表示关于该标签应该应用于该文档的模型置信度较高。

  • 您可以通过设置分数阈值将置信度数字转换为二元“开/关”值。分数阈值是指若要将某一类别分配给某一测试项,模型必须具有的置信度水平。界面中的分数阈值滑块是一种直观的工具,用于测试不同阈值对数据集中的所有类别和个别类别的影响。如果您的分数阈值较低,那么您的模型将对较多视频片段进行分类,但在该过程中,对一些视频片段的分类可能会出错(假负例较少,但假正例很多)。如果您的分数阈值较高,那么您的模型将对较少视频片段进行分类,但视频分类出错的风险较低(假正例少,但假负例很多)。您可以在界面中调整每个类别的阈值以进行实验。但是,在生产环境中使用模型时,您必须实施您认为最佳的阈值。

  • 应用分数阈值后,模型所做的预测可分为以下四类:

    • 真正例:模型正确预测到该标签。
    • 真负例:模型正确预测到没有该标签。
    • 假正例:模型错误预测到视频片段中有该标签。
    • 假负例:模型未能预测到真实存在的标签。

    您可以使用这些类别来计算精确率和召回率,这两个指标可帮助您衡量模型的效果。

  • 精确率和召回率有助于您了解模型捕获信息的精准度以及遗漏的信息量。精确率分数测量的是,在分配了某标签的所有测试样本中,实际有多少数量应该分类到该标签中。召回率分数测量的是,在本应分配该标签的所有测试样本中,有多少样本实际分配了该标签。

  • 您可以使用混淆矩阵比较模型在每个标签上的表现。在理想模型中,对角线上的所有值都较高,而其他所有值都较低。这表明目标类别都得到了正确识别。如果有其他任何值较高,则表示模型如何对测试图片进行了错误分类。

  • 通过分数阈值工具,您可以研究所选分数阈值会如何影响您的精确率和召回率。当您拖动分数阈值栏上的滑块时,您可以看到该阈值会将您置于精确率/召回率权衡曲线的什么位置,以及该阈值如何分别影响您的精确率和召回率。对于多类别模型,这些图表上的精确率和召回率意味着用于计算精确率和召回率指标的唯一标签是返回的标签集中分数最高的标签。这可以帮助您在假正例和假负例之间取得较好的平衡。

    在选择了对于整个模型而言似乎可接受的阈值后,您就可以点击各个标签,并查看该阈值在各个标签的精确率/召回率曲线上处于什么位置。在某些情况下,阈值的位置可能表明针对一些标签进行的很多预测都不正确,而这可能有助于您决定选择针对这些标签自定义的按类阈值。

  • 精确率/召回率曲线下的面积是衡量模型准确率的有用指标。它可以衡量模型在所有分数阈值上的表现。在 AutoML Video 中,该指标称为“平均精确率”。此分数越接近 1.0,您的模型在测试集上的表现就越好;如果是随机猜测使用哪个标签的模型,平均精确率约为 0.5。

测试模型

AutoML Video 自动使用 30% 的数据来测试模型,或者如果您选择自行拆分数据,可以是您选择使用的任意百分比。AutoML Video 界面中的评估标签页向您展示模型在该测试数据上的表现如何。但是,如果您想对模型进行健全性检查,有几种方法可以使用。一种方法是在“测试和使用”标签页中提供带有视频数据的 CSV 文件进行测试,然后查看模型为视频预测的标签。希望这符合您的期望。

您可以调整预测可视化的阈值,并在 3 个时间尺度上查看预测结果:1 秒间隔、自动镜头边界检测后的视频相机镜头、整个视频片段。

提高模型性能

获得初始模型性能后,如果您想要继续提高该性能,可以尝试一些不同的方法:

  • 增加带标签样本的数量(尤其是对于表示不足的类别)。
  • 仔细检查模型在哪些方面表现得不是很好:

    • 一个类别也许过于宽泛,应当将其拆分为两个或多个类别?
    • 或者一些类别可能过于具体,可以在不影响项目最终目标的情况下进行合并?
    • 考虑为更多样本添加标签,尤其是对于表现较差的类别。
  • 如果适用,从多类别切换到多标签问题,因为训练神经网络模型通常更加简单,神经网络模型尝试将样本分类到不相交的类别,而不是尝试为每个样本预测一组长度未知的标签。

  • 减少数据不平衡。添加更多样本,或者可能尝试减少高频类别的样本数量,尤其是当存在严重不平衡的时候,例如,1 比 100 或更大比例。

  • 仔细检查并尽量避免任何潜在的数据泄露。

  • 舍弃不太重要的类别,专注于较少但关键的类别。

  • 支持页面上查看您可以使用的其他选项。