MWD天气图像多分类数据集,用于图像分类-
MWD天气图像多分类数据集,用于图像分类-共6个类别,共60000张图像数据 ,含有模型
MWD天气图像多分类数据集及模型介绍
数据集概述
名称:MWD天气图像多分类数据集
图像数量:60,000张
类别数量:6个
用途:该数据集专为天气图像分类任务设计,适用于气象预测、环境监测和气候研究等领域。通过使用深度学习模型(如卷积神经网络CNN),可以实现对不同天气条件的准确分类。
数据集特点
- 大规模:包含60,000张高分辨率图像,提供了丰富的训练数据。
- 多类别:涵盖六种主要的天气类型,能够全面覆盖常见的天气状况。
- 高质量标注:所有标注均为人工标注,并经过质量控制,确保了标注的准确性。
- 实际应用场景:数据来源于真实的天气图像,具有很高的实用价值。
- 多样性:图像来自不同的地理位置和时间点,增加了数据的多样性和鲁棒性。
类别列表
- 晴天 (Clear)
- 多云 (Cloudy)
- 雨天 (Rainy)
- 雪天 (Snowy)
- 雾天 (Foggy)
- 雷暴 (Thunderstorm)
应用领域
- 气象预测:辅助气象部门进行更精确的天气预报。
- 环境监测:持续监测特定区域的天气变化,支持环境保护工作。
- 农业管理:帮助农民根据天气条件做出种植和收割决策。
- 交通规划:提供实时天气信息,优化交通管理和安全措施。
- 灾害预警:快速识别极端天气情况,辅助灾害预警系统。
获取方式
通常情况下,研究人员可以通过官方提供的链接或相关机构网站下载该数据集。请注意,使用时应遵循相应的许可协议和引用要求。
模型介绍
模型概述
名称:MWD天气图像分类模型
架构:基于卷积神经网络(CNN)
预训练模型:已包含在数据集中
性能指标:
- 准确率 (Accuracy):在测试集上的分类准确率。
- 混淆矩阵 (Confusion Matrix):展示各类别的分类效果。
- 损失函数 (Loss Function):交叉熵损失(Cross-Entropy Loss)。
- 优化器 (Optimizer):Adam 优化器。
模型特点
- 高效:模型结构简洁,推理速度快,适合实时应用。
- 高性能:经过充分训练,在测试集上表现出色。
- 可扩展性:可以根据需要调整网络结构以适应不同的计算资源。
使用步骤
-
下载数据集:
import requests import os # 定义下载链接和保存路径 url = 'http://example.com/path/to/mwd_weather_image_classification_dataset.zip' # 替换为实际的下载链接 save_path = './mwd_weather_image_classification_dataset.zip' # 检查是否已经下载过 if not os.path.exists(save_path): print("Downloading dataset...") response = requests.get(url, stream=True) with open(save_path, 'wb') as f: for chunk in response.iter_content(chunk_size=8192): if chunk: f.write(chunk) print("Download complete.") else: print("Dataset already exists.") # 解压数据集 import zipfile with zipfile.ZipFile(save_path, 'r') as zip_ref: zip_ref.extractall('./mwd_weather_image_classification_dataset')
-
加载数据集:
from torchvision import datasets, transforms from torch.utils.data import DataLoader # 数据增强和预处理 transform = transforms.Compose([ transforms.Resize((224, 224)), transforms.ToTensor(), transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]) ]) # 加载数据集 train_dataset = datasets.ImageFolder(root='./mwd_weather_image_classification_dataset/train', transform=transform) val_dataset = datasets.ImageFolder(root='./mwd_weather_image_classification_dataset/val', transform=transform) train_loader = DataLoader(train_dataset, batch_size=32, shuffle=True, num_workers=4) val_loader = DataLoader(val_dataset, batch_size=32, shuffle=False, num_workers=4)
-
定义模型:
import torch import torch.nn as nn import torchvision.models as models class WeatherClassificationModel(nn.Module): def __init__(self, num_classes=6): super(WeatherClassificationModel, self).__init__() self.base_model = models.resnet18(pretrained=True) self.base_model.fc = nn.Linear(self.base_model.fc.in_features, num_classes) def forward(self, x): return self.base_model(x) model = WeatherClassificationModel() device = torch.device("cuda" if torch.cuda.is_available() else "cpu") model.to(device)
-
训练模型:
import torch.optim as optim from torch.optim.lr_scheduler import StepLR criterion = nn.CrossEntropyLoss() optimizer = optim.Adam(model.parameters(), lr=0.001) scheduler = StepLR(optimizer, step_size=7, gamma=0.1) num_epochs = 50 for epoch in range(num_epochs): model.train() running_loss = 0.0 for images, labels in train_loader: images, labels = images.to(device), labels.to(device) optimizer.zero_grad() outputs = model(images) loss = criterion(outputs, labels) loss.backward() optimizer.step() running_loss += loss.item() scheduler.step() print(f'Epoch [{epoch+1}/{num_epochs}], Loss: {running_loss/len(train_loader)}') # 验证模型 model.eval() correct = 0 total = 0 with torch.no_grad(): for images, labels in val_loader: images, labels = images.to(device), labels.to(device) outputs = model(images) _, predicted = torch.max(outputs.data, 1) total += labels.size(0) correct += (predicted == labels).sum().item() print(f'Validation Accuracy: {100 * correct / total}%')
-
评估模型:
from sklearn.metrics import confusion_matrix, classification_report model.eval() all_preds = [] all_labels = [] with torch.no_grad(): for images, labels in val_loader: images, labels = images.to(device), labels.to(device) outputs = model(images) _, preds = torch.max(outputs, 1) all_preds.extend(preds.cpu().numpy()) all_labels.extend(labels.cpu().numpy()) # 计算混淆矩阵 cm = confusion_matrix(all_labels, all_preds) print("Confusion Matrix:") print(cm) # 打印分类报告 print("Classification Report:") print(classification_report(all_labels, all_preds, target_names=['Clear', 'Cloudy', 'Rainy', 'Snowy', 'Foggy', 'Thunderstorm']))
-
推理和可视化:
import matplotlib.pyplot as plt def predict_and_show(image_path, model, device, transform): image = Image.open(image_path).convert("RGB") input_tensor = transform(image).unsqueeze(0).to(device) output = model(input_tensor) _, pred = torch.max(output, 1) pred_label = train_dataset.classes[pred.item()] plt.figure(figsize=(4, 4)) plt.imshow(image) plt.title(f"Predicted: {pred_label}") plt.axis('off') plt.show() # 示例路径 image_path = './mwd_weather_image_classification_dataset/val/Clear/image_0001.jpg' predict_and_show(image_path, model, device, transform)
通过上述步骤,您将拥有一个完整的天气图像分类系统,包括数据集、预训练模型和相关的训练流程。希望这些代码能帮助您更好地利用该数据集和模型!
共6个类别,共60000张图像数据 ,含有模型