一个简单的图像分类项目(四)编写脚本:图像加载器

9b53821b1a744cd3b6fd4a65b2a1e4fd.png

创建训练和测试的数据集,并创建加载器。lib.load_imags.py:

import glob
from torch.utils.data import DataLoader, Dataset
from torchvision import transforms

from script.setting import *


# 图片处理函数
def img_loader(path):
    try:
        img = Image.open(path)
        img = img.convert('RGB')  # 转换成RGB模式
        if img.size != normalize_size:  # 标准化图片尺寸
            img = transforms.Resize(normalize_size)(img)  # 提供新尺寸
        return img
    except Exception as e:
        print(f"Error loading image {path}: {e}")
        return error_default_img  # 返回一个默认的错误图像


# 训练集数据预处理方法
train_transform = transforms.Compose([
    transforms.RandomHorizontalFlip(),  # 随机水平翻转
    transforms.RandomVerticalFlip(),  # 随机垂直翻转
    transforms.RandomRotation(90),  # 随机旋转90度
    # transforms.RandomGrayscale(p=0.1),  # 随机将图片转换为灰度图,p=0.1表示有10%的概率执行该操作
    # transforms.ColorJitter(brightness=0.5, contrast=0.5, saturation=0.5, hue=0.5),  # 调整图片的亮度、对比度、饱和度和色调
    transforms.ToTensor(),  # 将图片转换为Tensor
    transforms.Normalize(normalize_mean,  # 标准化
                         normalize_std)
])

# 测试集数据预处理方法
test_transform = transforms.Compose([
    transforms.ToTensor(),  # 将图片转换为Tensor
    transforms.Normalize(normalize_mean,  # 标准化
                         normalize_std)
])


# 自定义数据集
class MyDataset(Dataset):
    def __init__(self, img_list,  # 图片的地址列表
                 transform=None):
        super(MyDataset, self).__init__()

        imgs = []  # 图片的路径和类别标签列表(转换成了0-9的数字的)存储格式为:
        # [[图片路径, 0-9的图片类别], ...]

        for img_path in img_list:
            im_label_name = img_path.split('\\')[-2]  # 图片所属类别的名称,这里使用的是绝对路径,
            # 文件目录分隔符为反斜杠,使用相对路径则为正斜杠
            imgs.append([img_path, label_dict[im_label_name]])  # 将图片路径和对应的类别标签添加到列表中

        self.imgs = imgs
        # print(imgs[0])
        self.transform = transform
        self.loader = img_loader  # 图片加载函数

    def __getitem__(self, index):  # 获取数据集的图片和标签
        img_path, label = self.imgs[index]
        img_data = self.loader(img_path)  # 图片的数据

        if img_data is None:
            return None, label  # 处理加载错误的情况

        if self.transform is not None:
            img_data = self.transform(img_data)  # 图片数据转换

        return img_data, label  # 返回图片数据和标签

    def __len__(self):  # 获取数据集的图片数量  train_path
        return len(self.imgs)


# 获取训练集的文件名
train_list = glob.glob(train_path + '\\*\\*')

# 获取测试集的文件名
test_list = glob.glob(test_path + '\\*\\*')

# 定义训练数据集
trans_dataSet = MyDataset(train_list, transform=train_transform)
# 训练集图片数量
train_num = len(trans_dataSet)

# 定义测试数据集
test_dataSet = MyDataset(test_list, transform=test_transform)
# 测试集图片数量
test_num = len(test_dataSet)

# 定义训练集的加载器
train_loader = DataLoader(trans_dataSet, batch_size=batch_size, shuffle=True, num_workers=num_workers)

# 定义测试集的加载器
test_loader = DataLoader(test_dataSet, batch_size=batch_size, shuffle=False, num_workers=num_workers)

# print("num_of_train", len(train_loader))  # 391(50000/128),相当于有391个batch,每个batch有128个样本
# print("num_of_test", len(test_loader))  # 79(10000/128),相当于有79个batch,每个batch有128个样本

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

NLTK无法下载?

以下内容仅为当前认识,可能有不足之处,欢迎讨论! 文章目录 nltk无法下载怎么办?什么是NLTK?为什么要用NLTK?如何下载? nltk无法下载怎么办? 什么是NLTK? NLTK是学习自然…

厨艺爱好者的在线互动平台:Spring Boot实现

摘 要 使用旧方法对厨艺交流信息进行系统化管理已经不再让人们信赖了,把现在的网络信息技术运用在厨艺交流信息的管理上面可以解决许多信息管理上面的难题,比如处理数据时间很长,数据存在错误不能及时纠正等问题。 这次开发的厨艺交流平台功能…

解决SpringBoot项目启动错误:找不到或无法加载主类

如何解决SpringBoot项目的“找不到或无法加载主类”启动错误 在开发SpringBoot应用时,经常可能会遇到一个启动错误:“错误:找不到或无法加载主类 com.example.controller.demo.DemoApplication”。本文将介绍三种解决这一问题的方法。 方法…

Tessy学习笔记-CTE如何生成测试用例

1:前提工作 在开始设置测试用例之前,我们还需要将树图补充完整,如下图 补充步骤, 1:在palette中,选择两个class拖动到return图标下,然后回到palette中选择DefineParent将class与Return图标连接…

在Java中,需要每120分钟刷新一次的`assetoken`,并且你想使用Redis作为缓存来存储和管理这个令牌

学习总结 1、掌握 JAVA入门到进阶知识(持续写作中……) 2、学会Oracle数据库入门到入土用法(创作中……) 3、手把手教你开发炫酷的vbs脚本制作(完善中……) 4、牛逼哄哄的 IDEA编程利器技巧(编写中……) 5、面经吐血整理的 面试技…

《Python游戏编程入门》注-第4章1

《Python游戏编程入门》的第4章是“用户输入:Bomb Cathcer游戏”,通过轮询键盘和鼠标设备状态实现Bomb Cathcer游戏。 1 Bomb Cathcer游戏介绍 “4.1 认识Bomb Cathcer游戏”内容介绍了Bomb Cathcer游戏的玩法,即通过鼠标来控制红色“挡板”…

【HarmonyOS】判断应用是否已安装

【HarmonyOS】判断应用是否已安装 前言 在鸿蒙中判断应用是否已安全,只是通过包名是无法判断应用安装与否。在鸿蒙里新增了一种判断应用安装的工具方法,即:canOpenLink。 使用该工具函数的前提是,本应用配置了查询标签querySch…

【Java基础】2、Java基础语法

f2/fnf2:选中点中的文件名 ​​​​​​​ 1.注释 为什么要有注释? 给别人和以后的自己可以看懂的解释 注释含义 注释是在程序指定位置的说明性信息;简单理解,就是对代码的一种解释 注释分类 单行注释 //注释信息 多行注释…

【Linux系统编程】线程深入运用

目录 一,C线程与系统线程 二,分离线程 三,线程结构 四,__thread关键字 五,Linux线程互斥 1,线程互斥相关的背景概念 2,互斥锁 3,死锁 4,互斥锁的弊端 六&#…

【ACM出版,EI稳定检索,九大高校联合举办, IEEE Fellow支持】2024年计算机视觉与艺术研讨会(CVA 2024)

在线投稿:学术会议-学术交流征稿-学术会议在线-艾思科蓝 2024年计算机视觉与艺术国际学术会议(CVA 2024)作为2024年人工智能、数字媒体技术与交互设计国际学术会议(ICADI 2024)的分会。此次大会旨在汇聚全球在计算机视觉与艺术…

红队工具---Behinder学习

1.什么是Behinder? Behinder 是一款用于网络渗透测试的安全工具,主要用于对 Web 应用进行攻击和漏洞利用。它提供了强大的功能,是一款红队的大杀器,几乎是现代web安全必须学习的一款webshell管理工具。 主要用途 渗透测试&#…

怿星科技薛春宇丨智能汽车软件研发工具链国产化的挑战和探索

2024年7月25日,由上海良益企业管理咨询有限公司主办的“2024域控制器技术论坛“在上海成功举办,十位嘉宾做了精彩分享。“整零有道”将陆续刊出部分演讲的文字实录,以飨读者。 本期刊出怿星科技副总经理薛春宇的演讲实录:智能汽车…

python这10个接口自动化的装饰器

在Python接口自动化测试中,装饰器可以用于增强测试函数的功能或改变其行为。以下是一些可能使用的装饰器示例: 设置和清理环境 setup:用于在测试开始前初始化环境或配置。 class CustomTestRunner: def __init__(self): self.setup_done …

【Spring】Cookie与Session

💐个人主页:初晴~ 📚相关专栏:计算机网络那些事 一、Cookie是什么? Cookie的存在主要是为了解决HTTP协议的无状态性问题,即协议本身无法记住用户之前的操作。 "⽆状态" 的含义指的是: 默认情况…

摄像头点击器常见问题——摄像头视窗打开慢

【嵌入式开发】可编程4k蓝牙摄像头点击器_能编程的摄像头-CSDN博客 拥有上述文章产品的朋友出现标题所述问题,可继续往下阅读 出现以上问题,摄像头画面打开较慢,可以按以下操作进行设置 在环境变量里设置一下这个参数,值设置为1&…

Springboot项目搭建的问题

1.第一次出现这个问题是在使用postgresql进行搭建项目的时候,但是配置文件中的驱动一致导入不了 最后发现是meaven中依赖导入不进来(不知道为什么),于是手动的在meaven中央仓库下载了对应的jar进行配置 然后项目可以正常启动 2.…

Java-I/O框架06:常见字符编码、字符流抽象类

视频链接:16.16 字符流抽象类_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1Tz4y1X7H7?spm_id_from333.788.videopod.episodes&vd_sourceb5775c3a4ea16a5306db9c7c1c1486b5&p16 1.常见字符编码 IOS-8859-1收录了除ASCII外,还包括西欧…

搜索引擎算法更新对网站优化的影响与应对策略

内容概要 随着互联网的不断发展,搜索引擎算法也在不断地进行更新和优化。了解这些算法更新的背景与意义,对于网站管理者和优化人员而言,具有重要的指导意义。不仅因为算法更新可能影响到网站的排名,还因为这些变化也可能为网站带…

CSS兼容处理

“前端开发兼容——CSS篇” 在前端开发中,CSS样式的兼容性问题常常让开发者感到棘手,尤其是当涉及到IE浏览器时。由于IE浏览器版本繁多,每个版本在CSS支持上还存在差异,这导致开发者在实现统一的视觉效果时,不得不编写…

动态规划之回文串问题

文章目录 回文子串最长回文子串分割回文串 IV分割回文串 II最长回文子序列让字符串成为回文串的最少插入次数 回文子串 题目:回文子串 思路 状态表示:dp[i][j]表示s字符串由i到j是否是回文子串状态转移方程: s[i] ! s[j],则i到j一…