nnUNet保姆级使用教程!从环境配置到训练与推理(新手必看)

慈云数据 2024-03-12 技术支持 170 0

文章目录

    • 写在前面
    • nnUNet是什么?
    • 一、配置虚拟环境
    • 二、安装nnUNet框架
      • 1.安装nnUNet
        • 这一步我遇到的两个问题:
        • 2.安装隐藏层hiddenlayer(可选)
        • 三、数据集准备
            • nnUNet对于你要训练的数据是有严格要求的,这第一点就体现在我们保存数据的路径上,请初学者务必按照我下面的样式来创建相应的文件夹并存入数据!!!
            • 四、设置nnUNet读取文件的路径
            • 五、数据集转换
              • 1.数据集转换是什么,为什么要进行数据集转换?
              • 2.运行数据集转换的命令
              • 3.关于dataset.json文件
              • 六、数据预处理
              • 七、模型训练
                • 1.写在训练前:更改epoch
                • 2.关于训练的运行命令
                  • 对于我们的Task01来说,应该运行的命令如下
                  • 下面给出各种配置的nnUNet网络需要的训练命令
                  • 3.训练结果
                    • 下面详细讲讲这些训练后得到的文件都是什么
                    • 现在我们想看看我们训练的结果怎么样,有两种方法:
                    • 八、确定最佳U-Net配置
                    • 九、运行推理
                      • 1.准备测试集
                      • 2.运行推理的最简单方法是简单地使用下面这一条命令:
                      • 3.如果你想集成多个模型的推理结果
                      • 十、评估推理结果
                      • 参考资料
                      • 码字不易,您的点赞是对我最好的支持,如果有问题也欢迎在评论区或私信与我交流!

                        写在前面

                        本人初步接触深度学习与医学图像分割领域,第一个项目就是运用nnUNet网络对BrainTumour的数据集进行分割,在学习的过程中,学了很多资料,踩了很多坑,也解决了很多bug,在此把自己的学习经验分享出来,希望有需要的同学可以少走一些弯路。

                        本篇博客的操作均在服务器Linux系统(Ubuntu)上进行。作者的建议也是使用linux系统

                        本篇文章使用的数据集为Medical Segmentation Decathlon比赛的Task01_BrainTumour数据集,如果你想训练自己的数据集,请参考我的另一篇博客。

                        抱歉,今年一直忙着竞赛和保研,现在有时间写了,但是nnUNet v2已经发布,关于v1的教程就有些没必要了,大家可以自行研究v2,欢迎在评论区或私信交流!

                        才疏学浅,如有错误,欢迎批评指正!!


                        nnUNet是什么?

                        nnU-Net是由德国癌症研究中心、海德堡大学以及海德堡大学医院研究人员(Fabian Isensee, Jens Petersen, Andre Klein)提出来的一个自适应任何新数据集的医学影像分割框架,该框架能根据给定数据集的属性自动调整所有超参数,整个过程无需人工干预。仅仅依赖于朴素的U-Net结构(就是原始U-Net)和鲁棒的训练方案,nnU-Net在六个得到公认的分割挑战中实现了最先进的性能。

                        • 关于nnUNet,如果你想更加深入的了解,我推荐看一下这篇博客论文解读- nnU-Net: Self-adapting Framework for U-Net-Based Medical Image Segmentation(附实现教程)_Tina姐的博客-CSDN博客,是比较概括性的讲解,更深入的学习还是建议精读论文。

                          一、配置虚拟环境

                          首先,我们想实现nnUNet的使用,需要配置类似如下的环境:

                          image-20230204135640450

                          • 上图所示为nnUNet的官方readme文档建议的环境配置,如果你对cuda,cudnn,torch之类的词语还不算熟悉,可以看一下我的另一篇博客用人话讲解深度学习中CUDA,cudatookit,cudnn和pytorch的关系_江江ahh的博客-CSDN博客

                          • 至于为什么要在虚拟环境中安装nnUNet,当我们在安装包的时候,pip install django安装一个包会附带安装数个其他关联的包。但是当我们删除这个包的时候,我们之后仅仅删除这一个包,安装时附带的其他包并不会删除。**简单来说,当我们的环境使用时间长的时候,我们的包是很难进行管理的。**所以非常建议在一个全新的虚拟环境中来完成接下来的操作!!!

                          • 如果你对虚拟环境还比较陌生,建议看一下这位大佬的视频安装不算完事,只有理解了虚拟环境才算真正掌握 Python 环境_哔哩哔哩_bilibili

                          • 当你了解虚拟环境的作用以后,可以参考我的另一篇博客来配置nnUNet所需的环境在conda虚拟环境中配置cuda+cudnn+pytorch深度学习环境(新手必看!简单可行!)_江江ahh的博客-CSDN博客_在虚拟环境中安装cuda


                            二、安装nnUNet框架

                            此时,你应该已经配置好了自己的虚拟环境并且可以打印出类似上图的环境版本(可以更高,但最好不要太低),注意,后续的操作均要在你激活你想要使用的那个虚拟环境的前提下进行!!!!

                            1.安装nnUNet

                            根据readme文档,这里应该有两种方案可供选择:

                            (1)用作标准化基线、开箱即用的分割算法或使用预训练模型进行推理:

                            pip install nnunet
                            

                            (2)用作集成框架(这将在您的计算机上创建nnU-Net代码的副本,以便您可以根据需要对其进行修改)

                            你想把nnUNet的文件夹放在哪,就在哪个路径下运行这些命令!

                            git clone https://github.com/MIC-DKFZ/nnUNet.git
                            cd nnUNet
                            pip install -e .#最后这个点也不能忽略
                            

                            对于我来说,因为我后续是要改网络代码的,所以我选择第二种方法,下面详细说明一下这三行命令都是什么意思:

                            git clone其实就是把人家github上的代码克隆过来,这一步其实和直接复制粘贴代码文件是一样的,总共也就1Mb

                            cd nnUNet不用说了,就是进入文件夹

                            其实这个时候就已经有一个nnUNet完整的文件夹了,里面包含这些东西:

                            image-20230204140026924

                            最后pip install -e .相当于python setup.py,也就是运行上图这个setup.py文件

                            这个文件是用来干什么的呢?

                            1. 安装nnUNet需要的python包
                            2. 向终端添加几个新命令。这些命令用于运行整个nnU-Net pipeline。您可以从系统上的任何位置执行它们。所有nnU-Net命令都带有前缀“nnUNet_”,以便于识别。
                            这一步我遇到的两个问题:

                            (1)从github上git clone代码的时候速度慢的离谱(20kb/s),这个问题主要是github的域名在国内被限制了,网上有很多方法解决,比如下面这个网址可以参考https://www.jianshu.com/p/d58ab49ba98b/

                            (2)运行pip命令的时候速度很慢,这个问题导致我运行pip install -e .的时候超时报错了,同样给出解决方法的链接解决Linux,Ubuntu下使用python包管理工具pip命令安装和下载包速度很慢、失败或者connection timeout等问题_一点儿也不萌的萌萌的博客-CSDN博客_linux 下载python failed: connection timed out.

                            2.安装隐藏层hiddenlayer(可选)

                            隐藏层使nnU-net能够给出其生成的网络拓扑图(后面会细说),安装命令如下(这是一整行命令,请务必一起复制粘贴)

                            pip install --upgrade git+https://github.com/FabianIsensee/hiddenlayer.git@more_plotted_details#egg=hiddenlayer
                            

                            这里我遇到的唯一问题就是上面说的pip命令速度太慢,也是根据上述解决方案来解决的。


                            三、数据集准备

                            nnUNet对于你要训练的数据是有严格要求的,这第一点就体现在我们保存数据的路径上,请初学者务必按照我下面的样式来创建相应的文件夹并存入数据!!!

                            ​ 第一步:你现在应该有一个名为nnUNet的文件夹(上面有图),进入它,在里面创建一个名为nnUNetFrame的文件夹

                            image-20230204143045892

                            ​ 第二步:在nnUNetFrame文件夹中创建一个名为DATASET的文件夹,后面我们会用它来存放数据

                            image-20230204143146660

                            ​ 第三步:在DATASET文件夹中创建三个文件夹,它们分别是nnUNet_raw,nnUNet_preprocessed,nnUNet_trained_models

                            image-20230204143353743

                            ​ 第四步:进入上面第二个文件夹nnUNet_raw,创建nnUNet_cropped_data文件夹和nnUNet_raw_data文件夹,右边存放原始数据,左边存放crop以后的数据。

                            image-20230204143553859

                            ​ 第五步:进入右边文件夹nnUNet_raw_data,创建一个名为Task01_BrainTumour的文件夹(解释:这个Task01_BrainTumour是nnUNet的作者参加的一个十项全能竞赛的子任务名,也是我要实践的分割任务,类似的还有Task02_Heart,就是分割心脏的。如果你想分割自己的数据集,建议Task_id从500开始,这样以确保不会与nnUNet的预训练模型发生冲突(ID不能超过999))

                            ​ 第六步:将下载好的公开数据集或者自己的数据集放在上面创建好的任务文件夹下,下面还以Task01_BrainTumour竞赛为例,解释下数据应该怎么存放和编辑:

                            1. 进入这个网站http://medicaldecathlon.com/.下载对应的数据集(
微信扫一扫加客服

微信扫一扫加客服

点击启动AI问答
Draggable Icon