pytorch学习笔记-数据加载与处理

这篇博客介绍了PyTorch中数据加载与处理的基本步骤,包括使用os和torch等库,处理数据集,创建自定义Dataset类,实现图像预处理如调整大小和随机裁剪,以及使用DataLoader进行批量加载和数据增强。
摘要由CSDN通过智能技术生成

前言

初学pytorch,计划边学边做做笔记。深度学习的问题中,经常要处理数据,pytorch自带一些数据集,对于普通的数据集,需要我们自己进行处理。

1、头文件介绍

  • os: python处理文件和目录的模块
  • torch: pytorch 1.0, 深度学习库
  • pandas: 用于更好的处理csv数据
  • skimage: scikit-image, 用于图像输入输出和转换
  • numpy: 一个运行速度很快的数学库
  • matplotlib: 数据可视化工具
  • torchvision: 包含常用的数据集、模型和图片转换函数
import os
import torch
import pandas as pd
from skimage import io, transform
import numpy as np
import matplotlib.pyplot as plt
from torch.utils.data import Dataset, DataLoader
from torchvision import transforms, utils

2、数据集

2.1 下载数据

点击下载
下载文件中包括脸部数据集,和一个注释文件 face_landmarks.csv 第一列是图片名,后面的对应的是N个脸部特征标记点,如图:
 face_landmarks.csv

2.2 处理注释数据

将坐标点处理成[x,y]的形式

#处理注释文件,每个坐标点由两个横纵坐标组成
landmarks_frame = pd.read_csv('faces/face_landmarks.csv')
n = 65
img_name = landmarks_frame.iloc[n,0] # 获取第一列的图片名
landmarks = landmarks_frame.iloc[n,1:].values # 获取所有坐标 shape:(136,)
landmarks = landmarks.astype('float').reshape(-1,2) #转换为(x,y) shape:(68,2)

print('Image name:{}'.format(img_name))
print('Landmarks shape:{}'.format(landmarks.shape))
print('First 4 landmarks:{}'.format(landmarks[:4]))

结果如下:
在这里插入图片描述

2.3 展示图像和特征点

# 把图像和对应的特征点标记展示出来
def show_landmarks(image, landmarks):
    plt.imshow(image)
    # A scatter plot of y vs x with varying marker size and/or color.
    plt.scatter(landmarks[:, 0], landmarks[:, 1], s=10, marker='.', c='r')

plt.figure()
show_landmarks(io.imread(os.path.join('faces/',img_name)),landmarks)
plt.show()

得到的结果:
在这里插入图片描述

3、Dataset类介绍

3.1 原理

torch.utils.data.Dataset是一个PyTorch用来表示数据集的抽象类。我们用来处理自己的数据集的时候必须继承Dataset,然后重写下面的函数:

  • __len__: 使得len(dataset)返回数据集的大小
  • __getitem__:使得dataset[i]能够返回第i个数据样本

3.2 创建数据集

  • __init__函数中完成csv文件的读取
  • 在类的__getitem__函数中完成图片的读取。在需要时才读入图片,减小内存开销
  • 接收一个可选参数transform,用来对图片进行改变
  • 返回的样本数据是一个字典形式,如下:
    {'image':image,'landmarks':landmarks}

脸部图像类的定义:

class FaceLandmarksDataset(Dataset):
    def 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值