关于 Workflow 的工作流学习以及基础知识总结
视觉模型网站: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 |
完整格式:

检测结果:

二、Confidence(置信度)
1. Confidence 是什么
当模型看到一个目标时,它会输出类似这样的结果:
1 | { |
此处的 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 | person |
注意:它不负责检测,也不负责画框。检测是 Object Detection Model 做的,画框是 Bounding Box Visualization 做的。
2. 它一般接两个输入
- image — 图片
- predictions — 预测结果
1 | image = Bounding Box Visualization 的 image |
意思是:先在原图上画框,再在带框图片上画文字。
如果接反了(比如 image 接到原图),可能就只显示标签,不显示前一步画好的框。
3. 标签和框是两个不同块
| 模块 | 功能 |
|---|---|
| Object Detection Model | 真正检测目标 |
| Bounding Box Visualization | 画框 |
| Label Visualization | 画文字 |
| Outputs | 决定最终返回什么 |
4. 不同结果下的显示
置信度 + 识别物体:

仅识别物体:

仅置信度:

四、Bounding Box Visualization(画框可视化)
1. 它是干什么的
它负责把模型检测到的位置画成框,比如红框、蓝框、绿框,都是这个块画出来的。
它不负责识别目标,只负责”画”。
2. 它需要两个输入
- image — 图片
- predictions — 预测结果
你的连接应该是:
1 | image = Inputs 的 image |
意思是:在原图上,根据模型预测结果画框。
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 | Object Detection Model |
也就是:先画框,再画字。
如果顺序反了,也可能能看到结果,但通常不如这个清晰。
5. 线条粗细区别
细线:

粗线:

五、Output(输出)
1. Outputs 是干什么的
前面的模块是在处理图片:
1 | 输入 → 模型检测 → 画框 → 画标签 |
但如果你不在 Outputs 里把结果接出来,Workflow 跑完后你可能看不到想要的内容。
所以 Outputs 的作用是:告诉 Workflow 最终要返回哪些结果。
2. 你现在的两个输出
输出 1:模型检测结果(JSON)
变量名:model_output
它接的是:Object Detection Model → predictions
这个输出是 JSON,里面有每个人的位置、类别、置信度,大概长这样:
1 | { |
适合给程序用,比如后面做统计、报警、保存数据。
输出 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。
但注意,它不是优先调的参数。优先顺序通常是:
- 降低 confidence
- 换 rfdetr-small 或 rfdetr-medium
- 再考虑 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 工作流学习笔记,持续更新中。



