全网都在用的nnUNet V2版本改进了啥,怎么安装?(一)
nnUNet,这个医学领域的分割巨无霸!在论文和比赛中随处可见他的身影。大家对于nnUNet v1版本的教程都赞不绝口,因为它简单易懂、详细全面,让很多朋友都轻松掌握了使用方法。
最近,我也抽出时间仔细研究了nnUNet v2,并全程走过一遍流程。我努力将使用教程变得更加通俗易懂,希望能提高大家的学习效率。如果你正在进行分割任务,或者还没有尝试过nnUNet v2,那么现在是时候跟着我一起学习啦!
我们将一步步解析nnUNet v2的改进之处和操作步骤,用简洁明快的语言让你轻松理解。无论你是医学专业背景还是计算机科学领域的新手,都能够轻松上手,掌握这个强大的工具。
内容稍长,我把它分为三个章节,拆解难点
- nnUNet v2的不同之处,安装以及环境变量设置(这次内容)
- nnUNet v2的数据准备(下一篇)
- nnUNet v2的训练及推理(下下篇)
nnUNet v2版本与V1版有什么不同?
-
支持层次标签 ‘hierarchical labels’(在nnUNet中称为 ‘regions’)。例如,在 BraTS 这个数据集中,给定的 label 是“水肿”、“坏死”和“增强肿瘤”。但是对于临床应用而言,他们关注的不是这三个 label,而是整个肿瘤、肿瘤核心和增强肿瘤。 那么,这里的整个肿瘤就是 水肿+坏死+增强肿瘤; 肿瘤核心是 坏死+增强肿瘤。如果想按临床的这个进行分割,他的 label 是有重叠的。如下图:

适用于某些有重叠任务的分割,具体详见 github -
支持跨平台, Cuda, mps (Apple M1/M2) and CPU
-
支持更多的输入/输出数据格式。
-
通过基于
BaseReaderWriter实现新的适配器,可以扩展I/O格式。 -
nnUNet_raw_cropped文件夹不再存在,这样可以节省磁盘空间,而且没有性能损失 -
在解压缩时,预处理数据和分割结果存储在不同的文件中。分割结果以int8的格式存储,因此每个像素占用的磁盘空间(和I/O吞吐量)只有v1版本的四分之一。
-
原生支持多GPU(DDP)训练。但是,多GPU推断仍然需要使用
CUDA_VISIBLE_DEVICES=X nnUNetv2_predict [...] -num_parts Y -part_id X来运行。在推断过程中,没有跨GPU的通信,所以增加DDP会增加额外的复杂性是没有意义的。 -
所有nnU-Net的功能现在也可以通过API进行访问。请查看
setup.py中对应的入口点,以了解需要调用哪些函数。 -
数据集指纹现在明确地创建并保存在一个json文件中(参见nnUNet_preprocessed文件夹)。
其实大改动不多,如果你只是一个初级用户,很多改进功能根本用不到。
如何安装
虽然 官方说 nnunet 的两个版本可以同时使用,但我还是建议将两个版本分开,放在不同的虚拟环境中。
安装需求
- 操作系统:nnU-Net 已在 Linux(Ubuntu 18.04、20.04、22.04;centOS、RHEL)、Windows 和 MacOS 上进行了测试!它应该开箱即用!
- 硬件要求:GPU(推荐)、CPU 和 Apple M1/M2 作为设备(目前 Apple mps 不实现 3D 卷积,因此您可能必须在这些设备上使用 CPU)。
- Python 3.9 或更高版本
在第一版本中,nnunet v1 安装教程介绍了如何在虚拟环境中安装 nnUNet, 但是略显复杂。这一次直接用 conda 安装
安装步骤
- 首先新建一个 conda 环境,命名为 nnunet2(名字由你决定)
conda create -n nnunet2 python==3.9
- 激活该环境,并安装 nnunetv2
conda activate nnunet2
pip install nnunetv2
设置环境变量/路径
nnU-Net 依靠环境变量来了解原始数据、预处理数据和训练模型权重的存储位置。要使用 nnU-Net 的完整功能,必须设置以下三个环境变量:
V1,v2 版本中路径有所不同。如果你已经装了 V1 版本,那么 V2 版本的路径最好和 V1不同,以防打架。
具体地,V2 应该包含以下三个路径:
-
nnUNet_raw:这是放置原始数据集的地方。该文件夹将为每个数据集名称创建一个子文件夹
DatasetXXX_YYY,其中 XXX 是 3 位标识符(例如 001、002、043、999…),YYY 是(唯一)
数据集名称。数据集必须采用 nnU-Net 格式树结构示例:
nnUNet_raw/Dataset001_NAME1 ├── dataset.json ├── imagesTr │ ├── ... ├── imagesTs │ ├── ... └── labelsTr├── ... nnUNet_raw/Dataset002_NAME2 ├── dataset.json ├── imagesTr │ ├── ... ├── imagesTs │ ├── ... └── labelsTr├── ... -
nnUNet_preprocessed:这是保存预处理数据的文件夹。数据也将从中读取
训练期间使用此文件夹。重要的是,该文件夹位于访问延迟低且高的驱动器上
吞吐量 -
nnUNet_results:指定 nnU-Net 保存模型权重的位置。如果下载了预训练模型,则此
就是保存他们的地方。
V1 版本的路径设置见之前的文章:给出了永久设置环境变量的方法
nnU-Net v1 如何安装–傻瓜式安装教程
注意:如果设置永久变量的话,V1和V2版本都安装了的话,其实有一个文件夹命名是相同的(nnUNet_preprocessed),那你调用的时候就分不清 V1和V2的文件夹了。
这里,再给一种更方便的临时路径设置办法
- step1: 创建一个 setPath.sh 文件,里面包含如下内容,
#!/bin/bashexport nnUNet_raw="/media/nunet2_folder/nnUNet_raw"
export nnUNet_preprocessed="/media/nnunet2_folder/nnUNet_preprocessed"
export nnUNet_results="/media/nnunet2_folder/nnUNet_results"
tips:怎么创建一个setPath.sh文件
要创建一个名为"setPath.sh"的文件,你可以按照以下步骤进行操作:
-
打开一个文本编辑器,例如记事本或者终端上的文本编辑器。
-
创建一个新的空白文件。
-
在文件中输入上述内容
-
保存并关闭文件。
当然,前提是,你要手动创建这个三个文件夹,再把地址告诉环境变量
- step2: 每次运行 nnunetv2 之前运行一下此文件
source setPath.sh
- step3: 检验是否起效
echo $nnUNet_results
如果返回的是我们设置的地址,则起效
V1和V2路径对比如下

好了,炼丹炉已就位。带上你的数据,下一篇进行数据预处理。

文章持续更新,可以关注微信公众号【医学图像人工智能实战营】获取最新动态,一个关注于医学图像处理领域前沿科技的公众号。坚持已实践为主,手把手带你做项目,打比赛,写论文。凡原创文章皆提供理论讲解,实验代码,实验数据。只有实践才能成长的更快,关注我们,一起学习进步~
我是Tina, 我们下篇博客见~
白天工作晚上写文,呕心沥血
觉得写的不错的话最后,求点赞,评论,收藏。或者一键三连

相关文章:
全网都在用的nnUNet V2版本改进了啥,怎么安装?(一)
nnUNet,这个医学领域的分割巨无霸!在论文和比赛中随处可见他的身影。大家对于nnUNet v1版本的教程都赞不绝口,因为它简单易懂、详细全面,让很多朋友都轻松掌握了使用方法。 最近,我也抽出时间仔细研究了nnUNet v2,并全…...
iOS开发Swift-4-IBAction,group,音乐播放器-木琴App
1.使用素材创建木琴App的UI。 2.连接IBAction。 其余按钮直接拖拽到play里边。 当鼠标置于1处时2处显示如图,表示成功。当用户按下任一按钮都会触发play中的内容。 3.将7个按钮的View中的Tag值分别调为1、2、3、4、5、6、7. 4.将音频文件拖入项目文件中。 Create gr…...
【linux】pid 文件的作用ing
文章目录 一. pid文件简介1. pid 文件是什么2. 作用 二. pid文件的使用 一. pid文件简介 1. pid 文件是什么 打开系统(Linux) 的 “/var/run/” 目录可以看到有很多已 “.pid” 为结尾的文件,只有一行,它记录的是相应进程的 pid,即进程号。…...
K8s简介之什么是K8s
目录 1.概述 2.什么是容器引擎? 3.什么是容器 4.什么是容器编排? 5.容器编排工具 6.到底什么是K8s? 7.为什么市场推荐K8s 8.K8s架构 9.K8s组件 Pods API 服务器 调度器 控制器管理器 Etcd 节点 Kubelet Kube代理 Kubectl 1.概述 Kub…...
说说Flink双流join
分析&回答 Flink双流JOIN主要分为两大类 一类是基于原生State的Connect算子操作另一类是基于窗口的JOIN操作。其中基于窗口的JOIN可细分为window join和interval join两种。 基于原生State的Connect算子操作 实现原理:底层原理依赖Flink的State状态存储&…...
I2C与I3C的对比
I2C与I3C的对比 电气特性 I2C 1.半双工 2.串行数据线(SDA)和串行时钟线(SCL) 3.数据线漏极开路,即I2C接口接上拉电阻 4.I2C总线运行速度:**标准模式100kbit/s,快速模式400kbit/s,快速模式plus 1Mbit/s,**高速模式…...
睿趣科技:抖音开小店大概多久可以做起来
随着移动互联网的快速发展,社交媒体平台成为了人们分享生活、交流信息的主要渠道之一。在众多社交平台中,抖音以其独特的短视频形式和强大的用户粘性受到了广泛关注。近年来,越来越多的人通过在抖音上开设小店来实现创业梦想,这种…...
CCF-CSP 26次 第三题【角色授权】
计算机软件能力认证考试系统 20分: #include<bits/stdc.h> using namespace std; const int N440; int n,m,q,nv,no,nn,ns,ng; struct Node {string name;map<string,int>op;map<string,int>res_kind;map<string,int>res_name; }role[N];…...
Ansible学习笔记11
Command和Shell模块: 两个模块都是用于执行Linux命令的,这个对于命令熟悉的工程师来说,用起来非常high。 Shell模块跟Command模块差不多(Command模块不能执行一类$HOME、> 、<、| 等符号,但是Shell是可以的。&…...
Vue中如何为Echarts统计图设置数据
在前端界面接收后端数据后,将数据赋值给ECharts中的data时出现了,数据读取失败的问题(可能是由于数据渲染的前后顺序问题)。后通过如下方式进行了解决: 1、接下来将介绍UserController中的countUsers方法,…...
力扣141. 环形链表
141. 环形链表 简单 2K 相关企业 给你一个链表的头节点 head ,判断链表中是否有环。 如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链…...
4.1 链式栈StackT
C关键词:内部类/模板类/头插 C自学精简教程 目录(必读) C数据结构与算法实现(目录) 栈的内存结构 空栈: 有一个元素的栈: 多个元素的栈: 成员函数说明 0 clear 清空栈 clear 函数负责将栈的对内存释放…...
算法练习(10):牛客在线编程10 贪心算法
package jz.bm;import java.util.ArrayList; import java.util.Arrays;public class bm10 {/*** BM95 分糖果问题*/public int candy (int[] arr) {int res 0;int n arr.length;int[] nums new int[n];//每个人都分配一个糖果for (int i 0; i < n; i) {nums[i] 1;}//从…...
Java8新特性1——函数式接口lambda表达式
Java8新特性1——函数式接口&lambda表达式 注:以下内容基于Java 8,所有代码都已在Java 8环境下测试通过 目录: Java8新特性1——函数式接口&lambda表达式方法引用Stream 1. 函数式接口 如果在一个接口中,有且只有一个抽…...
文本标注技术方案(NLP标注工具)
Doccano doccano 是一个面向人类的开源文本注释工具。它为文本分类、序列标记和序列到序列任务提供注释功能。您可以创建用于情感分析、命名实体识别、文本摘要等的标记数据。只需创建一个项目,上传数据,然后开始注释。您可以在数小时内构建数据集。 支持…...
03-使用一个不可变对象作为key,红黑树怎么比较大小?
使用一个不可变对象作为key,红黑树怎么比较大小? 答:Java 中的红黑树是通过左旋、右旋的方式来维护树的平衡性,而左旋、右旋又依赖于节点大小的比较。对于使用不可变对象作为key实际上是可以的,因为比较key的大小本身…...
2021江苏省赛热身赛 C Magic Rabbit(数形结合)
2021江苏省赛热身赛 C Magic Rabbit(数形结合) Magic Rabbit 非常好且巧妙地一道题。 大意:给出三种溶液 , 三种溶液分别含有不同浓度的 x ,y 两种物质。 溶液x (mg/ml)y (mg/ml)溶液1x1y1溶液2x2y2溶液3x3y3 给出 Q 组询问 ,…...
AES加密(2):AES代码实现解析
在我的上一篇文章AES基础知识和计算过程中,大概介绍了AES(Rijndael)加密的整个过程。那么在这一篇文章中,就来看一下AES在代码中是如何实现的,也有助于我们理解其中的一些细节。 本篇文章所用的AES代码来源于Szymon Stefanek的开源C代码 文章…...
SpringBoot项目通过分词器生成词云
目录 前言一、词云是什么?二、使用步骤1.引入依赖2.application.yml3.Controller4.分词工具类4.词云生成工具类、支持输出文件和字节流 注意 前言 公司项目涉及到员工任务管理,需要从员工任务中获取任务信息生成个人词云图,可以把员工任务中…...
Nacos 配置管理及相关使用
文章目录 Nacos 配置管理一、统一配置管理1、在Nacos 中添加配置文件2、从微服务拉取配置3、配置实现步骤(1)引入 nacos-config 依赖(2)添加 bootstrap.yml(4)在 nacos 中添加配置 二、配置热更新1、配置热…...
如何通过Snap Hutao实现原神游戏决策的智能化?
如何通过Snap Hutao实现原神游戏决策的智能化? 【免费下载链接】Snap.Hutao 实用的开源多功能原神工具箱 🧰 / Multifunctional Open-Source Genshin Impact Toolkit 🧰 项目地址: https://gitcode.com/GitHub_Trending/sn/Snap.Hutao …...
基于大数据技术的产品评价分析系统设计与实现
前言本研究聚焦于设计与实现一种基于大数据技术的产品评价分析系统,通过构建多层架构体系与融合多元技术方法,为企业决策提供智能化支撑。 研究采用分层架构设计理念,将系统划分为数据采集、存储、处理、分析与展示五大模块。数据采集层综合运…...
Qwen3.5-2B轻量化技术解析:模型剪枝+KV Cache优化如何降低70%显存占用
Qwen3.5-2B轻量化技术解析:模型剪枝KV Cache优化如何降低70%显存占用 1. 轻量化模型的核心价值 在AI模型部署领域,大模型的资源消耗一直是阻碍其广泛应用的瓶颈。Qwen3.5-2B作为一款仅20亿参数的多模态基础模型,通过创新的轻量化技术实现了…...
终极PDF批量处理指南:如何用PDF Arranger自动化文档操作
终极PDF批量处理指南:如何用PDF Arranger自动化文档操作 【免费下载链接】pdfarranger Small python-gtk application, which helps the user to merge or split PDF documents and rotate, crop and rearrange their pages using an interactive and intuitive gra…...
Maven Versions Plugin 使用指南
以下是对你提供内容的补充和整理,形成一篇关于 Maven Versions Plugin 使用指南的文章:Maven Versions Plugin 使用指南 Maven Versions Plugin 是一套用于管理项目版本、依赖版本和父版本的工具集合。它可以帮助你高效地更新项目版本号、检查依赖更新、…...
抖音批量下载终极指南:3分钟掌握高效无水印下载技巧
抖音批量下载终极指南:3分钟掌握高效无水印下载技巧 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback support…...
百川2-13B模型实战:Python爬虫数据的智能分析与摘要生成
百川2-13B模型实战:Python爬虫数据的智能分析与摘要生成 每天,互联网上都会产生海量的文本信息,新闻、论坛帖子、社交媒体动态……对于市场分析师、舆情监控人员或者内容运营者来说,如何从这些信息海洋中快速提炼出有价值的内容&…...
高效一键构建:DoL-Lyra整合包的智能自动化构建系统解析
高效一键构建:DoL-Lyra整合包的智能自动化构建系统解析 【免费下载链接】DOL-CHS-MODS Degrees of Lewdity 整合 项目地址: https://gitcode.com/gh_mirrors/do/DOL-CHS-MODS 还在为Degrees of Lewdity游戏的美化整合包配置而烦恼吗?您是否曾因手…...
警惕!新型U盘蠕虫伪装文档传播:实测火绒5.0查杀+防御全攻略
深度解析U盘蠕虫病毒:从防御到查杀的全面安全指南 1. 新型U盘蠕虫病毒的运作机制剖析 U盘蠕虫病毒近年来呈现出越来越复杂的传播方式和技术手段。这类病毒通常利用Windows系统的自动播放功能(AutoRun.inf)或注册表劫持技术进行传播࿰…...
Magisk完整实践指南:从Root权限获取到系统级定制
Magisk完整实践指南:从Root权限获取到系统级定制 【免费下载链接】Magisk The Magic Mask for Android 项目地址: https://gitcode.com/GitHub_Trending/ma/Magisk Magisk作为Android系统Root权限管理的主流解决方案,提供了系统级定制能力而无需修…...
