最佳实践

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

准备数据

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

    • 每个标签的最小边界框数为 10。
    • 您的标签必须是有效字符串(无英文逗号)。
    • 所有视频帧必须具备有效时间戳。
    • CSV 中的所有视频 URI 必须存储在可访问的 Cloud Storage 存储桶中。
  • 您拥有的训练和测试数据越多越好。模型越强大,需要的数据就越多。

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

    • 类别的数量。您拥有的唯一类别越多,每个类别需要的样本就越多。

    • 每个标签应包含大约 100 个训练视频帧。在每个帧中,感兴趣的标签的所有对象均已加标签。

    • 类别的复杂性或多样性。神经网络可能会快速区分猫和鸟,但需要更多样本才能正确分类 30 种不同的鸟类。

    • 对于大于 1024 x 1024 像素的视频帧分辨率,在帧标准化过程中图片质量会下降。

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

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

拆分数据

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

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

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

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

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

    在您提供数据时,AutoML Vision 对象跟踪会自动将其拆分为训练数据集、验证数据集和测试数据集。您也可以自行分配训练拆分标签。 请注意,当 AutoML Video 对象跟踪从 CSV 文件生成训练、验证和测试拆分时,其会在视频级别运行。一个视频的所有标签只能属于三个数据集之一。因此,如果视频不同或者视频之间的标签分配不同,我们不建议只有少数视频。

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

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

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

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

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

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

数据源示例

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

  • YouTube-BB:视频对象检测数据集(560 万个边界框、24 万个视频、23 种对象)
  • ImageNet-VID:Imagenet Video 对象检测挑战(30 个基本级类别)

训练模型

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

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

评估模型

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

常见的对象跟踪评估概念和指标包括:

  • 交并比 (IOU) 衡量两个边界框之间的重叠,该边界框通常是评估依据与预测。您可以用其来衡量我们预测的边界框与地面信息的重叠程度。
  • 精确率/召回率曲线下面积 (AuPRC),也称为平均精确率 (AP)。它是基于召回率值范围的精确率值的积分。这是对二元问题的最佳解释。
  • 平均精确率均值(mAP 或 MAP)可被视为基于多个类别或标签的平均精确率 (AP) 指标的平均值。 有时,mAP 和 AP 可互换。
  • 对于二元和多类别问题,您还可以单独检查各个置信度分数阈值时的精确率和召回率。
  • 如果多类别标签的数量不太多,您可以检查混淆矩阵,该矩阵显示了哪些标签缺失。

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

但请记住,基于单个数字或指标评估模型性能过于简单。可以考虑查看不同指标以及每个对象类的精确率/召回率曲线图。

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

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

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

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

  • 有时,测试视频存在一些场景剪裁用例,但新场景却没有太多上下文关联。例如,在直播的足球比赛直播中,相机视图会从“鸟瞰视图”切换为“侧视图”。在这种情况下,模型通常需要 2 到 3 帧帧来适应变化。

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

测试模型

AutoML Video 对象跟踪会自动使用 20% 的数据(或者,如果您自己选择了数据拆分比例,则选择使用多少百分比)来测试模型。

提高模型性能

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

  • 增加带标签样本的数量(尤其是对于表示不足的类别)。
  • 为更有意义的帧添加标签:
    • 选择帧来标注出现的多个对象(而不是单个对象或未显示的对象)。
    • 选择包含更多移动对象的帧。这样便可为模型提供更多时间信息,以便在训练过程中学习。
    • 确保所有选定帧都进行完全标记。例如,如果训练车辆检测模型,则应标记可以在框架中直观观察到的所有车辆。
    • 请勿选择视频开头的帧。该算法可以回放以获取训练帧,用于捕获运动情境。如果在所选帧之前没有/更少的帧,则此类信息可能会丢失。
  • 仔细检查模型在哪些方面表现得不是很好:

    • 一个类别也许过于宽泛,应当将其拆分为两个或多个类别?
    • 或者一些类别可能过于具体,可以在不影响项目最终目标的情况下进行合并?
    • 考虑为更多样本添加标签,尤其是对于表现较差的类别。
  • 减少数据不平衡。添加更多样本,或者可能尝试减少高频类别的样本数量,尤其是当存在严重不平衡的时候,例如,1 比 100 或更大比例。

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

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

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