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

nnUNetv2用自己的数据集训练推理

有什么不懂的大家可以在评论区问我,我一定会积极回复哒!!!

一、环境配置

首先创建一个虚拟环境

conda create -n nnunet python=3.9
conda activate nnunet

然后在pytorch官网,安装pytorch,这里我安装的是2.1.2版本,numpy自动安装的是2.0.2版本,后面用的时候出错了,然后变成了1.24.1版本,这个版本是没错的。

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

在使用pip install -e .时,不要在nnUNet文件夹下创建其他文件夹,更改文件夹结构会导致报错

git clone https://github.com/MIC-DKFZ/nnUNet.git
cd nnUNet
pip install -e .

二、创建数据集

接下来我们退回到文件夹中,在nnUNet文件夹中创建一个新文件夹nnUNetFrame(该文件夹名称可以自拟)

在文件夹nnUNetFrame下再创建3个文件夹:如下

nnUNet_raw文件夹下存放数据集,数据集一定严格遵守源代码的格式,后缀是以_000x结尾的:

dataset.json文件就按照GitHub上给的实例换成自己的就行

设置环境变量,vim ~/.bashrc

export nnUNet_raw=path/to/nnUNet_raw
export nnUNet_preprocessed=path/to/nnUNet_preprocessed
export nnUNet_results=path/to/nnUNet_results

然后再source ~/.bahrc就可以了

三、数据集预处理

现在的nnunetv2不用再把所有的数据集格式转换成 .nii.gz 。

默认情况下,支持以下文件格式:

  • NaturalImage2DIO:.png、.bmp、.tif
  • NibabelIO:.nii.gz、.nrrd、.mha
  • NibabelIOWithReorient:.nii.gz、.nrrd、.mha
  • SimpleITKIO:.nii.gz、.nrrd、.mha
  • Tiff3DIO:.tif,.tiff。

pycharm终端执行下列命令

nnUNetv2_plan_and_preprocess -d 001 --verify_dataset_integrity

在这条命令中,你只需要根据自己数据集命名的情况修改-d后面的参数就可以,比如我的数据集名称叫做Dataset001_dfc,那么-d后面跟的就是001,以此类推

出现如下就正确了

运行成功后,nnUNet_preprocessed中会出现如下内容

三、训练

然后修改一下训练epoch,我这里改成了200epoch

训练命令

2D训练指令如下:

nnU-Net默认使用5折交叉验证来训练所有U-Net配置

train后面的第一个数字为数据集编号,后面的2d为本次训练所使用的模型,2d后面的数字为第几折,因为使用的是五折交叉验证,所以需要训练5次,这里可以创建一个train.sh文件,直接执行bash train.sh就可以了

nnUNetv2_train 1 2d 0   
nnUNetv2_train 1 2d 1
nnUNetv2_train 1 2d 2   
nnUNetv2_train 1 2d 3   
nnUNetv2_train 1 2d 4   

这样就是开始训练了,差不多1分钟一个epoch

训练完之后nnUNet_results文件夹下就会出现如下所示:

四、验证

nnUNetv2_train 1 2d 0  --val --npz
nnUNetv2_train 1 2d 1  --val --npz
nnUNetv2_train 1 2d 2  --val --npz
nnUNetv2_train 1 2d 3  --val --npz
nnUNetv2_train 1 2d 4  --val --npz

五、推理

nnunet可以自己找寻最优模型并给出推理命令,使用如下命令自动寻找最优:

nnUNetv2_find_best_configuration 1 -c 2d -f 0 1 2 3 4

 稍等后会出现如下图所示

下面给出了推理命令和后处理命令,将-i 和-o后面的内容替换成自己的文件夹就可以,这样就完成了所有的训练和推理过程。

有什么不懂的大家可以在评论区问我,我一定会积极回复哒!!!

相关文章:

  • 【多模态】Magma多模态AI Agent
  • ave-form.vue 组件中 如何将产品名称发送给后端 ?
  • 模拟退火算法总结记录
  • CMake宏定义管理:如何优雅处理第三方库的宏冲突
  • 快速搭建多语言网站的 FastAdmin 实践
  • 企业jsapi_ticket,java举例
  • 软件工程---软件测试
  • 2个12v并联电压是多少
  • 汽车低频发射天线介绍
  • Java进阶——反射机制超全详解
  • 现代前端框架渲染机制深度解析:虚拟DOM到编译时优化
  • 【JavaWeb学习Day20】
  • C++:类和对象(下篇)
  • INMP441数字全向麦克风介绍
  • 《React Hooks 入门与实战》
  • 网络知识点笔记,排查网络丢包问题
  • day02_Java基础
  • C++ 【右值引用】极致的内存管理
  • Kotlin 嵌套类和内部类
  • 链表:struct node *next;为什么用指针,为什么要用自身结构体类型?(通俗易懂)
  • 触屏版网站开发样式/软文吧
  • 榆林网站建设哪家好/网址安全中心检测
  • 还是网站好/参考网是合法网站吗?
  • 给别人做网站赚钱吗/2020最近的新闻大事10条
  • 会议专题网站建设报价单/网站维护的内容有哪些
  • 北京英文网站建设/高端网站建设公司哪家好