一种医学图像分割的新思路【nnU-Net网络配置教程】 (1)

这把我C 2021-04-08 11:11:30 6797
**目录:
1 nnU-Net论文解析
2 环境配置——pytorch教程
    2.1 使用学院的CUDA9.0进行编译
        2.1.2 对虚拟环境的创建
        2.1.2 编译GCC5.4
        2.1.3 编译pytorch1.5\(CUDA9.0支持的最高版本\)
        2.1.4 安装nnUNet
        2.1.5 配置nnunet
    2.2 更改CUDA版本**

1 nnU-Net论文解析

请先阅读:

1.详细解释
2.2D和3DUnet辨析
nnUnet虽然不是新的论文,但是这个框架效果很好。它并没有提出新的网络结构,没有抓人眼球的地方,仅依靠一些技巧,将分割任务进行了大统一,并在很多任务上得到了非常好的成绩上,可以看出作者的功底之深。
对于分割任务,从unet出来之后的几年里,其实在网络结构上已经没有多少的突破了,结构修改越多,反而越容易过拟合。因此作者认为更多的提升其实在于理解数据,并针对医学数据采用适当的预处理和训练方法。

2 环境配置——pytorch教程

经过半个月的折腾,我大致总结出两个办法:1、使用学院服务器集群module管理器的CUDA9.0对pytorch源码进行编译(缺点:最高只能到pytorch1.5,pytorch1.6需要CUDA9.2以上版本的编译,而且pytorch1.6原生支持nnunet的混合精度训练,不然必须额外下载安装令人头疼的apex);2、学院服务器nvidia-smi显示的显卡驱动版本390.46查询是不支持CUDA10的,因此module管理器里的cuda10.0也是用不了的(服务器里有什么module可以在/cm/shared/app路径下查看),但我们可以自行安装CUDA9.2CUDNN7.6.5(CUDNN跟CUDA版本需要对应)对pytorch最新版本(支持CUDA9.2)进行编译,但由于没有root权限,因此必须下载run版本和tgz版本文件,解压cuda和cudnn后手动添加环境变量到PATHLD_LIBRARY_PATH这两个环境变量中而无法直接进行安装。

附学院服务器module管理器的常用命令:

#列出服务器中已经安装的module
module avail
#列出目前使用的module
module list
#添加module(服务器里有什么module可以在/cm/shared/apps路径下查看)
module add xxx
#删除module
module remove xxx

目前为止pytorch只支持python3.6及3.7版本进行编译,因此Ubuntu20.04系统可能需要卸载系统自带的3.8安装3.7(尽量不要使用update-alternatives等切换Python版本,可能会出现找不到包等情况),而且在安装3.7时最好切换到root而不直接使用sudo进行安装:

sudo apt update
sudo apt install software-properties-common
sudo add-apt-repository ppa:deadsnakes/ppa
sudo su
apt install python3.7

2.1 使用学院的CUDA9.0进行编译

CUDA 是 NVIDIA 发明的一种并行计算平台和编程模型。 它通过利用图形处理器 (GPU) 的处理能力,可大幅提升计算性能。

2.1.2 对虚拟环境的创建

虚拟环境不建议使用anaconda冗余的虚拟环境(nnunet强烈不建议 因为会导致问题的产生)而建议使用virtualenv,anaconda具有condapip两个安装源,两个安装包管理之间无法相互管理另一个源安装的包,安装的package版本号也往往不同,因此常常会出现冲突等问题。但学院服务器没有root权限,限制只能通过

conda env create -n env_name python=3.7 

安装Python3.7,而本地的是Python3.6,而

python3 -m venv env_name

无法自定义python的版本,因此需要创建Python3.7时可以先通过conda env create 创建带有python3.7的conda环境conda_env_name,然后再在进入conda虚拟环境的情况下运行上面的指令安装python3.7的虚拟环境。

或者也可以在进入conda虚拟环境的情况下通过conda env list查看这个环境中python3.7的位置并使用pip install virtualenv安装virtualenv,接着

virtualenv --python=/home/user0xx/.conda/envs/conda_env_name/bin/python3.7 new_env_name

来创建virtualenv环境new_env_name

通过virtualenv方式安装的虚拟环境在编译某些特定package时可能会存在问题。假如存在问题 还是建议使用python3 -m venv的方式创建虚拟环境

由于本人需要使用高版本的pytorch(>=1.4),而学院服务器是老旧的CUDA9.0,因此并没有>=1.4版本的pre-build二进制pip package可以下载,因此需要from source编译pytorch。

又由于学院服务器只有GCC7(CUDA9.0只能用GCC6以下进行编译)和GCC5.5(此版本编译pytorch会有bug),因此我们需要自行编译一个GCC5.4用于源码编译。

2.1.2 编译GCC5.4

首先在GNU release 页面将GCC5.4下载下来,解压后以文本打开gcc-5.4.0/contrib/download_prerequisites,可以发现GCC依赖于gmp mpc mpfr这三个package,而且该文件里会标明使用的版本号。虽然也可以直接运行

./contrib/download_prerequisites

但往往由于网络原因或者服务器更换等原因不能成功,建议还是在GNU上将对应版本号的package下下来解压然后放到gcc-5.4.0文件夹中,并仿照download_prerequisites使用

ln -sf mpfr-2.4.2 mpfr

对三个package都进行链接。接着因为不能直接在源码中编译创建objdir作为编译路径,然后进行编译(gcc全称为gnu compiler collection,可以编译C JAVA等语言,可以写all,但会耗时,更多内容参考官方文档):

cd ..
mkdir objdir
cd objdir
../gcc-5.4.0/configure --prefix=$HOME/gcc-5.4.0 --disable-checking --enable-languages=c,c++ --disable-multilib --enable-threads=posix
make
make install

等待GCC漫长的编译过程。最后删除objdir即可:

rm -rf ~/objdir

虽然至此我们已经no root完成了对GCC的编译,但也正是因为是no root,因此我们还要手动将我们编译的GCC放到环境变量PATHLD_LIBRARY_PATH 中,并置于系统原先的GCC路径之前,这样在寻找GCC时会首先使用我们刚刚编译的GCC而不是系统原来的GCC:

export PATH=$HOME/gcc-5.4.0/bin:PATH
export LD_LIBRARY_PATH=$HOME/gcc-5.4.0/lib:$HOME/gcc-5.4.0/lib64:$LD_LIBRARY_PATH

此时仅在当前的terminal生效,一劳永逸要将以上两行放到~/.bashrc的最后,然后source ~/.bashrc

2.1.3 编译pytorch1.5(CUDA9.0支持的最高版本)

在编译完成后,需要再从源码编译pytorch由于使用的是cuda9.0,因此不支持pytorch1.6以上,只能选择pytorch1.5版本。clone时需要clone v1.5的tag而不是最新的master branch:

cd ~
#据说1.5版本就是不能用C++版本的apex会报runtime error 需要使用C++版本的apex可以编译下载1.4版本的
git clone --depth 1 --branch v1.5.0 https://github.com/pytorch/pytorch/

大部分都是按照github的教程来走,只是将conda install换成pip install:

pip install numpy ninja pyyaml mkl mkl-include setuptools cmake cffi
cd pytorch
git submodule sync
git submodule update --init --recursive
#设置cmake目录
export CMAKE_PREFIX_PATH="$HOME/env_name/bin/"
#设置cudnn目录
export CUDNN_LIB_DIR="/cm/shared/apps/cudnn/7.0/lib64/"
export CUDNN_INCLUDE_DIR="/cm/shared/apps/cudnn/7.0/include/"
python setup.py install

尤其要注意倒数第二行不能直接复制官方github里的命令(因为是面向conda的)而要将CMAKE_PREFIX_PATH设置为你virtualenv的bin文件夹,即可以通过你自己的virtualenv找到cmake。或者也可以通过在cmake官网上下载cmake的二进制预编译.sh文件,将其解压到home目录下面以后export CMAKE_PREFIX_PATH=$HOME/cmake:$PATH 使用下载的cmake来进行编译。

install后等待漫长的编译,pytorch也就编译成功啦。

``

2.1.4 安装nnUNet

最后则是对nnUNet的安装(推荐从源码安装,方便魔改代码,对nnUNet文件夹的py文件进行更新后可以实时反应到环境中 不需要再次pip uninstall pip install。PyTorch1.6以后自带混合精度训练,不需要再进行apex的安装,但由于我们这个是1.5的版本,还是需要进行安装:

cd env_name
git clone --depth 1 --branch v1.5.1 https://github.com/MIC-DKFZ/nnUNet/
git clone https://github.com/NVIDIA/apex
#先安装apex的依赖
git clone https://github.com/NVIDIA/PyProf
cd PyProf
pip install .
cd ../apex
#下面这条是C++版本的安装 我测试了没有成功 不成功可以安装Python版本 虽然效率可能只有百分之90但也足够了
#据说1.5版本就是不能用C++版本会报runtime error 需要使用可以编译下载1.4版本的
pip install -v --no-cache-dir --global-option="--cpp_ext" --global-option="--cuda_ext" ./
#Python版本
pip install -v --no-cache-dir ./
cd ../nnUNet
pip install -e .
#hiddenlayer 可选 用来显示网路拓扑图
pip install --upgrade git+https://github.com/nanohanno/hiddenlayer.git@bugfix/get_trace_graph#egg=hiddenlayer

可以尝试拉一个旧的apex分支,可能可以安装C++版本的apex,本人未亲自测试

2.1.5 配置nnunet

安装好nnunet后还要对其进行一些文件夹路径的配置:

cd ..
#创建nnUNet数据集文件夹
mkdir dataset && cd dataset
#创建预训练 原始 训练模型三个文件夹
mkdir preprocessed raw trained_models
#在原始文件夹中创建原始数据 裁剪后数据两个文件夹
cd raw && mkdir raw_data cropped_data

接着修改.bashrc文件,在最后加上(视自己的具体目录):

export nnUNet_raw_data_base="/home/user026/zzq/nnunet/dataset/raw"
export nnUNet_preprocessed="/home/user026/zzq/nnunet/dataset/preprocessed"
export RESULTS_FOLDER="/home/user026/zzq/nnunet/dataset/trained_models"

终于我们的环境都配置好了= =

2.2 方法二:更改CUDA版本

非常不幸由于学院服务器的显卡驱动版本太低,最高只能支持CUDA9.1,因此即使用no root方法安装了CUDA9.2pip install或者from source build的pytorch也不能正常使用CUDA。因此此方法只做存档以备参考。

CUDA.run文件直接使用sh CUDA.run命令安装即可,可以不使用sudo,在安装时不要选择安装显卡驱动只安装toolkit到home目录下的某个文件夹,而是对于cudnn.tgz则是按照官方的tutorial解压后复制相应的文件到CUDA的目录下即可。最后我们为防止原来的CUDA和cudnn对新的产生影响,将原来的module去掉后将解压的CUDA添加到环境变量中:

module rm cuda90
module rm cud
export PATH=$HOME/lib/cuda-9.2/bin:$PATH
export CPATH="$HOME/lib/cuda-9.2/include"
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$HOME/lib/cuda-9.2/lib64

至此no root的CUDA和cudnn安装成功。其余步骤与方法一样,通过编译安装GCC和pytorch;对于存在对应CUDA版本的pip二进制wheel,可以直接使用pip install的方法来安装pytorch。

声明:本文内容由易百纳平台入驻作者撰写,文章观点仅代表作者本人,不代表易百纳立场。如有内容侵权或者其他问题,请联系本站进行删除。
红包 96 7 评论 打赏
评论
0个
内容存在敏感词
手气红包
    易百纳技术社区暂无数据
相关专栏
置顶时间设置
结束时间
删除原因
  • 广告/SPAM
  • 恶意灌水
  • 违规内容
  • 文不对题
  • 重复发帖
打赏作者
易百纳技术社区
这把我C
您的支持将鼓励我继续创作!
打赏金额:
¥1易百纳技术社区
¥5易百纳技术社区
¥10易百纳技术社区
¥50易百纳技术社区
¥100易百纳技术社区
支付方式:
微信支付
支付宝支付
易百纳技术社区微信支付
易百纳技术社区
打赏成功!

感谢您的打赏,如若您也想被打赏,可前往 发表专栏 哦~

举报反馈

举报类型

  • 内容涉黄/赌/毒
  • 内容侵权/抄袭
  • 政治相关
  • 涉嫌广告
  • 侮辱谩骂
  • 其他

详细说明

审核成功

发布时间设置
发布时间:
是否关联周任务-专栏模块

审核失败

失败原因
备注
拼手气红包 红包规则
祝福语
恭喜发财,大吉大利!
红包金额
红包最小金额不能低于5元
红包数量
红包数量范围10~50个
余额支付
当前余额:
可前往问答、专栏板块获取收益 去获取
取 消 确 定

小包子的红包

恭喜发财,大吉大利

已领取20/40,共1.6元 红包规则

    易百纳技术社区