d289168dd0
先回答"这些模型到底有没有人用",用全仓库引用扫描判定,不靠猜: 在用 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>
64 lines
2.1 KiB
Markdown
64 lines
2.1 KiB
Markdown
# 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 反序列化返回空时不会报错,
|
||
只会安静地不退任何检测框,很容易被当成"模型效果差"。
|