Bird Presence · 实验结果

Measured training report · 2026-07-23

YOLO26n 鸟 / 非鸟微调:召回上去了,误报也失控了

基于 Apple M5 上 49 分钟训练和 8,055 张冻结评测,对比训练前、Stage A、Stage B 与多视图推理,量化小鸟召回提升、昆虫与蜘蛛误报代价和下一轮数据建设门槛。结论不是“训练成功即可上线”,而是:Stage A 学会了找小鸟,却还没有学会可靠地排除昆虫与蜘蛛。

任务:YOLO26n-cls · bird / no_bird设备:Apple M5 / 32 GB / MPS 冻结评测:8,055 张证据日期:2026-07-23
49:08N0、Stage A、Stage B 的实际总训练墙钟时间
98.4%Stage A 自动阈值下 COCO 鸟召回;训练前为 52.0%
50.27%同一 Stage A 工作点的 OI 困难负样本特异度;训练前为 98.81%
0 泄漏训练 / 评测 SHA-256 与组级重合均为 0
Executive decision

训练完成,但替换条件没有满足

这轮最重要的价值不是得到一份可上线权重,而是用冻结测试把“只用分类器找小鸟”的真实边界测清楚:召回增益非常大,跨域困难负样本代价也同样大。

01

保留 Stage A best,暂不进入默认工作流

微调模型中,Stage A + 单整图的 COCO-vs-OI ROC-AUC 最高,为 0.9239;它是下一轮 hard-negative mining 的最佳起点。当前自动阈值 0.015 不能上线,Stage B 也不应替换 Stage A。

如果今天必须以“低误报”为第一目标,训练前 ImageNet 鸟类概率基线仍然更稳;如果以“尽量不漏远小鸟”为第一目标,Stage A 才有研究价值。

02

Stage B 不晋级

60 张七月训练图扩成 1,500 个本地视图,并没有创造新的语义多样性。Stage B 第 1 轮后连续退化,跨域 COCO / OI 权衡低于 Stage A。

03

多视图不作默认

5 视图 max 聚合把推理从约 170 图/秒降到约 49 图/秒,并放大任一局部块对昆虫或纹理的尖峰响应。

发布边界:

报告中的 “OI 特异度 ≥95% / 99%” 和 “COCO 召回 ≥90%” 工作点直接查看了冻结测试分数,是 test-oracle 后验诊断。它们用于比较性能曲线,不是可复制到生产环境的阈值。生产阈值必须在新建、同域且不与测试集重叠的 calibration split 上确定。

本地实测后验诊断工程决策风险与不确定性
01 · Scope & isolation

模型只回答“有没有鸟”

本实验没有 Detect 或 Pose head,不返回框、坐标或关键点。COCO bbox 只用于离线构造含鸟 tile 和按主体面积评测,部署接口仍然只有 p_bird 与 yes/no。

Stage A:通用概念

26,640 个训练视图,鸟 / 非鸟各 13,320。鸟来自 CUB 与 COCO full/tile;负类来自 COCO 动物/飞行物/自然人物和 iNaturalist 昆虫。

Stage B:本地域适配

6,000 个训练视图,其中 1,500 个来自 60 张七月原图,另外 4,500 个是通用 replay。离线重复只增加观察方式,不增加独立场景。

冻结测试

8,055 张:CUB dev/stress、COCO val、negative val、OI official test、七月 local val/regression。OI official test 的 1,096 张不参与训练或自动阈值,只用于最终测试与明确标注的后验诊断。

数据层非鸟主要来源用途与隔离
Stage A train13,320 views13,320 viewsCUB、COCO bird;COCO negatives、iNaturalist insects通用微调;与评测 SHA 和 group 均不重叠
Stage B train3,000 views3,000 views七月 60 张 + Stage A replay低学习率本地域适配;不触碰 local regression
Threshold dev1,0101,010CUB dev、negative val、local val只选自动阈值;不进入训练
Locked stress/test4,9291,106CUB stress、COCO val、OI test、local regression只做最终评测;不能回灌阈值或训练
数据审计:

21,714 张唯一代理图全部可解码且为 512×512;训练侧 15,685 个唯一 SHA 与 8,055 张评测图的 SHA 重合为 0,组级重合也为 0。iNaturalist 按摄影者 + 拍摄日期整组拆分,CUB 发现并移除 1 个训练重复。

02 · Actual training

最佳权重都远早于最后一轮

训练日志已经解释了为什么不能看“最后一轮训练 loss”下结论。Stage A 与 Stage B 都在验证指标退化后早停,并回滚到自动保存的 best checkpoint。

阶段初始化输入 / batch计划上限实际早停采用轮次最佳 val Top-1墙钟时间
N0 · 仅本地 60 张ImageNet n-cls320 / 81563100%(仅 20 张 val)13.97 秒
Stage A · 通用ImageNet n-cls384 / 322510395.792%43 分 38 秒
Stage B · 本地域Stage A best384 / 1685195.198%5 分 16 秒

Stage A:验证 Top-1 在第 3 轮达到峰值

96%94%92% best · 95.792%early stop · epoch 10 13579

第 3 → 10 轮训练 loss 再下降 70.4%,但 val loss 上升 94.85%,Top-1 下降 2.822 个百分点:典型过拟合。

Stage B:第一轮之后连续退化

96%94%92% best · 95.198%early stop · epoch 5 12345

本地 60 张训练原图不足以支撑全量主干继续适配。把一张图离线重复很多次,不能替代更多日期、焦段、背景和失败类型。

N0 的反例:

仅用本地 60 张训练的 N0,在 COCO recall 上从基线 52.0% 升到 75.2%,但 OI 特异度跌到 2.19%,1,096 张独立负样本中有 1,072 张被报成鸟。小验证集 100% 并不等于泛化。

03 · Before vs after

召回提升是真实的,代价也是真实的

每个模型的自动阈值只由自己的 threshold-dev 选择,因此可用于评估完整管线;不同模型的概率尺度不同,阈值数字本身不能横向比较。

单整图:自动开发阈值

locked evaluation
模型阈值COCO recallCOCO <1% recallCUB stress recallOI specificity本地 recall / specificity
训练前 ImageNet baseline0.16052.0%26.23%98.75%98.81%80% / 90%
N0 · local-only0.57075.2%57.38%97.41%2.19%90% / 70%
Stage A best0.01598.4%98.36%99.94%50.27%100% / 0%
Stage B best0.01597.6%95.08%99.92%45.62%80% / 30%

COCO 鸟召回

训练前
52.0%
Stage A
98.4%
Stage B
97.6%

OI 独立负样本特异度

训练前
98.81%
Stage A
50.27%
Stage B
45.62%

全图 + 4 个重叠 tile:max 聚合

5 views / image
模型阈值COCO recallCOCO <1% recallOI specificity本地 recall / specificity吞吐
训练前 baseline0.28556.0%31.15%98.72%100% / 100%49.33 图/秒
Stage A best0.27093.6%93.44%66.88%90% / 40%49.76 图/秒
Stage B best0.30591.2%88.52%58.30%80% / 70%49.27 图/秒
20 张本地 regression 只适合冒烟,不适合排名。

它只有 10 张鸟 + 10 张无鸟,每错 1 张,单类指标就变化 10 个百分点。训练前多视图恰好 20/20,不能据此宣称它在真实七月照片上已经达到 100%。

04 · Operating points

公平比较后,Stage A 仍没有同时赢

自动阈值偏向“本地验证鸟 10/10 不漏”。为看清曲线形状,额外计算三组冻结测试后验工作点;这些结果只说明可达边界,不提供生产阈值。

诊断约束配置COCO recallOI specificityCUB stress recall解释
COCO recall ≥90%
test-oracle
Stage A full90.4%79.29%99.58%微调配置中最佳;仍约每 5 个 OI 负样本误报 1 个。
Stage B full90.4%72.08%99.52%本地域适配使跨域误报进一步恶化。
Stage A multiview90.4%72.81%99.52%max-over-5 放大局部误报。
OI specificity ≥95%
test-oracle
baseline multiview67.2%95.07%99.69%严格低误报下,未微调基线的 COCO 召回最高。
同上Stage A full57.6%95.07%96.89%高阈值会丢掉大量小鸟,未超过基线。
OI specificity ≥99%
test-oracle
baseline multiview53.6%99.09%98.16%仅 10/1,096 OI 负片误报时仍是基线领先。
同上Stage A full36.8%99.09%92.05%当前 Stage A 排序尚不足以兼顾严格误报与小鸟。

为什么自动阈值只有 0.015

一张草中小鸟的 Stage B full 分数只有约 0.01512。阈值规则要求仅 10 张本地开发鸟全部召回,这一张图就把工作点压到 0.015,并放行大量昆虫。

多视图把它提升到约 0.455,但下一张边界鸟又把 Stage B multiview 阈值限制在 0.305。

排序能力没有表面值那么差

Stage A threshold-dev ROC-AUC 仍约 0.992,COCO-vs-OI ROC-AUC 为 0.9239。问题一部分是阈值校准不稳,另一部分是真实跨域昆虫与小鸟分布仍重叠。

因此下一轮必须同时改数据与 calibration,而不是单纯把阈值从 0.015 手调到 0.5。

不要复制 oracle 阈值。

OI 95% 点实际是 1,096 张负片中 54 个误报;OI 99% 点是 10 个误报;COCO 90% 点是 125 张正片中命中 113 张。它们由测试样本次序统计量直接导出,机械复制既会过拟合,也可能因 >= 浮点边界改变一个样本结果。

05 · Failure analysis

昆虫与蜘蛛误报不是偶发,而是成片发生

下表类别来自 OpenImages 下载清单的显式元数据,不是凭模型分数或目录名猜测;样本均属于冻结 OI test。FPR = 1 − specificity。

OI 显式类别n训练前 full FPRStage A full FPRStage B full FPRA → B 变化
Bee1882.7%62.8%66.0%+3.2 pp
Beetle1340.0%58.2%64.2%+6.0 pp
Butterfly2371.7%40.5%44.3%+3.8 pp
Dragonfly691.4%27.5%29.0%+1.4 pp
Generic insect3010.3%49.2%51.2%+2.0 pp
Moths & butterflies474.3%59.6%57.4%−2.1 pp
Spider(蜘蛛,不属于昆虫)1200.0%48.3%66.7%+18.3 pp
OI overall1,0961.19%49.73%54.38%+4.65 pp
人工目视核验

重复轮廓与近摄主体

蚕/幼虫、蜂群与蜂巢、逆光蜘蛛、甲虫近摄都出现接近 1.0 的持续高分。模型把“居中的小型生物主体 + 高频纹理”学成了鸟的捷径。

人工目视核验

蝴蝶、人物与抽象纹理

本地蝴蝶、自然环境人物、马、藻类/水面重复纹理均可误报。多视图 max 会放大单个 tile 的尖峰,抽象纹理尤其明显。

人工目视核验

漏检不只发生在极小鸟

极小鸟旁有更醒目的风筝会持续漏;远山暗色飞鸟在 Stage B 回归;大型猛禽剪影也可能低分,说明域适配同时破坏了部分形状能力。

Stage A → Stage B:逐图决策转换

repair = A 错 B 对;regression = A 对 B 错
模式 / 子集RepairsRegressions净正确变化结论
Full · local regression32+1只改善 1 张,样本量太小。
Full · COCO12−1通用鸟召回轻微回退。
Full · OI test93144−51修复一批的同时制造更多新误报。
Multiview · local regression31+2本地 balanced accuracy 65% → 75%。
Multiview · COCO + CUB stress713−6鸟正集整体回退。
Multiview · OI test83177−94本地域收益不足以补偿跨域退化。
为什么没有把失败照片嵌入公开报告:

人工复核使用了本地照片和公开数据集原图,但本报告只发布统计与去标识化现象描述,避免额外公开私人拍摄文件或复制第三方图片。完整逐图路径与分数保留在本地审计 artifact 中。

06 · Root causes

问题来自监督与数据形态,而不是模型还没训够

继续加 epoch 已被训练曲线否定。下一轮应优先消除模型可利用的“捷径”,再谈更大的 backbone 或更多视图。

01

分类没有空间监督

整图标签只告诉模型“这里有鸟”,不告诉它鸟在哪里。鸟很小时,任何突出的局部生物、轮廓或纹理都可能成为替代特征。

02

正负构图尺度不匹配

Stage A 正样本含大量 COCO 鸟框 tile,负样本主要是整图。模型可能把“局部裁块、主体显著”误当成鸟,而不是学习鸟的稳定结构。

03

昆虫存在跨数据集域差

iNaturalist 昆虫已加入训练,OI test 仍大幅误报,说明背景、主体比例、压缩、拍摄风格与类别覆盖不同。随机增加同源图片无法完全解决。

04

本地域样本太少

Stage B 只有 30 鸟 + 30 非鸟独立训练原图。750 + 750 个本地视图只是重复采样,容易记住构图,无法代表不同日期、天气和镜头。

05

100% 召回硬约束不稳

仅 10 张本地开发鸟就要求 10/10,阈值会被一张异常低分图支配。校准问题与模型排序问题被混在一起。

06

max 聚合扩大极值

每张图 5 个视图,只要一块误触发就判有鸟。视图越多,遇到昆虫、树枝或水面纹理尖峰的概率越高。

结构判断:

YOLO26n-cls 的 1.53M 两类训练结构并未表现出明确容量饱和;Stage A 已能把大部分鸟排到前面。当前先换更大分类器,大概率会把同样的数据捷径学得更牢,而不是自动获得更好的昆虫边界。

07 · Next iteration

下一轮先改数据与校准,再重训

目标不是追求一个更漂亮的验证 Top-1,而是在同一冻结集上同时提高小鸟召回与困难负样本特异度,并让本地结果不再由 20 张图决定。

1

冻结现有测试资产

COCO val、OI test、CUB stress 和 20 张 local regression 永久不回灌训练或阈值。以后只做版本最终验收。

2

挖 2,000–5,000 张真实 hard negatives

用 Stage A full 扫未使用照片,优先人工确认最高分的蝴蝶/蛾、蜂、甲虫、蜘蛛、蜻蜓、幼虫、人物、马、空景、树枝和水面纹理;按类别设配额。

3

构造尺度匹配的负 tile

对每类正样本 crop,补同尺寸、同缩放、同压缩方式的昆虫与背景负 tile;训练 batch 按来源均衡,消除“正是裁块、负是整图”的捷径。

4

补 500–1,000 张真实微小鸟

重点覆盖主体面积 <1%、天空/树林/远山、逆光剪影、旁边有更醒目干扰物的鸟;单独保留新的小鸟 calibration 与 test 分片。

5

本地唯一原图扩到 500–1,000 张

按日期、地点、镜头和连拍组拆分;补不同焦段、天气、背景、模糊、半鸟、多鸟与无鸟,不用重复增强代替新场景。

6

采用灰区二阶段推理

高分直接有鸟、低分直接无鸟,仅中间灰区运行 tiles 或后续 detector;聚合器加入多 tile 一致性,不再对所有图执行 max-over-5。

下一版晋级门槛

先冻结,再看测试

困难负样本

在新增 calibration 上锁阈值后,冻结 OI test specificity 必须达到 ≥95%,并逐类报告 bee / beetle / butterfly / spider,而不是只给总平均。

微小鸟

在相同 OI specificity 下,COCO <1% 与全部 COCO recall 必须显著超过训练前基线;不能靠把阈值降到全报正来换召回。

本地域

把冻结本地 test 扩到至少数百张、按连拍分组;要求 balanced accuracy ≥90%,同时不允许跨域 COCO / OI 指标明显回退。

建议执行顺序:

Stage A checkpoint → hard-negative mining → crop-matched 数据重建 → 新 calibration 锁阈值 → 一次性冻结测试。只有在这套数据上仍显示容量瓶颈,才比较 YOLO26s-cls、EfficientNet 或加入单类 detector。

08 · Reproducibility

权重、日志和结论都可回溯

公开报告不携带本地路径、照片或原始逐图 CSV;私有实验目录保留完整 manifests、predictions、哈希与环境记录,可重算本文所有表格。

产物用途SHA-256 / 状态
Stage A best checkpoint下一轮候选初始化;约 3.0 MiB7cd7a54ba58b4c02…743cbc8
Stage B best checkpoint研究对照,不晋级bcd6e91be17245b9…1178236
Dataset audit数量、解码、SHA / group 泄漏检查8105cbf3973c41ba…672acea · passed
Training analysis耗时、早停、最佳轮、环境与来源链dfab2fe7e4e95ce5…f03fdb9d
Operating-point analysis自动阈值、固定阈值和 oracle 曲线efb81d2945128846…f9e4bf2
Failure analysis逐图转换、OI 类别 FPR、人工复核3a8e38d548315b88…84cfc2
Comparison七组统一评测汇总8ba5f01b96934539…a02446

实验环境

  • Apple M5,32 GB 统一内存,PyTorch MPS。
  • Ultralytics 8.4.100;分类输入 384,seed 42。
  • 训练增强关闭 RandomResizedCrop 风格的 scale 裁切,避免小鸟被裁没。
  • Checkpoint manifests 记录模型来源、类别顺序、参数和 SHA-256。

仍然存在的复现边界

  • MPS 算子与 PyTorch / Ultralytics 版本可能造成微小数值差异。
  • 实验目录不在 Git 仓库内,缺少 commit 级代码锚点。
  • OI test 是定向昆虫、蜘蛛与自然负样本,不等同于真实部署 precision;真实 prevalence 尚未测量。
  • 本地 test 只有 20 张,置信区间很宽。

来源与报告谱系

local measurements + prior plan
  1. 本地训练日志:N0、Stage A、Stage B 的 results.csv、run config、environment 与 checkpoint manifests。
  2. 本地统一评测:训练前 / N0 / Stage A / Stage B 的 full 与 multiview metrics、8,055 张逐图 predictions。
  3. 本地数据审计、工作点分析与失败样本人工复核;证据截止 2026-07-23。
  4. 训练前方案:不做鸟框的 YOLO26n 有鸟 / 无鸟分类器
  5. 早期对照:YOLO26s 鸟 / 非鸟小样本 PoC 复盘
  6. Ultralytics 图像分类任务文档;本报告中的性能数字均来自本地实测,不引用官方 benchmark 代替。
去重判断:

站内既有报告分别是“训练前计划”和“旧 YOLO26s PoC”。本报告记录计划执行后的新 YOLO26n 两阶段权重、49 分钟实际耗时、8,055 张冻结测试和与原计划预期相反的跨域误报结论,属于独立的结果档案,不是换皮重复。