视觉模型网站:Roboflow


一、熟悉工作流

1. Workflow 的工作流搭建

1
输入 → 模型 → 可视化 → 输出

2. 模型选择

1) 添加 Object Detection Model

因为要适配 NPU 与新手学习,选择 RF-DETR Nano

在模型的 Additional Properties 里设置:

  • Class Filter = person(只检测行人)

2) 添加 Bounding Box Visualization

把模型检测到的人画框。

3) 添加 Label Visualization

在框旁边显示类别和置信度,比如:

1
person 0.87

完整格式:

Workflow 完整格式

检测结果:

检测结果


二、Confidence(置信度)

1. Confidence 是什么

当模型看到一个目标时,它会输出类似这样的结果:

1
2
3
4
5
6
7
8
{
"class": "person",
"confidence": 0.87,
"x": 320,
"y": 240,
"width": 80,
"height": 180
}

此处的 confidence 即是模型检测率

意思是:模型认为这个框是 person 的把握大约是 87%。

注意:它不是绝对真理,只是模型自己的”确信程度”。

2. Confidence Threshold 是什么

在 Workflow 里你设置的 confidence,其实是一个最低门槛

比如你设置 confidence = 0.4,意思是:只保留置信度 ≥ 0.4 的检测结果

检测结果 Confidence 处理
person 0.91 ✅ 保留
person 0.63 ✅ 保留
person 0.41 ✅ 保留
person 0.28 ❌ 丢掉
person 0.12 ❌ 丢掉

3. 调高和调低的区别

置信度调低(如 0.5 → 0.3)

  • 检测结果变多
  • 漏检变少
  • 误检可能变多

适合场景:

  • 有人没被框出来
  • 远处的人检测不到
  • 人被遮挡一部分
  • 画面模糊、光线暗
  • 你宁愿多看几个可疑框,也不想漏掉人

置信度调高(如 0.4 → 0.6)

  • 检测结果变少
  • 画面更干净
  • 误检变少
  • 漏检可能变多

适合场景:

  • 把路牌、衣服、包误判成人
  • 框太多,画面很乱
  • 你只想保留非常确定的人
  • 后续要触发告警,不想误报太多

4. 新手推荐怎么设

你现在做的是行人检测,建议这样试:

  • 第一次跑: confidence = 0.4,这是一个比较平衡的入门值
  • 如果漏检多: 调低 0.4 → 0.3
  • 如果误检多: 调高 0.4 → 0.5

不同场景建议:

场景 推荐 Confidence
告警(有人闯入就报警) 0.5 或 0.6(最怕误报太多)
数据收集(尽量收集所有可能有人的画面) 0.25 ~ 0.35(宁愿多收,再人工筛选)

三、Label Visualization(标签可视化)

1. Label Visualization 是干什么的

它负责把检测结果的文字画到图片上,比如:

1
2
3
person
person 0.87
Tracker Id 3

注意:它不负责检测,也不负责画框。检测是 Object Detection Model 做的,画框是 Bounding Box Visualization 做的。

2. 它一般接两个输入

  1. image — 图片
  2. predictions — 预测结果
1
2
image       = Bounding Box Visualization 的 image
predictions = Object Detection Model 的 predictions

意思是:先在原图上画框,再在带框图片上画文字。

如果接反了(比如 image 接到原图),可能就只显示标签,不显示前一步画好的框。

3. 标签和框是两个不同块

模块 功能
Object Detection Model 真正检测目标
Bounding Box Visualization 画框
Label Visualization 画文字
Outputs 决定最终返回什么

4. 不同结果下的显示

置信度 + 识别物体:

![置信度和识别物体](/img/屏幕截图 2026-07-27 154954.png)

仅识别物体:

![仅识别物体](/img/屏幕截图 2026-07-27 163335.png)

仅置信度:

![仅置信度](/img/屏幕截图 2026-07-27 164252.png)


四、Bounding Box Visualization(画框可视化)

1. 它是干什么的

它负责把模型检测到的位置画成框,比如红框、蓝框、绿框,都是这个块画出来的。

它不负责识别目标,只负责”画”。

2. 它需要两个输入

  • image — 图片
  • predictions — 预测结果

你的连接应该是:

1
2
image       = Inputs 的 image
predictions = Object Detection Model 的 predictions

意思是:在原图上,根据模型预测结果画框。

3. 常见设置

Thickness(框线粗细)

thickness = 2,数字越大,框越粗。

Color Palette(颜色方案)

如果只检测 person,颜色影响不大。如果检测多类别(person、car、dog),不同类别可能用不同颜色。

Color Axis(颜色依据)

含义
CLASS 按类别上色,适合多类别
INDEX 按第几个检测框上色
TRACK 按追踪 ID 上色,视频追踪时有用

建议:行人检测用 Color Axis = CLASS

Roundness(圆角)

框角圆润程度,只影响视觉效果,不影响检测。

4. Bounding Box 和 Label 的顺序

推荐顺序:

1
2
3
Object Detection Model
→ Bounding Box Visualization
→ Label Visualization

也就是:先画框,再画字。

如果顺序反了,也可能能看到结果,但通常不如这个清晰。

5. 线条粗细区别

细线:

细线框

粗线:

![粗线框](/img/屏幕截图 2026-07-27 163335-1.png)


五、Output(输出)

1. Outputs 是干什么的

前面的模块是在处理图片:

1
输入 → 模型检测 → 画框 → 画标签

但如果你不在 Outputs 里把结果接出来,Workflow 跑完后你可能看不到想要的内容。

所以 Outputs 的作用是:告诉 Workflow 最终要返回哪些结果。

2. 你现在的两个输出

输出 1:模型检测结果(JSON)

变量名:model_output

它接的是:Object Detection Model → predictions

这个输出是 JSON,里面有每个人的位置、类别、置信度,大概长这样:

1
2
3
4
5
6
7
8
{
"class": "person",
"confidence": 0.87,
"x": 300,
"y": 240,
"width": 80,
"height": 160
}

适合给程序用,比如后面做统计、报警、保存数据。

输出 2:可视化图片

变量名:bounding_box_visualization_output(或建议命名为 output_image

它接的是:Label Visualization → image

这个输出是带框、带标签的图片。适合给人看,比如检查模型效果。


六、IoU Threshold(两个框的重叠程度)

1. 什么是 IoU

比如模型在同一个人身上画了两个很接近的框:

  • 框 A:person 0.82
  • 框 B:person 0.76

如果这两个框重叠很多,系统会认为它们可能是同一个人,只保留其中一个。

2. IoU Threshold 控制什么

它控制的是:两个框重叠到什么程度时,要把它们当成重复框处理。

注意:IoU 不是置信度。

3. 参数对比

参数 控制什么
Confidence 这个框够不够可信
IoU Threshold 两个框是不是重复
Class Filter 要不要这个类别
Max Detections 最多保留几个框

4. 调高和调低的区别

IoU Threshold 调低(如 0.5 → 0.3)

  • 更容易把重叠框当成重复框
  • 重复框更少
  • 但挨得很近的两个人可能被误合并

适合场景:

  • 同一个人出现多个重复框
  • 画面上框太重叠
  • 想让结果更干净

IoU Threshold 调高(如 0.5 → 0.7)

  • 更宽容,允许重叠框同时存在
  • 不容易把靠得近的两个人合并
  • 但重复框可能变多

适合场景:

  • 人群很密集
  • 多个人挨得很近
  • 不想把两个靠近的人误合并成一个

5. 新手建议怎么设

你现在做行人检测,先不要动它,建议保持默认值。

只有出现这两种问题再调:

情况 操作
同一个人有两个框 IoU 调低一点:0.5 → 0.4
两个人靠很近,只剩一个框 IoU 调高一点:0.5 → 0.6

七、Max Detections(最大检测数目)

1. Max Detections 是什么

它的意思是:一张图片里最多返回多少个检测框。

比如你设置 Max Detections = 100,意思是:最多输出 100 个目标。

如果画面里模型找到了 150 个候选目标,它最终只会保留前 100 个,通常优先保留置信度更高的。


八、NMS(去重复框)

1. 什么是 NMS

NMS(Non-Maximum Suppression,非极大值抑制)用于去掉重复的检测框。

2. Class Agnostic 是什么意思

Class Agnostic 的意思是:不看类别,只看框的位置和重叠程度。

所以 Class Agnostic NMS 的意思是:去重复框时,不区分类别。

3. 开和关有什么区别

假设同一个位置有两个框:

  • person 0.81
  • car 0.76
Class Agnostic NMS 行为
系统觉得两个框位置重叠太多,可能是同一个东西 → 只保留一个更高分的
系统觉得它们类别不同 → 两个框都保留

九、Max Candidates(筛选前最多保留多少候选框)

1. 什么时候有用?

场景 A:人特别多

比如:车站、商场、学校操场、演唱会、十字路口、监控俯拍人群——画面里可能有几十甚至上百个人。

如果 Max Candidates 太低,模型可能在早期就丢掉一些候选人,导致后面根本没机会显示出来。这时候可以适当提高 Max Candidates,给更多可能的人进入最终筛选的机会。

场景 B:小目标很多

比如高处监控拍马路,远处的人很小。远处小人通常置信度不高,候选也容易被挤掉。

如果你发现:

  • 近处的人能检测到
  • 远处很多小人检测不到

除了降低 confidence、换更大的 RF-DETR 模型之外,也可以考虑提高 Max Candidates。

但注意,它不是优先调的参数。优先顺序通常是:

  1. 降低 confidence
  2. 换 rfdetr-small 或 rfdetr-medium
  3. 再考虑 Max Candidates

场景 C:检测非常密集的物体

不只是行人,其他项目也会用到:

  • 货架商品检测
  • 螺丝检测
  • 水果计数
  • 细胞检测
  • 停车场车辆检测
  • 人群计数

这些场景共同特点是:

  • 一张图里目标数量很多
  • 目标之间距离近
  • 模型候选框数量很大

这时候 Max Candidates 太小,可能影响召回率(漏掉一些目标)。


十、模型大小选择

1. 模型大小代表什么

同一个模型家族里:

越大 越小
准确率更高 速度更快
速度更慢 资源更省
资源消耗更多 准确率相对低一点
成本更高 更适合实时摄像头

模型选择不是”越大越好”,而是看你的目标。

2. RF-DETR 常见大小

模型 特点 适合场景
rfdetr-nano 最快、最轻 新手入门、实时检测、普通摄像头
rfdetr-small 速度和准确率更平衡 正式项目初版、视频流
rfdetr-medium 更准,但更慢 图片分析、准确率优先
rfdetr-large+ 更强、更重 复杂场景、离线分析、预算充足

你现在用的 rfdetr-nano 非常适合第一课,因为它容易跑通。

3. 行人检测怎么选

场景 推荐模型
普通实时摄像头(办公室、门口、走廊、普通路口) rfdetr-nano 或 rfdetr-small
人比较远、比较小(高位监控、停车场、广场) rfdetr-small 或 rfdetr-medium
图片离线分析,不在乎速度 rfdetr-medium
人群很密集、遮挡严重(车站、商场、演唱会) rfdetr-medium(必要时更大模型)

4. 怎么判断 Nano 不够了

出现以下情况可以考虑升级:

  • 远处的人经常漏掉
  • 遮挡的人检测不到
  • 低清、夜间、模糊画面效果差
  • 人很多时漏检明显
  • 同一个场景里误检比较多

升级顺序建议:

1
rfdetr-nano → rfdetr-small → rfdetr-medium

不要一开始直接跳到最大模型。


本文为 Workflow 工作流学习笔记,持续更新中。