网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
具体步骤如下图:
- 安装隐藏层(可选,可以不安装),hiddenlayer 使 nnU-net 能够生成网络拓扑图
pip install --upgrade git+https://github.com/FabianIsensee/hiddenlayer.git
四、数据集的准备
得到克隆之后的副本,即:名为 nnUNet 的文件夹
,参照官方文档,准备数据集。GitHub-文档说明link
- 数据集文件夹结构:按照如下步骤创建文件夹,存放相应的数据集
(1) 在名为 nnUNet 的文件夹
中创建一个名为名为 GATASET 的文件夹
的文件夹
(2) 在名为 GATASET 的文件夹
中创建3个文件夹,命名分别为:nnUNet_raw
、nnUNet_preprocessed
和nnUNet_trained_models
。如下图所示:
(3) 在 名为 nnUNet_raw 的文件夹
中创建1个 名为 Dataset001_Teeth 的文件夹
说明1:文件夹命名为:Dataset+三位整数+任务名,
Dataset001_Teeth
中数据集ID为1,任务名为Teeth。此文件夹下存放需要的训练数据集imageTr
、测试集imageTs
、标签labelsTr
。其中imageTs
是与imageTr
中一一对应的标签,文件中都是nii.gz文件。imageTs
是可选项,可以没有。如下图所示
说明2:json文件是对三个文件夹内容的字典呈现。先在
Dataset001_Teeth
文件夹下创建一个空白的dataset.json文件,然后运行以下代码写入相应的 json文件
import json
nnUNet_dir = '/root/autodl-tmp/nnU-Net/nnUNet/DATASET/' #此路径根据自己实际修改
def sts\_json():
info = {
"channel\_names": {
"0": "CBCT"
},
"labels": {
"background": 0,
"Teeth": 1
},
"numTraining": 12,
"file\_ending": ".nii.gz"
}
with open(nnUNet_dir + 'nnUNet\_raw/Dataset001\_Teeth/dataset.json',
'w') as f:
json.dump(info, f, indent=4)
sts\_json()
运行后生成的 json文件内容如下:
五、设置读取文件路径设置(重要)
-
需要让nnUNet知道文件存放在哪里,否则执行数据处理等一下相关操作都会报错,如下图
-
方法一:(自己使用的方法一)
(1) 找到root
文件夹下的.bashrc
文件(**注:**这里自己租用的云平台的服务器,若是自己的服务器在home文件夹下找 .bashrc文件,若没有,在home目录下使用Ctrl+h,显示隐藏文件)
(2) 打开.bashrc
文件,在最后添加此三行内容,记得要更新一下修改后的文件,具体说明如下图
export nnUNet_raw="/root/autodl-tmp/nnU-Net/nnUNet/DATASET/nnUNet\_raw"
export nnUNet_preprocessed="/root/autodl-tmp/nnU-Net/nnUNet/DATASET/nnUNet\_preprocessed"
export nnUNet_results="/root/autodl-tmp/nnU-Net/nnUNet/DATASET/nnUNet\_trained\_models"
- 方法二:
4 注:更新文档可以点击按钮更新,然后在终端使用命令行source .bashrc
更新,如下图
(1)
(2)
六、数据集的转换
- 此任务的数据集不需要格式转换,此步骤是为了将数据集转换成上述imageTr文件夹里面图片中显示的样子:
名字_000X
的形式 - 数据集转换的指令:
nnUNet_convert_decathlon_task -i /root/autodl-tmp/nnU-Net/nnUNet/DATASET/nnUNet_raw/Dataset001_Teeth
- 此步骤参考:link
七、数据集预处理
- 此步骤对数据进行:裁剪crop,重采样resample以及标准化normalization,具体论文中有讲解,或参看此博文:nnU-Net论文解读。将提取数据集指纹(一组特定于数据集的属性,例如图像大小、体素间距、强度信息等)。此信息用于设计三种 U-Net 配置。每个管道都在其自己的数据集预处理版本上运行
- 继续在虚拟环境中执行一下命令行:
nnUNetv2_plan_and_preprocess -d DATASET\_ID --verify_dataset_integrity
此命令行中的DATASRT_ID根据自己任务修改,此任务中,Dataset001_Teeth
中可知ID为1
所以执行的命令为:
nnUNetv2_plan_and_preprocess -d 1 --verify_dataset_integrity
具体如下图所示:
- 运行后将在 nnUNet_preprocessed 文件夹中创建一个以数据集命名的新子文件夹。命令完成后,将出现一个 dataset_fingerprint.json 文件以及一个 nnUNetPlans.json 文件。还有一些子文件夹包含 UNet 配置的预处理数据。
八、模型训练
- 这是五折交叉验证,可以使用代码直接一折一折接着跑
(1.1) 创建一个tst.sh
文件,并写入此代码:
for fold in {0..4}
do
# echo "nnUNetv2\_train 1 3d\_lowres $fold"
nnUNetv2_train 1 3d_lowres $fold
done
(1.2) 在虚拟环境下的终端运行此 tst.sh
文件,使用 source
命令可以执行脚本(参考link),具体命令行为:
source /root/autodl-tmp/nnU-Net/sts.sh
具体为下图所示:
- 也可以使用代码一折跑完,再次运行代码跑第二折:
进入虚拟环境,使用命令行:
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!