Files
ros_contorl/models/yolo/README.md
T
arm_dev d289168dd0 P4s:模型审计 —— 移出零引用模型,修掉代码里三处悬空 best.pt
先回答"这些模型到底有没有人用",用全仓库引用扫描判定,不靠猜:

  在用   yolo/detect_best_0.onnx + .engine   ← paths.yolo_weights
  在用   hole_insert/detect_best_1.onnx      ← hole_detect.weights / workpiece_weights
  零引用 detect_hc90(pt/onnx/engine)       ← 只剩注释里的历史说明
  零引用 detect_yolo26_gongjian.pt
  零引用 detect_best(onnx/engine)          ← 仅代码兜底候选,而那个候选是 .pt,不存在

所以 detect_hc90 不需要修复,是不用的东西:连同另两个一起移出仓库。
注意**二进制权重被 gitignore**,删掉就找不回来了,因此是移出到
~/ros2-models-unused-20260923/ 而非 rm。搬回 models/ 即可被 list 重新发现。

顺手挖出并修掉三处悬空引用(和之前 site.yaml 里那个 best.pt 同一类问题):
- hole_detector.weights_from_site:兜底路径写死 models/hole_insert/best.pt(不存在)
- hole_detector._default_model_path:三个候选路径**全都不存在**,函数却
  `return candidates[0]`,于是永远返回不存在的 best.pt;报错路径看着很合理,
  极易被误判成"文件被误删"。现改为以 site.yaml 为准,再退到规范模型。
- config/hole_insert.yaml 顶部注释同样写的是 best.pt

新增 test_hole_detector.py(8 项)锁住这个回归。测试刻意**不断言文件存在**
——二进制不进 git,新克隆的仓库里 models/ 是空的——只断言解析结果指向规范模型名。

体检从 4 处问题降到 0:bash scripts/weights.sh doctor --check-engines → "没有发现问题"

测试 233 项通过;18 个包构建通过。

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-23 13:08:11 +08:00

64 lines
2.1 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.
# YOLO 工件检测权重
> **改这个目录之前先读 [`../README.md`](../README.md)**(权重模块的规则)。
## 放什么
同名的 `.pt` / `.onnx` / `.engine` / `.labels.yaml` 放一起,名字主干必须一致:
```
detect_best_0.onnx ← 写进 config/site.yaml 的那个
detect_best_0.engine ← TensorRT 引擎,backend: tensorrt 时自动使用
detect_best_0.labels.yaml ← 类别标签(进 git,可手改)
```
二进制不进 git;`.labels.yaml` 进 git。
## 加新模型
```bash
cp ~/下载/xxx.pt ~/ros2/models/staging/
bash ~/ros2/scripts/weights.sh convert staging/xxx.pt --name workpiece --group yolo
```
然后改 `config/site.yaml`:
```yaml
paths:
yolo_weights: "/home/USER/ros2/models/yolo/workpiece.onnx"
yolo:
backend: "tensorrt"
imgsz: 640 # 必须等于该模型输入尺寸
```
## 查看 / 修改标签
```bash
bash ~/ros2/scripts/weights.sh labels detect_best_0
bash ~/ros2/scripts/weights.sh labels detect_best_0 --set "工件,通止规"
```
## 工作区里有哪些模型
只保留**真正在用**的两个,避免 `weights.sh list` 被无用模型干扰、也避免误选到废模型:
| 模型 | 用途 |
|---|---|
| `yolo/detect_best_0.onnx` + `.engine` | 工件/跟踪模型,即 `config/site.yaml → paths.yolo_weights` |
| `hole_insert/detect_best_1.onnx` | 孔/工件检测,即 `hole_detect.weights` 与 `workpiece_weights` |
曾经在这里、现已移出仓库的模型(`detect_hc90`、`detect_best`、`detect_yolo26_gongjian`)
是零引用的历史遗留,二进制权重不进 git,所以是**移出到备份目录**而非直接删除;
需要时搬回本目录即可,`weights.sh list` 会自动重新发现。
## 排错
```bash
bash ~/ros2/scripts/weights.sh doctor --check-engines
```
`engine` 和 TensorRT 版本绑死:换过 TensorRT 后旧 engine 会加载失败,重导即可
(`convert <同名>.onnx --name <名字> --to engine --force`)。
**注意 `doctor` 能查出这类静默失效** —— engine 反序列化返回空时不会报错,
只会安静地不退任何检测框,很容易被当成"模型效果差"。