当前位置: 首页 > news >正文

nnUnet 大模型学习笔记(续):训练网络(3d_fullres)以及数据集标签的处理

目录

1. 数据集处理

1.1 实现脚本

1.2 json文件

2. 设置读取路径

2.1 设置路径

2.2 数据集转换

2.3 数据集预处理

2.4 训练(3d_fullres)

3. 训练结果展示


关于nnUnet 数据集的处理和环境搭建,参考上文:第四章:nnUnet大模型之环境配置、数据集制作-CSDN博客

1. 数据集处理

因为上文数据集的标签有很多问题,虽然处理起来很简单,为了防止后续需要,这里记录下

观察上文发现,数据的标签是19类别,但是mask的绘制不是连续的0 1 2 3,这样在图像分割中是

不允许的,需要做灰度映射。

实际上,在做unet一些列多类别分割的时候,已经介绍过自适应的灰度映射,这里只做简单介绍,具体参考下文:Unet 实战分割项目、多尺度训练、多类别分割_unet实例分割-CSDN博客

如果数据没有问题的话,直接跳到第二章即可!!

1.1 实现脚本

如下

import SimpleITK as sitk
import numpy as np
import os
from tqdm import tqdm
import shutildef main():root = 'labelsTr'images = [os.path.join(root, u) for u in os.listdir(root)]root_ret = 'ret_labelsTr'if os.path.exists(root_ret):shutil.rmtree(root_ret)os.mkdir(root_ret)# 计算灰度cl = []for i in tqdm(images, desc='process'):mask = sitk.ReadImage(i)mask = sitk.GetArrayFromImage(mask)mask = np.unique(mask)for h in mask:if h not in cl:cl.append(h)cl.sort()n = len(cl)print(cl)       # [0, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22]print('分割的个数:',n)if n == cl[n-1]:return# 灰度映射for i in tqdm(images, desc='process'):mask = sitk.ReadImage(i)mask = sitk.GetArrayFromImage(mask)for index,h in enumerate(cl):mask[mask==h] = indexmask = sitk.GetImageFromArray(mask)ret_path = i.replace(root,root_ret)sitk.WriteImage(mask,ret_path)# 检查灰度cl_ret = []images = [os.path.join(root_ret, u) for u in os.listdir(root_ret)]for i in tqdm(images, desc='process'):mask = sitk.ReadImage(i)mask = sitk.GetArrayFromImage(mask)mask = np.unique(mask)for h in mask:if h not in cl_ret:cl_ret.append(h)cl_ret.sort()n = len(cl_ret)print(cl_ret)       # [0, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22]print('处理后分割的个数:',n)if __name__ == '__main__':main()

摆放如下:脚本会将labelsTr的标签自动映射成0 1 2 3连续的,并且保存在新生成的ret下

运行如下:

可以看到mask的灰度已经进行了映射

通过itk打开,可以发现mask并没有改变,只是里面的数字变了,这样颜色显示也就变了

源标签:

处理完的:

1.2 json文件

更改如下:当然新的json文件可以用上文的脚本生成

{"labels": {"0": "background","1": "L1","2": "L2","3": "L3","4": "L4","5": "L5","6": "L6","7": "L7","8": "L8","9": "L9","10": "L10","11": "L11","12": "L12","13": "L13","14": "L14","15": "L15","16": "L16","17": "L17","18": "L18"},"modality": {"0": "CT"},"numTest": 0,"numTraining": 40,"tensorImageSize": "3D","test": [],"training": [{"image": "./imagesTr/spine_001.nii.gz","label": "./labelsTr/spine_001.nii.gz"},{"image": "./imagesTr/spine_002.nii.gz","label": "./labelsTr/spine_002.nii.gz"},{"image": "./imagesTr/spine_003.nii.gz","label": "./labelsTr/spine_003.nii.gz"},{"image": "./imagesTr/spine_004.nii.gz","label": "./labelsTr/spine_004.nii.gz"},{"image": "./imagesTr/spine_005.nii.gz","label": "./labelsTr/spine_005.nii.gz"},{"image": "./imagesTr/spine_006.nii.gz","label": "./labelsTr/spine_006.nii.gz"},{"image": "./imagesTr/spine_007.nii.gz","label": "./labelsTr/spine_007.nii.gz"},{"image": "./imagesTr/spine_008.nii.gz","label": "./labelsTr/spine_008.nii.gz"},{"image": "./imagesTr/spine_009.nii.gz","label": "./labelsTr/spine_009.nii.gz"},{"image": "./imagesTr/spine_010.nii.gz","label": "./labelsTr/spine_010.nii.gz"},{"image": "./imagesTr/spine_011.nii.gz","label": "./labelsTr/spine_011.nii.gz"},{"image": "./imagesTr/spine_012.nii.gz","label": "./labelsTr/spine_012.nii.gz"},{"image": "./imagesTr/spine_013.nii.gz","label": "./labelsTr/spine_013.nii.gz"},{"image": "./imagesTr/spine_014.nii.gz","label": "./labelsTr/spine_014.nii.gz"},{"image": "./imagesTr/spine_015.nii.gz","label": "./labelsTr/spine_015.nii.gz"},{"image": "./imagesTr/spine_016.nii.gz","label": "./labelsTr/spine_016.nii.gz"},{"image": "./imagesTr/spine_017.nii.gz","label": "./labelsTr/spine_017.nii.gz"},{"image": "./imagesTr/spine_018.nii.gz","label": "./labelsTr/spine_018.nii.gz"},{"image": "./imagesTr/spine_019.nii.gz","label": "./labelsTr/spine_019.nii.gz"},{"image": "./imagesTr/spine_020.nii.gz","label": "./labelsTr/spine_020.nii.gz"},{"image": "./imagesTr/spine_021.nii.gz","label": "./labelsTr/spine_021.nii.gz"},{"image": "./imagesTr/spine_022.nii.gz","label": "./labelsTr/spine_022.nii.gz"},{"image": "./imagesTr/spine_023.nii.gz","label": "./labelsTr/spine_023.nii.gz"},{"image": "./imagesTr/spine_024.nii.gz","label": "./labelsTr/spine_024.nii.gz"},{"image": "./imagesTr/spine_025.nii.gz","label": "./labelsTr/spine_025.nii.gz"},{"image": "./imagesTr/spine_026.nii.gz","label": "./labelsTr/spine_026.nii.gz"},{"image": "./imagesTr/spine_027.nii.gz","label": "./labelsTr/spine_027.nii.gz"},{"image": "./imagesTr/spine_028.nii.gz","label": "./labelsTr/spine_028.nii.gz"},{"image": "./imagesTr/spine_029.nii.gz","label": "./labelsTr/spine_029.nii.gz"},{"image": "./imagesTr/spine_030.nii.gz","label": "./labelsTr/spine_030.nii.gz"},{"image": "./imagesTr/spine_031.nii.gz","label": "./labelsTr/spine_031.nii.gz"},{"image": "./imagesTr/spine_032.nii.gz","label": "./labelsTr/spine_032.nii.gz"},{"image": "./imagesTr/spine_033.nii.gz","label": "./labelsTr/spine_033.nii.gz"},{"image": "./imagesTr/spine_034.nii.gz","label": "./labelsTr/spine_034.nii.gz"},{"image": "./imagesTr/spine_035.nii.gz","label": "./labelsTr/spine_035.nii.gz"},{"image": "./imagesTr/spine_036.nii.gz","label": "./labelsTr/spine_036.nii.gz"},{"image": "./imagesTr/spine_037.nii.gz","label": "./labelsTr/spine_037.nii.gz"},{"image": "./imagesTr/spine_038.nii.gz","label": "./labelsTr/spine_038.nii.gz"},{"image": "./imagesTr/spine_039.nii.gz","label": "./labelsTr/spine_039.nii.gz"},{"image": "./imagesTr/spine_040.nii.gz","label": "./labelsTr/spine_040.nii.gz"}]
}

2. 设置读取路径

回到正文,这里的Task下有如下数据,source nnunet/bin/activate 激活nnunet环境

Tips:这里的 labelsTr和dataset.json是第一节处理后的

任务名称为Task01_Spine

2.1 设置路径

这里设置为绝对路径,除了DATASET后面的,前面部分需要根据不同机器设定

在这里更改 vim .bashrc(vim ~/.bashrc 末尾最后面)

export nnUNet_raw_data_base="/*/DATASET/nnUNet_raw"
export nnUNet_preprocessed="/*/DATASET/nnUNet_preprocessed"
export RESULTS_FOLDER="/*/DATASET/nnUNet_trained_models"

这里设置后,如果想要训练其他模型,不需要在进行更改

添加完成后保存, source ~/.bashrc 更新环境变量,可以通过echo $RESULTS_FOLDER 检查是否修改成功

2.2 数据集转换

下面命令都是在environments 目录里进行操作

转换命令为

nnUNet_convert_decathlon_task -i DATASET/nnUNet_raw/nnUNet_raw_data/Task01_Spine/

转换完的数据在:

图像可能具有多种模态,nnU-Net通过其后缀(文件名末尾的四位整数)识别成像模态。因此,图像文件必须遵循以下命名约定:case_identifier_XXXX.nii.gz。

这里,XXXX是模态标识符。dataset.json文件中指定了这些标识符所属的模态。

标签文件保存为case_identifier.nii.gz

例如:BrainTumor。每个图像有四种模态:FLAIR(0000)、T1w(0001)、T1gd(0002)和T2w(0003)

2.3 数据集预处理

命令如下:(这里只会做训练集进行预处理,测试集不会处理

nnUNet_plan_and_preprocess -t 1

只需要一行命令,因为 Task_id是1,所以这里的数字就是1。这个过程会消耗很多的时间,速度慢的原因在于对要进行插值等各种操作。

生成的数据在crop和precocessed里面查看

2.4 训练(3d_fullres)

命令如下

nnUNet_train 3d_fullres nnUNetTrainerV2 1 0

1 指的是Task标号,5 指定训练的是5倍交叉验证的哪一倍。

会实时生成如下结果:在这里 nnUNet_trained_models

3. 训练结果展示

RTX 3090跑一个epoch大概100s,1000个epoch估计要一两天,等跑完下篇文章在贴训练结果吧

相关文章:

nnUnet 大模型学习笔记(续):训练网络(3d_fullres)以及数据集标签的处理

目录 1. 数据集处理 1.1 实现脚本 1.2 json文件 2. 设置读取路径 2.1 设置路径 2.2 数据集转换 2.3 数据集预处理 2.4 训练(3d_fullres) 3. 训练结果展示 关于nnUnet 数据集的处理和环境搭建,参考上文:第四章:nnUnet大模…...

Java中的数据结构与集合源码

目录 一、数据结构 1.1 数据结构概念 1.2 研究对象 1.3 常见存储结构 1.3.1 数组 1.3.2 链表 1.单向链表 2.双向链表 1.3.3 二叉树 1.3.4 栈(FILO,先进后出) 1.3.5 队列(FIFO,先进先出) 二、集合…...

Java应用程序的测试覆盖率之设计与实现(三)-- jacoco cli 客户端

一、背景 上文已把覆盖率数据采集好了,并提供远程连接的tcp地址及端口。 jacoco cli文档jacoco cli jar包 jacococli.jar 我下载好了,放在github工程里。 本文主要是介绍如何使用jacoco cli 客户端读取并生成覆盖率报告。 二、使用 1、dump覆盖率统…...

Deepin V23 / 统信UOS 下安装与配置 tftp

几个月前,我将开发系统从 ubuntu 切换到 Deepin,当时写过一篇文章《使用国产操作系统作为开发系统》。几个月下来,没有感觉有什么不适应,Ubuntu 能做的事情,在 Deepin 上都能做。而且有 UOS 应用商店的加持&#xff0c…...

java基础学习:定时任务常见实现方式

一、Timer解析 TaskQueue:小顶堆,存放timeTask。 TimerThread:任务执行线程 死循环不断检查是否有任务需要开始执行,有就执行它。始终是一个线程在执行。 单线程执行任务,任务有可能相互阻塞: schedul…...

句柄是什么?有什么用?举例说明

在C#编程中,“句柄”(Handle)是一个与操作系统资源相关联的标识符。句柄是一个指针或者索引,用于在程序代码中引用系统资源,如窗口、文件、线程等。由于直接操作这些资源非常危险且复杂,操作系统提供句柄作…...

Jenkins学习笔记

Jenkins学习笔记 NumTitleComments1官网 官方网站 中文文档2基础Jenkins基础3groovy1.groovy语法 2.groovy 入门4pipelinepipeline基本语法介绍5Github actiongithub action6Shared library1 2...

AI 解读软考高级操作系统顺序存取、直接存取、随机存取、相联存取的区别

这几个术语描述了不同类型的存储方式,它们涉及数据存取的顺序和灵活性。为了更好地理解,我们可以先通过生活中的例子来感受这些概念。 生活化例子 1. 顺序存取: 想象你在看一盘录像带(比如老式的VHS录像带)。如果你想…...

STM32烧写准备

目录 一.安装stlink驱动二.烧写器固件升级三.安装烧写程序四.进行测试1.流水灯 五.出现的问题1.升级固件问题2.测试时连接问题 一.安装stlink驱动 amd64是用在64位的,x86用在32位;双击运行即可 出现以下情况表示安装完成当连接上STM32开发板时&#xff…...

为Windows Terminal 配置zsh + Oh-My-Zsh!

参考: 为Windows Terminal 配置zsh Oh-My-Zsh! [非WSL] https://zhuanlan.zhihu.com/p/625583037 Package: zsh - MSYS2 Packages 安装配置 1、安装 Windows Terminal(必须) Method 1: 打开 Microsoft Store,搜索 “Windows Terminal”。点击 “…...

RNN、LSTM 与 Bi-LSTM

一. RNN 循环神经网络(Recurrent Neural Network, RNN)是深度学习领域一类具有内部自连接的神经网络能够学习复杂的矢量到矢量的映射。 最大特点:前面的序列数据可以用作后面的结果预测中。 一个简单的循环神经网络结构,其结构包…...

第一性原理

第一性原理是指从最基本的真理出发,分析和推导复杂现象或问题,不依赖于传统的假设或经验,而是从根本的原则出发进行思考。 将复杂问题拆解为更小的部分,逐一分析。在理解了这些基本部分的基础上,再进行组合和构建&…...

DOM NamedNodeMap 接口详解

DOM NamedNodeMap 接口详解 引言 在文档对象模型(DOM)中,NamedNodeMap 接口提供了一种方式来操作元素的属性集合。它是一种特殊的 NodeList,其中的每个节点都有一个名称和值。本文将详细介绍 NamedNodeMap 接口,包括其属性、方法和使用场景。 NamedNodeMap 接口概述 N…...

EasyExcel自定义下拉注解的三种实现方式

文章目录 一、简介二、关键组件1、ExcelSelected注解2、ExcelDynamicSelect接口(仅用于方式二)3、ExcelSelectedResolve类4、SelectedSheetWriteHandler类 三、实际应用总结 一、简介 在使用EasyExcel设置下拉数据时,每次都要创建一个SheetWr…...

Burp Suite Professional 2024.9 for macOS x64 ARM64 - 领先的 Web 渗透测试软件

Burp Suite Professional 2024.9 for macOS x64 & ARM64 - 领先的 Web 渗透测试软件 世界排名第一的 Web 渗透测试工具包 请访问原文链接:https://sysin.org/blog/burp-suite-pro-mac/ 查看最新版。原创作品,转载请保留出处。 作者主页&#xff1…...

使用Mock库进行依赖注入的实用指南

使用Mock库进行依赖注入的实用指南 在现代软件开发中,测试是确保代码质量的重要环节。尤其是在进行单元测试时,依赖注入(Dependency Injection, DI)是一种常用的设计模式,它可以帮助我们更好地管理依赖关系,提高代码的可测试性。本文将深入探讨如何使用Python的unittest…...

nosql课本习题

nosql题目 1. 文档数据库相比其他 NoSQL 的突出优势和特点是什么? 答案: 文档数据库的突出优势在于它的灵活性和可扩展性。不同于传统的关系型数据库,文档数据库允许存储半结构化和非结构化数据,每个文档可以有不同的字段&#x…...

springboot 3.2.5集成spring security 只放行get请求,其他请求403

环境配置 jdk 17 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.2.5</version><relativePath/> <!-- lookup parent from repository --></…...

【linux】麒麟v10安装ELKB(ARM架构)

安装elasticsearch 创建目录 #放安装软件的位置 mkdir -pv /software#安装elasticsearch目录 mkdir -pv /usr/local/elasticsearch#安装kibana目录 mkdir -pv /usr/local/kibana 解压elasticsearch tar -zxvf elasticsearch-8.8.1-linux-aarch64.tar.gz -C /usr/local/elast…...

帝国CMS – AutoTitlePic 自动生成文章标题图片插件

帝国CMS – AutoTitlePic 自动生成文章标题图片插件 AutoTitlePic&#xff0c;自动生成文章标题图片插件。功能特点&#xff1a; 1、安装方便、使用简单。老站、新站都能使用。 2、自动生成图片&#xff0c;安装后静默运行。所以本插件也没有预览图片。 3、扩展性强&#x…...

如何用BilibiliDown实现跨平台B站视频高效下载?3个核心优势解析

如何用BilibiliDown实现跨平台B站视频高效下载&#xff1f;3个核心优势解析 【免费下载链接】BilibiliDown (GUI-多平台支持) B站 哔哩哔哩 视频下载器。支持稍后再看、收藏夹、UP主视频批量下载|Bilibili Video Downloader &#x1f633; 项目地址: https://gitcode.com/gh_…...

利用Taotoken为内部知识库构建智能检索与摘要Agent

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 利用Taotoken为内部知识库构建智能检索与摘要Agent 企业内部知识库的文档数量日益增长&#xff0c;员工在查找关键信息和快速理解文…...

Wwise音频处理完整指南:从游戏音效解包到个性化替换的终极方案

Wwise音频处理完整指南&#xff1a;从游戏音效解包到个性化替换的终极方案 【免费下载链接】wwiseutil Tools for unpacking and modifying Wwise SoundBank and File Package files. 项目地址: https://gitcode.com/gh_mirrors/ww/wwiseutil 还在为游戏音频文件无法编辑…...

3步解决AKShare金融数据接口stock_zh_a_spot_em异常:完整数据获取指南

3步解决AKShare金融数据接口stock_zh_a_spot_em异常&#xff1a;完整数据获取指南 【免费下载链接】aktools AKTools is an elegant and simple HTTP API library for AKShare, built for AKSharers! 项目地址: https://gitcode.com/gh_mirrors/ak/aktools AKTools作为一…...

如何快速修复分区表:开源数据恢复工具的完整指南

如何快速修复分区表&#xff1a;开源数据恢复工具的完整指南 【免费下载链接】testdisk TestDisk & PhotoRec 项目地址: https://gitcode.com/gh_mirrors/te/testdisk 你是否曾因为误删除重要文件而懊恼不已&#xff1f;是否遇到过分区丢失导致数据无法访问的困境&a…...

AI应用网关ai-proxy:统一管理多模型API调用,实现路由、缓存与限流

1. 项目概述&#xff1a;一个为AI应用量身打造的智能代理网关如果你正在开发或部署基于大语言模型&#xff08;LLM&#xff09;的应用&#xff0c;比如一个聊天机器人、一个代码助手&#xff0c;或者一个内容生成工具&#xff0c;那么你大概率会遇到一个头疼的问题&#xff1a;…...

.NET AES 讲透:从 ECB 到 GCM,到底差在哪?

AES&#xff0c;全称高级加密标准&#xff08;Advanced Encryption Standard&#xff09;。简单说&#xff0c;它是目前全球最主流的对称加密算法&#xff1a;同一把钥匙负责加密和解密。 HTTPS、手机文件加密、数据库、云存储……现代互联网里大量“数据保密”场景&#xff0…...

[实战指南+数据解析] DEAP数据集:基于EEG、生理与视频信号的多模态情感计算入门

1. DEAP数据集入门&#xff1a;多模态情感计算的钥匙 第一次接触DEAP数据集时&#xff0c;我被它丰富的多模态数据震撼到了。这个数据集就像情感计算领域的"瑞士军刀"&#xff0c;包含了EEG脑电波、皮肤电导等生理信号&#xff0c;还有22名参与者的面部视频记录。最特…...

开发AI Agent时如何通过Taotoken灵活调度不同模型

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 开发AI Agent时如何通过Taotoken灵活调度不同模型 在构建复杂的AI Agent系统时&#xff0c;一个常见的需求是根据不同的任务类型&a…...

【2024最新】ChatGPT联网搜索避坑白皮书:已踩过137次坑的技术总监总结出的6条铁律

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;ChatGPT联网搜索功能的核心机制与能力边界 ChatGPT 的联网搜索功能并非内置实时浏览器&#xff0c;而是通过插件&#xff08;如 Bing Search Plugin&#xff09;或企业级 API 集成方式&#xff0c;在用…...