一、维度准换总结
PIL与OpenCV读出的图片的numpy维度顺序都是: HWC(非单通道), HW(单通道)
OpenCV的RGB维度顺序是:BGR; PIL的RGB维度顺序是:RGB
Pytorch Dalaloader出来之后, Numpy都会转Tensor, 得到Tensor的维度顺序是: BCHW(非单通道),BHW(单通道)
PyTorch中ToTensor的操作: 除以255,并进行维度调整
PyTorch中ToTensor维度调整: HWC->CHW, HW->CHW
Pytorch中ToTensor要求输入的数据类型: PIL图像对象或Numpy数组
ToTensor与不ToTensor的区别:
# 对于Edge的处理
img_B_edge = Image.open(img_B_edge_path).convert('L') #PIL HW 0~255
img_B_edge = transforms.ToTensor()(img_B_edge) #Tensor CHW 0~1
output of dataloader #Tensor BCHW 0~1
# 对于Mask的处理
img_B_mask = Image.open(img_B_mask_path).convert('L') #PIL HW 0~255
img_B_mask = np.array(img_B_mask, dtype=np.int64) #Numpy HW 0~255
output of dataloader #Tensor BHW 0~255
# 对于RGB图像的处理
img_B = Image.open(img_B_path).convert('RGB') #PIL HWC 0~255
img_B = transforms.ToTensor()(img_B) #Tensor CHW 0~1
output of dataloader #Tensor BCHW 0~1
# 对于灰度图像的处理
img = Image.open(img_path).convert('L') #PIL HW 0~255
img = transforms.ToTensor()(img) #Tensor CHW 0~1
output of dataloader #Tensor BCHW 0~1
所以:之前就只有BCHW的区别和BHW的区别
二、可能存在的问题
已经解决
更正:不存在了,因为是.convert(‘L’)操作,到numpy时只有单通道。
numpy时: hw
dataloader时: bhw
对于:img_A_edge和img_B_edge 官方的:直接除以255 我的:直接ToTensor 区别:我的维度为chw,别人的为hwc
已经解决
确实默认是固定住,也已经固定住
按照目前这种形式,每次加载图片的顺序,都需要固定住
等待解决
IR_pos_h = np.random.randint(0, 32) IR_pos_w = np.random.randint(0, 104) 当中的具体数值也需要注意 注意:这是红外的训练过程,为什么这样裁剪,应当看训练过程
已经解决
不需要固定住,原版也没有固定住
随机缩放裁剪的情况,可能需要固定住
等待解决
是不是bhw影响了获取梯度的那个函数