深度学习处理图像的方式和传统图像处理有着本质的不同。传统图像是直观的,可解释的,而深度学习并未做到那么的可解释性。哈工大的倪院士说过,深度学习最大的挑战在于其难以用一个数学公式进行描述,而正因为其中的特性导致了其黑匣子特性。
本篇将分为三部分进行解说即:数据处理部分、模型部分、优化部分。同时本篇将使用pytorch1.10.1及python3.9在windos上进行开发。
数据处理部分
a、依赖模块:
from torch.utils.data import DataLoader, Dataset
import matplotlib.pyplot as plt
import os
import cv2
import torch
from torchvision import transforms
import numpy as np
b、获取数据集的每张图片的标签及数据
class GetDataPath(Dataset):
def __init__(self, root_dir, transform=None):
self.root_dir = root_dir
self.transform = transform
self.images = os.listdir(self.root_dir)
def __len__(self):
return len(self.images)
def __getitem__(self, index):
image_index = self.images[index]
img_path = os.path.join(self.root_dir, image_index)
img = cv2.imread(img_path)
label = img_path.split('\\')[-1].split('.')[
0]
sample = [img,label]
if self.transform:
sample = self.transform(sample)
return sample
c、测试上述类
data = GetDataPath('D:/DataSet/smallChip',transform=None)
dataloader = DataLoader(data,batch_size=128,shuffle=True)
for batch_index, (images, labels) in enumerate(training_data):
print(batch_index)
print(images.size())
print(labels)
注意:如果处理数据的时候没注意,采用了英文命名的方式的话要将label映射成int型的数据,然后将其由list转换为tensor
d、数据加载
data = GetDataPath('D:/DataSet/smallChip', transform= None)
training_data = DataLoader(data,shuffle=True, num_workers=2, batch_size=1)
这里可能需要将图像数据由byte转换为float
for batch_index, (images, labels) in enumerate(training_data):
images = images.permute(0,3,1,2)
images = images.float()
是不是觉得自己写类很麻烦,而且容易出错?
pytorch自带方法:
import torchvision.datasets as datasets
train_dataset = datasets.ImageFolder(
'D:/DataSet/PythonTrainingData/SmaillChip',
transforms.Compose([
transforms.RandomHorizontalFlip(),
transforms.ToTensor(),
]))
dataloader = DataLoader(train_dataset, batch_size=128, shuffle=True,pin_memory=True)
有何不同?
除了方便,不容易出错没啥不同的 ~ == ~
函数名作用Resize把给定的图片resize到given sizeNormalize用均值和标准差归一化张量图像ToTensorconvert a PIL image to tensor (H
C) in range [0,255] to a torch.Tensor(C
W) in the range [0.0,1.0]CenterCrop在图片的中间区域进行裁剪RandomCrop在一个随机的位置进行裁剪FiceCrop把图像裁剪为四个角和一个中心RandomResizedCrop将PIL图像裁剪成任意大小和纵横比ToPILImageconvert a tensor to PIL imageRandomHorizontalFlip以0.5的概率水平翻转给定的PIL图像RandomVerticalFlip以0.5的概率竖直翻转给定的PIL图像Grayscale将图像转换为灰度图像RandomGrayscale将图像以一定的概率转换为灰度图像ColorJitter随机改变图像的亮度对比度和饱和度
Original: https://blog.csdn.net/qq_36559788/article/details/123255381
Author: 黑桃不带K
Title: 深度学习图像处理(一)
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/641136/
转载文章受原作者版权保护。转载请注明原作者出处!