Phase 2:训练与数据(解决近/远漏检)
用大白话说:这一页帮你搞懂——为什么你的系统会"近处的人认得出、高空无人机拍的人老误认/漏掉",以及怎么靠"加数据、调训练"把它治好。
目标:你之前问的「近景人 + 高空无人机人混在一个 person 类,导致高空误检/漏检」——根因在数据与训练,这一阶解决它。数据决定上限。
一、先诊断:拆开评测(不花钱)
别只看总 mAP(说人话:综合准度分,越高越准)——总指标会掩盖「高空误检爆炸、召回掉」。
先认词:AP(说人话:某一类认得准不准);召回(说人话:该认的,认出了多少);FPPI(说人话:平均每帧误认了几次,越低越好)。
- 把验证集按 近景 / 高空 分成两份,分别算 AP 和 误检率(FPPI)。
- 用数字算清楚,你才知道往哪用力:是高空召回低?还是高空误检高?
二、优化手段(按收益排序)
2.1 数据层(最有效)
- 难负样本(说人话:专门找一批"长得像人其实不是人"的图,教模型"这不是人"):专门收集/标注一批「高空非人」图(车顶、屋顶、阴影、杂物)作 background 硬负样本。压误检最直接——让模型学「高空里什么不是人」。
- 尺度抖动训练(multi-scale)(说人话:训练时把同一个人随机放大缩小,逼模型别只看大小认人):让同一个人以各种尺寸出现,逼模型不依赖绝对大小。
- cut-paste 增强(说人话:把人抠出来,贴到高空背景里,低成本造"高空也有人"的样本):把人抠出来贴到高空背景的合适尺度上,低成本造高空正样本。
2.2 标签 / 结构层
- 拆子类训练(说人话:训练时把 person 拆成"近景人/高空人"两个班,各学各的,最后再合并):训练时把
person拆成person_near/person_aerial,各学各的特征,推理时再合并回person。模型不再被迫用一套权重拟合两个域。 - 双模型路由(说人话:近景用一个检测器、高空用小目标专家,按场景切换):近景检测器 + 高空小目标专家,按高度/场景切换。对 VisDrone 这类,专门的高空小目标检测器往往比通吃模型准得多。
2.3 训练配置
- anchor / box 先验覆盖小目标(说人话:模型猜框时参考的"默认框尺寸",要覆盖高空小人的尺寸):确认 anchor 尺寸包含高空人的 tiny 尺度,否则再多发病也匹配不上。
- Focal Loss(说人话:一种损失函数,专门盯住难认的样本多算账):聚焦难样本(高空小目标正是难样本)。
- Repeat Factor Sampling(说人话:对很少见的高空类多采样几次,平衡数据,LVIS 那套):对高空少数类过采样,平衡占比。
2.4 推理 / 部署层(不改训练就能缓解)
- 时序一致性投票(说人话:视频是连续的,真人在好几帧都在、误检只闪一帧,用多帧投票把闪的去掉):高空流是视频,误检通常单帧闪烁、真人跨帧持续 → 用 tracklet(说人话:把同一目标在连续帧里连成的一条轨迹) / 多帧投票滤掉瞬态误检。
- 尺寸 / 长宽比过滤:高空人有点状统计特征,按高度设最小尺寸、长宽比门槛。
- 按高度动态阈值:知道是高空就把
conf(说人话:模型对自己认出来的把握)调高,专门压误检。 - 二阶段再分类(说人话:先出候选框,再用一个小分类器看"这到底是不是人"):先出候选框,再用专训的高空「人 vs 非人」小分类器过一遍 crop。
三、落到你的建议(优先级)
拆评测 → 加高空难负样本 + cut-paste → 拆 person 子类或训高空专家 → 推理端时序投票 + 动态阈值。近景数据别删(保近景精度),关键是把「高空非人」补进负样本、给高空人足够代表权重。
四、指标与实验追踪(岗位基本功)
- 必懂指标:AP / mAP / 召回 / FPPI / PR 曲线(说人话:看"准"和"全"之间怎么取舍的曲线) / 混淆矩阵(说人话:一张表,记清"谁被认成了谁");分域评测(说人话:把近景和高空分开打分)。
- 实验追踪:wandb / mlflow(说人话:记实验用的本子)记每次实验的超参 + 指标,不然改了一堆不知道哪个有用。
五、🔧 Phase 2 验收
- 输出一份「近景 vs 高空」分域评测表(AP、FPPI)。
- 加难负样本 / cut-paste 后,高空召回或误检有可量化的改善对比。
- 能讲清 Focal Loss 在解决什么、为什么对你的小目标有用。
下一步:Phase 3 部署深挖。