碎碎念
今天又是周四,感觉好像昨天才周一,上班真的会让时间变快。每天都是重复的东西,大脑因为没有新鲜的刺激,留不下任何记忆。
随便吧~迷茫的时候做好当下的事,好好吃饭,睡觉,学技术,刷算法,学Ai,周末的时候就好好休息,顺其自然。
呜呜呜,今天上午公司发端午礼盒,没有实习生的份,呜呜呜~ 上次老总请吃龙虾也没我的份,我真的要哭了~
上午就把原本今天要完成的工作做完了,现在是11:15,距离吃饭还有45min我今天下午要咋办?
刷L站的时候,看了很多佬友的个人博客网站,想借鉴着改进自己的小破站。个人博客可以加上书架,随时点开就可以读的那种
下午我让豆包看了一下训练报错日志,说是训练的时候除了训练集还需要验证集,大概8/2开这样。打算今天下午用codex去解析一下原webai+推理客户端,问问
先让ai梳理发送到推理客户端的文件结构,再让ai说明每一个目录、文件都是干什么的,再在原webai中找到对应的地方,对比webai-lite的缺少的部分
我chovy,我叫cc分析一下原因,它自己胡乱改了json参数还把代码自动提交了!!!
终于跑通了!!!
我滴天菩萨,下午我让codex gpt5.4超高推理,分析当前webai-lite为什么跑不通推理,我把原webai的前后端+推理客户端+现在的webai-lite全部拉进一个工作区,把工控机上训练失败的日志和产物全部拉下来,让codex分析错误原因并给出解决方案,cod运行了快一个小时,给出了答案,就是webai-lite的导出链路问题,导致所有图片都被打上了ngmust的tag,所以推理客户端读不到图片数据。详细PRD在最后
总结:webai-lite 导出的 COCO 扩展字段把所有缺陷样本都推成了 NG must,设备端于是只产出了 _ngmust 训练图,没有任何样本进入 val,最终 Ultralytics split=val 必然失败。
但是现在webai-lite还没有must语义就不管了,先跑通,把明天糊弄过去,后续再改前后端,还有其他模型的训练推理也没测试,当前只测试了实例分割模型。后续再说吧,这个月底完工就行~


todoList:
- 参考原webai处理训练、推理后的数据
- 客户端推理&训练的日志回传到lite处理
- 搞清楚ngmust、ng、okmust、ok语义和客户端中的train、val分别放什么数据
- 前端页面中的 classId 超出类别表:4 个实例 是什么意思
done:
- 在图片中点击对应缺陷的mask位置来选中缺陷,space切换mask显示/隐藏
- 在训练页面添加一个测试按钮,直接跳转到训练完成的界面
最长连续序列(原来的代码过不了,lc添加了测试用例,需要优化一下)
1 | class Solution { |
今日工作内容
标注工具与快捷键重构
Date: 2026-06-11
Task: 标注工具与快捷键重构
Summary
重构标注页工具模型(6类工具,W/E加法+R/T减法)、页面级快捷键(精确豁免规则)、Space mask显隐切换、画布点击mask像素级命中检测、侧栏图片勾选+批量操作、清空样本集全部标注、后端新增移出样本集和批量清空标注接口
修复 mask 点击选中失效 + 规范更新
Date: 2026-06-11
Task: 修复 mask 点击选中失效 + 规范更新
Summary
定位并修复标注页 mask 点击选中失效问题:maskBBox 元数据在 restoreMask/createNew/编辑/撤销等路径中缺失,导致 hitTest 的 bbox 粗筛短路。修复方案为 MaskObjectManager 集中维护 maskBBox,通过 canvas.mask-edited 事件驱动自动刷新。同步更新了 3 个规范文档。
下阶段计划
- 尝试跑通整个训练推理流程(写日报用)
Instance Seg Train Failure Solution PRD
Goal
修复 webai-lite -> 推理客户端 的实例分割训练导出链路,但本次范围仅限 webai-lite 侧改动,不修改推理客户端 / 设备端代码。目标是在现有推理客户端保持不变的前提下,让 webai-lite 下发的训练任务重新满足既有训练契约,避免样本被整体误判为 ngmust,最终导致 val 为空、训练失败。
What I already know
- 本次失败任务目录为
D:\webai2.0-device\44cdff8c-55cf-4afe-9f13-922b8b12bda8。 - 训练日志确认失败点为
val: No images found in ...sample/data/val,推理客户端训练器固定使用split=val。 - 运行产物中
train/images=75、train/labels=75,但val/images=0、val/labels=0。 - 这 75 张训练图全部命中
_ngmust分支,即ngmust=75, ng=0, ok=0。 - 推理客户端
get_data_from_coco()不只消费标准 COCO,还依赖扩展字段tags、ngmust_tags和tags[].ok_must来区分ok / OKmust / ng / ngmust。 - 当前
webai-lite的导出逻辑会补扩展字段,但现状是: tags被置为空数组。ngmust_tags被填充为全部标注。- 这个组合会让现有推理客户端把缺陷样本整体识别成
NG must。 - 原版
webai不是简单导出 COCO zip,而是通过专门的export-train队列和训练样本快照表组织训练导出,训练语义更早在服务端确定。 - 当前源码中的
fsnet_detect_train.json已包含split_val_threshold,但本次任务目录中的同名配置不含该字段,说明实际运行实例或下发任务包与当前源码状态可能不一致。
Assumptions
- 本 PRD 只允许修改
webai-lite,不包含任何推理客户端 / 设备端训练代码改动。 - 本次问题的主因是
webai-lite导出契约与现有推理客户端历史契约不一致,而不是偶发脏数据或文件损坏。 - 现有推理客户端对
tags/ngmust_tags/ok_must的消费逻辑需要被兼容,不能假设其短期内会改成只认标准 COCO。
Requirements
- 明确并固化
webai-lite -> 推理客户端在实例分割训练场景下的导出契约,尤其是tags、ngmust_tags、ok_must与ok / OKmust / ng / ngmust的映射语义。 webai-lite导出的训练样本不得再把全部缺陷样本误标为NG must。- 修复后,在不修改推理客户端代码的前提下,现有推理客户端应能基于
webai-lite新导出的任务稳定生成非空val。 - 修复后,实例分割训练场景的样本分流语义应尽量与原版
webai保持一致。 - 需要补齐自动化回归验证,覆盖 catalog manifest、导出扩展字段和关键训练导出断言。
- 需要补充运行时一致性校验或最小可观测性,帮助发现“当前源码”和“实际任务包”不一致的问题。
Acceptance Criteria
-
webai-lite导出的实例分割训练 COCO 扩展字段与现有推理客户端get_data_from_coco()所需语义一致,不再出现“tags为空且ngmust_tags覆盖全部标注”的错误组合。 - 使用与本次故障同类的数据样本重新打包训练任务时,在不修改推理客户端代码的前提下,设备端最终生成的
sample/data/val非空。 - 新增或更新自动化测试,至少覆盖:
webai-lite导出后的instances_default.json扩展字段结构。fsnet_detect/fsnet_detect_obbcatalog manifest 中与训练切分相关字段存在性。- 一条实例分割训练导出链路的关键断言,能证明不会再把全部缺陷样本错误导成
ngmust。 - 能明确定位当前运行实例与源码 manifest 不一致的情况,避免隐性部署漂移。
Definition of Done
- 测试已补齐并通过,至少包含导出契约回归和关键训练导出回归。
- 涉及的后端文档 / 说明已更新,后续开发能据此理解导出契约。
- 修复方案能解释本次真实故障,并可用于复盘。
- 对回滚路径和与现有推理客户端的兼容性影响有明确说明。
Technical Approach
推荐采用 webai-lite 单端修复:
导出契约修复
- 审核并修正
api/webai_lite_api/services/cvat_coco_export.py中_inject_webai_extension_fields()的扩展字段生成逻辑。 - 让
tags、ok_must、ngmust_tags的含义与现有推理客户端cut_image.utils.get_data_from_coco()的消费逻辑严格一致。 - 明确普通样本与 must 样本如何从工作区标注 / 样本集语义映射到导出文件。
- 审核并修正
训练 manifest 一致性修复
- 检查并固化
fsnet_detect_train.json、fsnet_detect_obb_train.json等训练 manifest 在运行时不会被旧 override 或旧打包流程覆盖。 - 保证
split_val_threshold等训练切分相关参数在 catalog、前端提交、任务打包三处一致。
- 检查并固化
可观测性修复
- 记录或校验本次任务实际下发的 manifest 与当前 catalog 源是否一致。
- 让“任务目录配置缺字段但源码已有字段”的情况能被尽早发现。
Decision (ADR-lite)
Context: 本问题表面上是 val 为空,但根因位于 webai-lite 导出契约与现有推理客户端训练数据约定不一致。用户已明确本轮方案不改推理客户端代码,因此修复必须完全在 webai-lite 侧闭环。
Decision: 仅修复 webai-lite 的训练导出契约、manifest 一致性和回归保障,使现有推理客户端在不改代码的前提下恢复正确样本分流;不纳入推理客户端空 val 兜底改造。
Consequences:
- 优点:
- 范围清晰,便于快速落地和回归。
- 能直接验证
webai-lite是否恢复了与现有推理客户端的兼容性。 - 风险:
- 需要精确复刻现有推理客户端依赖的隐式导出契约。
- 若推理客户端还依赖更多未识别的隐式字段,后续可能还需要继续在
webai-lite侧补齐。
Out of Scope
- 不在本任务中修改推理客户端 / 设备端训练代码。
- 不在本任务中重构整个设备训练框架或替换为全新的数据集协议。
- 不在本任务中改造全部模型类型,只聚焦本次故障相关的实例分割 /
fsnet_detect训练链路。 - 不在本任务中处理与本次故障无关的前端训练页视觉或通用工作区功能。
Technical Notes
- 关键日志:
D:\webai2.0-device\log\20260611_141240_44cdff8c-55cf-4afe-9f13-922b8b12bda8.log- 关键产物:
D:\webai2.0-device\44cdff8c-55cf-4afe-9f13-922b8b12bda8\ori_sample\annotations\instances_default.jsonD:\webai2.0-device\44cdff8c-55cf-4afe-9f13-922b8b12bda8\sample\data\data.yamlD:\webai2.0-device\44cdff8c-55cf-4afe-9f13-922b8b12bda8\sample\cut_image_list.jsonwebai-lite相关文件:api/webai_lite_api/services/cvat_coco_export.pyapi/webai_lite_api/routes/train.pyapi/webai_lite_api/services/device_task_bundle.pyapi/webai_lite_api/services/sample_sets.pyweb/src/pages/Train.tsx- 推理客户端参考文件:
D:\webai2.0-device\src\trainingthread.cppD:\webai2.0-device\44cdff8c-55cf-4afe-9f13-922b8b12bda8\code\build_temp\cut_image\utils.cD:\webai2.0-device\44cdff8c-55cf-4afe-9f13-922b8b12bda8\code\build_temp\cut_image\cut_instance.c- 原版
webai参考: D:\FS\webai2.0\fsai_service\cvat\apps\fs\views.pyD:\FS\WebAI\src\pages\projectMgt\modelLibrary\modelTrain\index.tsx- 当前 backend spec 中已有与 manifest 对齐相关的约束,可参考:
D:\webai-lite\.trellis\spec\backend\catalog-manifests.md