Coggle 30 Days of ML 打卡任务一

news2024/11/23 18:31:37

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/628397.html

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

相关文章

八大排序算法

八大排序算法 是指常用的八种排序算法,它们包括: 冒泡排序(Bubble Sort):通过不断交换相邻元素的位置,将最大(或最小)的元素逐渐"冒泡"到最后(或最前&#xf…

【技术分享】华为防火墙双机热备

组网需求 如图所示,两台FW旁挂在数据中心的核心交换机侧,保证数据中心网络安全。通过核心交换机的流量都会被引流到旁挂的FW上进行安全检测,引流的方式为静态路由方式。企业希望两台FW以主备备份方式工作。正常情况下,流量通过FW_…

android 如何分析应用的内存(五)

android 如何分析应用的内存(五) 接上文 lldb的工具篇的GUI部分。分成两部分: vscode 的LLDBas的LLDB 接下来是as的LLDB as的LLDB 为了进行LLDB的调试,需要对as进行配置,事实上,每一个在AS中编辑的应…

充电桩检测仪表TK4860E交流充电桩检定装置

波形失真度测量:具备电压电流波形失真度测量功能。 时钟校验功能:实时时钟显示,可完成充电桩的时钟时刻误差测试。 温湿度测量(选配件):可选配蓝牙温湿度计,通过蓝牙连接平板电脑,…

properties、yaml作为配置文件的特点

说明:在软件开发中,经常需要把一些配置写在文件中,如数据库配置、MyBatis配置等。这样,后续如果数据库参数有改动,就可以避免直接对代码做修改,只要修改配置文件中关于数据库的配置。关于配置文件的选择&am…

数据分析师,如何写好分析报告来体现数据价值

对数据敏感 数据分析,从名字中就能看出来,数据是数据分析师实际工作中的核心。 对数据敏感是对数据分析师的要求,也是数据分析师在日常工作中培养出来的独特技能,相对于其他岗位的员工,他们会更容易眼发现数据信息中…

SPC Control Chart Tools for .Net Crack

.Net 的 SPC 控制图工具 版本 3.1 具有集成表格支持、频率直方图、Cpk 和 Ppk 统计和缩放功能的 X-Bar R Chart 添加变量控制图(X-Bar R、X-Bar Sigma、Individual Range、Median Range、EWMA、MA、MAMR、MAMS 和 CuSum 图)、属性控制图(p-…

【第三章:链路层】

目录 知识框架No.0 引言No.1 功能零、基本功能概念一、封装成帧1、字符计数法2、字符填充法3、零比特填充法4、违规编码法 二、透明传输三、差错控制1、位错1.1、奇偶校验码1.2、循环冗余码CRC2、帧错2.1、海明码 四、流量控制1、停止-等待协议2、滑动窗口协议2.1、后退N帧协议…

Mybatis 学习笔记总结

1.概念 2.开发环境搭建 2.1 开发环境 2.2 创建Maven工程 <!--junit测试--><dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> <scope>test</scope>&l…

【P56】JMeter 响应时间图(Response Time Graph)

文章目录 一、响应时间图&#xff08;Response Time Graph&#xff09;参数说明二、准备工作三、测试计划设计 一、响应时间图&#xff08;Response Time Graph&#xff09;参数说明 可以以图形的方式查看和分析各事务和取样器的响应时间 使用场景&#xff1a;用于评估测试结…

ASEMI代理英飞凌TLE4250-2G汽车级线性稳压器

编辑-Z TLE4250-2G参数描述&#xff1a; 型号&#xff1a;TLE4250-2G 输入电压VI&#xff1a;45V 输出电压VQ&#xff1a;40V 结点温度Tj&#xff1a;-40~ 150℃ 储存温度Tstg&#xff1a;-50~150℃ 输出电容器要求CQ&#xff1a;1F 连接到焊接点RthJSP&#xff1a;30K…

简单使用feign

feign是一款非常好用的&#xff0c;能直接把我们省去端口号的编写&#xff0c; 下面直接开始&#xff0c;需要有一定的SpringCloud的基础&#xff0c;不然可能看不明白&#xff0c;我这里很多都是关键步骤。敬请原谅。 首先我们需要引入feign的依赖 <!-- 引入openfiegn-->…

开发技术-使用 JDB 调试

Java 调试器&#xff08;JDB&#xff09;是 JDK 内置的命令行工具。从调试的指令和命令行接口两方面看的话&#xff0c;JDB 至少从概念上是 GNU 调试器&#xff08;GDB&#xff0c;受 Unix DB 的影响&#xff09;的继承者。 示例&#xff1a; public class SimpleDebugging {p…

C++ String类(上篇)

绪论 放弃时间的人&#xff0c;时间也会放弃他。——莎士比亚 &#xff1b; 本篇章是关于string类内一些函数的介绍以及使用方法&#xff0c;都是我们编程必须掌握的基础&#xff01; ​ 全文共7000字左右. 话不多说安全带系好&#xff0c;发车啦&#xff08;建议电脑观看&…

点亮创意灯,用Firefly Beta绘制生动有趣的成语故事!

1、打开链接&#xff1a; Adobe Firefly 2、点击generate按钮。 3、输入需要生成的成语描述&#xff0c;英文的。 比如我们要画守株待兔&#xff1a; An ancient Chinese farmer, lying under a big tree, waiting for a rabbit to run over 4、点击fresh按钮。 5、下载其…

(MIT6.045)自动机、可计算性和复杂性-图灵机

有穷自动机(FA)对有限存储量设备是比较好的模型&#xff0c;下推自动机对无限存储设备是较好的模型&#xff08;但是其存储只能用后进先出的栈模式来使用。&#xff09;这两个模型过于局限&#xff0c;不能作为通用模型。 图灵机 和FA相似&#xff0c;但是图灵机有无限的存储…

中央商务区对区域空间结构的影响机制

中央商务区&#xff08;CBD&#xff09;是经济发展到一定阶段后的必然产物&#xff0c;它已经成为城市或国家最重要的经济增长驱动器。中央商务区的形成过程本身即是区域空间结构的变化过程&#xff0c;经济活动在空间上的集聚与分散形成各类产业的集聚体&#xff0c;区域经济活…

ROS学习——通信机制(话题通信①—发布方实现)

2.1 话题通信 Autolabor-ROS机器人入门课程《ROS理论与实践》零基础教程 040话题通信(C)1_发布方框架_Chapter2-ROS通信机制_哔哩哔哩_bilibili 一、ROS 中的基本通信机制主要有如下三种实现策略 话题通信(发布订阅模式服务通信(请求响应模式)参数服务器(参数共享模式) 二、…

引领618首波爆发!实在RPA数字员工与海尔等品牌共赢全域增量

作为全面放开之后的首个现象级电商大促&#xff0c;今年618的重要性不言而喻。如何在“毛遂自荐”的大促秀场中&#xff0c;满足甚至超过消费者购物需求&#xff0c;成为每个品牌商家的必修课。 疫情的催化和直播间强互动属性&#xff0c;越来越多消费者倾向直播购物&#xff0…

在通讯方面对讲机比微信更有优势吗?

对讲机和微信属于不同的通信工具&#xff0c;它们在某些方面都有着各自的优势。那么在通讯方面对讲机比微信更有优势吗&#xff1f;下面河南宝蓝小编为大家详细介绍下。 一、即时与实时通信&#xff1a; 对讲机作为一种即时通信工具&#xff0c;能够立即与其他用户进行实时语…