diff --git a/server/biz/consts/consts.go b/server/biz/consts/consts.go index 4e92a9f..261af13 100644 --- a/server/biz/consts/consts.go +++ b/server/biz/consts/consts.go @@ -79,7 +79,9 @@ const ( // 按最大 class 0 框的归一化框高 h 划分,边界为占图高百分比,下含上不含。 // <2% 极远档豁免——recall 瓶颈档只缺不多,不进候选清单(配额 0 固定不适用); // 其余档 Quota 为「目标保留张数」缺省值,preview 请求可覆盖(管理端配额表默认展示即此表)。 -// 配额随目标尺寸单调递减(2026-09-02 用户定案):尺寸越大越易检出、冗余切得越狠,小档护稀缺硬样本。 +// 配额随目标尺寸单调递减(2026-09-02 定案;2026-09-04 按每物种 500 张训练规模放大为方案A): +// 尺寸越大越易检出、冗余切得越狠,小档护稀缺硬样本;可控档合计 470 + <2% 豁免档 ≈ 500。 +// 500 规模前(如各档总量 < 配额)配额不生效——超配档才裁剪,旧小数据集不受影响。 type CleanBucket struct { Label string MinPct float64 @@ -89,11 +91,11 @@ type CleanBucket struct { var CleanBuckets = []CleanBucket{ {"<2%", 0, 2, 0}, - {"2-3%", 2, 3, 60}, - {"3-4%", 3, 4, 50}, - {"4-6%", 4, 6, 40}, - {"6-8%", 6, 8, 30}, - {"8-12%", 8, 12, 20}, - {"12-20%", 12, 20, 15}, - {">20%", 20, 100, 10}, + {"2-3%", 2, 3, 100}, + {"3-4%", 3, 4, 90}, + {"4-6%", 4, 6, 80}, + {"6-8%", 6, 8, 60}, + {"8-12%", 8, 12, 55}, + {"12-20%", 12, 20, 50}, + {">20%", 20, 100, 35}, } diff --git a/server/data/observer.db b/server/data/observer.db index 7bdb634..654aac6 100644 Binary files a/server/data/observer.db and b/server/data/observer.db differ diff --git a/server/技术设计.md b/server/技术设计.md index b7e1c69..9d08469 100644 --- a/server/技术设计.md +++ b/server/技术设计.md @@ -411,7 +411,7 @@ training: - **语义(区别于视觉判重)**:不是删「长得像」的图,而是按标注算目标尺寸、按**尺寸档配额**去重——易档(中近距离)堆量、难档(<2% 极远)稀缺是当前数据集冗余的真实形态(2026-09-02 实测:dHash 整图/目标裁剪双重判定,生成图逐张随机 scene/action 几乎无近重复,严格阈值可去近 0 张;而 环颈雉 280 张实拍中 4-8% 档 109 张占 39%——同场地连拍帧为主,删冗余几乎无损) - **目标尺寸口径**:`labels_json` 归一化框高 h 即目标占图高比例(**不需解码图片**);多框取最大 class 0 框定档(候选行展示的主尺寸);**档内保留取舍参考图内最小确认目标**(2026-09-02:多目标图里的小目标样本比主目标稀缺,同档冗余取舍先保它们);像素高 ≈ h×1280(训练尺度,等比近似);**仅 class 1 疑似图与空检出 `[]` 图不入清单**(无确认目标,无从定尺寸,等人工确认后自然进入统计) -- **档位**:按图高占比细档 <2% / 2-3 / 3-4 / 4-6 / 6-8 / 8-12 / 12-20 / >20%——宽档(如 4-8%)跨 2 倍尺度,直接按宽档配额会把半档删光,须细档分别设配额;**<2% 极远档固定豁免**(recall 瓶颈档,只缺不多);各档配额请求可传,缺省用代码默认(consts.go);**配额随目标尺寸单调递减(2026-09-02 用户定案)**:尺寸越大越易检出、单张边际训练价值越低,冗余切得越狠——小档护稀缺硬样本,默认 2-3%:60 / 3-4%:50 / 4-6%:40 / 6-8%:30 / 8-12%:20 / 12-20%:15 / >20%:10(曾中档 4-6% 峰值为 50、小档仅 30,违反该定则) +- **档位**:按图高占比细档 <2% / 2-3 / 3-4 / 4-6 / 6-8 / 8-12 / 12-20 / >20%——宽档(如 4-8%)跨 2 倍尺度,直接按宽档配额会把半档删光,须细档分别设配额;**<2% 极远档固定豁免**(recall 瓶颈档,只缺不多);各档配额请求可传,缺省用代码默认(consts.go);**配额随目标尺寸单调递减(2026-09-02 用户定案)**:尺寸越大越易检出、单张边际训练价值越低,冗余切得越狠——小档护稀缺硬样本。**默认配额按每物种 500 张训练规模设定(2026-09-04 方案A)**:2-3%:100 / 3-4%:90 / 4-6%:80 / 6-8%:60 / 8-12%:55 / 12-20%:50 / >20%:35(可控档合计 470 + <2% 豁免档 ≈ 500;500 规模前的旧小数据集各档总量 < 配额时清洗不裁剪,不受影响。配额仅裁剪超配档,未超配档全留——想净留 500 建议准备 550~650 张再按此表跑清洗)。曾用 225 规模默认(60/50/40/30/20/15/10)已随规模上调替换 - **桶内多样性保留**:超配桶内保留谁不随机——**先按图内最小确认目标(class 0)尺寸升序扫描**(小目标样本稀缺,同档图里带更小目标的先占保留名额;同最小尺寸按 id 保持稳定),整图 dHash(common 层,9x8 灰度 64 位)与已保留图最小汉明距离大于阈值才留,**留够配额即停,其余全进候选清单**(连拍帧天然相邻近哈希,只留首帧;不同场景同尺寸的目标尽量都保);候选行展示主尺寸 + 最小目标占比 + 目标数,供人工判断取舍 - **执行语义(排除而非删除)**:候选清单人工过目后打 `dataset_image.clean_excluded=1`(EnsureColumn 迁移)——**只影响训练集打包**(prepare_yolo 跳过),图片/标注不动、列表/标注/预标全流程照常可见;**可恢复**(清除标记即回训练集,付费资产原则:清洗默认不删文件,物理删除仍走人工逐删) - 接口:`POST /admin/datasets/clean/preview`(datasetId + 可选 quotas → 各档分布/配额/超配候选清单 + 已排除列表);`POST /admin/datasets/clean/apply`(imageIds + exclude bool 批量置/清标记);**管理端详情页承载:「数据清洗」按钮在已标注 tab 工具条**(配额表可编辑 + 候选清单默认全选 → 执行排除),**已排除的图集中到「已清洗」tab 展示,逐张/批量恢复(apply exclude=false)**,图片列表接口返回 cleanExcluded 供前端归类