绝对路径与相对路径差别
transforms的使用
from torchvision import transforms
from PIL import Imageimg_path ="dataset/train/bees/16838648_415acd9e3f.jpg"
img = Image.open(img_path)
tensor_trans = transforms.ToTensor()
tensor_img =tensor_trans(img)
print(tensor_img)
python中 导包写法复习
transforms.ToTensor() 的写法 transforms表示模块 ToTensor 表示函数
from torchvision import transforms
from
: 指明我们要从某个包或模块中导入。torchvision
: 这是一个包(package),是 PyTorch 生态系统中专门用于计算机视觉任务的库。import
: 指明我们要导入什么。transforms
: 这是torchvision
包中的一个模块,专门用于图像转换和数据增强
Transforms 的使用(二)
from torchvision import transforms
from PIL import Image
from torch.utils.tensorboard import SummaryWriterimg_path ="dataset/train/bees/16838648_415acd9e3f.jpg"
img = Image.open(img_path)writer = SummaryWriter("logs")tensor_trans = transforms.ToTensor()
tensor_img =tensor_trans(img)
writer.add_image("Tensor_img",tensor_img)
writer.close()
常见的transform
__call__的作用:
Totensor的使用 :
Normalize归一化的使用:
print(tensor_img[0][0][0])
trans_norm = transforms.Normalize([0.5,0.5,0.5],[0.5,0.5,0.5])
img_norm = trans_norm(tensor_img)
print(img_norm[0][0][0])
writer.close()
代码分析
三维均值与标准差
-
彩色图像结构:
大多数彩色图像使用RGB(红、绿、蓝)颜色模型。每个像素由这三个颜色通道的值组成。 -
通道独立处理:
在图像处理和深度学习中,通常会对每个颜色通道独立进行标准化。这意味着每个通道都有自己的均值和标准差。 -
三维均值和标准差:
- 均值:[mean_R, mean_G, mean_B]
- 标准差:[std_R, std_G, std_B]
其中,mean_R 和 std_R 分别是红色通道的均值和标准差,以此类推。
标准化公式
def forward(self, tensor: Tensor) -> Tensor: return F.normalize(tensor, self.mean, self.std, self.inplace)
这里的 F.normalize
是 PyTorch 的函数式接口中的一个函数,它封装了标准化的具体实现。虽然我们在这个类的定义中没有看到具体的计算过程,但是这个标准化公式是 F.normalize
函数内部实现的核心逻辑。
PyTorch 的文档和源码中会详细说明 F.normalize
函数的具体实现。标准化公式 output[channel] = (input[channel] - mean[channel]) / std[channel]
是在 F.normalize
函数内部执行的。
Resize的使用
print(img.size)
trans_resize = transforms.Resize((512,512))
img_resize = trans_resize(img)
img_resize = tensor_trans(img_resize)
writer.add_image("Resize",img_resize,0)
print(img_resize)
Compose 的使用 :
Compose 将两个函数功能结合
trans_resize_2 = transforms.Resize(512)
trans_compose = transforms.Compose([trans_resize_2,tensor_trans])
img_resize2 = trans_compose(img)
writer.add_image("Resize2",img_resize2,1)
writer.close()
RandomCrop裁剪:
trans_Randomcrop = transforms.RandomCrop(256)
trans_compose2 = transforms.Compose([trans_Randomcrop,tensor_trans])
for i in range(10):img_crop = trans_compose2(img)writer.add_image("Randomcrop",img_crop,i)
writer.close()
完整代码
from torchvision import transforms
from PIL import Image
from torch.utils.tensorboard import SummaryWriterimg_path ="dataset/train/bees/16838648_415acd9e3f.jpg"
img = Image.open(img_path)writer = SummaryWriter("logs")tensor_trans = transforms.ToTensor()
tensor_img =tensor_trans(img)
writer.add_image("Tensor_img",tensor_img)
#print(tensor_img)
#Normalize 归一化
print(tensor_img[0][0][0])
trans_norm = transforms.Normalize([0.5,0.5,0.5],[0.5,0.5,0.5])
img_norm = trans_norm(tensor_img)
print(img_norm[0][0][0])
writer.add_image("Normalize",img_norm)
writer.close()##Resize
print(img.size)
trans_resize = transforms.Resize((512,512))
img_resize = trans_resize(img)
img_resize = tensor_trans(img_resize)
writer.add_image("Resize",img_resize,0)
print(img_resize)#Compose
trans_resize_2 = transforms.Resize(64)
trans_compose = transforms.Compose([trans_resize_2,tensor_trans])
img_resize2 = trans_compose(img)
writer.add_image("Resize2",img_resize2,1)
writer.close()
#RandomCrop
trans_Randomcrop = transforms.RandomCrop(256)
trans_compose2 = transforms.Compose([trans_Randomcrop,tensor_trans])
for i in range(10):img_crop = trans_compose2(img)writer.add_image("Randomcrop",img_crop,i)
writer.close()