MS 训练笔记【1】:nnUNet

news2025/1/15 6:31:24

文章目录

  • 前言
  • 1. 安装
  • 2. 训练与测试
    • 2.1. 数据处理
      • 2.1.1. 整理数据路径
      • 2.1.2. 设置 nnFormer 读取文件的路径
      • 2.1.3. 数据集预处理
    • 2.2. 训练
      • 2.2.1. 训练代码
    • 2.2. 预测
  • 总结


前言

nnUNet是德国癌症研究中心的工程师编写的框架,迄今为止依旧在维护和更新。本文主要记载 nnUNet 从安装到训练再到推理的过程。

有关 nnUNet 网络结构的讲解,可以看我的另一篇文章:MS-Model【1】:nnU-Net


1. 安装

  • 官方系统版本
    • nnU-Net需要GPU!为了推断,GPU应该有4 GB的VRAM。对于培训nnU-Net模型,GPU应至少具有10 GB
    • 对于培训,我们建议使用强大的CPU与GPU配合使用。建议至少6个CPU内核(12个线程)。CPU要求主要与数据增强和输入通道数量的扩展有关。
  • 安装步骤
  1. 安装 hiddenlayer,hiddenlayer 使 nnU-net 能够生成其生成的网络拓扑图
pip install --upgrade git+https://github.com/FabianIsensee/hiddenlayer.git@more_plotted_details#egg=hiddenlayer
  1. 在服务器上创建路径 nnUNetFrame
  2. 进入创建好的路径,克隆项目到服务器
    • 需要注意的是,可能需要使用国内一些加速的镜像网站才能比较流畅的 clone 到自己的服务器上
cd /root/nnUNetFrame

git clone https://github.com/MIC-DKFZ/nnUNet.git
  1. 进入 clone 好的文件路径
cd nnUNet
  1. 执行安装指令
pip install -e .

安装完成这些以后,每一次对 nnUNet 的操作,都会在命令行里以 nnUNet_ 开头,代表着你的 nnUNet 开始工作的指令


2. 训练与测试

2.1. 数据处理

2.1.1. 整理数据路径

  • 进入创建的 nnFormerFrame 文件路径
cd /root/nnUNetFrame
  • 创建一个名为 DATASET 的文件夹
  • 进入创建好的 DATASET 文件夹
    • 依次创建
      • nnUNet_preprocessed - 存放原始数据预处理之后的数据
      • nnUNet_raw - 存放原始的训练的数据
      • nnUNet_trained_models - 存放训练的结果
  • 进入 nnUNet_raw
    • 依次创建
      • nnUNet_cropped_data - crop 以后的数据
      • nnUNet_raw_data - 原始数据
  • 最终的文件结构如图所示:
    在这里插入图片描述

2.1.2. 设置 nnFormer 读取文件的路径

  • 进入 .bashrc 文件,在文件末尾添加如下命令:
export nnUNet_raw_data_base="/root/nnUNetFrame/DATASET/nnUNet_raw"
export nnUNet_preprocessed="/root/nnUNetFrame/DATASET/nnUNet_preprocessed"
export RESULTS_FOLDER="/root/nnUNetFrame/DATASET/nnUNet_trained_models"
  • 更新资源:
source .bashrc

2.1.3. 数据集预处理

本实验使用的是医学图像十项全能 Task05_Prostate

  • 转换数据集,让它可以被 nnUNet 识别:
nnUNet_convert_decathlon_task -i /root/nnUNetFrame/DATASET/nnUNet_raw/nnUNet_raw_data/Task05_Prostate

  • 进行插值等操作
nnUNet_plan_and_preprocess -t 5

需要注意的是,这一步如果有提示有包没有安装成功,基本上可以确定是先前的环境没有配好,如果有出现报错请试着重新配一下环境

2.2. 训练

2.2.1. 训练代码

  • 找到路径 /root/nnUNetFrame/nnUNet/nnunet/training/network_training/ 下的 nnUNetTrainerV2.py,修改 epochs
    • 如果只是想得到一个训练结果,可以不用训练那么多轮 epochs(差不多200个epochs就收敛了)
    • 修改:
self.max_num_epochs = 400
  • 训练
    • 5 代表你的任务ID,4代表五折交叉验证中的第4折(0代表分成五折后的第一折)
nnUNet_train 3d_fullres nnUNetTrainerV2 5 4

训练结果

  • 训练曲线

    • 仅供参考
      在这里插入图片描述
  • 训练 log

2022-12-27 10:31:42.129562: 
epoch:  399 
2022-12-27 10:34:45.765983: train loss : -0.9746 
2022-12-27 10:35:06.985032: validation loss: -0.9035 
2022-12-27 10:35:06.985926: Average global foreground Dice: [0.9274] 
2022-12-27 10:35:06.986063: (interpret this as an estimate for the Dice of the different classes. This is not exact.) 
2022-12-27 10:35:13.525987: lr: 0.002349 
2022-12-27 10:35:13.526254: saving scheduled checkpoint file... 
2022-12-27 10:35:13.607831: saving checkpoint... 
2022-12-27 10:35:14.533169: done, saving took 1.01 seconds 
2022-12-27 10:35:14.534369: done 
2022-12-27 10:35:14.567537: saving checkpoint... 
2022-12-27 10:35:15.225455: done, saving took 0.69 seconds 
2022-12-27 10:35:15.226438: This epoch took 213.096802 s

2.2. 预测

nnUNet_predict -i /root/autodl-tmp/model/nnUNetFrame/DATASET/nnUNet_raw/nnUNet_raw_data/Task002_Heart/imagesTs/ -o /root/autodl-tmp/model/nnUNetFrame/DATASET/nnUNet_raw/nnUNet_raw_data/Task002_Heart/inferTs -t 2 -m 3d_fullres -f 4
nnUNet_predict -i /root/autodl-tmp/model/nnUNetFrame/DATASET/nnUNet_raw/nnUNet_raw_data/Task005_Prostate/imagesTs/ -o /root/autodl-tmp/model/nnUNetFrame/DATASET/nnUNet_raw/nnUNet_raw_data/Task005_Prostate/inferTs -t 5 -m 3d_fullres -f 4

各项参数含义:

  • nnUNet_predict:执行预测的命令;
  • -i: 输入(你的待推理测试集);
  • -o: 输出(测试集的推理结果);
  • -t: 你的任务对应的数字ID;
  • -m: 对应的训练时使用的网络架构;
  • -f: 数字4代表使用五折交叉验证训练出的模型;

总结

按照上面的流程执行一遍后,就可以得到属于你自己的 nnUNet 了!

训练参考
推理参考

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

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

相关文章

FBX模型

概览 fbx文件,一般是导出给unity使用的模型文件。 如下图所示,建立一个models目录,然后右击,选择 imoprt new asserts 即可导入这些文件。 展示如下,Mesh定义了形状。 铅笔也是同理,只不过铅笔有自己的贴图…

尚医通-前端列表(十一)

目录: (1)搭建前端环境 (2)目录结构和登录改造 (3)医院设置前端-列表 (1)搭建前端环境 vue-element-admin 简介 vue-element-admin是基于element-ui 的一套后台管理系…

计算机系统基础实验 - 数的机器级表示

实验1 数的机器级表示 实验序号:1 实验名称:数的机器级表示 适用专业:软件工程 学时数:2学时 一、实验目的 1.熟练掌握无符号整数的机器级表示 2.熟练掌握有符号整数的机器级表示 3.熟练掌握浮点数的机器级表示 二、实验要求 …

WORDPRESS WOOCOMMERCE购物网站安装AB跳转支付插件接口的教程

本文介绍在Wordpress Woocommerce购物系统上安装支付插件,并且对接《品牌出海AB跳转收单系统》的方法,以下是图文教程 注意本教程是采用Wordoress中文版本后台截取的图例,英文版本后台文字略有不同; 1、首先打开支付插件压缩包&…

反编译python 生成的exe源码

反编译python 生成的exe源码记录反编译exe工具使用 工具准备 – pyinstxtractor.py – uncompyle6 – sublime Text(或者其他的二进制编辑工具) 一、解包(exe) ①:先把下载的pyinstxtractor.py文件和需要进行反编译的…

π120M60代替ADuM2210SRIZ 双通道数字隔离器 电路简单速度快

π120M60代替ADuM2210SRIZ 双通道数字隔离器 电路简单速度快。具有出色的性能特征和可靠性,整体性能优于光耦和基于其他原理的数字隔离器产品。传输通道间彼此独立,可实现多种传输方向的配置,可实现 5.0kV rms 隔离耐压等级和 DC 到 10Mbps 信…

下载和安装MySQL官方提供的示例数据库(Employees)

一、前言 在此之前笔者写过一篇博客《你说精通MySQL其实很菜jī(1):你不一定会的基本技巧或知识点(值得一看)》,本文内容是从那篇博客截取出来的。我们要学习MySQL相关的技术点,使用官方提供的测…

构造HTTP请求

构造HTTP请求一、浏览器自己构造二、通过 form 表单构造三、通过 ajax 构造一、浏览器自己构造 1)地址栏里写URL,构造出GET请求 2)点击a标签等,也会构造GET请求 3)img、link、script也会构造GET请求 二、通过 form 表…

Java中的常用队列

🏆今日学习目标: 🍀Java中的常用队列 ✅创作者:林在闪闪发光 ⏰预计时间:30分钟 🎉个人主页:林在闪闪发光的个人主页 🍁林在闪闪发光的个人社区,欢迎你的加入: 林在闪闪…

【Django】第二课 基于Django图书借阅管理网站平台

概念 本文在上一篇文章之上完成登录,图书显示,关键字搜索以及分页功能 登录功能实现 当用户在首页进行输入学生用户信息后,点击登录按钮发送请求给服务器,地址请求为: /toLogin/ urls.py path(toLogin/,views.toLogin), 将接…

ArcGIS基础实验操作100例--实验3旋转矢量要素

实验平台:ArcGIS 10.6 实验数据:请访问实验1(传送门) 基础编辑篇--实验3 旋转矢量要素 目录 一、实验背景 二、实验数据 三、实验步骤 (1)加载【旋转】工具 (2)旋转矢量要素 一…

灵龟八法推算

很久之前就对这个算法感兴趣了,但是一直没搞定,网上公说公的,婆说婆的,搞得你头晕眼睛花,最后东拼西凑研究了好久才研究出来,在这里给大家分享。 第一步,掏出你的老黄历,如果你没有老黄历问题不…

BUUCTF Misc 弱口令 [RoarCTF2019]黄金6年 小易的U盘 [WUSTCTF2020]alison_likes

目录 弱口令 [RoarCTF2019]黄金6年 小易的U盘 [WUSTCTF2020]alison_likes 弱口令 下载文件 一个压缩包,需要密码,爆破了一会没出结果,百度了一下竟然有提示 蓝色内容复制到sublime查看(记事本也不能看) 摩斯密码&…

vue-cli2配置webpack生产环境.env.production、测试环境.env.development(配置不同环境的打包访问地址)

vue-cli区分办法 vue配置生产环境.env.production、测试环境.env.development vue配置webpack生产环境、测试环境 在使用webpack创建完vue2项目的时候,为了解决生产打包、测试打包对应的全局变量不一致的问题。 首先看一下package.json的改动: "…

【Git】一文带你入门Git分布式版本控制系统(创建版本库、 版本回退)

个人简介 👀个人主页: 前端杂货铺 🙋‍♂️学习方向: 主攻前端方向,也会涉及到服务端 📃个人状态: 在校大学生一枚,已拿多个前端 offer(秋招) 🚀未…

改变您对Fedora的印象

导读我是 Fedora 的老用户了,从四年前接触嵌入式 Linux 开始,Fedora 就是我的桌面操作系统,期间从未被其他操作系统替代过,偶尔尝试也会第二天就装回来。用得愈久愈是喜欢,简洁、漂亮、稳定,无一不击中我&a…

OpenGL学习(基础光照)

这些光照模型都是基于我们对光的物理特性的理解。其中一个模型被称为冯氏光照模型(Phong Lighting Model)。冯氏光照模型的主要结构由3个分量组成:环境(Ambient)、漫反射(Diffuse)和镜面(Specular)光照 环境光照 全局照明(Global Illumination)算法,但是…

吴恩达《机器学习》——线性回归代码实现

线性回归1. 单变量线性回归单变量线性回归公式损失函数优化算法——批梯度下降(BGD)2. 多变量线性回归特征缩放(标准化)参数的逆缩放3. 线性回归算法代码实现向量实现Python代码4. 实验结果单变量回归多变量回归实验总结数据集、源…

使用C#开发Word VSTO外接程序示例

目标:实现类似word中导航栏视图的功能。 创建新项目,选择模板“Word VSTO 外接程序”。选择工程,新建项目---新建功能区(可视化设计器)双击打开新建的可视化编辑器,编辑容器RibbonGroup在容器RibbonGroup里…

ReactJS入门之Model层

目录 一:分层 二:使用DVA进行数据分层管理 三:在model中请求数据 四:mock数据 一:分层 上图中,左侧是服务端代码的层次结构,由Controller、Service、Data Access 三层组成服务端系统&#…