癌症语义分割中的图像和掩模归一化
Posted
技术标签:
【中文标题】癌症语义分割中的图像和掩模归一化【英文标题】:Image and mask normalization in semantic segmentation for cancer 【发布时间】:2021-08-14 08:36:35 【问题描述】:有人可以帮我在语义分割任务中,应该在批处理生成器类中对图像和掩码进行归一化还是只对其中一个进行归一化?
我正在使用以下代码来规范化图像和蒙版:
mean_val, std_val = img.mean(), img.std()
img = (img - mean_val)/std_val
例如:
这里的图像和相应的掩码针对前列腺癌分割任务进行了归一化
这里只有掩码被标准化
哪一个是正确的做法?
def __getitem__(self,i):
index= self.indexes[i * self.batch_size : (i + 1) * self.batch_size]
X = np.empty((self.batch_size, self.crop_dim[0], self.crop_dim[1],3)).astype(np.uint8)
Y = np.empty((self.batch_size, self.crop_dim[0], self.crop_dim[1],5)).astype(np.uint8)
for i,ID in enumerate(index):
dim= (self.crop_dim[0],self.crop_dim[1])
img=cv2.imread(self.img_list[ID],cv2.COLOR_BGR2RGB)
img = cv2.resize(img,dim)
mask=imageio.imread(self.labels[ID],as_gray=False, pilmode="RGB")
mask = cv2.resize(mask,dim)
mask= create_labels(mask)
# Augement training patches only
if self.augmentation:
sample = self.augmentation(image=img_numpy, mask=mask_numpy)
img_numpy, mask_numpy = sample['image'], sample['mask']
mean_val, std_val = img.mean(), img.std()
img = (img - mean_val)/std_val
mean_val_mask, std_val_mask = mask.mean(), mask.std()
mask= (mask - mean_val_mask)/std_val_mask
X[i,]=img_numpy
Y[i,]=mask_numpy
【问题讨论】:
【参考方案1】:不!
您不想规范化标签 - 您想直接预测它们,您不希望目标(每个像素)根据掩码的全局统计信息发生变化。
为什么要规范化? 将输入标准化为 DNN 模型是一种常见的做法。这是出于控制不同层激活的“动态范围”的愿望。这反过来又有助于优化过程以更快速和稳定的方式收敛。 您可以在这篇优秀的论文中找到对这种规范化的深入分析: He, K.、Zhang, X.、Ren, S. 和 Sun, J.,Delving deep into rectifiers: Surpassing human-level performance on imagenet classification(ICCV 2015)。
这个理由不适用于标签。
【讨论】:
以上是关于癌症语义分割中的图像和掩模归一化的主要内容,如果未能解决你的问题,请参考以下文章