视频分类 是机器学习中识别视频内容的任务。视频分类模型在包含一组独特类别(例如不同的动作或移动)的视频数据集上进行训练。模型接收视频帧作为输入,并输出每个类别在视频中出现的概率。
视频分类和图像分类模型都使用图像作为输入来预测这些图像属于预定义类别的概率。但是,视频分类模型还会处理相邻帧之间的时空关系,以识别视频中的动作。
例如,可以训练一个视频动作识别模型来识别人类动作,例如跑步、鼓掌和挥手。下图显示了视频分类模型在 Android 上的输出。
入门
如果您使用的是除 Android 或 Raspberry Pi 之外的平台,或者您已经熟悉 TensorFlow Lite API,请下载入门视频分类模型和支持文件。您还可以使用 TensorFlow Lite 支持库 构建自己的自定义推理管道。
如果您是 TensorFlow Lite 的新手,并且正在使用 Android 或 Raspberry Pi,请探索以下示例应用程序,以帮助您入门。
Android
Android 应用程序使用设备的后置摄像头进行连续视频分类。推理使用 TensorFlow Lite Java API 执行。演示应用程序对帧进行分类,并实时显示预测的分类。
Raspberry Pi
Raspberry Pi 示例使用 TensorFlow Lite 与 Python 进行连续视频分类。将 Raspberry Pi 连接到摄像头(例如 Pi Camera)以执行实时视频分类。要查看来自摄像头的结果,请将显示器连接到 Raspberry Pi,并使用 SSH 访问 Pi shell(以避免将键盘连接到 Pi)。
在开始之前,请 设置 您的 Raspberry Pi,并安装 Raspberry Pi OS(最好更新到 Buster)。
模型描述
移动视频网络 (MoViNets) 是针对移动设备优化的高效视频分类模型系列。MoViNets 在多个大型视频动作识别数据集上展示了最先进的准确性和效率,使其非常适合视频动作识别任务。
有三种针对 TensorFlow Lite 的 MoviNet 模型变体:MoviNet-A0、MoviNet-A1 和 MoviNet-A2。这些变体使用 Kinetics-600 数据集进行训练,以识别 600 种不同的动作。MoviNet-A0 是最小的、最快的,也是最不准确的。MoviNet-A2 是最大的、最慢的,也是最准确的。MoviNet-A1 是 A0 和 A2 之间的折衷方案。
工作原理
在训练期间,视频分类模型会提供视频及其关联的标签。每个标签都是模型将学习识别的不同概念或类别的名称。对于视频动作识别,视频将是人类动作,标签将是关联的动作。
视频分类模型可以学习预测新的视频是否属于训练期间提供的任何类别。此过程称为推理。您还可以使用 迁移学习 通过使用预先存在的模型来识别新的视频类别。
该模型是一个流式模型,接收连续的视频并实时响应。当模型接收视频流时,它会识别训练数据集中的任何类别是否在视频中出现。对于每一帧,模型都会返回这些类别以及视频代表该类别的概率。例如,在给定时间点的输出可能如下所示
动作 | 概率 |
---|---|
广场舞 | 0.02 |
穿针引线 | 0.08 |
转动手指 | 0.23 |
挥手 | 0.67 |
输出中的每个动作对应于训练数据中的一个标签。概率表示视频中显示该动作的可能性。
模型输入
该模型接受 RGB 视频帧流作为输入。输入视频的大小是灵活的,但理想情况下它与模型训练的分辨率和帧速率匹配
- MoviNet-A0: 172 x 172 at 5 fps
- MoviNet-A1: 172 x 172 at 5 fps
- MoviNet-A1: 224 x 224 at 5 fps
输入视频的色值应在 0 到 1 之间,遵循常见的 图像输入约定。
在内部,模型还通过使用从先前帧收集的信息来分析每一帧的上下文。这是通过获取模型输出的内部状态并将其反馈到模型中以供后续帧使用来实现的。
模型输出
该模型返回一系列标签及其对应的分数。分数是表示每个类别的预测的 logits 值。这些分数可以使用 softmax 函数 (tf.nn.softmax
) 转换为概率。
exp_logits = np.exp(np.squeeze(logits, axis=0))
probabilities = exp_logits / np.sum(exp_logits)
在内部,模型输出还包括模型的内部状态,并将其反馈到模型中以供后续帧使用。
性能基准
性能基准数字是使用 基准测试工具 生成的。MoviNets 仅支持 CPU。
模型性能通过模型在给定硬件上运行推理所需的时间来衡量。时间越短,模型越快。准确性通过模型在视频中正确分类类别的频率来衡量。
模型名称 | 大小 | 准确率 * | 设备 | CPU ** |
---|---|---|---|---|
MoviNet-A0(整数量化) | 3.1 MB | 65% | Pixel 4 | 5 毫秒 |
Pixel 3 | 11 毫秒 | |||
MoviNet-A1(整数量化) | 4.5 MB | 70% | Pixel 4 | 8 毫秒 |
Pixel 3 | 19 毫秒 | |||
MoviNet-A2(整数量化) | 5.1 MB | 72% | Pixel 4 | 15 毫秒 |
Pixel 3 | 36 毫秒 |
* 在 Kinetics-600 数据集上测量的 Top-1 准确率。
** 在使用 1 线程的 CPU 上运行时测量的延迟。
模型定制
预训练模型经过训练可以识别来自 Kinetics-600 数据集的 600 种人类动作。您还可以使用迁移学习来重新训练模型以识别原始集中不存在的人类动作。为此,您需要为要添加到模型中的每个新动作提供一组训练视频。
有关在自定义数据上微调模型的更多信息,请参阅 MoViNets 仓库 和 MoViNets 教程。
进一步阅读和资源
使用以下资源来了解更多有关本页讨论的概念