训练链路已跑通
最终模型在全量验证集上取得 Precision 0.949、Recall 0.902、mAP50 0.963 与 mAP50–95 0.699。这是一套可复现的一类鸟检测基线。
本机完整训练 · Apple M5 / MPS · 2026-08-07
GBDD1433-2023、IBERBIRDS、NABirds 与 Big Bird 被统一为单类鸟检测任务;在事件级划分和感知哈希去泄漏之后,先覆盖全量数据,再做域平衡精调,并逐域检验结果。
总分只回答“这套混合验证集上表现如何”。是否适合项目,要看分域结果、真实无反样本和失败样例。
最终模型在全量验证集上取得 Precision 0.949、Recall 0.902、mAP50 0.963 与 mAP50–95 0.699。这是一套可复现的一类鸟检测基线。
分域 mAP50–95 最强为 GBDD 测试 0.767,最弱为 Big Bird 测试 0.424。差距说明采摄视角和目标尺度不能被一个汇总指标抹平。
公开集主要是低分辨率网络图、北美长焦图、飞鸟截图和无人机俯拍。进入项目部署前,仍需用项目自己的无反原图按连拍事件建立独立测试集并微调。
把本次 best.pt 作为“公共数据预训练基线”,而不是最终生产模型。优先补 2,000–5,000 张现代无反目标域图片,至少覆盖枝头、飞行、逆光、遮挡、远距离小目标与空景;按拍摄事件切分后再决定是否升级到 P2 小目标头或更大模型。
这里的数量来自实际可解析文件和最终划分,不沿用压缩包条目数或原始 JSON 的重复记录。
| 数据集 / 年份 | 实际进入统一集 | 最终框数 | 原始标定 | 鸟种丰富度 | 拍摄特点 / 训练角色 |
|---|---|---|---|---|---|
| GBDD1433-2023 2023 | 140,159 图 | 142,594 | COCO [x,y,w,h];清洗后折叠为 bird | 实包 1,432 类目录 | 网络来源广、主体通常大,但像素很低;承担覆盖阶段主样本 |
| IBERBIRDS 2025 | 4,000 图 | 4,000 | 每图 1 个 YOLO 框 | 10 种 × 400 图 | 中远距离单只飞鸟;按 eBird checklist 分组,补充飞行域 |
| NABirds 2015 | 48,562 图 | 48,562 | 每图 1 框;另有 11 部位点 | 555 视觉类,约 404 物种 | 长焦主体大、背景虚化常见;按 1,031 个摄影者分组 |
| Big Bird 版本 2026-03 | 11,976 个 1024 切片 来自 4,824 张航拍原图 | 80,842 | COCO 框,部分目标另有 polygon | 101 个命名物种 + 通用 bird | 无人机俯拍、密集小目标和空图;用于小目标与难负样本 |
原 JSON 含 140,393 个唯一图像 ID。最终落盘 140,159 图;缺失 231 图,裁剪 472 个越界框,丢弃 3 个无效框。
原图中只有 1,615 张含目标。使用 1024 px、20% 重叠切片,保留 10,524 个正样本与 1,452 个负样本,避免把 12 MP 原图整体压到 960 后让鸟退化成点。
全部转为 YOLO 单类 class cx cy w h。最终 train / val / test 为 165,329 / 20,763 / 18,605,共 275,998 个框;来源和组 ID 仍保留在 manifest 中用于审计。
随机按单图切分会把网络转载图、连拍近似图和同一观察事件分散到训练与测试,形成虚高分数。
对非 Big Bird 原始图做 pHash64 审计,汉明距离阈值 ≤ 4,解码失败 0 张。
共涉及 33,841 张重复或近重复图,其中 348 个簇跨数据源。
审计前同时出现在多个 split,会直接污染泛化评估。
重分配 11,581 条记录后,组级 train / val / test 重叠归零,最终校验通过。
Big Bird 没有纳入全分辨率 pHash:它已经按航次代理组划分,且超大无人机原图做近邻搜索代价高、跨公开鸟图库重复概率低。这是明确记录的工程折中,不代表 Big Bird 完全不存在近重复。
参数不是从默认表里随意抄取,而是由目标尺寸、数据构成和 Apple MPS 实测共同约束。
| 参数 | 最终设置 | 依据 |
|---|---|---|
| 模型 | YOLO26s,COCO 预训练 | 约 9.5M 融合参数、20.7 GFLOPs;比 n 有更充足的小目标表征,又能在 32 GB M5 上维持 batch 8 |
| 输入 / batch | 960 / 8 | 1024 Big Bird 切片只做少量缩放;batch 8 烟雾测试起始约 10.6 GB,正式覆盖 / 均衡阶段观测峰值分别为 16.6 / 19.5 GB MPS 内存 |
| 优化器 | AdamW,lr0=0.0003 | 覆盖阶段从 0.001 起;平衡精调使用 0.0003,避免在缩小且重采样的数据上快速遗忘 |
| 学习率 | cosine,lrf=0.01,warmup=0.24 epoch | 8 epoch 短精调需要平滑退火;warmup 按总 epoch 的 3% 设置并设下限 |
| 几何增强 | mosaic 0.3,mixup 0.05,scale 0.35,rotate ±10° | 覆盖阶段原用 mosaic 0.5;观察到 251 实例 batch 后,平衡精调降至 0.3,以保留小目标组合同时降低密集航拍切片叠加的内存尾部风险;相机照片不使用垂直翻转 |
| 多尺度 / 精度 | 固定 960;MPS AMP 关闭 | 动态 800–1216 实测出现 MPS 内存持续增长至约 29.7 GB,故停掉失败试跑并锁定尺寸;MPS 路径不启用 AMP |
| 可复现性 | seed 0,deterministic,cache off | 固定划分和增强随机源;不缓存 20 万张图,减少统一内存压力 |
| 环境 | Apple M5 / 10 核 GPU;MPS PyTorch 2.13.0 · Ultralytics 8.4.115 | 本表与墙钟只描述本机运行;MPS 与 CUDA 的混合精度、吞吐和显存行为不可直接互推 |
最初启用 multi_scale=0.25,输入在 800–1216 间变化;MPS 内存上升到约 29.7 GB,因而在第 10 batch 后主动终止。最终配置仍保留 scale=0.35 的图像内容缩放增强,但输入张量固定为 960×960。两者不是同一个参数。
所有指标使用同一最终 best.pt、960 输入和 batch 8。Precision / Recall / mAP 均为 Ultralytics 单类检测验证输出。
| 评估集 | 图像 / 切片 | Precision | Recall | mAP50 | mAP50–95 | 推理 |
|---|---|---|---|---|---|---|
| 全量验证 | 20,763 | 0.949 | 0.902 | 0.963 | 0.699 | 13.2 ms |
| GBDD 测试 | 13,834 | 0.975 | 0.962 | 0.991 | 0.767 | 13.0 ms |
| IBERBIRDS 测试 | 292 | 0.960 | 0.918 | 0.984 | 0.757 | 15.2 ms |
| NABirds 测试 | 3,249 | 0.973 | 0.957 | 0.985 | 0.715 | 13.6 ms |
| Big Bird 测试 | 1,230 | 0.812 | 0.703 | 0.792 | 0.424 | 18.5 ms |
全量 1 epoch 结束时,开发验证集 mAP50–95 为 0.422。它的作用是把四域的长尾视觉模式先写入权重,不追求完全收敛。
8 epoch 中最佳开发验证 mAP50–95 出现在第 7 epoch,为 0.583。最终报告与分域评估使用训练器保存的 best.pt。
全流程共 19.8 小时,包含覆盖训练、平衡精调与五次验证。墙钟是这台 10 核 GPU 的 Apple M5 / 32 GB 统一内存本机实测,不可直接外推到 CUDA。
mAP50 更接近“鸟有没有被大致框住”,mAP50–95 同时惩罚框的位置与大小偏差。现代无反鸟片常见大主体,对框精度要求更高;部署判断应优先看 mAP50–95、Recall 以及目标域漏检样例。
这是 bird / non-bird 定位器,不是鸟种分类器;公开数据成绩不等于真实相机域成绩。
GBDD 中位像素约 0.05 MP;IBERBIRDS 与 NABirds 多数最长边约 1024;Big Bird 是俯拍。现代无反原图的高频羽毛细节、机内锐化、长焦景深和连拍序列都没有被充分覆盖。
四套数据的“框”来源不同:单体长焦框、飞鸟框、通用鸟框和密集航拍框混在同一类。模型会学到 bird 的共同外观,但不保证各物种、幼鸟、剪影和极端姿态公平。
适合作为图库预筛、裁鸟候选框或下一轮主动学习的起点。高风险生态调查、数量统计或稀有物种结论,必须由目标域标注和人工复核支撑。
| 下一轮实验 | 触发条件 | 建议设置 | 成功标准 |
|---|---|---|---|
| 无反域适配 | 一律优先 | 2k–5k 项目图片;按连拍事件 split;lr0 1e-4;30–50 epoch;冻结 0–5 epoch 仅作对照 | 独立目标域 mAP50–95 与 Recall 明显提升,且不同机身/镜头差距缩小 |
| P2 小目标头 | 目标域短边经常 <32 px | 对比 yolo26s-p2.yaml;保持相同数据与预算 | 小目标 AP / Recall 提升足以抵消延迟与显存增加 |
| 输入 1280 | 部署算力允许且远鸟漏检 | batch 2–4、固定尺寸;不在 MPS 上启用动态多尺度 | 目标域增益稳定,端侧延迟仍满足产品约束 |
| 检测 + 分类两阶段 | 需要物种名 | 检测框裁切后,用 NABirds / GBDD taxonomy 训练独立分类器 | 检测 Recall 与物种 top-k 分开验收,避免背景捷径 |
脚本、清单、运行状态与权重均保存在本地训练工程;公开报告不嵌入绝对路径或凭据。
prepare_dataset.py 生成统一 manifest、YOLO 标签与组划分;audit_phash_splits.py 发现近重复并把同簇重新归并。
make_local_curriculum.py 生成 coverage / balanced 清单;run_local_curriculum.py 顺序完成两阶段训练并持续写状态文件。
evaluate_domains.py 产生机器可读 JSON;本页由该 JSON、训练 CSV 与清洗审计 JSON 自动生成,减少手抄数字。
Ultralytics 在扫描阶段发现少量截断 JPEG,并执行“恢复后保存”。因此本次训练证据记录的是实际可读后的文件状态;若需要字节级复现,应从原始归档重新解包并在只读副本上训练。
数据规模与年份来自项目页或论文;“进入统一集”“去泄漏”“墙钟”和所有分域指标来自本机文件审计与本次运行。