1

我正在用 pytorch 实现一篇关于图像分割的论文。我需要做一些预处理步骤,但因为我是第一次尝试,所以我无法将它们合并到传统的管道中。以下是预处理步骤-

1) N(w, h) = I(w, h) − G(w, h), (1) 其中N为归一化图像,I为原始图像,G为核大小为65的高斯模糊图像*65 和 0 均值和标准差 10。

2)归一化平均图像并将每个像素除以平均标准差。

以下是我上述步骤的代码片段-

def gaussian_blur(img):
    image = cv2.GaussianBlur(image,(65,65),10)
    new_image = img - image
return image

def normalise(img):
    img_normalised = np.empty(img.shape)
    img_std = np.std(img)
    img_mean = np.mean(img)
    img_normalized = (img-img_mean)/imgs_std

    for i in range(img.shape[1]):
        img_normalized[i] = (img_normalized - 
         np.mean(img_normalized))/np.std(img_normalized)
return img_normalized

我真的不确定如何在传统的 pytorch 数据加载器管道中添加上述功能,例如首先我应该使用ImageFolder然后应用加载数据集或先应用然后使用ImageFolder方法。

4

1 回答 1

0

我就是这样做的——

第一部分的解决方案是首先定义所需的函数,然后通过以下方式使用通用转换调用转换 -

def gaussian_blur(img):
   image = np.array(img)
   image_blur = cv2.GaussianBlur(image,(65,65),10)
   new_image = image - image_blur
   im = Image.fromarray(new_image)
return im

第二部分的解决方案是遍历每个图像并计算均值和标准偏差,然后最终在变换中调用均值和标准偏差值。-

   train_mean = []
   train_std = []

   for i,image in enumerate(train_loader,0):
       numpy_image = image[0].numpy()
       batch_mean = np.mean(numpy_image, axis=(0, 2, 3))
       batch_std = np.std(numpy_image, axis=(0, 2, 3))

       train_mean.append(batch_mean)
       train_std.append(batch_std)

   train_mean = torch.tensor(np.mean(train_mean, axis=0))
   train_std = torch.tensor(np.mean(train_std, axis=0))

    print('Mean:', train_mean)
    print('Std Dev:', train_std)

最终的转换调用看起来像这样 -

data_transforms = transforms.Compose([transforms.RandomCrop(512,512),
                                 transforms.Lambda(gaussian_blur),
                                 transforms.RandomRotation([+90,+180]),
                                 transforms.RandomRotation([+180,+270]),
                                 transforms.RandomHorizontalFlip(),
                                 transforms.ToTensor(),
                                 transforms.Normalize(mean=train_mean, std=train_std)
                               ])
于 2019-07-22T12:47:44.033 回答