主模型用 Pose,不再另跑 Detect
YOLO26-Pose 原生返回每个实例的 boxes 与 keypoints。把类别改为唯一的 bird,它就同时承担有无鸟、框定和关键点定位;背景不是第二个检测类别。
System architecture & training roadmap · 2026-07-21
以 YOLO26s-Pose 单类鸟模型作为几何中枢:一次推理同时回答“有没有鸟、鸟在哪里、眼睛/喙/羽毛部位在哪里”;清晰度、姿态偏好和鸟种识别分别作为可独立训练、替换和校准的下游模块。
检测、关键点、清晰度、姿态偏好和物种识别的数据标签与误差来源不同。长期可维护的方案是共享几何结果,不强行共享所有网络和损失。
YOLO26-Pose 原生返回每个实例的 boxes 与 keypoints。把类别改为唯一的 bird,它就同时承担有无鸟、框定和关键点定位;背景不是第二个检测类别。
先使用官方 P3/8–P5/32 的 Pose26 结构,设置 nc=1、kpt_shape=[15,3]。在固定测试集证明小鸟仍是主要瓶颈后,再试 1024/1280、切片推理或 P2/4 分支。
YOLO 提供眼睛、喙、翼、背、胸、尾等 ROI 坐标和可见度;小型质量网络评价眼部/羽毛锐利程度,MLP 学习姿态偏好。关键点数量只是特征,不能直接等于照片质量。
“检测到的关键点少”可能来自鸟很小、严重模糊、遮挡、正面/背面视角或模型失败。若把关键点数量作为“有无鸟”的门槛,会把最需要保留审核的困难鸟片误删。Presence 由鸟框置信度和独立阈值决定;关键点只参与可评价性与质量评分。
系统处理单位应从“整张图一个分数”升级为“图片 → 鸟实例 → 部位 ROI → 多维评分”。多鸟照片保留每只鸟的结果,再由相机对焦点和主体策略选主鸟。
RAW AF 点命中框 → 用户指定框 → 面积与中心性联合评分 → 最高检测置信度。不能只取最高置信度,因为枯叶等误检可能比真鸟更高;也不能永远取最大框,多鸟环境下摄影师目标可能是远处小鸟。
每个实例保存稳定的 bird_id、框、15 点、检测分、ROI 清晰度、姿态分和物种 Top-k。图片级分数保存聚合规则和主鸟 ID,避免日后无法解释“为什么这张图得到 2 星”。
若羽毛 ROI 经常混入树枝或水面,可增加轻量鸟 mask;但 Ultralytics 当前没有开箱即用的 Pose+Seg 联合任务。首版先用关键点构造多边形/圆形 ROI,确认背景污染确实限制清晰度指标后,再决定独立分割器或自定义联合头。
Pose26 继承检测头,并为每个 P3/P4/P5 特征层增加关键点特征塔、坐标/可见度输出和训练期 sigma/RLE 分支。官方结果对象天然把框与同一实例的关键点配对。
| 候选 | 训练结构规模 | 得到什么 | 本项目判断 |
|---|---|---|---|
| YOLO26s Detect | 本机 YAML:10.01M 参数、22.8 GFLOPs@640 | 框、单类置信度;无关键点 | 作为阶段 A 的框预训练器和对照,不是最终唯一模型。 |
| YOLO26s Pose26 | 本机 YAML:11.87M 参数、29.6 GFLOPs@640 | 框 + 单类置信度 + 15×(x,y,visibility) | 推荐主线 一次推理覆盖四项 YOLO 需求。 |
| YOLO26s-P2 Pose | 官方只提供 P2 Detect 架构;自定义 Pose 规模需实测 | 增加 P2/4 小目标特征层 | 条件升级 只有固定集证明普通高分辨率仍漏小鸟时再做。 |
| Pose + Seg 联合头 | 需自定义任务、loss、trainer、导出与回归 | 框 + 点 + mask | 后期研究 标签和工程成本显著增加。 |
官方“融合模型”统计为 YOLO26s Detect 9.5M/20.7B、Pose 10.4M/23.9B;上表使用本机 8.4.100 训练架构数,保留 one-to-many 辅助头,因此更大。两种口径不能直接混用。官方文档同时说明默认 one-to-one 头可无 NMS 推理,one-to-many 头通常以少量速度换更高精度;离线选片应两种都在本地固定集比较。
names:
0: bird
kpt_shape: [15, 3] # x, y, visibility
flip_idx: [0, 1, 2, 3, 4, 5, 10, 11, 12, 9, 6, 7, 8, 13, 14]
kpt_names:
0: [back, beak, belly, breast, crown, forehead,
left_eye, left_leg, left_wing, nape,
right_eye, right_leg, right_wing, tail, throat]
bird 是唯一前景类。树枝、昆虫、飞机、猫狗和人都是背景/hard negative,不要给它们建立“non-bird 框”;否则模型要学一个视觉上无边界的超级类别。
左/右眼、腿、翼按解剖侧定义;翻转时必须用 flip_idx 互换。垂直翻转和大角度旋转默认关闭,避免制造不自然鸟姿。
2 表示直接可见,1 表示遮挡但位置可推断,0 表示不可定位/未标注。CUB 的 visible=1 映射为 2,visible=0 映射为 0。
只改 nc 和 kpt_shape。本机干运行验证:把当前 YOLO26s Detect 权重装入 stock Pose 架构可迁移 708/879 个 state items;自定义 15 点模型仍须记录实际迁移清单。
先比较 1024、1280,以及只对“未检出/AF 点附近”执行 2×2 重叠切片。它比立刻改骨干更容易回滚,也能直接验证小鸟像素不足是不是主因。
若同一数据和阈值下 P2 显著提升 tiny-bird recall,再保留自定义 YAML。P2 会增加高分辨率特征图、显存和训练时间,且没有官方 Pose 预训练权重。
只有需要混合“有框但未标点”的正样本,或眼/喙误差长期主导下游失败时,才扩展 PoseLoss26:增加实例级 pose_supervised mask 与可审计的 part weights。
公开集负责“会看见鸟和部位”,七月及未来本地照片负责“在你的相机、镜头、距离、背景和失败模式上不犯错”。必须按拍摄日期、地点和连拍组隔离,不能逐图随机切分。
| 资产 | 当前规模 | 可用于 | 关键限制 |
|---|---|---|---|
| 七月照片 | 4,696 张 | 目标域 detection / pose / focus / end-to-end test | 旧流水线得到 1,366 done、3,330 no_box,但这不是人工真值;必须重标。 |
| 100 张二分类 PoC | 50 bird / 50 no-bird | 验证环境与数据管线 | 测试仅 20 张,出现蝴蝶、水面误报和远鸟漏检;不应作为发布指标。 |
| COCO bird train | 3,237 图 / 10,542 框 | Detect 框预训练 | 没有鸟类关键点;不能直接伪装成 Pose 不可见点。 |
| CUB-200-2011 | 11,788 图 / 15 点 / 每图 1 框 | Pose 启动、部位与可见度 | 大主体、单鸟、偏中心;保留官方 5,794 test,不把全部数据吃进训练。 |
| 困难负对象 v1 | 8,491 张 / 2.4 GB | 树枝环境、飞机风筝、动物、人、昆虫/蜘蛛误报抑制 | 全部为空标签;应采样混入,不要压过鸟正样本。 |
| Animal Kingdom Pose | 33K 姿态帧;约 8,524 鸟帧 / 23 点 | 复杂环境鸟姿态辅助预训练 | 23 点拓扑与 CUB 不同;官方 pose 包约 2.3 GB,但使用/再发布前需复核许可与映射。 |
标准 Pose loss 把 visibility=0 理解为“该点不存在/不可见”,不是“我没有标”。因此 COCO 这类只有框的鸟正样本若填 15 组零,会训练关键点可见度头把所有点压成不可见。首版采用 Detect→Pose 两段式迁移;后期若必须联合训练,增加独立的 pose_supervised mask,整实例跳过坐标与可见度损失。
| 增强 | 建议 | 标注规则 | 风险 |
|---|---|---|---|
| 水平翻转 | 约 0.5 | 使用固定 flip_idx 交换左右眼/腿/翼 | 忘记换左右点会直接制造错误监督。 |
| 尺度/平移/边缘裁切 | 重点补鸟框占画面 0.02%–2% | 同步裁框;被裁掉的点 visibility=0 | 鸟完全裁掉后,不能仍保留正标签。 |
| 轻微旋转 | 约 ±8°–12° | 坐标仿射变换 | 大角度与透视会扭曲自然姿态。 |
| 遮挡 | 真实枝叶/芦苇 10%–40% | 可推断点 v=1,不可定位点 v=0 | 矩形 Cutout 容易生成不真实边缘。 |
| 离焦/运动模糊 | 轻中重分层,保留原图版本 | 框保持;点只在仍可定位时保留 | 不能用同一种 Gaussian blur 代表全部失败。 |
| Mosaic | Detect 早期低到中频;Pose 更低频 | 所有实例、框和点同步拼接 | 末 10%–20% epoch 关闭;质量网络不用。 |
不从零训练。先让单类 Detect 用尽框数据和负样本,再迁移至 15 点 Pose;每次只改变一个变量,固定数据清单、随机种子、模型哈希和阈值选择集。
定义 15 点、可见度、截断、多鸟、主鸟和“严重模糊但仍有鸟”的标注规则;封存 ≥1,000 张目标域测试图。建立每鸟实例 JSON/Parquet schema 和 Lightroom 影子输出,不覆盖星级。
从当前 yolo26s.pt 开始,输入先 768 再 1024;使用本地框、COCO bird、CUB train 框和 8,491 负样本。约 50–80 epoch,先比较 one-to-one 与 one-to-many 推理头。目标是建立高召回框基线和 hard-negative mining 工具。
构建 yolo26s-pose,设置 nc=1、15 点,从阶段 A 权重加载可匹配层;用 CUB 官方 train 与一小部分负样本训练 80–120 epoch。此阶段只证明“框 + 15 点”链路,不把 CUB 高分当真实拍鸟上线证据。
模型预标本地鸟框与点,人修正后微调;每轮在未标照片上跑低阈值推理,分别收集高置信误报、低置信真鸟、眼/喙偏移和多鸟错配,每轮新增约 300–800 个高价值实例。
在完全相同数据上依次比较 1024、1280、AF 条件切片、P2 Pose。只有 tiny-bird recall 的置信区间稳定提升且总体 FPR 不恶化,才接受 P2 的训练/部署成本。
冻结一个 Pose 版本,把坐标契约作为下游输入。先做可解释的经典锐度基线,再训练连拍内 pairwise focus ranking;姿态 MLP 使用人工偏好,BioCLIP/OSEA 使用方形 padding 裁切与地区候选过滤。
只写旁路数据库/HTML 报告,与人工保留结果对比。至少跨新日期、新地点和新物种通过回归门槛后,才允许映射到星级;保留模型版本、阈值和每张图的理由。
| 项目 | Detect A | Pose B/C | 选择理由 |
|---|---|---|---|
| 基础模型 | yolo26s.pt | yolo26s-pose.yaml ← Detect A 权重 | S 是当前 M5 上速度/容量较合理的主线;M 用作容量上限对照。 |
| 输入尺寸 | 768 探索 → 1024 正式 | 768 探索 → 1024 正式 | 当前 COCO 实测显示小鸟召回是主要短板;避免一开始 1280 拖慢全部实验。 |
| epoch | 50–80 | 80–120 | 早停只看总 mAP 可能牺牲小鸟和眼点;用固定分片指标共同判断。 |
| batch(MPS 初值) | 1024 约 4–8 | 1024 约 2–4 | 实际以 3 epoch 峰值内存和吞吐校准;保持 32 GB 系统可用余量。 |
| 冻结策略 | 先全量微调;小数据 smoke 可短暂冻结 | 前 5–10 epoch 可冻结骨干,随后解冻 | 关键点头随机初始化,需要先稳定;长期只冻骨干会限制目标域适配。 |
| 阈值 | 只在 validation 选择,冻结后一次性测 test | 0.25 不是自然常数;presence、框展示和 species crop 可以使用不同阈值。 | |
正式给出承诺前,先在“完整训练清单”上跑 3 个 epoch,取后 2 个 epoch 中位数:T ≈ median_epoch × 目标 epoch × 1.15,额外 15% 覆盖验证、保存与热降频。不要用 100 张分类 PoC 的 14.6 秒外推检测/姿态训练。
把“模型看到了什么”和“这张图值不值得留”分开,才能单独改进误报、对焦、姿态或物种识别,而不必每次重训整套系统。
由眼/喙构造头部 ROI,由翼、背、胸、腹、尾构造羽毛 ROI;输入保持高分辨率,同时使用 ISO、快门和 ROI 像素尺寸。输出眼部锐度、羽毛细节、运动模糊、离焦、可评价性和不确定度。
输入框内归一化的 15 点坐标、可见度 mask、骨架距离/角度、鸟框面积、边缘距离、AF 命中、多鸟数和截断标志。输出姿态偏好分与姿态类型,不直接用 keypoint count 当标签。
使用主鸟框加约 10%–20% padding 的方形裁切;检测/姿态低置信时保留“不确定”,不强制输出鸟种。BioCLIP 负责开放或层级候选,OSEA 负责高效本地 Top-k,GPS/eBird 只做候选过滤。
not_judgeable,不是武断低分。presence = max(bird_box_conf) ≥ threshold_presence quick_geometry_score = f( calibrated_box_conf, subject_area_ratio, edge_truncation, keypoint_visibility_pattern, AF_point_in_box ) technical_quality = g(eye_focus, feather_focus, blur_type, exposure, judgeability) pose_quality = MLP(normalized_keypoints, masks, geometry, AF/context) final_photo_score = policy(technical_quality, pose_quality, composition) # species confidence / rarity默认作为独立元数据,不冒充技术画质
侧面鸟通常只见一只眼,飞鸟腿部常被羽毛遮住,正面鸟两翼点的定义也可能不稳定;这些不等于姿态差。MLP 必须接收 missingness mask,并用人工“是否值得保留/姿态是否有表现力”的偏好训练。关键点数量适合做快速可评价性信号,不适合作为最终真值。
报告 mAP 仍不够。替代选片软件最严重的错误是把人会保留的照片判成无鸟或低分;验收必须包含图片级、有框级、部位级、连拍级和最终工作流级指标。
| 层级 | 必须报告 | 首个发布目标(项目目标,不是当前成绩) | 分片 |
|---|---|---|---|
| 有鸟 / 无鸟 | Recall、Specificity、FPR/1k、PR 曲线、校准 | 总体鸟召回 ≥97%;确认无鸟特异度 ≥98% | tiny/small、大鸟、模糊、边缘、多鸟、昆虫、飞机、枝叶、水面 |
| 鸟框 | mAP50–95、AP50、每图 FP、small recall | 不设脱离本地集的单一 mAP;要求主鸟框足够覆盖头/羽毛 ROI | 目标面积、遮挡、裁切、场景与物种 |
| 关键点 | PCK@0.05/0.1、OKS、visibility F1、每点误差 | 眼/喙 PCK@0.05 ≥85%;整体 PCK@0.1 ≥85% | 左/右点、侧/正/背视、飞行、模糊、小鸟 |
| 对焦 | 连拍 pairwise accuracy、Spearman、最佳帧召回、不可评价率 | 连拍清晰度对比 ≥85%;人工最佳帧保留 ≥95% | ISO、快门、物种纹理、眼 ROI 像素尺寸 |
| 姿态 MLP | pairwise agreement、分档 F1、校准误差 | 人工偏好一致率 ≥80%,且视角分片无明显系统偏见 | 飞行、栖息、觅食、正面、背面、多鸟 |
| 端到端 | 人工 keeper recall、误删率、审核量下降、每千张耗时 | keeper recall ≥97%;误删 ≤2%;人工复核量下降 ≥50% | 新日期、新地点、新相机/镜头、未见物种 |
至少 1,000 张真实本地照片;同一连拍组只能进入一个 split。每轮 active learning 可以扩展训练集,但不能回看封存 test 后继续调阈值。
把阈值附近、主鸟选择冲突、ROI 太小和关键点异常的图片送人工复核。系统需要“我不确定”的输出,不应把所有照片强制压成 0–5 星。
为蝴蝶、风筝、飞机、树皮、水面反光、远鸟、半鸟和严重虚焦各保留 30–100 张固定样例;每次模型升级输出逐例差异。
当前设备为 Apple M5、10 核 GPU、32 GB 统一内存;磁盘约剩 142 GB。本机适合数据闭环、S 规模微调和部署验证,多模型/P2/高分辨率搜索则应减少并行变量或借用 24 GB 以上 CUDA。
| 工作负载 | 假设 | M5 初始时间窗 | 存储/内存建议 |
|---|---|---|---|
| YOLO26s Detect | 12K–20K 图、60 epoch、768 | 约 6–18 小时 | batch 8 左右起测;工作缓存 10–25 GB |
| YOLO26s Detect | 同规模、60 epoch、1024 | 约 12–36 小时 | batch 4–8;保留系统内存余量 |
| YOLO26s Pose | 6K–12K 图、100 epoch、768 | 约 12–36 小时 | batch 4 左右起测;关键点增强增加 CPU 开销 |
| YOLO26s Pose | 同规模、100 epoch、1024 | 约 24–72 小时 | batch 2–4;按 3 epoch 实测重新估算 |
| 自定义 P2 Pose | 1024、相同数据 | 约 36–120 小时 | 高分辨率 P2 特征图显著增压,建议 CUDA 做重复消融 |
| Focus 小网络 | 约 10K ROI、30–50 epoch | 约 2–8 小时 | ROI 缓存按质量/尺寸控制在 5–15 GB |
| 姿态 MLP | 2K–10K 实例特征 | 通常数分钟 | 计算不是瓶颈,人工偏好标签才是 |
以上为条件化容量规划,不是本机已跑出的训练时长。当前可比的实测只有:原始 YOLO26s 在 CUB 5,794 图、640、batch 8 的端到端推理约 77.1 图/秒;100 张 YOLO26s-cls PoC 实际训练 9 epoch 为 14.6 秒。二者都不能直接代表 1024 Pose 训练。
不复制 RAW;manifest 引用原图,只生成 768/1024 JPEG 代理与 ROI 缓存。维持至少 40 GB 安全线,按模型版本清理可再生 cache,不删除原始照片与唯一标注。
需要同时比较 S/M、P3/P2、1024/1280,或一个实验预计超过 48 小时时,使用 RTX 4090 24 GB / A100 级别 CUDA;本机继续做数据审计与最终 MPS/CoreML 验证。
锁定 Python、PyTorch、Ultralytics、权重 SHA-256、数据 manifest 和 YAML。YOLO26 仍在快速更新,升级依赖必须重新跑所有坐标、框、关键点和导出回归。
真正的主线不是不断换模型,而是把标签、固定测试、错误回收和接口契约变成可重复流程。每个里程碑都产生可独立运行的权重和报告。
| 优先级 | 交付物 | 退出条件 | 不要同时做 |
|---|---|---|---|
| P0 | 15 点规范、实例 schema、≥1,000 张封存测试集 | 两人能按同一规则标同一鸟;坐标可从 RAW/代理图互转 | 不要先改 PoseLoss 或 P2。 |
| P0 | YOLO26s 单类 Detect v1 + hard-negative miner | presence/框指标与误报分片可复现,明显优于原始 COCO 权重 | 不要接 Lightroom 自动覆盖。 |
| P0 | YOLO26s 15 点 Pose v1 | CUB + 本地关键点指标通过,眼/喙 ROI 在真实图可用 | 不要把 pose count 当最终评分。 |
| P1 | 本地 Pose v2、三轮 active learning | 新日期小鸟/遮挡/多鸟错误稳定下降,收益开始趋缓 | 不要污染封存 test。 |
| P1 | Focus ranking v1 + Pose MLP v1 | 连拍最佳帧和人工姿态偏好达到门槛;输出含不确定度 | 不要把物种置信度混入技术清晰度。 |
| P2 | P2 Pose / mask / 自定义 loss 消融 | 固定错误类型证明 stock 结构容量不足,且收益覆盖维护成本 | 不要因为“理论上更强”就永久 fork。 |
| P2 | Lightroom 影子 → 可控写回 | 跨日期 keeper recall 与误删率达标,用户可回滚模型与评分 | 不要直接覆盖原评分作为第一次上线。 |
(1)把 CUB 15 点转换为 YOLO Pose 格式并生成可视化审计;(2)从七月照片标 300 张全鸟框 + 100 张 15 点,建立第一个日期隔离 test;(3)训练 YOLO26s Detect v1;(4)迁移到 Pose v1 并同时输出框、点和 ROI;(5)先用 Tenengrad/FFT 做对焦 baseline,再决定质量网络标签。这个顺序每一步都能独立验证,也不会把长期架构锁死。
线上已有“框选小模型规划”“100 张二分类 PoC”和“原始 YOLO26 误差分析”。本报告不重复它们的实验叙述,而是确定整套替代系统的主模型、15 点契约、Detect→Pose 迁移、下游边界、验收门槛和 3–6 个月交付路线,属于独立的系统设计基线。
模型能力与格式优先引用官方文档/源码;数据规模引用作者页面或论文;本机数字来自当前工程 manifest 与结果文件。估算、目标和设计决策均在正文显式标记。
读取了当前 M5/32 GB 环境、YOLO26n/s/m 权重和 COCO/CUB 基准、4,696 张七月候选照片 manifest、100 张二分类 PoC、8,491 张负对象数据集、慧眼识鸟的 YOLO/关键点/锐度/评分实现,以及本机 Ultralytics 8.4.100 的 Pose26 head、RLE loss、P2 与 Pose YAML。没有把 Lightroom 原始照片、私人路径、设备序列号或任何凭据写入公开报告。
Ultralytics 提供 AGPL-3.0 与商业 Enterprise 许可路径;公开数据也有各自的图片与标注授权。研发阶段可先验证技术,正式分发模型、数据或商业应用前需逐项复核当期许可。本报告是工程规划,不构成法律意见。