 Shaun ZhouandClaude Opus 5
|
474b7b50a0
|
feat(detect): 推理侧改为切片,与固定 160 输入一致
训练数据已经是固定边长的片,推理还把整图交给 ultralytics 就会被 letterbox 缩放,
与模型见过的形态不符。三个调用方(可视化、批量推送预测、ML backend)统一改成
切片推理再拼回原图。
- engine/tiling.merge_tiles / tiled_predict:映射回原图、裁掉镜像填充区的框、跨片去重。
推理框架留在调用方,几何部分可单测。
- engine/detection.nms:标准 NMS,另加按包含比例抑制。缺陷被切割线切开时,相邻片
只看到一角,给出的小残框与完整框 IoU 很小(面积悬殊),光靠 IoU 压不掉。
- engine/tiled_inference:ultralytics 的接线,内部分批,避免片数多时 OOM。
- 三处调用点加 --tile-size / --tile-overlap(后端为 YOLO_TILE_SIZE / YOLO_TILE_OVERLAP),
默认 160 / 32;设 0 退回整图推理,仅用于和旧模型对比。
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|
2026-09-23 15:12:35 +08:00 |
|
 Shaun ZhouandClaude Opus 5
|
3c964abaa2
|
fix(scripts): HTTP 错误带上响应体
raise_for_status 只给一行 URL,而 Label Studio 把真正原因写在响应体里。
批量导入返回 500 时看不到任何线索,排查只能靠猜。
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|
2026-09-22 13:25:41 +08:00 |
|
 Shaun ZhouandClaude Opus 5
|
744e5fd18a
|
fix(scripts): push_predictions 的分页与令牌过期
两个在真实环境暴露的 bug:
1. /api/predictions/ 根本不分页——Label Studio 的 REST_FRAMEWORK 没设
DEFAULT_PAGINATION_CLASS,PAGE_SIZE 形同虚设,它一次返回全部预测并忽略 page。
原先按页翻永远不终止,实测翻到第 1798 页才因别的原因报错。改成只请求一次。
2. access token 默认只有 5 分钟(LS 未覆盖 SimpleJWT 默认值),而推上万条预测远超
5 分钟。所有请求统一走 request(),碰到 401 自动用 refresh token 续期后重试一次。
另加 --replace-all:用 Data Manager 的批量操作一次删光项目里所有预测,
比逐条删同版本快得多(适合版本号变了、旧预测留着没用的情况)。
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|
2026-09-22 13:17:53 +08:00 |
|
 Shaun ZhouandClaude Opus 5
|
9ead8c0a6e
|
fix(scripts): push_predictions 支持 JWT 个人访问令牌
服务器上的 Label Studio 关闭了旧式 token(jwt_auth_jwtsettings.legacy_api_tokens_enabled=0),
用 authtoken_token 里的 key 直接请求返回 401。个人访问令牌是 JWT refresh token,
要先 POST /api/token/refresh/ 换成 access token 再以 Bearer 发送。
脚本按令牌形态自动区分:三段点分的按 JWT 换取,否则沿用旧式 Token。
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|
2026-09-22 12:13:20 +08:00 |
|
 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 |
|