- Sprint 执行计划 v1.1:§1.1 补第一批交付实据;T9 SPIKE 结论回写 Sprint 1 表 (T-P0-16 通过 2.8ms;T-P0-12 有条件;T-P0-10 原型 6/6 + 真实照片重验前置); Sprint 2 表标注 T-P2-01~06 交付;新增 §9 两批交付记录 - 开发任务拆解 v1.5:交付回写 + 新风险登记(RTMPose 域差异、BiRefNet 异步化) - 新增 开发任务包/:三批多 agent 并行的协作规程与 14 份任务契约 - 新增 前置开通清单-云资源与资质.md - 清理已用毕的评审报告(文档评审 2026-08-13、项目整体评审 2026-08-14), README 中相应引用改为留痕表述
6.0 KiB
6.0 KiB
T9 · 算法验证 SPIKE·RTMPose 体型原型 + BiRefNet 抠图
对应任务:
T-P0-16(RTMPose ONNX 单张耗时)、T-P0-12(BiRefNet 抠图质检 ≥90%)、T-P0-10前置(体型测算原型)| 分支:task/t9-vision-spike| worktree:/home/xsl/meida_backend-t9先读《README.md(协作规程)》,遵守全部纪律。本任务是 SPIKE:产出是脚本 + 基准报告 + 结论,不是生产代码。
1. 目标
用本地可跑的最小代价回答三个 Sprint 1 硬门槛的可行性问题,结论写进报告(不达标要换方案,不要硬做):
- RTMPose ONNX 在 CPU 上的单张推理耗时(T-P0-16 验收:可接受即通过;开发机另有 RTX 5090,若 WSL 能用 GPU 也测一档,不行就只报 CPU——先探测
nvidia-smi与onnxruntime的 CUDA 可用性,探测失败不折腾); - BiRefNet ONNX 抠图的质量代理指标(T-P0-12 的 ≥90% 质检通过率需要真实素材与人工标注,本 SPIKE 只建管线 + 代理指标 + 少量样图的主观核验,正式验收留给素材流水线);
- 体型测算「掩膜宽度剖面法 + 关键点定高」原型(TD-06):在合成人形图上跑通"关键点 → 定高 → 剖面宽度 → 肩/腰/臀比例 → H/A/V/O/X 初判",证明管线成立;一致率 ≥80% 的正式验证需要人工标注数据(顾问轨),本任务不承诺。
2. 已就绪的契约(协调提交已提供)
- 依赖:
spikeextra 已加入 pyproject(onnxruntime、opencv-python-headless、numpy),你的 worktree venv 已uv sync --extra spike装好。GPU 版 onnxruntime 不装(CUDA 匹配成本高,CPU 基准已满足 T-P0-16 验收口径)。 - 目录:
scripts/spikes/(新建,归你)+ 模型缓存目录models/(已在.gitignore,模型文件绝不入库)。 - 样图:用脚本合成(OpenCV 画人形剪影/几何人体,见 §3),不使用任何真实人脸/人体数据(合规红线:测试不碰真实个人数据)。
3. 实现要点
允许改动:scripts/spikes/**、测试(可选,本任务以报告为验收)。其余全禁改。
3.1 模型获取(本批唯一允许联网的环节)
- 优先
HF_ENDPOINT=https://hf-mirror.com(国内镜像)用huggingface_hub.snapshot_download/hf_hub_download下载 ONNX:- RTMPose:
PINTO0309/PINTO_model_zoo里的 rtmpose(搜rtmpose+ onnx,选 body 26/17 keypoint 的小模型)或dhkim0115/rtmpose-onnx等社区导出;取不到就换 OpenMMLab 官方导出说明,再不行降级:用opencv自带的 HOGDetector 作关键点占位并在报告声明; - BiRefNet:
zhengpeng7/birefnet的 ONNX 导出(或onnx-community/BiRefNet);文件大(~1GB)下载慢的话选 lite/general-lite 变体,报告注明用的哪个;
- RTMPose:
- 下载脚本
scripts/spikes/download_models.py:带本地存在性检查 + 进度打印 + 失败重试一次;模型路径默认models/<name>.onnx,支持 CLI 参数覆盖; - 超时纪律:单个模型下载超过 ~10 分钟即放弃并走降级路线,把时间花在报告上。
3.2 scripts/spikes/rtmpose_benchmark.py
- 加载 ONNX → 预处理(resize/归一化,按模型 meta)→ 推理 → 解码关键点(17 点 COCO 或 26 点,按模型);
- 输入:合成图
scripts/spikes/assets/synthetic_person.png(用 OpenCV 画:头圆 + 躯干梯形 + 四肢线段,肩/腰/臀位置可控——这也是 3.4 的输入); - 耗时基准:预热 3 次 + 正式 20 次,报 均值 / P95 / 单次最大(
time.perf_counter); - 输出关键点坐标 JSON + 控制台表格。
3.3 scripts/spikes/birefnet_matting.py
- 加载 ONNX → 推理 → 后处理(sigmoid + resize 回原尺寸 + 二值化阈值 0.5)→ 保存掩膜图与抠图预览到
scripts/spikes/out/(out/ 也 gitignore,报告里只留指标); - 代理质检指标(T-P2-07 质检的雏形口径,写清楚这是代理不是正式验收):
- 前景像素占比(应在 15%~60% 合理区间);
- 最大连通域占前景比(>0.9 视为"主体单一完整");
- 边缘羽化度(掩膜梯度带宽度均值);
- 抠图耗时(同 3.2 口径);
- 输入:合成人形图(与 3.2 同一张)+ 一张带渐变背景的变体。
3.4 scripts/spikes/body_measure_prototype.py(TD-06 原型)
- 用 3.2 的关键点(或合成图直接已知的真值框)定肩线/腰线/臀线高度 → 在 3.3 的掩膜上取对应高度的宽度剖面 → 肩宽/腰宽/臀宽比值;
- 规则初判:肩/臀比 >1.05 → V 型;<0.95 → A 型;肩≈腰≈臀 → H;腰远小于肩臀 → X;中段最大 → O(阈值写成常量并注明"待顾问校准");
- 对合成图断言:已知真值形状的分类正确(合成图生成时就知道自己画的是 A 型还是 H 型——这就是最小可行的一致率验证)。
3.5 scripts/spikes/REPORT.md(核心交付物)
结构:结论先行(三问三答,每问给"通过 / 有条件通过 / 不达标需换方案")→ 各基准数字表 → 用的模型与版本 → 降级与偏差 → 对 Sprint 1 正式验证的建议(需要什么数据、多少标注量)。
4. 验收标准
download_models.py+ 三个 spike 脚本可重复执行(模型已缓存时离线可跑);- RTMPose CPU 耗时基准有数字(或降级路径有声明);
- 体型原型在合成图上分类正确;
REPORT.md三问三答齐全,结论可决策;ruff check/ruff format --check对scripts/spikes/**全绿;无 pytest 强制要求(脚本里的断言跑一遍即可,在报告里贴输出)。
5. 提交信息
spike(vision): rtmpose latency, birefnet matting proxies, body-shape prototype
T-P0-16/12/10 可行性验证:CPU 基准 + 代理质检指标 + 合成图体型剖面法
原型 + REPORT.md 三问三答(Sprint 1 门槛的决策依据)。
偏差说明:<模型是否齐全、走了什么降级、写在这里>