Files
yolov5-inferrence/docs/debounce_positive_upload_plan.md
T
2026-06-05 18:14:00 +08:00

85 lines
3.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 推理程序去抖与漏报优化记录
本文记录 `time_period_P_r30_linaro` 分支上的去抖和正例上报优化,方便复查代码改动。
## 现场问题
1808 设备上同时运行 6 到 7 个推理程序时,资源紧张会造成推理结果波动。旧逻辑要求同一类别数量连续稳定 3 次才上传,短暂漏检或低置信过滤可能让结果稳定成 `number=0`,随后又上传 `number=1`
管理程序只处理 `number > 0` 的识别消息,并根据持续时间判断是否触发后续视频合并和上报;目标消失不需要推理程序主动通知。因此推理程序侧不应主动上传 `number=0`
## 新逻辑
- 当前推理帧只要在 workspace 内检测到可上传目标,就进入正例候选。
- `prop >= conf_threshold` 记为 `strong_present`
- `0.30 <= prop < conf_threshold` 记为 `weak_present`,第一版也参与正例上传,用于降低漏报。
- `prop < 0.30` 记为 `filtered_low_conf`,不参与上传。
- workspace 外目标记为 `filtered_workspace`,始终不参与上传。
- 当前帧无可上传目标时,只记录 `no_target`,不上传 `number=0`
## 上传节流
同一最终上传编码 `class_idx``500ms` 最多上传一次正例:
```text
首次检测到某 class_idx:立即上传
持续检测到同一 class_idx:每 500ms 最多上传一次
未检测到:不上报,只记日志
```
上传 JSON 结构保持不变:
```text
serial
type
at
params[].class_idx
params[].name
params[].number
```
多个模型 label 如果映射到同一个 `class_idx`,继续合并数量后上传。`codes[i] == 0` 的类别仍不上传。
## 日志字段
本次增加/规范以下日志事件,写入可执行文件目录下 `.log/YYYY-MM-DD-yolov5.log`
- `frame_seen`:本次推理帧序号和原始检测数量。
- `strong_present`:超过阈值且在 workspace 内。
- `weak_present`:高于 0.30、低于阈值且在 workspace 内。
- `filtered_low_conf`:低于 0.30。
- `filtered_workspace`:不在 workspace 内。
- `upload_positive`:本帧触发正例上传。
- `upload_skip_throttle`:本帧有目标,但 500ms 节流跳过。
- `upload_skip_code0`:类别编码为 0,按旧规则不上传。
- `upload_skip_busy`:已有上传线程正在执行,跳过本次上传。
- `no_target`:本帧没有可上传目标。
- `upload_positive_payload`:实际组装进 JSON 的正例载荷。
日志清理策略:
- 程序启动后第一次写日志会清理旧日志。
- 程序长期运行跨天后,第一次打开新日期日志时也会清理旧日志。
- 只清理 `.log` 目录下命名匹配 `YYYY-MM-DD-yolov5.log` 的文件。
- 默认保留最近约 7 天日志。
## 额外风险修复
`main.cpp` 中 h264 分段轮转原来在内部重新声明了 `FILE *fpSave`,会遮蔽外层文件句柄。现在改为更新外层 `fpSave`,并在退出主循环后关闭当前句柄。
## 验收场景
- `1,0,1`:上传正例;中间 `0` 只记 `no_target`,不上传 `number=0`
- `1,弱命中,1`:弱命中参与正例链路,持续上传或被节流跳过,不归零。
- `0,0,0`:只记录 `no_target`,不上传。
- workspace 外目标:只记录 `filtered_workspace`,不上传。
- 多 label 同 `class_idx`:合并成同一个业务编码上传。
## 编译验证
`docs/cross_compile_wsl_linaro.md` 的 WSL + Linaro 路线编译,并检查:
- 产物为 aarch64 ELF。
- 不依赖 `GLIBC_2.33``GLIBC_2.34``GLIBCXX_3.4.29`
- 仍链接 `librknn_api.so`