From 17e5b01773eedcc7b99170ac9affa2e22a5ca46c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E6=96=8C?= <259278618@qq.com> Date: Fri, 4 Sep 2026 09:47:55 +0800 Subject: [PATCH] 1 --- server/biz/consts/consts.go | 18 ++++++++++-------- server/data/observer.db | Bin 688128 -> 761856 bytes server/技术设计.md | 2 +- 3 files changed, 11 insertions(+), 9 deletions(-) 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 7bdb634a37aeef92be1d57da607c0e8af31afbd8..654aac643be9f1481cb96755541793baed333e15 100644 GIT binary patch delta 48082 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 delta 5024 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——宽档(如 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 供前端归类