一、维度准换总结
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的区别
二、数据预处理总结
- 对于mask的缩放裁剪,一定要用最临近插值
- 之前所有代码,都犯了这个错误
三、可能存在的问题
已经解决
更正:不存在了,因为是.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) 当中的具体数值也需要注意 注意:这是红外的训练过程,为什么这样裁剪,应当看训练过程 原来的图像,load和crop分别为: 288 256 现在的图像,load和crop分别为: 300 288 所以可以继续使用这个数
已经解决
不需要固定住,原版也没有固定住
随机缩放裁剪的情况,可能需要固定住
已解决
等待解决
是不是bhw影响了获取梯度的那个函数 确实是这个地方影响的
已解决
*等待解决这部分代码
可能影响着语义分割网络的尺寸if self.netS_freezing_idx == 0.0: rand_scale = torch.randint(32, 80, (1, 1)) #32, 80 rand_size = int(rand_scale.item() * 4) rand_size_B = int(rand_scale.item() * 4) else: rand_size_B = 256 rand_size = 256
已解决
等待解决
Optional Scale Robustness Loss on generated fake images
这部分所缩放的尺寸可能存在问题
- 未解决
- Encoder的那个地方可能需要修改
因为目前所有方法都是按照同一种方式写的