目标分类
目标分类功能允许你训练一个自定义的MobileNetV2分类模型,该模型可运行在被追踪的目标(如人员、车辆、动物等)后,从而为这些目标识别出更精细的类别或属性。
最低系统要求
目标分类模型非常轻量级,在 CPU 上运行速度非常快。几乎任何能够运行 Frigate 的设备都能支持推理功能。
模型训练期间,每轮训练大约会短暂占用较高的系统资源,持续 1 到 3 分钟。在性能较低的设备上,训练时间可能会更长。
类别
类别是指你的模型将要学会区分的不同种类。每个类别代表模型将预测的一个独特视觉类别。
对于目标分类:
- 定义用于区分被检测目标不同类型或属性的类别。
- 示例:对于人员(
person)类的目标,类别可以是外卖员、员工等。 - 包含一个无标签(
none)类别,用于那些不属于任何特定类别的目标。 - 保持各类别在视觉上具有明显差异,以提高准确率。
分类类型
子标签:
- 应用于目标的子标签(
sub_label)字段。 - 适用于单一、更具体的身份或类型。
- 比如:猫(
cat)→ 米米、花花、无标签(None)。
- 应用于目标的子标签(
属性:
- 作为元数据添加到目标中(可在 /events 中查看):
<model_name>: <predicted_value>。 - 适用于多个属性可以独立共存的情况。
- 示例:检测建筑工地上的人员(
person)是否佩戴了安全帽。
- 作为元数据添加到目标中(可在 /events 中查看):
分配要求
只有在同时满足以下两个条件时,才会分配子标签和属性:
- 阈值(Threshold):每次分类尝试的识别分数百分比必须达到或超过配置的
threshold(默认值:0.8)。 - 类别共识(Class Consensus):在至少 3 次分类识别尝试后,有 60% 的识别结果一致。如果共识类别为
none,则不进行分配。
这种两步验证机制通过要求在多个帧上保持一致的预测结果,防止误报,然后再分配子标签或属性。
示例使用场景
子标签
- 已知宠物与未知宠物:对于狗(
dog)类的目标,可以将子标签设置为你宠物的名字(例如旺财),其他则为无标签(none)。 - 快递车辆与普通车辆:对于车辆(
car),可以分类为快递车辆和无标签(none),以便筛选快递配送车。 - 快递员与非快递员:对于人员(
person),可以根据衣服将人员分类外卖员和无标签(none)。
属性
- 背包:对于人员(
person),可以添加属性背包: 有/无。 - 安全帽:对于人员(
person),可以添加属性安全帽: 有/无 - 牵引绳:在公园或院子的场景,可以为狗(
dog)添加牵引绳:有/无。
配置
目标分类被配置为一个自定义分类模型。每个模型都有其自己的名称和设置。你必须列出需要进行分类的目标标签。
yaml
classification:
custom:
狗: # 分类的名称,可以使用中文
threshold: 0.8
object_config:
objects: [dog] # 要分类的目标标签
classification_type: sub_label # 分类类型,可输入 sub_label(子标签)或 attribute(属性)训练模型
创建和训练模型是在 Frigate 页面中通过“分类”页面完成的。该过程包括两个步骤:
步骤 1:命名和定义
为你的模型输入一个名称,然后选择要分类的目标标签(例如 人员(person)、狗(dog)、车辆(car)),选择分类类型(子标签或属性),并定义你的类别。其中将默认包含一个 无标签(none)类别,用于那些不属于任何特定类别的目标。
步骤 2:分配训练样本
系统将自动从与你所选标签匹配的被检测目标中生成示例图像。系统会逐步引导你为每个类别选择哪些图像代表该类别。在你完成最后一个类别后,任何未分配到特定类别的图像将自动分配到 无标签(none)类别。一旦所有图像都处理完毕,训练将自动开始。
在选择要分类的目标时,建议从少量视觉上具有明显差异的类别开始,并确保你的训练样本与这些目标常见的摄像头视角和距离相匹配。
提升模型性能
- 问题定义:保持类别在视觉上具有明显差异,并与所选目标类型相关。
- 数据收集:使用模型的“最近分类”选项卡,收集一天中不同时段、不同天气和不同距离下的均衡样本。
- 预处理:确保示例图像反映与 Frigate 检测框相似的目标裁剪;保持主体居中。
- 标签:保持标签名称简短且一致;如果你计划忽略子标签的不确定预测,包含一个
none类别。 - 阈值:根据每个模型调整
threshold以减少误分配。从0.8开始,并根据验证结果进行调整。