深度学习图像处理(一)

 深度学习处理图像的方式和传统图像处理有着本质的不同。传统图像是直观的,可解释的,而深度学习并未做到那么的可解释性。哈工大的倪院士说过,深度学习最大的挑战在于其难以用一个数学公式进行描述,而正因为其中的特性导致了其黑匣子特性。

本篇将分为三部分进行解说即:数据处理部分、模型部分、优化部分。同时本篇将使用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/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球