观潮 · 模式预报与气象 AI 观察
Weather-Image-Classification:92M 参数的 SigLIP2 微调模型,5 类天气图像分类,总体准确率 0.859,雨雷暴类 F1 只有 0.762
Hugging Face 上一个把 SigLIP2 微调成天气图像分类器的模型。模型卡给出了完整的 5 类分类报告:总体准确率 0.8589,macro 平均 F1 0.8371,各类 F1 从 0.762 到 0.898。
这个模型是微调产物,不是预训练权重,所以下面会特别说明它没有独立验证集这件事。
模型规格
项 · 值
架构 · `SiglipForImageClassification`
config 里的 `model_type` · `siglip`
权重参数量 · 92,888,069(safetensors 统计,标签里标为 93M)
基座 · google/siglip2-base-patch16-224
推荐 transformers 库 · transformers
训练/评测数据集 · prithivMLmods/WeatherNet-05
许可证 · apache-2.0
近30 天下载 940 次,点赞2。近 30 天这个数字说明它不是新发布的模型,但也没有停止被使用。

模型卡封面图:冰蓝色调的雪山与雾海风景,画面中央压着 Weather Image Classification 字样。这张图只是模型卡的展示封面,不含任何指标信息,也不代表模型的输入样例或训练数据分布。
分类结果:5 类,F1 从 0.762到 0.898
模型卡的 classification report 如下(support 是该类的样本数):
类别 · precision · recall · f1-score · support
cloudy/overcast(阴/多云) · 0.8493 · 0.8762 · 0.8625 · 6702
foggy/hazy(雾/霾) · 0.8340 · 0.8128 · 0.8233 · 1261
rain/strom(雨/雷暴) · 0.7644 · 0.7592 · 0.7618 · 1927
snow/frosty(雪/霜冻) · 0.8341 · 0.8448 · 0.8394 · 1875
sun/clear(晴/万里无云) · 0.9124 · 0.8846 · 0.8983 · 6274
**accuracy** · **0.8589** · 18039
**macro avg** · 0.8388 · 0.8355 · **0.8371** · 18039
**weighted avg** · 0.8595 · 0.8589 · 0.8591 · 18039
几个可以直接读出来的事实:
最好的是 sun/clear,F1 = 0.8983。 precision 0.9124 高于 recall 0.8846,说明误判多于漏判——把阴天误判成晴天的次数,多于晴天被漏成阴天的次数。
最差的是 rain/storm,F1 = 0.7618。 这一类的 precision 0.7644 和 recall 0.7592 都明显低于其他四类,是唯一一个两项都掉到 0.76 附近的类别。
foggy/hazy 的 support 只有 1261,是五类里最少的。 而它恰好是视觉上最容易和 cloudy/overcast 混的一类(都是灰白色低对比度画面)。support 少加类别边界模糊,这两点叠加意味着这一类的指标最不稳。
macro 平均 0.8371 明显低于 weighted 平均 0.8591。 这个差值本身是信息:macro 平均给每个类同等权重,weighted 按样本量加权。macro 明显更低,说明样本量小的类别表现相对更差,foggy/hazy(1261)和 rain/storm(1927)就是拖低 macro 的两个。
数据集名是 WeatherNet-05,总样本量 18039(按 support 求和正好是这个数)。

模型卡给出的 5×5 混淆矩阵热图,纵轴是真实标签、横轴是预测标签,颜色越深表示样本越多。对角线是各类判对的样本数:cloudy/overcast 5872、sun/clear 5550、snow/frosty 1584、rain/storm 1463、foggy/hazy 1025;五个对角格之和正好 15494,除以样本总数 18039 得到 0.8589,与classification report 里的总体准确率一致。按行读还能看出两处错误走向:cloudy/overcast 那一行有 430 张被错判成sun/clear(该行最深的错误格),sun/clear 那一行有 637 张被错判成 cloudy/overcast(比反向的 430 更大),这正是 precision 0.9124 高于 recall 0.8846 的直接原因。
类别定义
模型把图像分到 5 类之一:
```json
"id2label": {
"0": "cloudy/overcast",
"1": "foggy/hazy",
"2": "rain/storm",
"3": "snow/frosty",
"4": "sun/clear"
}
```
注意这5 类的粒度:rain 和 storm 被合并成一类,snow 和 frosty 被合并成一类,sun 和 clear 被合并成一类。也就是说这个模型分不出雷暴和普通降雨、分不出降雪和霜冻,也分不出晴天有多少云。所以它做的是"天气现象大类判定",不是精细的天气现象识别。
怎么用
依赖:
```bash
pip install -q transformers torch pillow gradio
```
推理代码的核心部分:
```python
from transformers import AutoImageProcessor, SiglipForImageClassification
from PIL import Image
import torch
model_name = "prithivMLmods/Weather-Image-Classification"
model = SiglipForImageClassification.from_pretrained(model_name)
processor = AutoImageProcessor.from_pretrained(model_name)
def classify_weather(image):
image = Image.fromarray(image).convert("RGB")
inputs = processor(images=image, return_tensors="pt")
with torch.no_grad():
outputs = model(**inputs)
logits = outputs.logits
probs = torch.nn.functional.softmax(logits, dim=1).squeeze()
return probs
```
模型卡还给了一个 Gradio 界面的例子,输出用 gr.Label(num_top_classes=5),也就是展示全部5 类的概率分布而不是只给top-1。
仓库里放了什么
文件清单显示这是一个完整的训练产物,不只是最终权重:
```
README.md
checkpoint-1128/config.json
checkpoint-1128/model.safetensors
checkpoint-1128/optimizer.pt
checkpoint-1128/preprocessor_config.json
checkpoint-1128/rng_state.pth
checkpoint-1128/scheduler.pt
checkpoint-1128/trainer_state.json
checkpoint-1128/training_args.bin
checkpoint-564/config.json
checkpoint-564/model.safetensors
```
有两个 checkpoint(564 和 1128 步),而且 1128 那个 checkpoint 里连优化器状态、随机数状态、scheduler 状态、训练参数都存着——这是完整的可恢复训练现场,可以从1128 步继续训练,也可以回滚到 564 步。
仓库标签里有两个值得注意的条目:base_model:finetune:google/siglip2-base-patch16-224(明确标注是微调而来)和 doi:10.57967/hf/5362。
作者列出的 intended use
模型卡给了四条预期用途:
- 摄影和媒体的自动天气打标。
- 天气相关研究里的数据集标注增强。
- 智能监控与交通系统的支撑。
- 自动驾驶里的场景理解增强。
这四条都是辅助性用途,不是替代专业观测的用途。
作者自己给出的限制
模型卡里没有独立的 Limitations 或 Known Limitations 章节,这是这份模型卡最明显的信息缺口。它给了指标、给了混淆矩阵,但以下关键信息无法从模型卡得到:
- 没有独立验证集。给出的 classification report 没有区分 train / validation / test,看不出这0.86的 f1 是在哪部分数据上算的。这是评估这个模型最关键的一块信息缺失。
- 五类的 support 极不均衡:sun/clear 有 6274 个样本,foggy/hazy 只有 1261,相差近 5 倍。模型卡没有说明是否做过类别平衡采样。
- 没有说明数据集的来源、地域范围、时间范围。WeatherNet-05 这个名字里看不出数据是哪个地区、什么季节、什么相机拍的。
- 没有说明图像是实拍还是生成。如果训练数据里含生成图像,用途就需要打折扣。
- 混淆矩阵虽然给了,但缺少解读。矩阵能读出"阴/多云被错判成晴"是最多的错误(430 张),以及"晴被错判成阴/多云"有 637 张,比反向更多;但模型卡没有对这张矩阵做任何说明,也没有解释哪类错误对实际使用影响最大。
- 雨/雷暴这一类只有 0.762 的 F1,是全部五类里最弱的,但模型卡没有解释为什么。
- 模型卡里也没有说是否做过气象专业审核。
另外模型本身最后更新是 2025-05-07,距今已有一段时间。
一句话判断
这是一个标准的 SigLIP2 微调分类器,架构清晰、类别定义明确、权重完整(甚至带可恢复的训练状态),适合当作图像打标工具或研究辅助;但由于模型卡没有独立验证集、也没有给出混淆矩阵,而且雨/雷暴这一类的 F1 只有 0.762(明显弱于其他四类),在把它用于任何需要可靠判定的场景之前,应该先自己构造验证集测一遍。