状态分类
状态分类功能允许你在摄像头画面的固定区域内训练一个自定义的 MobileNetV2 分类模型,以确定该区域的当前状态。该模型可配置为按计划运行和/或当该区域检测到画面变动时运行。
最低系统要求
状态分类模型轻量级,在 CPU 上运行速度非常快。几乎任何能够运行 Frigate 的设备都能支持推理功能。
模型训练期间,每轮训练大约会短暂占用较高的系统资源,持续 1 到 3 分钟。在性能较低的设备上,训练时间可能会更长。
类别
类别是指你摄像头画面中某个区域可能处于的不同状态。每个类别代表模型将学习识别的一种独特的视觉状态。
对于状态分类:
- 定义表示互斥状态的类别
- 例如:车库门或前门的开启和关闭,灯光的开启关闭等
- 至少使用 2 个类别(通常只有两种状态效果最佳)
- 保持类别名称清晰且具有描述性
示例使用场景
- 门的状态:检测车库门或前门是开启还是关闭。
- 闸门的状态:检查车道闸门是开启还是关闭。
- 快递/外卖放在指定位置:检查指定位置是否放有物体,如外卖、快递箱。
配置
状态分类被配置为一个自定义分类模型。每个模型都有其自己的名称和设置。你必须在 state_config.cameras 下至少提供一个摄像头裁剪区域。
yaml
classification:
custom:
front_door:
threshold: 0.8
state_config:
motion: true # 当画面变动与裁剪区域重叠时运行
interval: 10 # 也可以每 N 秒运行一次(可选)
cameras:
front:
crop: [0, 180, 220, 400]训练模型
创建和训练模型是在 Frigate 网页中通过“分类”页面完成的。该过程包括三个步骤:
步骤 1:命名和定义
为你的模型输入一个名称,并定义至少 2 个表示互斥状态的类别(状态)。例如,门的开启和关闭,或者灯光的开启和关闭。
步骤 2:选择裁剪区域
选择一个或多个摄像头,并在每个摄像头中对你感兴趣的区域绘制一个矩形。裁剪区域应紧密围绕你想要分类的区域,以避免引入与分类目标无关的额外信号。你可以拖动和调整矩形大小来调整裁剪区域。
步骤 3:分配训练样本
系统将自动从你的摄像头画面中生成示例图像。系统会逐步引导你为每个类别选择哪些图像代表该状态。并非严格要求你选择看到的所有图像。如果某个状态在样本中缺失,你可以稍后从“最近”选项卡中对其进行训练。
一旦分配了一些图像,训练将自动开始。
提升模型性能
- 问题定义:保持类别在视觉上具有明显差异且专注于状态(例如,开启、关闭、未知)。除非必要,避免在单个模型中将对象身份与状态混合在一起。
- 数据收集:使用模型的“最近分类”选项卡,收集一天中不同时段和不同天气条件下的均衡样本。
- 何时训练:重点关注模型完全错误或在不应切换状态时发生状态切换的情况。当模型已经能够稳定工作时,无需额外训练更多图像。
- 选择训练图像:由于新条件(例如一年中的第一场雪、季节变化)或其他变化(例如临时出现在视野中的物体、夜间的昆虫)而导致得分低于 100% 的图像,是很好的训练候选对象,因为它们代表了与默认状态不同的场景。训练这些与现有训练数据不同的低分图像有助于防止过拟合。避免训练大量看起来非常相似的图像,尤其是那些已经得分为 100% 的图像,因为这可能导致过拟合。