 Shaun ZhouandClaude Opus 5
|
dce2eef0a7
|
fix(ml-backend): 推理分批,避免 Retrieve Predictions 撑爆显存;新增批量推送脚本
Retrieve Predictions 会把选中的任务一次发给后端,而后端把整个列表交给
model.predict(source=paths)——ultralytics 不理会 batch 参数,会当成一个 batch,
于是显存爆掉。这与之前 visualize_detections 踩的是同一个坑。后端现在按
YOLO_BATCH(默认 16)自己分批。
另加 scripts/push_predictions.py:重训完在本地分批推理,再用批量导入接口
POST /api/projects/<id>/import/predictions 提交,不经过后端服务,显存与请求体都可控。
支持 --replace 先删同版本旧预测(预测是追加的,重复跑会堆两份)、--limit 与 --dry-run。
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|
2026-09-22 12:11:06 +08:00 |
|
 Shaun ZhouandClaude Opus 5
|
e61fd5887c
|
feat(ml-backend): Start Training 按钮真正触发重训,启动/重训脚本进 scripts/
原先点 Label Studio 的 Start Training 只是把计数加一:START_TRAINING 和普通标注事件
走同一条阈值判断,没配 RETRAIN_COMMAND 时更是静默什么都不做。实际使用中用户点了按钮、
以为在训练,其实权重一直没变。
- Start Training 无条件触发重训;攒够 RETRAIN_AFTER 条新标注也自动触发。
- 只数 ANNOTATION_CREATED:UPDATED / DELETED 是对已有标注的修改,不该把阈值顶到。
- 已有重训在跑时重复点击被忽略,不叠加启动。
- 没配 RETRAIN_COMMAND 时打警告说明不会真的训练,并在返回值里说清楚。
- 子进程输出重定向到 RETRAIN_LOG(默认 /tmp/retrain.log),训练进度有地方看。
scripts/start_ml_backend.sh、scripts/retrain_from_label_studio.sh 放进仓库,
可从工作区直接启动。重训末尾把 runs/detect/current.pt 软链接指向新权重,
启动脚本默认读它,换模型不必改脚本。
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|
2026-09-21 11:00:01 +08:00 |
|
 Shaun ZhouandClaude Opus 5
|
1b8c8d7cac
|
chore: 忽略 ml_backend 的运行时缓存
cache.db 是 label-studio-ml 用来存 model_version、标注计数的本地缓存,
上一提交误把它带了进去。顺带忽略后端的独立虚拟环境 .venv-ml/。
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|
2026-09-18 17:36:25 +08:00 |
|
 Shaun ZhouandClaude Opus 5
|
a4d099e41d
|
feat(ml-backend): 把训练好的 YOLO 接进 Label Studio 做预标注
ml_backend/ 是一个 label-studio-ml 后端:Label Studio 打开任务时调 /predict,
后端跑 YOLO 并把框转成 Label Studio 的百分比坐标返回,人工只需修正。
- model.py:FilmDefectDetector。权重懒加载且只加载一次(Flask 多线程,加锁);
控件名从项目的 labeling config 读取,不写死;model_version 带权重的修改时间,
换权重后 Label Studio 能区分新旧预测。
- convert.py:坐标转换,刻意不 import label_studio_ml,好在主环境里单测。
- fit():每条标注累加计数,达到 RETRAIN_AFTER 就起子进程执行 RETRAIN_COMMAND
并立刻返回——训练几十分钟,同步做会卡住 Label Studio。
- _wsgi.py 由官方模板生成,ruff 跳过,便于跟随上游。
必须用独立虚拟环境:label-studio-ml 会把 jinja2 降到 3.0.3,而 label-studio 1.23
需要 3.1,装进主环境会直接弄坏 Label Studio。PyPI 上的 1.0.9 是 2023 年的旧版,
要装 GitHub 上的现行版本。
本地用 COCO 权重端到端验证过:/health、/predict(bus.jpg 出 10 个框、坐标换算正确)、
/webhook(第 3 条标注触发重训命令并清零计数)。
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|
2026-09-18 17:36:12 +08:00 |
|