Coggle 30 Days of ML 打卡任务一:两个赛题数据可视化

news2024/11/28 1:45:58

Coggle 30 Days of ML 打卡任务一:两个赛题数据可视化

任务一:两个赛题数据可视化

  • 难度/分值:低/1

打卡内容:

  1. 参赛选手名称:AppleDoctor
  2. 完成日期:2023.6.6
  3. 任务完成情况
    • 使用的编程语言:Python
    • 实现的功能:
      • 对赛题1的苹果病害数据进行可视化的方法:
        • 加载苹果病害图像,并展示图像及其标签;
      • 对赛题2的建筑物检测数据进行可视化的方法:
        • 加载"吉林一号"高分辨率卫星遥感影像,展示影像;
        • 可视化影像中的建筑物变化。

背景介绍

本次打卡任务是 Coggle 30 Days of ML 中的第一项任务,要求完成两个赛题的数据可视化。赛题1是苹果叶片病害识别,提供了九类自然环境下苹果叶片的病害图像数据,参赛选手需要展示图像及其标签。赛题2是建筑物变化检测,提供了"吉林一号"高分辨率卫星遥感影像作为数据集,选手需要展示影像中的建筑物变化。

任务名称难度/分值
任务1:两个赛题数据可视化低/1
任务2:苹果病害数据加载与数据增强中/2
任务3:苹果病害模型训练与预测中/2
任务4:苹果病害模型优化与多折训练高/3
任务5:建筑物检测数据加载与数据增强高/2
任务6:苹果病害模型训练与预测中/2
任务7:苹果病害模型优化与多折训练高/3

数据集准备

首先报名并下载数据集,以下是实践比赛地址:

  • 赛题1:苹果病害图像识别
  • 赛题2:建筑物变化检测

赛题一:苹果病害图像识别

标签分布可视化

接下来,我对苹果病害数据集的标签进行了可视化和分析。首先,我计算了每个类别的数据量,并使用柱状图展示了各类别的数量分布。

root = './datasets/apple'
classes_name = ['d1', 'd2', 'd3', 'd4', 'd5', 'd6', 'd7', 'd8', 'd9']
split = 1.0
train_path, val_path = [], []
class_counts = []

for cls in classes_name:
    cls_path = glob.glob(f'{root}/train/{cls}/*')
    class_counts.append(len(cls_path))
    print(f"类别 {cls} 数量为: {len(cls_path)}")
    # 计算训练集和验证集的数量
    num_train = int(len(cls_path) * split)
    num_val = len(cls_path) - num_train
    # 随机选取80%的数据,存储到训练集列表中
    train_path.extend(random.sample(cls_path, num_train))
    # 将剩余的20%的数据存储到验证集列表中
    val_path.extend(list(set(cls_path) - set(train_path)))

# 设置图表样式
plt.style.use('seaborn-whitegrid')

# 可视化类别数量
plt.bar(classes_name, class_counts)
plt.xlabel('Category')
plt.ylabel('Count')
plt.title('Category Count')
# 在每个柱子上方添加类别数量标签
for i in range(len(class_counts)):
    plt.text(i, class_counts[i], class_counts[i], ha='center', va='bottom')

plt.xticks(rotation=45)
plt.show()

在这里插入图片描述

从可视化结果可以看出,苹果病害数据集的标签分布是不均衡的。其中,有3个类别的数据超过了1900个样本,而其他类别的数据量不足1000个,甚至有5个类别的数据量只有约300个左右。因此,该数据集的标签分布存在不均衡的情况。

以下是各个类别的数据量统计:

类别 d1 数量为: 292
类别 d2 数量为: 288
类别 d3 数量为: 2227
类别 d4 数量为: 238
类别 d5 数量为: 362
类别 d6 数量为: 260
类别 d7 数量为: 829
类别 d8 数量为: 1928
类别 d9 数量为: 3787

计算平均尺寸

我还计算了所有图像的平均尺寸,以了解图像的大小特征。

total_width = 0
total_height = 0
num_images = len(train_path)

# 遍历训练集中的所有图像,求出它们的平均宽度和高度
for image_path in tqdm(train_path):
    image = Image.open(image_path)
    width, height = image.size
    total_width += width
    total_height += height

average_width = total_width / num_images
average_height = total_height / num_images

print("Average Image Size:")
print("Width:", average_width)
print("Height:", average_height)

计算得到的平均宽度为990,平均高度为683。

Average Image Size:
Width: 990.6477328371365
Height: 683.6091469983352

可视化各个类别图片

为了更好地了解各个类别的特征,我展示了每个类别的前几张图片。

num_images_per_category = 5

# 显示每个类别的前num_images_per_category张图像
for cls in classes_name:
    cls_path = glob.glob(f'{root}/train/{cls}/*')[:num_images_per_category]

    fig, axes = plt.subplots(1, num_images_per_category, figsize=(12, 2))

    for i, image_path in enumerate(cls_path):
        image = Image.open(image_path)
        axes[i].imshow(image)
        axes[i].axis('off')

    plt.suptitle(f'Images for Category {cls}')
    plt.show()

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

通过以上可视化结果,我们可以观察到各个类别的特征。特别是在d2和d6类别中,它们的特征是最明显的。d2类别代表了黄叶,而d6类别的叶子则有一定程度的腐烂。

赛题二:建筑物变化检测

在建筑物变化检测数据集中,包含三个文件夹,分别是Image1、Image2和label1。

**原始影像:**双时相影像以.tif格式存储,包含R、G、B三个波段。训练集和测试集的影像尺寸均为512x512像素。

**标签数据:**标签以单通道的.png#pic_center格式存储,每个像素的标签值用一个数值表示,使用’uint8’数据类型存储。标签数值表示像素是否发生变化,其中“0”代表未变化,“1”代表变化。标签的尺寸也为512x512像素。

标签分布可视化

plt.figure(figsize=(12, 6))
bar_color = 'skyblue'  # 柱状图颜色
bar_width = 0.8  # 柱状图宽度

# 绘制柱状图
bars = plt.bar(labels, counts, color=bar_color, width=bar_width)

# 在每个柱状图上方显示标签的数量
for bar in bars:
    height = bar.get_height()
    plt.text(bar.get_x() + bar.get_width() / 2, height, height,
             ha='center', va='bottom', fontsize=8)

plt.xlabel('Pixel Label')
plt.ylabel('Count')
plt.title('Pixel Label Distribution')
plt.xticks(rotation=45, ha='right')  # 旋转x轴标签
plt.tight_layout()  # 调整布局以避免标签被裁剪
plt.show()

在这里插入图片描述

通过以上代码,可以得到标签分布的可视化结果。从图中可以看出,“0”代表未变化,“1”代表变化。可以观察到像素标签“0”的数量远大于“1”的数量。具体而言,“0”像素的数量为626,774,703,“1”像素的数量为28,585,297。每个影像的尺寸为512x512像素。

遥感图像可视化

可以看到三列,分别是Image1,Image2和label

root = 'datasets/satellite/train'
image_folder1 = 'Image1'
image_folder2 = 'Image2'
label_folder = 'label1'

folder1_path = os.path.join(root, image_folder1)
folder2_path = os.path.join(root, image_folder2)
label_path = os.path.join(root, label_folder)

# 获取文件夹中的TIF图像文件列表
image_files1 = sorted([f for f in os.listdir(folder1_path) if f.endswith('.tif')])
image_files2 = sorted([f for f in os.listdir(folder2_path) if f.endswith('.tif')])
label_files = sorted([f for f in os.listdir(label_path) if f.endswith('.png')])

num_images = min(3, len(image_files1), len(image_files2), len(label_files))

fig, axes = plt.subplots(num_images, 3, figsize=(12, 6))

for i in range(num_images):
    image_path1 = os.path.join(folder1_path, image_files1[i])
    image_path2 = os.path.join(folder2_path, image_files2[i])
    label_image_path = os.path.join(label_path, label_files[i])

    image1 = Image.open(image_path1)
    image2 = Image.open(image_path2)
    label_image = Image.open(label_image_path)

    axes[i, 0].imshow(image1)
    axes[i, 0].axis('off')
    axes[i, 0].set_title(f'{image_files1[i]}')

    axes[i, 1].imshow(image2)
    axes[i, 1].axis('off')
    axes[i, 1].set_title(f'{image_files2[i]}')

    axes[i, 2].imshow(label_image, cmap='gray')
    axes[i, 2].axis('off')
    axes[i, 2].set_title(f'{label_files[i]}')

plt.tight_layout()
plt.show()

在这里插入图片描述

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

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

相关文章

【你真的会斗图嘛?】Python爬虫实战项目——你想要的图都可以爬到(附安装地址)

目录 一、安装知识(1)Python环境变量(2)Pycharm开发工具(3)requests模块1、安装下载好Pycharm之后,找到终端进行下载requests模块2、输入下载语法:3、此次项目还需用到正则&#xff…

【STM32】制作一个bootloader

工作环境:STM32CubeMXKeil 相关环境准备这里就不介绍了。 bootloader是什么 bootloader就是单片机启动时候运行的一段小程序,这段程序负责单片机固件的更新,也就是单片机选择性的自己给自己下载程序。可以更新,可以不更新&…

C++课程设计:电梯控制系统程序设计

目录 电梯控制系统程序设计背景 类结构图 程序设计 程序释义 运行展示 总结与体会 电梯控制系统程序设计背景 电梯控制系统程序设计旨在通过C编程实现电梯的模拟功能,使用户能够选择上行或下行,并输入要进入的楼层,程序将模拟电梯运行过…

死锁细究!

一、死锁的定义&危害 1、死锁是什么 发生在并发中互不想让:当两个(或更多)线程(或进程)相互持有对方所需要的资源,又不主动释放,导致所有人都无法继续前进,导致程序陷入无尽的…

学生成绩管理系统(C语言)

学生成绩管理系统 一、实现思路二、代码的实现(1)构造功能框架(2)实现各项功能 三、完整的代码四、总结 本篇博客介绍一个关于学生成绩管理系统的C语言代码,包含读取成绩、计算各门课程的总分和平均分、按分数排序、按…

快速实现一个分布式定时器

定时器(Timer)是一种在业务开发中常用的组件,主要用在执行延时通知任务上。本文以笔者在工作中的实践作为基础,介绍如何使用平时部门最常用的组件快速实现一个业务常用的分布式定时器服务。同时介绍了过程中遇到问题的一些解决方案…

手机越狱:探索自由与风险的边界

😄作者简介: 小曾同学.com,一个致力于测试开发的博主⛽️,主要职责:测试开发、CI/CD 如果文章知识点有错误的地方,还请大家指正,让我们一起学习,一起进步。😊 座右铭:不想…

100天精通Golang(基础入门篇)——第5天: Go语言中的数据类型学习

🌷 博主 libin9iOak带您 Go to Golang Language.✨ 🦄 个人主页——libin9iOak的博客🎐 🐳 《面试题大全》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺 🌊 《I…

htmlCSS-----盒模型

目录 前言: 盒子 1.内容区域 2. 边框 3. 内边距区域 4. 外边距区域(margin) 怪异盒模型 前言: 前面我们学习了CSS中的选择器的使用方法,那这一节我们就学习CSS中的盒模型,通过盒模型我们可以去更好的…

uni-app引入html2canvas截图以及截长图

下载安装html2canvas 方式一,https://www.bootcdn.cn/ CDN网站下载html2canvas插件 这里下载后放在测项目目录common下面 页面中引入 方式二、npm方式安装html2canvas 1、npm方式下载 npm i html2canvas2、引入html2canvas import html2canvas from html2can…

数据结构——广义表

文章目录 前言二、特殊矩阵的压缩存储数组的存储结构和实现按行优先存储按列优先存储 矩阵的压缩存储稀疏矩阵 广义表 总结 前言 数组,数组的压缩存储,广义表 二、特殊矩阵的压缩存储 数组的存储结构和实现 对于多维数组,可以分为按行优先…

UnityVR--组件9--视频组件VideoPlayer

目录 前言 参数解释 RenderMode渲染方式 VideoPlayer类中的API 前言 在之前的VR场景中已经使用过VideoPlayer播放视频(Unity.UI的交互(6)-播放视频),不过在VR中设置是有些不同的,这里更详细地说明一下V…

8.面向对象编程(高级部分)|Java学习笔记

文章目录 类变量和类方法类变量类变量使用注意事项和细节 类方法类方法使用注意事项和细节 理解 main 方法语法代码块代码块使用注意事项和细节讨论 单例设计模式单例模式应用实例饿汉式 VS 懒汉式 final 关键字final 使用注意事项和细节 抽象类抽象类的介绍抽象类使用的注意事…

软件测试|测试金字塔是什么,它的目的是什么,以及它包含哪些层次?

一、测试金字塔的概念: 测试金字塔是2009年Mike Cohn在他的著作《Succeeding with Agile》一书正式提出的。他是一个类比的概念,形容每一层,或者说不同集成阶段测试覆盖率和知行效率之间的一个相对关系。 测试金字塔最初的原型分三层&#…

chatgpt赋能python:Python循环间隔-了解如何在循环中增加延时

Python循环间隔 - 了解如何在循环中增加延时 在Python编程中,循环是非常常见且重要的控制语句。 它使我们可以多次执行代码块。 但是,在有些情况下,您可能需要在循环之间增加一定的延时时间。 这就是Python循环间隔的概念。 在本文中&#x…

初次使用PPYOLOE-R

目的:优化基于yolov5-obb旋转目标检测算法的证件区域检测,之前的方法是基于anchor,每次使用都要调试anchor;而ppyoloe-r是free anchor的算法; 源码位置:https://github.com/PaddlePaddle/PaddleDetection/…

学成在线----day2

1、mybatis-plus分页 pom: <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.ap…

【大数据之Hive】九、Hive之DDL(Data Definition Language)数据定义语言

1 数据库 [ ] 里的都是可选的操作。 1.1 创建数据库 语法&#xff1a; create database [if not exists] database_name [comment database_comment(注释)] [location hdfs_path] [with dbproperties (property_name-propertyproperty_value,...)]; 如&#xff1a; creat…

真实性能测试案例之性能分析与报告

今天主要跟大家分享一个曾经所做的真实性能测试的案例&#xff0c;主要为其中性能测试分析报告过程部分&#xff0c;希望能对你以后怎么做性能分析和报告有所帮助。这个案例的测试目的为&#xff1a;在线考试为“XX平台”中的一个重要模块&#xff0c;根据目前业务的需要&#…

ChatGPT实用使用指南 让它解你所问

Chatgpt无疑是这几年来影响力最大的AI技术之一&#xff0c;生成式的AI模型正在促进各个行业的效率和自动化发展&#xff0c;Chatgpt对于个人、企业和各个行业都有着一定的影响 在我刚接触的时候&#xff0c;发现对Chatgpt的认知太肤浅了&#xff0c;一个最强的ai聊天机器人摆在…