观潮 · 模式预报与气象 AI 观察
行车记录仪画面判天气:YOLO26n 拿到 82.04% Top-1 foggy 类 13 张一张没判对
> 同一个作者在同一个数据集、同一套划分、同一批指标下放出了两个天气分类模型卡:YOLO26n 与 YOLOv8n,7 类(clear / partly cloudy / overcast / rainy / snowy / foggy / unknown),标签来自 BDD100K 每张图的attributes.weather字段。10000 张 test 图上,YOLO26n 的 Top-1 是 82.04%、Macro F1 64.09%,YOLOv8n 是 81.22% 与 63.07%。两个模型对foggy类都是精确率、召回率、F1 全 0——该类在测试集里只有 13 张,模型卡直接写明"当作不支持的类别"。放在作者自己的 20 个模型横向表里,这两个分别排第 15 和第 20,第一名的 TinyViT-21M 是 83.90% / 68.65%。
这两个模型在做什么
任务是从行车记录仪单帧画面判断当时是什么天气,不是预报,是图像分类。
- 数据:BDD100K 的每图属性字段里有
weather,作者据此整理成 7 类分类数据集dronefreak/BDD100K-Weather-Classification。这是个非官方任务,沿用同名 Kaggle 数据集的做法。 - 划分口径(这一条很关键):模型卡里叫
test的 10000 张,实际是 BDD100K 官方的 validation 划分——官方 test 的标签没有公开;叫valid的是官方 train 里按固定随机种子切出的 15%。 - 工程来源:两个模型都出自 BDD100K-Toolkit,一个用来准备 BDD100K、训练模型、并用同一套指标在同一划分上评测的工具包。这也是两张模型卡能直接横向比较的原因。
同一把尺子下的结果数字
整体(test 划分,10000 张)
指标 · YOLO26n · YOLOv8n
Top-1 accuracy · 82.04% · 81.22%
Top-5 accuracy · 99.77% · 99.75%
Macro F1 · 64.09% · 63.07%
Balanced accuracy · 62.46% · 61.42%
Macro precision · 66.57% · 65.52%
Macro recall · 62.46% · 61.42%
Top-1 和 Macro F1 之间接近 18 个百分点的落差,是类别不均衡的直接结果:clear 一类就占了 5346 张,超过一半。作者因此建议看 Macro F1 而不是 accuracy。
YOLO26n 分类别
类别 · 精确率 · 召回率 · F1 · 测试图数
clear · 89.75% · 92.85% · 91.28% · 5346
foggy · 0.00% · 0.00% · 0.00% · 13(极少)
overcast · 63.66% · 71.83% · 67.50% · 1239
partly cloudy · 68.77% · 63.55% · 66.06% · 738
rainy · 88.68% · 64.77% · 74.86% · 738
snowy · 83.12% · 68.53% · 75.12% · 769
unknown · 72.04% · 75.71% · 73.83% · 1157
YOLOv8n 分类别
类别 · 精确率 · 召回率 · F1 · 测试图数
clear · 89.31% · 92.63% · 90.94% · 5346
foggy · 0.00% · 0.00% · 0.00% · 13(极少)
overcast · 62.26% · 69.49% · 65.68% · 1239
partly cloudy · 66.03% · 61.11% · 63.48% · 738
rainy · 88.42% · 65.18% · 75.04% · 738
snowy · 81.67% · 67.23% · 73.75% · 769
unknown · 70.96% · 74.33% · 72.60% · 1157
逐类的行为差异比总分更能说明问题。 rainy 的精确率高达 88.68%(YOLO26n),但召回率只有 64.77%——模型说下雨的时候基本是对的,但漏掉了三分之一以上的雨天。overcast 反过来:召回 71.83%、精确率 63.66%,也就是把不少别的类也判成了阴天。这两个方向性差别在总分里完全看不出来。
20 个模型的横向位置
两张模型卡附了同一张 Model Zoo 表,20 个模型在完全相同的 test 划分上按 Top-1 排序。摘取首尾与本批两个模型:
排名 · 模型 · Top-1 · Macro F1 · Balanced acc · Macro precision
1 · TinyViT-21M · 83.90% · 68.65% · 67.15% · 74.81%
2 · EfficientViT-B3 · 83.51% · 68.17% · 66.34% · 81.75%
3 · EfficientViT-B2 · 83.46% · 66.07% · 65.04% · 67.54%
4 · EfficientFormerV2-L · 83.27% · 65.93% · 65.03% · 67.12%
5 · RepViT-M1.5 · 83.19% · 67.78% · 65.71% · 81.56%
13 · ResNet-18 · 82.19% · 64.30% · 62.97% · 66.08%
15 · **YOLO26n** · **82.04%** · **64.09%** · **62.46%** · **66.57%**
17 · YOLO26s · 81.46% · 65.14% · 62.61% · 69.75%
18 · YOLOv8s · 81.40% · 66.34% · 63.52% · 71.54%
20 · **YOLOv8n** · **81.22%** · **63.07%** · **61.42%** · **65.52%**
20 个模型的 Top-1 全部落在 81.22% 到 83.90% 之间,跨度 2.68 个百分点;Macro F1 的跨度是 63.07% 到 68.65%。换句话说,在这个划分上换架构的收益上限很小,任务本身被数据(类别不均衡、标签主观)卡住了,而不是被模型卡住。另外 YOLO26s 与 YOLOv8s 的 Macro F1(65.14% / 66.34%)都高于各自的 n 版本,但 Top-1 反而更低——又是总分与均衡指标的背离。
复制与训练配置
```python
from huggingface_hub import hf_hub_download
from ultralytics import YOLO
model = YOLO(hf_hub_download("dronefreak/bdd100k-weather-yolo26n-cls", "best.pt"))
probs = model("street.jpg", verbose=False)[0].probs
print(model.names[probs.top1], f"{float(probs.top1conf):.1%}")
```
设置 · YOLO26n · YOLOv8n
Epochs(上限 / 实跑) · 50 / 42 · 50 / 36
最优 epoch(`best.pt`) · 32 · 26
`best.pt` 依据 · valid 划分的 macro_f1 · valid 划分的 macro_f1
Early stopping patience · 10 · 10
Batch size · 128 · 128
图像尺寸 · 224 · 224
优化器 · auto → MuSGD(lr=0.01, momentum=0.9) · 同左
预训练 · True · True
Seed · 0 · 0
复现命令:bdd100k-evaluate --dataset bdd100k-weather --checkpoint <weights> --data-dir <prepared dir> --split test。仓库内的文件包括 best.pt、metrics.json、results.csv、results.png、两张混淆矩阵、val_batch0_pred.jpg 和一个演示视频。
原文图

图:YOLO26n 在 test 划分(10000 张)上的归一化混淆矩阵,7 类天气。foggy 的精确率、召回率、F1 都是 0.00%,也就是没有任何一张 foggy 图落在对角线上。

图:YOLOv8n 在同一划分上的同一张矩阵。逐类数字与 YOLO26n 接近,foggy 同样是三项全 0。
作者承认的限制
- 非官方任务。 标签来自 BDD100K 的每图属性,不是有公开排行榜的基准;分数只能和在同一划分上评测的其他模型比。
- 不是官方测试集。 这里的
test实际是 BDD100K 官方 validation 划分(官方 test 标签未发布),valid是官方 train 的固定种子 15% 切片。 - 类别严重不均衡。 稀有类的测试图很少,分类别分数噪声大;作者建议优先看 Macro F1 而不是 accuracy。
foggy应当视为不支持。 模型卡原文直接写明:这个 checkpoint 对foggy的 13 张测试图一张都没判对。- 泛化性未测。 图片全部是美国的行车记录仪画面,对其他地区或相机配置的效果没有测试过。
- 相邻类存在标签噪声。
clear、partly cloudy、overcast是标注员的主观判断,这三类之间预期有混淆——而它们恰好是样本量最大的几类。 - 许可边界。 权重按 AGPL-3.0 发布,但训练数据 BDD100K 只对非商业研究教育免费,商用需另行授权;Hub 上整理好的数据集标记为
license: other,原始 BDD100K 条款仍然适用。
一句话判断
这两个模型卡的价值不在 82% 这个数字,而在于作者把"同一划分、同一指标、20 个模型"的横向表和逐类精确率/召回率一起放了出来——看完就能判断,这个任务现在的瓶颈是 foggy 这类长尾和数据本身的主观标签,不是换个 YOLO 版本能解决的。