我正在研究一个核分割问题,我试图在染色组织图像中识别细胞核的位置。给定的训练数据集有一张染色组织的图片和一个带有细胞核位置的掩码。由于数据集很小,我想尝试在 PyTorch 中进行数据增强,但在这样做之后,由于某种原因,当我输出我的蒙版图像时,它看起来很好,但相应的组织图像不正确。
我所有的训练图像都在X_trainshape(128, 128, 3)中,相应的掩码在Y_trainshape中(128, 128, 1),类似的交叉验证图像和掩码分别在X_val和Y_val中。
Y_trainY_val有dtype = np.bool,有。_ X_train_X_valdtype = np.uint8
在数据增强之前,我会这样检查我的图像:
fig, axis = plt.subplots(2, 2)
axis[0][0].imshow(X_train[0].astype(np.uint8))
axis[0][1].imshow(np.squeeze(Y_train[0]).astype(np.uint8))
axis[1][0].imshow(X_val[0].astype(np.uint8))
axis[1][1].imshow(np.squeeze(Y_val[0]).astype(np.uint8))
输出如下: Before Data Augmentation
对于数据扩充,我定义了一个自定义类,如下所示:
在这里我导入torchvision.transforms.functional
了TF
和torchvision.transforms as transforms
。images_np
并且masks_np
是 numpy 数组的输入。
class Nuc_Seg(Dataset):
def __init__(self, images_np, masks_np):
self.images_np = images_np
self.masks_np = masks_np
def transform(self, image_np, mask_np):
ToPILImage = transforms.ToPILImage()
image = ToPILImage(image_np)
mask = ToPILImage(mask_np.astype(np.int32))
angle = random.uniform(-10, 10)
width, height = image.size
max_dx = 0.2 * width
max_dy = 0.2 * height
translations = (np.round(random.uniform(-max_dx, max_dx)), np.round(random.uniform(-max_dy, max_dy)))
scale = random.uniform(0.8, 1.2)
shear = random.uniform(-0.5, 0.5)
image = TF.affine(image, angle = angle, translate = translations, scale = scale, shear = shear)
mask = TF.affine(mask, angle = angle, translate = translations, scale = scale, shear = shear)
image = TF.to_tensor(image)
mask = TF.to_tensor(mask)
return image, mask
def __len__(self):
return len(self.images_np)
我得到这个作为我的输出: After Data Augmentation 1
当我将行更改axis_1.imshow(img.astype(np.uint8))为时axis_1.imshow(img),
我得到这张图片: 数据扩充后 2
面具的图像是正确的,但由于某种原因,细胞核的图像是错误的。使用 时.astype(np.uint8),组织图像完全是黑色的。
没有.astype(np.uint8),核的位置是正确的,但配色方案全乱了(我希望图像像数据增强之前看到的那样,灰色或粉红色),加上网格中同一图像的 9 个副本由于某种原因显示。你能帮我得到组织图像的正确输出吗?
叮当猫咪
相关分类