Skip to content

状态分类

状态分类功能允许你在摄像头画面的固定区域内训练一个自定义的 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% 的图像,因为这可能导致过拟合。
最近更新