【nnUNet V2系列】nnUNet V2在Ubuntu下安装调试篇

news2024/11/25 16:41:53

安装之前网上很多教程,很多是nnUNet V1的安装过程,有的V1和V2混在一起讲解,导致V1的转化指令用到V2中,产生不少误解。这篇是针对V2整理出来的安装过程,有什么不妥之处请指出会及时修改。

1. 创建虚拟环境

conda create -n nnUNetV2 python=3.9
2. 激活虚拟环境

 conda activate nnUNetV2
3. 输入nvidia-smi查询CUDA的版本号(如服务器是CUDA12.1),然后选择不超过此CUDA的torch版本(CUDA11.8)进行安装:

 conda install pytorch torchvision torchaudio pytorch-cuda=11.8 -c pytorch -c nvidia

安装成功如下:

测试:

python

import torch

print(torch.__version__) 输出:版本号

print(print(torch.cuda.is_available()) 输出为:True 

print(torch.backends.cudnn.version()) 输出

4. 最后,参考官方文档安装nnUNet V2程序:

git clone https://github.com/MIC-DKFZ/nnUNet.git
cd nnUNet
pip install -e .
注意:别丢掉小圆点。
【可选项】如果下载不方便,这里提供下载好的压缩包,直接解压包【提取码:x2FK】从压缩包里安装:
cd nnUNet 
pip install -e .
【可选项】安装hiddenlayer,让nnU-net可以生成网络拓扑图,指令如下(用不到可以不装):
pip install --upgrade git+https://github.com/FabianIsensee/hiddenlayer.git

5.修改环境变量,可以在.bashrc(XXX:自己的用户名)中最下面添加:

export nnUNet_raw="/home/xxx/nnUNetV2-master/DATASET/nnUNet_raw"
export nnUNet_preprocessed="/home/xxx/nnUNetV2-master/DATASET/nnUNet_preprocessed"
export nnUNet_results="/home/xxx/nnUNetV2-master/DATASET/nnUNet_trained_models"

然后source .bashrc。这里直接修改的程序不会影响环境或者影响V1版本,修改nnunetv2文件下的paths.py程序:

6.需要下载官网数据,登录Medical Segmentation Decathlon的谷歌网盘。

 7.由于nnUNet V1跟nnUNet V2版有一些差别,需要进行数据转换:

 nnUNetv2_convert_MSD_dataset -i /home/XXX/nnUNetV2-master/DATASET/nnUNet_raw/Task04_Hippocampus -overwrite_id 004

文件名由Task04_Hippocampus变成Dataset004_Hippocampus,另外就是dataset.json的变化,主要是V2不再需要记录样本名字和标签的记录方式发生了变化:

别V2和V1操作别搞混了,有的博客上写用nnUNet_convert_decathlon_task,这个是V1版本用的;然后,要想给V2用还需要在经过一次转换: 

nnUNetv2_convert_old_nnUNet_dataset Task004_Hippocampus Dataset004_Hippocampus

8. 对样本进行预处理:

模版:nnUNetv2_plan_and_preprocess -d DATASET_ID --verify_dataset_integrity


nnUNetv2_plan_and_preprocess -d 004 --verify_dataset_integrity
注:--verify_dataset_integrity首次需要校验之后就不需要。

预处理的结果:

 发现DATASET的子目录nnUNet_preprocessed生成预处理的文件:

9. 训练nnUNet模型:

模版:nnUNetv2_train DATASET_NAME_OR_ID UNET_CONFIGURATION FOLD --val --npz
​​​​​​​nnUNetv2_train 4 3d_fullres 0

DATASET_NAME_OR_ID:指定应在哪个数据集上进行训练;

UNET_CONFIGURATION:是一个字符串,用于标识请求的 U-Net 配置(默认值:2d、3d_fullres、3d_lowres、3d_cascade_lowres);

FOLD: 指定训练 5 折交叉验证的哪个折叠。

注:nnU-Net 每 50 个周期存储一个模型权重checkpoint。如果需要继续之前的训练,只需在训练命令中添加 --c 即可。

这里为了做测试大概跑了100epochs,默认训练周期为1000次,可以搜一下nnUNetTrainer.py中改为self.num_epochs = 100。 

插播一下棘手的问题:

刚开始训练遇到一个错误,困扰了一天:

1)

RuntimeError: One or more background workers are no longer alive. Exiting. Please check the print statements above for the actual error message

解决:

重新安装一下cuda,在pip install -e .的时候,系统有时会重新安装torch导致它从gpu版变成CPU版,先测试一下torch.is_available是否为True,如果不是建议重新装一下torch:

conda install pytorch torchvision torchaudio pytorch-cuda=12.1 -c pytorch -c nvidia (具体你的cuda版本根据自己系统而定)

确认torch正常之后,可以用如下命令训练:

nnUNet_n_proc_DA=0 CUDA_VISIBLE_DEVICES=0 nnUNetv2_train 4 3d_fullres 0 -device cuda

2)

/tmp/tmpzj43o3qe/main.c:354:3: note: use option -std=c99 or -std=gnu99 to compile your code
/tmp/tmpzj43o3qe/main.c: In function ‘list_to_cuuint32_array’:
/tmp/tmprdfpoq6h/main.c: In function ‘list_to_cuuint64_array’:
/tmp/tmpzj43o3qe/main.c:365:3: error: ‘for’ loop initial declarations are only allowed in C99 mode
   for (Py_ssize_t i = 0; i < len; i++) {
   ^
/tmp/tmprdfpoq6h/main.c:354:3: error: ‘for’ loop initial declarations are only allowed in C99 mode
   for (Py_ssize_t i = 0; i < len; i++) {
   ^
/tmp/tmprdfpoq6h/main.c:354:3: note: use option -std=c99 or -std=gnu99 to compile your code
/tmp/tmprdfpoq6h/main.c: In function ‘list_to_cuuint32_array’:
/tmp/tmprdfpoq6h/main.c:365:3: error: ‘for’ loop initial declarations are only allowed in C99 mode
   for (Py_ssize_t i = 0; i < len; i++) {
   ^
/tmp/tmpdlxf7jri/main.c: In function ‘list_to_cuuint64_array’:
/tmp/tmpdlxf7jri/main.c:354:3: error: ‘for’ loop initial declarations are only allowed in C99 mode
   for (Py_ssize_t i = 0; i < len; i++) {
   ^
/tmp/tmpdlxf7jri/main.c:354:3: note: use option -std=c99 or -std=gnu99 to compile your code
/tmp/tmpdlxf7jri/main.c: In function ‘list_to_cuuint32_array’:
/tmp/tmpdlxf7jri/main.c:365:3: error: ‘for’ loop initial declarations are only allowed in C99 mode
   for (Py_ssize_t i = 0; i < len; i++) {
   ^
/tmp/tmpb2y0zzge/main.c: In function ‘list_to_cuuint64_array’:
/tmp/tmpb2y0zzge/main.c:354:3: error: ‘for’ loop initial declarations are only allowed in C99 mode
   for (Py_ssize_t i = 0; i < len; i++) {
   ^
/tmp/tmpb2y0zzge/main.c:354:3: note: use option -std=c99 or -std=gnu99 to compile your code
/tmp/tmpb2y0zzge/main.c: In function ‘list_to_cuuint32_array’:
/tmp/tmpb2y0zzge/main.c:365:3: error: ‘for’ loop initial declarations are only allowed in C99 mode
   for (Py_ssize_t i = 0; i < len; i++) {
   ^
/tmp/tmpgv8r5a3m/main.c: In function ‘list_to_cuuint64_array’:
/tmp/tmpgv8r5a3m/main.c:354:3: error: ‘for’ loop initial declarations are only allowed in C99 mode
   for (Py_ssize_t i = 0; i < len; i++) {
   ^
/tmp/tmpgv8r5a3m/main.c:354:3: note: use option -std=c99 or -std=gnu99 to compile your code
/tmp/tmpgv8r5a3m/main.c: In function ‘list_to_cuuint32_array’:
/tmp/tmpgv8r5a3m/main.c:365:3: error: ‘for’ loop initial declarations are only allowed in C99 mode
   for (Py_ssize_t i = 0; i < len; i++) {
   ^
/tmp/tmpatkm0ctm/main.c: In function ‘list_to_cuuint64_array’:
/tmp/tmpatkm0ctm/main.c:354:3: error: ‘for’ loop initial declarations are only allowed in C99 mode
   for (Py_ssize_t i = 0; i < len; i++) {
   ^
/tmp/tmpatkm0ctm/main.c:354:3: note: use option -std=c99 or -std=gnu99 to compile your code
/tmp/tmpatkm0ctm/main.c: In function ‘list_to_cuuint32_array’:
/tmp/tmpatkm0ctm/main.c:365:3: error: ‘for’ loop initial declarations are only allowed in C99 mode
   for (Py_ssize_t i = 0; i < len; i++) {

解决方案:

可以先试试这个方案:

pip install triton==2.1.0

如果问题依旧,再修改如下:

主要是由于服务器的编译器默认使用了较旧的C标准,不支持在for循环中声明变量。

从/home/XXX/anaconda3/envs/nnUNetV2/lib/python3.9/site-packages/triton/common/找到build.py修改如下:

10. 成功运行大概如下,随便截了几个图:

 

大功告成,可以开心的训练你的模型了!对你有帮助的,请点个赞!  

更多参考:

1.https://blog.csdn.net/m0_73677889/article/details/131795728

2.nnUNet_v2(Linux)_nnunetv2-CSDN博客

3.在Windows上实现nnU-Net v2的环境配置_nnunetv2-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1938894.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

某4G区域终端有时驻留弱信号小区分析

这些区域其实是长时间处于连接态的电信卡4G终端更容易出现。 出现问题时都是band1 100频点下发了针对弱信号的1650频点的连接态A4测量事件配置&#xff08;其阈值为-106&#xff09;。而这个条件很容易满足&#xff0c;一旦下发就会切到band3 1650频点。 而1650频点虽然下发ban…

Visual Studio 2022美化

说明&#xff1a; VS版本&#xff1a;Visual Studio Community 2022 背景美化 【扩展】【管理扩展】搜索“ClaudiaIDE”&#xff0c;【下载】&#xff0c;安装完扩展要重启VS 在wallhaven下载壁纸图片作为文本编辑器区域背景图片 【工具】【选项】搜索ClaudiaIDE&#xff…

手机数据恢复技巧:适用于 Android 的恢复应用程序

发现自己意外删除了 Android 设备上的照片&#xff0c;这让人很痛苦。这些照片可能是值得纪念的文件&#xff0c;会让您想起一些难忘的回忆。删除它们后&#xff0c;您知道如何恢复它们。在这种情况下&#xff0c;您需要使用 Android 的照片恢复应用程序。 无论您需要直接从 A…

git跨库合并

1、背景 A为开发环境的代码仓库&#xff0c;B为生产环境的代码仓库。A和B之间不能通信。开发人员的本地电脑可以和A、B通信。 目的 上线时&#xff0c;需要将A代码合并B代码。 2、实现 2.1 添加远程仓库 2.1.1 代码方式 在B代码仓库中,将A添加为远程仓库。 git remote …

腾讯会议产品策划的成长之路:从万字文档到功能落地的实战经验

腾讯会议产品策划的成长之路&#xff1a;从万字文档到功能落地的实战经验 在腾讯会议的产品团队中&#xff0c;有这样一位产品策划&#xff0c;他以其出色的逻辑思维、全局观念以及扎实的执行力&#xff0c;在团队中发挥着举足轻重的作用。他就是林陪同&#xff0c;一个自称“会…

抽奖算法的设计与实现

更多内容欢迎访问我的个人博客网站&#xff1a;www.zpf0000.com 在数据库中准备好以下数据表 lottery表 sql代码解读复制代码 DROP TABLE IF EXISTS lottery; CREATE TABLE lottery (id int NOT NULL AUTO_INCREMENT,user_id int NOT NULL DEFAULT 0 COMMENT 发起抽奖用户ID,n…

【MySQL】:对库和表的基本操作方法

数据库使用的介绍 什么是SQL 学习数据库的使用——>基于 SQL编程语言 来对数据库进行操作 重点表述的是“需求”&#xff0c;期望得到什么结果。&#xff08;至于结果是如何得到的&#xff0c;并不关键&#xff0c;都是数据库服务器在背后做好了&#xff09; 重点表述的是…

DEGAS:将临床属性转移到细胞

DEGAS&#xff08;单细胞诊断证据量表&#xff0c;Diagnostic Evidence GAuge of Single cells&#xff09;是一种迁移学习框架&#xff0c;用于将疾病信息从患者转移到细胞。作者将这种可转移信息称为“印象-impressions”&#xff0c;它允许单细胞与疾病属性相关联&#xff0…

【Python】使用库 -- 详解

库就是别人已经写好了的代码&#xff0c;可以让我们直接拿来用。 一个编程语言能不能流行起来&#xff0c;一方面取决于语法是否简单方便容易学习&#xff0c;一方面取决于生态是否完备。所谓的 “生态” 指的就是语言是否有足够丰富的库&#xff0c;来应对各种各样的场景。在…

动态路由协议 —— EIGRP 与 OSPF 的区别

EIGRP&#xff08;增强内部网关路由协议&#xff09;和 OSPF&#xff08;开放式最短路径优先&#xff09;是两种最常见的动态路由协议&#xff0c;主要是用来指定路由器或交换机之间如何通信。将其应用于不同的情况下&#xff0c;可提高速率、延迟等方面的性能。那么它们之间到…

【Python系列】Python 缓存机制

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

【排序数组】python刷题记录

润到排序算法了。 顺便复习一下排序算法 easy work class Solution:def sortArray(self, nums: List[int]) -> List[int]:nums.sort()return nums 11种排序算法 # 选择排序 def selectsort(s):for i in range(0,len(s)-1):curmininfcuridx-1for j in range(i,len(s)):if …

【运维】软件运维方案(2024word完整版)

1. 文档介绍 2. 人员与责任 3. 运维过程内容 4. 运维资源 5. 运维服务规划保障 6. 事件处置 7. 质量改进 8. 运维边界及内容 获取方式&#xff1a; 本文末个人名片直接获取。

Leetcode1688. 比赛中的配对次数

问题描述&#xff1a; 给你一个整数 n &#xff0c;表示比赛中的队伍数。比赛遵循一种独特的赛制&#xff1a; 如果当前队伍数是 偶数 &#xff0c;那么每支队伍都会与另一支队伍配对。总共进行 n / 2 场比赛&#xff0c;且产生 n / 2 支队伍进入下一轮。如果当前队伍数为 奇…

【计算机视觉】siamfc论文复现实现目标追踪

什么是目标跟踪 使用视频序列第一帧的图像(包括bounding box的位置)&#xff0c;来找出目标出现在后序帧位置的一种方法。 什么是孪生网络结构 孪生网络结构其思想是将一个训练样本(已知类别)和一个测试样本(未知类别)输入到两个CNN(这两个CNN往往是权值共享的)中&#xff0…

【SRC】小程序抓包巨详细配置,一个Burp就够了,但是可以更优雅!

小程序抓包配置 文章目录 小程序抓包配置0x00 前言0x01 直接使用BurpSuite抓包0x02 配合Proxifier 0x00 前言 其实在PC端抓微信小程序的包&#xff0c;只需要一个BurpSuite就足够了&#xff0c;但是为了避免抓一些没用的包&#xff0c;减少对小程序抓包测试过程中的干扰&#…

学生处分类型管理

在智慧校园学工管理系统中&#xff0c;"处分类型"功能扮演着至关重要的角色&#xff0c;它如同一座桥梁&#xff0c;连接着校园秩序与学生行为规范的两端。这一模块的核心精髓&#xff0c;在于它以精准的违规行为界定和适当的处分措施&#xff0c;巧妙地平衡了纪律的…

Qmi8658a姿态传感器使用心得(4)linux

1.FIFO 结构与大小 FIFO 数据可以包含陀螺仪和加速度计数据&#xff0c;通过 SPI/I2C/I3C 接口以突发读模式读取。FIFO 大小可配置为 16 样本、32 样本、64 样本或 128 样本&#xff08;每个样本为 6 字节&#xff09;。 2.FIFO 模式 Bypass 模式&#xff1a;禁用 FIFO 功能。…

SpringCloud03_loadbalancer的概述、负载均衡解析、切换、原理

文章目录 ①. Ribbon进入维护模式②. loadbalancer的概述③. loadbalancer负载均衡解析④. 负载均衡案例总结⑤. 负载均衡算法原理 ①. Ribbon进入维护模式 ①. Spring Cloud Ribbon是基于Netflix Ribbon实现的一套客户端负载均衡的工具。 ②. 维护模式不再介绍,了解即可 ③.…

大语言模型-Transformer-Attention Is All You Need

一、背景信息&#xff1a; Transformer是一种由谷歌在2017年提出的深度学习模型。 主要用于自然语言处理&#xff08;NLP&#xff09;任务&#xff0c;特别是序列到序列&#xff08;Sequence-to-Sequence&#xff09;的学习问题&#xff0c;如机器翻译、文本生成等。Transfor…