YOLO26s 鸟片 PoC 复盘

Experiment review & decision roadmap · 2026-07-20

YOLO26s 鸟 / 非鸟微调实验复盘与演进路线

基于 100 张七月照片和 Apple M5 本机实测,拆解 YOLO26s-cls 的 85% 测试结果、三类失败与统计边界,并给出从多尺度分类到单类检测器和 Lightroom 旁路验证的分阶段路线。

Apple M5 · 32 GB · MPS 100 张人工全分辨率复核 日期隔离 60 / 20 / 20 证据日期 2026-07-20
85%测试集 Accuracy:17 / 20;不是生产精度
90 / 80鸟召回率 / 无鸟特异度(%)
14.6 s正式微调墙钟时间;9 epoch 早停
3错误:1 漏检 + 2 误报,且都有明确根因
Executive decision

环境已跑通,但下一笔投入应该给数据和几何监督

PoC 已经证明 Apple M5 能快速微调和部署 YOLO26s 分类模型。它没有证明 100 张数据能支撑自动删片、星级覆盖或鸟位置输出。

01

工程结论:通过

环境、数据构建、MPS 训练、阈值选择、测试、原图推理和权重重加载均已执行。模型与 20 张逐图预测可重算一致。

02

精度结论:尚不可用

20 张测试图中每错 1 张就让单类指标变化 10 个百分点。Accuracy 的 95% Wilson 区间为 64.0%–94.8%,远不能支撑自动丢弃照片。

03

误判结论:不是阈值问题

同时出现真鸟 0.136 和无鸟 0.955。单纯降低阈值会找回小鸟,也会快速放大水面、飞虫和自然背景误报。

04

路线结论:分叉决策

如果永远只需要有无鸟,先做多尺度分类 v2;如果后面要评估对焦、姿态、鸟种或主体大小,应直接迁移到 YOLO26s Detect 单类 bird

不建议现在覆盖 Lightroom 星级。

二分类模型只回答“有没有鸟”,星级通常表示照片质量和选片意图。第一阶段应写入临时关键词、颜色标签或候选集合,在旁路对照中审核漏检,不让模型直接决定删片。

官方来源本地实测 派生计算 / 条件化估算风险与边界
Chapter 01 · Reproducibility

这次到底训了什么

使用的是 yolo26s-cls.pt 整图分类模型,基础权重来自 ImageNet,不是 COCO 检测权重。它每张图只输出一个类别和分数,不产生鸟框。

Source七月 JPG 原图全分辨率人工判断有鸟 / 无鸟;原图只读。
Proxy768×768 等比补边EXIF 转正,灰色 114 补边,不拉伸。
Split60 / 20 / 20按拍摄日期隔离,不做逐图随机切分。
TrainYOLO26s-cls · 320ImageNet 权重,AdamW,batch 8,冻结前 8 层。
Threshold仅用 val 选 0.5先保证验证集鸟召回,再最大化特异度。
Test一次测试 + 原图 Demo记录混淆矩阵、逐图分数、权重和环境哈希。

模型与环境 本地实测

项目实际值
机器MacBook Pro · Apple M5 · 10 核 · 32 GB
训练后端PyTorch 2.13.0 · MPS
Ultralytics8.4.100 锁定实测版本
基础模型yolo26s-cls.pt · ImageNet 预训练
微调后参数5,445,570(未融合)
最佳权重11,024,386 bytes · 约 10.51 MiB

训练配方 已执行

配置实际值
输入 / batchimgsz=320 · batch=8
优化器AdamW · lr0=3e-4 · weight_decay=5e-4
迁移策略freeze=8 · dropout 0.2
轻增强水平翻转 0.5;HSV 0.005 / 0.15 / 0.15;裁切面积 90%–100%
停止规则请求 25 epoch;patience=7;实际 9 epoch
耗时1 epoch 烟雾测试 4.3 s;正式墙钟 14.6 s

数据拆分和完整性

哈希和 EXIF 重算通过
集合无鸟拍摄日期作用
Train303007-03 / 04 / 05 / 06 / 08优化模型参数。
Validation101007-07选阈值和 checkpoint;不报最终精度。
Test101007-09阈值冻结后的一次性评估。

100 / 100

源路径、源 SHA-256 与代理图哈希全部唯一且可重算。

0 跨集泄漏

没有拍摄日期跨 split;跨集 dHash 距离 ≤ 4 的近重复对为 0。

4,001 张现有 JPG

2026-07-03 至 07-09 当前盘点共 4,001 张;本次 100 张只占 2.5%,其余未进入这次标注。

Chapter 02 · Evidence

85% 的信息量,不在数字本身

最有价值的证据是“错在哪里”和“验证分布是否覆盖了测试分布”。本次测试发现了一个明显的验证—测试分布缺口。

测试集混淆矩阵:无鸟判对 8、误报 2,鸟片判对 9、漏检 1
测试混淆矩阵。 阈值 0.5 下,TP=9、FN=1、TN=8、FP=2。

测试指标 n=20

8无鸟判对
2无鸟误报
1鸟片漏检
9鸟片判对
指标解读
Accuracy85.0%平衡测试集的总体正确率。
鸟召回率90.0%10 张鸟片漏 1 张。
无鸟特异度80.0%10 张无鸟图误报 2 张。
Precision / F181.8% / 85.7%该 precision 依赖当前 50 / 50 基准率。
ROC-AUC / AP0.860 / 0.816样本太少,仅作探索性排序指标。

训练很快,验证集却太容易

9 epoch 早停
YOLO26s 分类模型 9 个 epoch 的训练损失、验证损失和验证准确率曲线
训练曲线。 最高验证 Top-1 从第 2 轮已达 100%,后续在 95%–100% 摇动。Top-5 在二分类中没有识别意义。

验证与测试的分数范围

数据类别minmedianmax
Validationbird0.6050.7780.985
no_bird0.0130.0470.457
Testbird0.1360.8680.960
no_bird0.0110.1690.955

验证集在 0.5 两边完全分开,所以阈值 0.5 看起来很稳。测试集出现了两个相反方向的高风险样本,说明 val 没有覆盖真实部署难度。

阈值敏感性

测试值只做事后诊断,不反过来调参
阈值Validation · 20 张Test · 20 张含义
召回特异度平衡准确率召回特异度平衡准确率
0.15100%80%90%90%50%70%降阈值未找回那张 0.136 的鸟,却已放大 5 个误报。
0.25100%90%95%90%60%75%看似更“保守不漏鸟”,但没有解决小鸟且无鸟工作量上升。
0.50100%100%100%90%80%85%按预先规则从 val 选出;仍需在大型新验证集重新冻结。
0.7560%100%80%80%80%80%提高阈值不会消除高置信的飞虫和水面误报。
关键读法:

这个模型的当前价值是排序和挖样本,不是把 p_bird 解释成“真实概率”。现代神经网络常存在置信度失准,需在足够大且代表部署分布的验证集上做温度缩放或等价校准。 校准方法的一手论文

Chapter 03 · Failure analysis

三个错误,对应三种不同缺口

这三张图不是“时好时坏”的随机噪声。它们分别揭示了小目标表示、语义假目标和背景捷径问题,对后续数据设计具有直接指导价值。

阴天山坡与天空中一只远距离飞行的鸟
TRUE bird · p_bird=0.136

漏检:远鸟 + 低对比天空

整幅照片压到 320×320 后,鸟只占少量像素;分类损失只要输出整图类别,没有损失项强迫模型保留鸟的几何位置。

黄花、青草和岩石中的一只蝴蝶,画面里没有鸟
TRUE no_bird · p_bird=0.955

误报:蝴蝶是语义假目标

蝴蝶同样具有两侧翼、小主体和自然背景,但训练集缺少足够的昆虫负样本。0.955 的高分说明它不只是阈值边缘样本。

绿色水面和大量白色反光,画面里没有鸟
TRUE no_bird · p_bird=0.756

误报:水面纹理与场景捷径

鸟片训练样本中有许多水鸟和绿色水面。模型可能学到“这种水面经常有鸟”,或把反光小块当成远处主体。

从失败类型到下一步行动

错误驱动数据
失败最可能根因第一优先修复不建议验证分片
远距离小鸟漏检320 输入丢失像素;整图分类没有框监督512 / 640 全图 + 2×2 或 3×3 tiles;并行建立 Detect 基线只把阈值从 0.5 降到 0.1tiny bird、阴天、逆光、远空
蝴蝶误报翼展形态接近;昆虫负样本缺失收集飞虫 / 蝴蝶 / 飞机等高分误报,作 hard negatives随机再加大量人像或城市无鸟图insect、aircraft、leaf、speck
水面误报背景与鸟标签的偶然共现;反光局部纹理在同地点采“有鸟水面 / 无鸟水面”成对负样本只做更强颜色增强water、reflection、grass、branch
一条有用的简化原则:

只要新增数据不能直接改善“小鸟、飞虫、水面”中的某一个错误分片,它就不是当前最优先的数据。两轮模型驱动的 hard-negative mining,通常比不加选择地多收几千张更快改变决策边界。

Chapter 04 · Statistical limits

为什么平衡小测试集的 85%,不等于实际工作量

Accuracy、precision 和看起来很高的置信度都依赖数据怎样被选出。当部署中鸟片比例与 50 / 50 测试集不同时,人工要审的误报数会明显变化。

样本量风险

Accuracy 85% 的 95% Wilson 区间是 64.0%–94.8%;鸟召回为 59.6%–98.2%;特异度为 49.0%–94.3%。这些区间宽到无法做上线承诺。

选样风险

val 和 test 分别只来自一个日期的人工精选子集,不是当日全量目录;07-09 还在早期实验中被看过,不是封存盲测。

相关性风险

日期隔离好于逐图随机切分,但同日仍共享天气、地点、鸟群和背景。单一日期的 20 张图不能表示新地点或新季节。

实际鸟片比例改变后,每 1,000 张会发生什么

示意计算:固定召回 90%、特异度 80%
实际鸟片占比真鸟找到鸟片漏掉无鸟判对无鸟误报候选集中真的有鸟解读
5%45576019019.1%人工审 235 张候选,只有 45 张真鸟。
10%901072018033.3%候选里每 1 张真鸟对应约 2 张误报。
30%2703056014065.9%工作量开始接近可用,但仍漏掉 30 张鸟片。
50%4505040010081.8%与当前平衡测试集的 precision 一致。

这个表不是对 4,001 张库的实际预测,而是说明基准率如何改变人工审核量。类别不平衡时,Precision–Recall 比单看 ROC 更能反映候选集质量,见 Saito & Rehmsmeier, 2015

最大的不可识别项:真实基准率还没有测量。

本次为了训练方便人工做成了 50 / 50,并不知道一个完整拍摄日、一整库照片或“只导入拍鸟连拍”时的有鸟占比。下一版评估必须保留部署中的自然比例,不能再人为配平。

Chapter 05 · Architecture decision

先确定产品输出,再选“分类”还是“检测”

Ultralytics 官方把 Classify 定义为整图单标签任务;只在不关心对象位置时使用。如果下游需要框内对焦、姿态和鸟种,定位不是附加功能,而是主线监督信号。

路线原生输出解决当前哪个错误成本上限与风险决策
当前 YOLO26s-cls整图 bird / no_bird已证明能学到本地鸟片分布实测 14.6 s / 60 train / 9 epoch无位置;小鸟压缩;背景捷径保留为基线 / 挖样器
多尺度分类 v2全图 + tiles 分数汇总对远鸟和边缘鸟更友好512 的像素量约是 320 的 2.56×;tiles 按块数增加推理只能给粗网格;多 tile 会放大假阳性只需 presence 时的快速 v2
YOLO26s Detect 单类 bird0…N 个框 + 置信度保留小鸟位置;为框后质量评分提供 ROI3,000 图 / 640 / 50 epoch 本机约 5–10 h需标注所有鸟框;小鸟可再用 960 / tiles需位置或质量时的推荐主线
Detect + 框后分类器低阈值鸟框 → 二次 bird / no_bird对飞虫、树叶、反光做专门复核比单检测器多一个 5M 级轻分类器流水线更复杂,但数据可从误报中自然累积生产精度与可解释性最好

只需“有没有鸟”

先保留当前分类器,将输入升到 512,同时运行全图和 2×2 tiles,用 max / top-k / MIL 汇总。用大量自然无鸟图约束 tile 假阳性。

后面要对焦、姿态、鸟种

直接标一类 bird 框微调 YOLO26s Detect。图像级 presence = 至少一个通过阈值的鸟框;每个框再送入清晰度、鸟种和姿态模型。

OSEA / BioCLIP 的位置

它们的强项是框后的鸟种语义,不是针对本地长焦照片优化的前端定位。正确组合是“本地 bird detector → 鸟 crop → OSEA / BioCLIP”。

关于输入裁切。

Ultralytics 官方文档特别提醒,分类任务默认的 RandomResizedCrop / CenterCrop 可能把极端宽高比图像的关键区域裁掉。本 PoC 通过先补边到方形保留了验证/推理的整图,训练时仍使用 90%–100% 面积的轻微随机裁切。边缘半鸟仍需单独压力测试。 Ultralytics Classify 文档

Chapter 06 · Data strategy

用现有 3,901 张未入选照片,建立第一轮主动学习

现有 4,001 张 JPG 中,只有 100 张进入本次真值集。下一步不应随机继续抽 100 张,而应让当前模型帮助找出最能改变边界的样本。

A

高分无鸟

在未标注照片中找 p_bird 最高但人工确认无鸟的图,重点标注飞虫、飞机、树叶、反光、石块和小黑点。

B

低分真鸟

找人工或旧标签确认有鸟,但模型给低分的图:远鸟、阴天、逆光、半鸟、模糊鸟和多鸟。

C

阈值附近与新场景

在 0.3–0.7 附近抽样,同时强制加入新天气、新背景和新日期,避免所有新数据都来自模型已经熟悉的局部分布。

分层数据目标

目标是快速闭环,不是一次性全标
数据层建议规模标注用途人工优先级
封存部署测试集800–1,000 张按自然基准率逐图 presence;不使用模型提示最终阈值和上线决策;必须按新日期/地点隔离P0
presence v2 训练集2,000–3,000 张bird / no_bird / ignore;困难负样本过采样320 / 512 / tiles 分类受控对比P0
bird detector 框2,000–3,000 张正图 + 1,000–2,000 空图有鸟图必须标全所有可见鸟;空图明确无鸟YOLO26s Detect 640 基线和 960 小鸟对照P0(需位置时)
质量失败标签800–1,500 张defocus / motion blur / occlusion / truncated / low-resolution 分开后续对焦和连拍排序模型P1
Open Images 补充各 5k–15k 抽样仅使用 human-verified Bird 正/负和完整框扩背景和明确负样本;本地数据仍是决策域P2

统一 presence 标签协议

至少有一只可辨认鸟(即使虚焦 / 半鸟) → bird_present = 1
全分辨率确认没有鸟                     → bird_present = 0
只有极小黑点,人也无法确认             → ignore
同一连拍 / 原图 / 增强版本                   → 必须在同一 split

“拍坏的鸟片”同时是 bird_present=1quality_failed=1,绝不能因为虚焦就改成 no_bird。

增强只补真实缺口

  • 分类 v2:水平翻转、轻色彩、保存整图的缩放;经过框 / mask 控制的半鸟和小鸟。
  • 模糊增强:分开离焦、方向性运动模糊和低分辨率;保留 bird 正标签。
  • 检测 v1:Mosaic 仅在早期低比例使用;最后 10%–20% epoch 关闭。
  • 测试集只用原图,不放任何合成 blur、crop 或 Copy-Paste。
公开数据中最适合下一步的是 Open Images V7。

它的图像级标签区分人工确认的正标签、负标签和未标注类别;只有明确 Bird-negative 才能作可信 no_bird。官方也明确说明这些负标签可用于 hard-negative mining。 Open Images V7 官方说明

Delivery roadmap

四个阶段,每一步都要能证伪上一步

路线的目标不是尽快拿到一个更高的 Accuracy,而是用固定测试集回答:我们是缺数据、缺分辨率、缺定位监督,还是真的缺模型容量。

P0
先封存评估集 · 1–2 天

冻结 bird / no_bird / ignore 规则;从不参与训练与挖样的新日期/新地点保留 800–1,000 张。按完整拍摄日自然分布抽取,不再人工配成 50 / 50。

P1
presence v2 · 2–4 天

利用当前模型跑现有未入选图,做第一轮高分无鸟 / 低分真鸟标注。在完全相同的 test 上比 320 全图、512 全图和全图 + 2×2 tiles;不同时改三个变量。

P2
bird detector · 1–2 周

如果 P1 仍在小鸟 / 边缘鸟分片达不到门槛,标 2,000–3,000 张有鸟图的全部鸟框,并加 1,000–2,000 张空图。先跑 YOLO26s Detect 640,再只对小鸟分片试 960 / tiles。

P3
框后质量和鸟种 · 1–2 周

将检测框外扩 10%–20%,对鸟头/鸟体计算对焦、运动模糊、姿态和构图;物种识别再交给 OSEA / BioCLIP。连拍优先做组内排序,不急于给不相关照片一个绝对分。

P4
Lightroom 旁路上线 · 至少 2 个拍摄批次

先只写临时关键词 / 集合,记录人工改判。通过两个完整新批次后,再决定是否映射到颜色标签或星级。任何“自动删片”都必须使用更高的召回验收门槛。

资源与人力估算

以本机 14.6 s PoC 和已有 M5 基准条件化外推
工作规模当前 M5 计算时间人工时间最大不确定性
presence v2 · 3202,000–3,000 图 · 20–30 epoch约 0.5–1.5 h逐图标签约 4–8 h,含可疑黑点复核数据解码、冻结层数、早停
presence v2 · 512同上约 1–3 h不增加基础标签像素量 2.56×,batch 可能下降
全图 + 2×2 tiles每图 5 个视图约 2–6 h需额外审核 tile 误报分数汇总规则和误报放大
YOLO26s Detect · 6403,000 图 · 50 epoch约 5–10 h2,000 图全框约 8–25 h每图鸟数、框标速度、MPS 热状态
YOLO26s Detect · 960 精修10–20 epoch额外约 5–14 h复用框标batch 下降与小鸟是否真受益
这些时间是规划值,不是交付承诺。

分类估算由当前 60 张训练图、9 epoch、320 的 14.6 s 实测按图片数、epoch 和像素量放大,再加固定开销与余量。检测估算来自当前 M5 的已有图像训练基准外推。一次 100–200 张 smoke test 应先于任何全量训练。

Acceptance gates

只有达到可作废的门槛,才让它影响 Lightroom

验收指标应围绕用户实际损失设计:漏掉一张好鸟片的代价,通常高于多看几张误报。因此筛片模式优先鸟召回,评分模式才追求更精细的排名。

1

盲测集足够大

至少 1,000 张自然分布照片,其中建议至少 300 张鸟片;日期、地点、连拍组与训练隔离。

2

以漏鸟为核心门槛

建议探索目标:总鸟召回 ≥98%;tiny / blur / edge 各分片 ≥95%;无鸟误报率 ≤5%–10%。最终值应根据人工审核容量和漏片损失确定。

3

报告必须按失败分片

除总体 recall / specificity / PR-AUC 外,单独报小鸟、真实失焦、运动模糊、边缘半鸟、多鸟、水面、飞虫和树枝。

4

阈值只在验证集选

根据“最大允许漏检”选阈值,然后冻结。测试集只用于一次性报告,不凭测试错误反调到最佳数字。

5

分数需校准,星级需独立语义

p_bird 用大型验证集画校准曲线;星级另用对焦、运动模糊、姿态、主体大小和连拍排序训练,不把“有鸟概率”直接写成质量星级。

6

两个完整批次的 shadow mode

让 AI 结果与人工选片并排,记录所有漏检和高分误报。只有新拍摄批次也通过,才将写回从临时关键词升级到颜色标签或星级。

建议的最终流水线。
原始照片
  → 低阈值 bird detector(优先召回)
  → 候选鸟框复核器(压飞虫 / 反光 / 树叶)
  → 框内对焦 / 运动模糊 / 姿态 / 主体占比
  → 框内 OSEA / BioCLIP 鸟种语义
  → 连拍组内排序
  → Lightroom 临时集合,人工验证后再写星级
Primary sources & audit

来源、证据口径与去重决策

官方模型表和任务边界取自 2026-07-20 查阅的一手文档;耗时、数据和结果取自本地完整执行产物。估算与测量在正文中已分开标记。

本地审计范围 2026-07-20

  • 100 张人工全分辨率复核的选择清单、标签 CSV、切分规则与代理图 manifest。
  • 源图 / 代理图 SHA-256、拍摄日期、跨 split dHash 近重复审计。
  • 已执行 Notebook 25 个单元,其中 15 个代码单元全部成功,无 Traceback。
  • 训练参数、9 epoch 结果、验证 / 测试逐图预测、模型 manifest 与最佳权重 SHA-256。
  • 权重重加载后对 20 张测试图重算,与保存概率的最大差异为 4.98×10−9
  • 原始 Lightroom 照片只读;本次没有修改原图、星级或其他元数据。
去重结论。

旧 HTML 是面向学习和复现的已执行 Notebook;新版是面向项目决策的独立复盘,对相同实验增加了分布迁移、基准率、失败机制、数据投资、架构分叉和验收门槛。Stillframe 线上目录查询未找到同题报告,所以新版具有独立价值。