Pytorch 之数据加载
Dataset 是一个抽象类,用于定义数据集的加载和预处理方式。当你需要自定义数据集时,可以通过继承 Dataset 类并实现特定的方法来创建自己的数据集。
-
Dataset类位于torch.utils.data模块中。 -
要使用
Dataset类,你需要继承它并实现以下两个方法:len(self):返回数据集中样本的数量。getitem(self, idx):根据给定的索引idx返回一个样本。
-
为了方便上面两个函数的书写,还需要再加一个初始化函数来存文件名相关的参量
[!TIP]
下面先来学习几个函数!(源于 kimi)
1 文件操作相关函数
os.path 是 os 模块中的一个子模块,专门用于处理文件路径。它提供了一组用于路径操作的函数,这些函数可以跨平台工作,即在 Windows、Linux 和 macOS 等操作系统上都能正常使用。
os.path.join 会根据操作系统使用正确的斜杠。
os.path.join(path, *paths):将多个路径组件合并成一个路径。os.path.split(path):将路径分解为头和尾两部分。os.path.basename(path):返回路径的基础文件名。os.path.dirname(path):返回路径的目录名。os.path.abspath(path):返回路径的绝对路径。os.path.normpath(path):规范化路径。os.path.exists(path):检查路径是否存在。os.path.isfile(path):检查路径是否为文件。os.path.isdir(path):检查路径是否为目录。os.path.splitext(path):将路径分解为文件名和扩展名。
2 图片导入相关函数
2.1 通过 pillow 库
- 安装 Pillow 库
首先,确保你已经安装了 Pillow 库。如果没有安装,可以通过 pip 安装:
pip install Pillow
- 导入图片
使用 Pillow 的 Image 模块,你可以轻松地打开和处理图片。
from PIL import Image
_打开图片文件_
image = Image.open('path/to/your/image.jpg')
_显示图片(需要安装Pillow的额外依赖)_
image.show()
- 处理图片(可选)
在存储之前,你可以对图片进行各种处理,比如裁剪、旋转、调整大小等。
_旋转图片_
rotated_image = image.rotate(90)
_调整图片大小_
resized_image = image.resize((300, 300))
_裁剪图片_
cropped_image = image.crop((50, 50, 200, 200))
- 存储图片
处理完图片后,你可以将其保存到文件系统中。
_保存图片_
image.save('path/to/save/image.jpg')
_保存为不同的格式_
image.save('path/to/save/image.png', 'PNG')
2.2 使用 OpenCV
如果你需要更复杂的图像处理功能,可以使用 OpenCV 库。首先安装 OpenCV:
pip install opencv-python
然后,你可以使用 OpenCV 来读取和保存图片:
import cv2
_读取图片_
image = cv2.imread('path/to/your/image.jpg')
_显示图片(使用OpenCV的窗口)_
cv2.imshow('Image', image)
cv2.waitKey(0)
cv2.destroyAllWindows()
_保存图片_
cv2.imwrite('path/to/save/image.jpg', image)
2.3 注意事项
- 当处理图像文件时,确保你有权限读取和写入指定的文件路径。
- 保存图像时,可以通过指定不同的格式来改变图像的保存格式,例如 JPEG、PNG 等。
- 在使用图像处理库时,了解库的文档是非常重要的,因为不同的库可能提供不同的功能和方法。
[!TIP]
正式开始编代码!
回忆一些最最基础的 python 知识,函数/类的定义后要加:,缩进表示范围
3 如何使用 Dataset
导入相关模块,定义 MyData 类,并重写 len(self)和getitem(self, idx)
- init 函数初始化一些文件名的操作,方便从电脑文件中导入
def init(self,root_dir,image_dir,label_dir):
_#文件路径相关_
_ _self.root_dir = root_dir
self.image_dir = image_dir
self.label_dir = label_dir
self.image_path = os.path.join(root_dir,image_dir)
self.label_dir = os.path.join(root_dir,label_dir)
- 通过编号 idx 来取出某张图片“类名[idx]”
def getitem(self,idx):
_#os.listdir(path)返回一个列表,其中包含了目录中的所有条目,包括文件和子目录_
_ _self.imgs_path = os.listdir(self.image_path)
img_item_path = os.path.join(self.image_path,self.imgs_path[idx])
img = Image.open(img_item_path)
label = self.label_dir
return img,label
- 重写 len 函数
def len(self):
return len(self.imgs_path)
#img文件夹中图片的数量
- 如何调用/调试?
通过 pycharm 下面的 consle 来调试,可以非常方便的展示所有变量
#通过目录等信息创建实例
root_dir = "dataset\train"
label_dir = "ants_label"
image_dir = "ants_image"
ants_label_dir = "ants"
ants_dataset = MyData(root_dir,image_dir,label_dir)
#取出第一张图片并显示
img,label = ants_dataset[0]
img.show()
1061

被折叠的 条评论
为什么被折叠?



