栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

修改nifti文件的标签

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

修改nifti文件的标签

您在使用 PyTorch 进行语义图像分割时遇到了这个问题?这是对我有用的解决方案。

简介

目前,我正在做一个关于CT扫描中全身语义肿瘤分割的项目,但你知道,解决这类问题并不容易,所以在本文中,我将讨论一个著名的错误,你可能在使用PyTorch时遇到过。

因此,看看这个错误,程序没有指定错误的确切部分。对我来说,我一直打印图像和标签的形状和值,以查看确切的错误在哪里。

我将向您展示在我的项目中发现的错误,以及如何解决它们,希望它也将为您工作。

问题的所在

对我来说,问题出在标签上,我很肯定你在这方面也有问题。让我来谈谈我发现的问题然后我们来解决它。

我的问题在于标签的值,程序检测多个类别(大于两类),而不是两个类(背景和前景)。所以在每个病人身上有不同数量的肿瘤可以检测到不同种类的肿瘤,而我们只需要分辨出前景和背景。

从上图你可以看到在这个切片中,我应该有相同的颜色,但不是那样,我有两个不同的颜色,这意味着程序看到3类(包括背景)。

如果你不经过预处理就把它画出来你可以看到所有的肿瘤都有相同的颜色(在视觉方面)但实际上,它们都有不同的标签值因此它们会被检测为不同的类别。如下图所示:

解决方法

正如我告诉你们的,主要的问题是对于不同肿瘤标签值不同。

你还应该注意到标签值应该是0或1,因为如果你在做语义分割,你不需要其他值。

如果你想检查标签值,你可以使用一个叫做unique 的NumPy函数,这个函数会给你不同的值。

解决这个问题有很多方法,但是最简单的一个是标签转换成布尔值意味着标签将只有“真”或“假”(假的背景,值为0和其他为前景,为真)。

在开始训练和验证(如果有的话)之前,您只需添加这一行。label = label > 0

否则,如果你想处理0和1这取决于你有什么问题。如果你标签只有大于1的值,那么你可以用标签值除以它们的最大值。或者如果你有多类别的问题,那么在这里我建议你在训练部分外解决问题,这样你就不会减慢训练的进程。

代码实现样例
import os
from glob import glob
import numpy as np
import nibabel as nib
input_nifti_file_path = r"E:datasetsvesselniftiFileslabels*"
out_nifti_file_path = r"E:datasetsvesselniftiFileslabels2"
list_labels = glob(input_nifti_file_path)

for patient in list_labels:
    patient_name = os.path.basename(os.path.normpath(patient))
    nifti_file = nib.load(patient)
    # fdata = nifti_file.get_fdata()
    # np_unique = np.unique(fdata)
    # print(np_unique)
    data = np.asarray(nifti_file.dataobj)
    np_unique = np.unique(data)
    print(np_unique)
    a = np.where(data >= 1)
    data[a] = 1
    new_nifti = nib.Nifti1Image(data, nifti_file.affine)
    nib.save(new_nifti, os.path.join(out_nifti_file_path, patient_name))
3. 其他说明

要特别注意,当使用函数

data = nifti_file.get_fdata()

的时候,会把nifti_file和data都cache在内存里,你后面改变data或nifti_file,前面定义的变量也会改变,而且容易造成out of memory,使用

data_array = np.asarray(nifti_file.dataobj)

更符合平时对变量的理解

参考目录

https://blog.csdn.net/zhangjipinggom/article/details/116770250
https://pycad.co/runtimeerror-cuda-error-device-side-assert-triggered/

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/715476.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号