前言
在进行tensor图片数据进行视觉时,一般会进行预处理操作,这个时候就需要用到ToTensor()和Normalize()这两个函数.
提示:以下是本篇文章正文内容,下面案例可供参考
一.ToTensor函数
1.ToTensor函数的作用
1.将shape为(H,W,C)的数据维度转变为(C,H,W),其中C表示通道数,H表示高度,W表示宽度。
2. 将输入数据归一化到(0,1)的范围内,其归一化方法为除以255进行缩放
2.代码实现
import torch
import torchvision
from torchvision.transforms import transforms
import numpy as np
'''tranforms.Compose将多个函数进行组合'''
tranforms_1 = transforms.Compose([transforms.ToTensor()])
tensor1 = np.array([[[1,2,3],[4,5,6],[7,8,9],[5,6,7]],
[[1,2,3],[4,5,6],[7,8,9],[5,6,7]],
[[1,2,3],[4,5,6],[7,8,9],[5,6,7]],
[[1,2,3],[4,5,6],[7,8,9],[5,6,7]]],dtype = np.float32)
print(f'未转换数据前数据的维度为{tensor1.shape}')
trans_tensor1 = tranforms_1(tensor1)
print(f'转换后数据的维度为{trans_tensor1.shape}')
3.数据没有归一化问题
可以看到,在经过ToTensor()函数的处理之后,维度确实发生了变化,达到预期的效果,接下来再输出转换前的数据和转换后的数据。
print(tensor1[0])
print(trans_tensor1[0])
可以发现,转换后的trans_tensor1虽然维度确实发现了变化,可是数据应该缩放到[0,1]的范围,但是数据本身却没有发生变化,进入到ToTensor()的实现函数查看原因
可以看到,传入的数据需要是字节类型的数据,否则会返回传入的数据本身。那么传入的数据类型究竟应该是什么呢?接下来使用cv函数读取图片并转换数据查看结果
import cv2
images = cv2.imread('../data/cat1.jpg')
images_result = tranforms_1(images)
print(images.shape,images_result.shape)
print(images_result[0])
print(images.dtype)
在传入图片调用ToTensor()函数后,发现数据的维度发生了变化,数据也归一化,输出image的数据类型发现,为unit8,接着我们将前面的numpy数组的数据类型转变为unit8后发现,输出结果正常,因此传入的数据需要为unit8
tensor1 = np.array([[[1,2,3],[4,5,6],[7,8,9],[5,6,7]],
[[1,2,3],[4,5,6],[7,8,9],[5,6,7]],
[[1,2,3],[4,5,6],[7,8,9],[5,6,7]],
[[1,2,3],[4,5,6],[7,8,9],[5,6,7]]],dtype = np.uint8)
print(tensor1[0])
print(trans_tensor1[0])
二.Normalize()函数
1.Normalize函数的作用
Normalize()函数的作用是将数据转换为标准高斯分布,每个通道都进行标准化,即每个通道的均值都变为0,标准差都变为1,这样可以加快模型的收敛。
2.代码实现
`'''均值mean=[0.485, 0.456, 0.406],
标准差std=[0.229, 0.224, 0.225]
这一组数据是由Imagenet训练集中抽样训练出来的'''
tranforms_2 = transforms.Compose([transforms.ToTensor(),transforms.Normalize
(mean = [0.485, 0.456, 0.406],
std = [0.229, 0.224, 0.225])])
tensor1 = np.array([[[1,2,3],[4,5,6],[7,8,9],[5,6,7]],
[[1,2,3],[4,5,6],[7,8,9],[5,6,7]],
[[1,2,3],[4,5,6],[7,8,9],[5,6,7]],
[[1,2,3],[4,5,6],[7,8,9],[5,6,7]]],dtype = np.uint8)
trans_tensor2 = tranforms_2(tensor1)
trans_tensor2
Original: https://blog.csdn.net/m0_59249046/article/details/126800077
Author: m0_59249046
Title: 浅谈对transforms.ToTensor()和transforms.Normalize()函数的理解
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/762732/
转载文章受原作者版权保护。转载请注明原作者出处!