MWD天气图像多分类数据集,用于图像分类-共6个类别,共60000张图像数据 ,含有模型

news2025/1/15 8:38:00

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 优化器。
模型特点
  • 高效:模型结构简洁,推理速度快,适合实时应用。
  • 高性能:经过充分训练,在测试集上表现出色。
  • 可扩展性:可以根据需要调整网络结构以适应不同的计算资源。
使用步骤
  1. 下载数据集

    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')
  2. 加载数据集

    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)
  3. 定义模型

    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)
  4. 训练模型

    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}%')
  5. 评估模型

    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']))
  6. 推理和可视化

    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张图像数据 ,含有模型

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2214921.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

大规模多传感器滑坡检测数据集,利用landsat,哨兵2,planet,无人机图像等多种传感器采集数据共2w余副图像,mask准确标注滑坡位置

大规模多传感器滑坡检测数据集,利用landsat,哨兵2,planet,无人机图像等多种传感器采集数据共2w余副图像,mask准确标注滑坡位置 大规模多传感器滑坡检测数据集介绍 数据集概述 名称:大规模多传感器滑坡检测…

AGI 之 【Dify】 之 使用 Docker 在 Windows 端本地部署 Dify 大语言模型(LLM)应用开发平台

AGI 之 【Dify】 之 使用 Docker 在 Windows 端本地部署 Dify 大语言模型(LLM)应用开发平台 目录 AGI 之 【Dify】 之 使用 Docker 在 Windows 端本地部署 Dify 大语言模型(LLM)应用开发平台 一、简单介绍 二、Docker 下载安…

界面控件Kendo UI for jQuery 2024 Q3亮点 - 支持切换编辑模式

随着最新的2024 Q3版本,Progress使用户能够使用现成的页面模板和构建块更快地构建令人惊叹的应用程序,使您的Telerik和Kendo UI开发体验更好。 Telerik和Kendo UI 2024 Q3版本将焦点放在新推出的页面模板和构建块上,每个页面模板和构建块都预…

SaaS架构:中央库存系统架构设计

大家好,我是汤师爷~ 近年来,越来越多的零售企业大力发展全渠道业务。在销售额增长上,通过线上的小程序、直播、平台渠道等方式,拓展流量变现渠道。在会员增长方面,通过多样的互动方式,全渠道触达消费者&am…

大数据-163 Apache Kylin 全量增量Cube的构建 手动触发合并 JDBC 操作 Scala

点一下关注吧!!!非常感谢!!持续更新!!! 目前已经更新到了: Hadoop(已更完)HDFS(已更完)MapReduce(已更完&am…

TensorRT-LLM七日谈 Day4

在Day2 中,我们梳理了trt-llm对于TinyLLama的调用,在Day3,我们也熟悉了一下Trt-llm常规的三步流程。 这里其实有个问题,在针对tiny-llama的部署中,其实没有显式的进行模型转换,那麽其推理接口中到底包含了什么&#x…

stack - queue - priority_queue

1.stack和queue的使用 2.底层逻辑 2.1 stack和queue都是容器适配器,是用其他容器适配形成的 stack的逻辑是后进先出的逻辑,意味着会发生尾差和尾删,其容器就可以选择是vector和list queue的逻辑是先进先出,意味着会发生头删和…

Codigger Keyboard Look应用说明

Keyboard Look是一项专为Desktop设计的功能模式,旨在通过全面启用键盘操作,减少对鼠标依赖,从而提升用户的工作效率和操作体验。尤其对于频繁使用键盘的用户,如开发者,此模式可显著加速日常操作,优化工作流…

[NewStar 2024] week2

Crypto 第2周的密码依然都是签到题 这是几次方? 疑惑! 给了个提示:hint p^e 10086 这里边不要当成乘幂,而且加法的优先级高于异或,所以phint ^ (e10086)得到p就能正常解RSA了 Since you konw something 给的c是…

HTML5实现古典音乐网站源码模板2

文章目录 1.设计来源1.1 主界面1.2 古典音乐界面1.3 著名人物界面1.4 古典乐器界面1.5 历史起源界面1.6 联系我们界面 2.效果和源码2.1 动态效果2.2 源代码 源码下载万套模板,程序开发,在线开发,在线沟通 作者:xcLeigh 文章地址&a…

PostGIS:公交站点覆盖率分析

现有公共交通规划中常以“公交站点覆盖率”来评价公共交通服务覆盖情况,该指标通常用来评估公共交通服务的普及程度和便利性。以下,我们将基于PostGIS实现公交站点覆盖率分析。 1.公交站点覆盖率 公交站点覆盖率,也称公交站点服务面积率,是公交站点服务面积占城市用地总面…

gaussdb 主备 8 数据库安全学习

1 用户及权限 1.1 默认权限机制-未开启三权分立 1.1.1 数据库系统管理员具有与对象所有者相同的权限。也就是说对象创建后,默认只有对象所有者或者系统管理员可以查询、修改和销毁对象,以及通过GRANT将对象的权限授予其他用户。 1.1.2 GaussDB支持以下的…

DS1302时钟芯片+esp8266 / spi 学习 arduino

DS1302时钟芯片esp8266 这个芯片往上能找到很多资料,这里主要记录我手里的模块, 看了下芯片资料,说是当vcc 供电小于备用时用备用电源 这里直接没有接vcc 遇到的问题 1.esp8266复位短路导致串口断开: 当只接scl sda rst 三个引脚的时候 esp8266复位会 导致短路,也有可能…

★ C++进阶篇 ★ AVL树实现

Ciallo&#xff5e;(∠・ω< )⌒☆ ~ 今天&#xff0c;我将继续和大家一起学习C进阶篇第五章----AVL树实现 ~ ❄️❄️❄️❄️❄️❄️❄️❄️❄️❄️❄️❄️❄️❄️澄岚主页&#xff1a;椎名澄嵐-CSDN博客C专栏&#xff1a;★ C进阶篇 ★_椎名澄嵐的博客-CSDN博客 ❄️…

QT工程概述

在Qt中&#xff0c;创建 "MainWindow" 与 "Widget" 项目的主要区别在于他们的用途和功能范围&#xff1a; MainWindow&#xff1a;这是一个包含完整菜单栏、工具栏和状态栏的主窗口应用程序框架。它适合于更复 杂的应用程序&#xff0c;需要这些额外的用户…

Java | Leetcode Java题解之第479题最大回文数乘积

题目&#xff1a; 题解&#xff1a; class Solution {public int largestPalindrome(int n) {if (n 1) {return 9;}int upper (int) Math.pow(10, n) - 1;int ans 0;for (int left upper; ans 0; --left) { // 枚举回文数的左半部分long p left;for (int x left; x >…

uni-app关闭底部系统导航栏的控制按钮BUG

描述 plus.navigator.hideSystemNavigation(); 在uni-app中使用 plus.navigator.hideSystemNavigation(); 关闭导航栏时会出bug会留下一个黑框。这个bug基于手机&#xff1b; 平板的性能来决定出bug频率原因是&#xff1a;过早启用霸屏导致的&#xff08;过早使用plus.navig…

执行vue create XXX报错The operation was rejected by your operating system

创建项目&#xff1a; vue create my-project 报错&#xff1a; npm ERR! code EPERM npm ERR! syscall open npm ERR! path D:\Program Files\nodejs\node_cache\_cacache\tmp\5d2a6f8e npm ERR! errno -4048 npm ERR! Error: EPERM: operation not permitted, open D:\Pro…

18933 括号匹配问题

### 思路 1. **输入处理**&#xff1a;读取输入的字符串。 2. **匹配括号**&#xff1a;使用栈来匹配括号&#xff0c;记录无法匹配的左括号和右括号的位置。 3. **标注输出**&#xff1a;根据记录的位置&#xff0c;生成标注字符串&#xff0c;输出原始字符串和标注字符串。 …

车辆损伤评估数据集(提供分割和检测两种标注方式)6类4000张高分辨率图共9000余标注,6GB数据量

车辆损伤评估数据集&#xff08;提供分割和检测两种标注方式&#xff09; 标注类型包括 dent: 凹痕 scratch: 划痕 crack: 裂缝 glass shatter: 玻璃破碎 tire flat: 轮胎扁平 lamp broken: 车灯损坏 4000张高分辨率图共9000余标注&#xff0c;6GB数据量 车辆损伤评估数据集介…