深度学习+心脏医学图像分割——自动心脏诊断挑战赛(ACDC)项目的代码学习记录

自己的研究方向是心脏AI相关(心脏MRI+深度学习这样子),最近在学习医学图像分割——自动心脏诊断挑战赛(ACDC)的代码:

GitHub - baumgach/acdc_segmenter: Public code for our submission to the 2017 ACDC Cardiac Segmentation challenge

这个项目的运行环境要求:python3.5、Tensorflow 1.12、cuda9.0,最后决定用学校的服务器来跑,学校的服务器配置是8张2080ti显卡。

Linux查看Nvidia显卡信息及显存的使用情况,可以使用Nvidia自带的一个命令行工具:

nvidia-smi

深度学习+心脏医学图像分割——自动心脏诊断挑战赛(ACDC)项目的代码学习记录_第1张图片

如果要周期性的输出显卡的使用情况,可以用watch指令实现:

watch -n 1 nvidia-smi

至于服务器的远程控制,在尝试WinSCP、XShell、FinalShell三个终端工具后,最终确定使用FinalShell,上传下载文件方便,还可以直接运行服务器终端,确实很好用。

离线激活FinalShell专业版参考下面这位大佬的博客:

FinalShell-免登录解锁专业版(最高支持3.9.5.7版本所有功能)_蓝之桉的博客-CSDN博客_finalshell专业版

一、安装与Python3.5对应的Anaconda版本

1.这里要感谢大佬的博客: 

anaconda python 版本对应关系_Wanderer001的博客-CSDN博客_anaconda3对应的python版本

最终在下面的清华镜像源中选择了 Anaconda3-4.2.0-Linux-x86_64.sh :

Index of /anaconda/archive/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror

2.下载完成后,用FinalShell上传到服务器:

深度学习+心脏医学图像分割——自动心脏诊断挑战赛(ACDC)项目的代码学习记录_第2张图片

3.使用bash命令进行安装,bash 安装包名:

bash Anaconda3-4.2.0-Linux-x86_64.sh

4.接着按照提示输入ENTER。到了环境变量配置选项这一步,记得输入yes:

深度学习+心脏医学图像分割——自动心脏诊断挑战赛(ACDC)项目的代码学习记录_第3张图片

5.在控制端输入conda,如果显示“conda:command not found”,则表示没配置环境变量(或是配置了环境变量并没有生效)。

深度学习+心脏医学图像分割——自动心脏诊断挑战赛(ACDC)项目的代码学习记录_第4张图片

网上有很多相关的配置教程,不过好像在上一步的时候输入过yes,只需要断开服务器主机,重新连接就好了。

此时输入conda -V,会正常显示版本号:

深度学习+心脏医学图像分割——自动心脏诊断挑战赛(ACDC)项目的代码学习记录_第5张图片

6.创建一个pyhon版本为3.5的虚拟环境。

conda create -n tfgpu python=3.5

注意:tfgpu是自己起的“个人环境名称”(your_env_name )。选好自己想要8 的python版本,之后在这个环境里进行tensorflow-gpu版的安装。

7.激活这个环境,就能看到环境由 base 切换到了 your_env_name。

conda activate your_env_name

这里我在激活的时候,系统提示我要使用source而不是conda,我也不知道为什么。

source activate tfgpu

深度学习+心脏医学图像分割——自动心脏诊断挑战赛(ACDC)项目的代码学习记录_第6张图片

退出环境的代码如下:

conda deactivate

Conda常用命令:

(1)查看已有环境
        conda env list

(2)查看已安装的包
        conda list

(3)更改镜像源
        conda config --add channels 源地址
        conda config --set show_channel_urls yes

(4)删除环境
        conda remove -n your_env_name --all

二、进入环境安装tensorflow-gpu版

1.环境激活完以后,就是安装tensorflow-gpu 1.12了,可以使用以下指令:

pip install tensorflow-gpu==1.12.0 -i https://pypi.tuna.tsinghua.edu.cn/simple

2.此时我的pip版本显示是8.9.1的,执行上面的指令时一直报错,说pip等级太低,后来根据提示升级了一下pip,就一直在报下面的错: 

深度学习+心脏医学图像分割——自动心脏诊断挑战赛(ACDC)项目的代码学习记录_第7张图片

折腾了好久,终于通过下面大佬的帖子找到了解决方案: 

pip指令出现SyntaxError: invalid syntax的两种原因及解决方法,完美解决!_御名方守矢-的博客-CSDN博客

不过帖子里获取get-pip.py的命令应该改为: 

wget https://bootstrap.pypa.io/pip/3.5/get-pip.py

3.然后就能正常安装了:

深度学习+心脏医学图像分割——自动心脏诊断挑战赛(ACDC)项目的代码学习记录_第8张图片

 安装过程中遇到了如下报错:

 根据错误提示,分别重新安装了以上两个版本要求的包:(要先装futures才能装enum34)

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple  "futures>=2.2.0"
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple  "enum34>=1.0.4"

4.CUDA9.0的下载地址:CUDA Toolkit 9.0 Downloads | NVIDIA Developer。

深度学习+心脏医学图像分割——自动心脏诊断挑战赛(ACDC)项目的代码学习记录_第9张图片

下载后是cuda_9.0.176_384.81_linux.run,然后使用sh cuda_9.0.176_384.81_linux.run命令进行安装。

sh cuda_9.0.176_384.81_linux.run

注意:默认安装路径是/usr/local/cuda-9.0,当然也可以自定义,安装到自己文件夹下面去,之后在.bashrc中配置好就行。 

5.cuDNN的下载地址:cuDNN Archive | NVIDIA Developer。

下载以后得到cudnn-9.0-linux-x64-v7.5.0.56.tgz,解压:

深度学习+心脏医学图像分割——自动心脏诊断挑战赛(ACDC)项目的代码学习记录_第10张图片

将 /cudnn-9.0-linux-x64-v7.5.0.56/cuda/include/cudnn.h 上传到服务器的 /home/wang4/cuda-9.0/include 位置。

将 /cudnn-9.0-linux-x64-v7.5.0.56/cuda/lib64/libcudnn* 上传到服务器的 /home/wang4/cuda-9.0/lib64 位置。

 检查是否安装成功:

cat /home/wang4/cuda-9.0/include/cudnn.h | grep CUDNN_MAJOR -A 2

 如果返回以下结果,则表示运行成功:

深度学习+心脏医学图像分割——自动心脏诊断挑战赛(ACDC)项目的代码学习记录_第11张图片

6.输入下面的指令配置.bashrc文件。

vi ~/.bashrc

然后按insert键,在最下方输入代码 :

export LD_LIBRARY_PATH=/home/wang4/cuda-9.0/lib64:$LD_LIBRARY_PATH
export PATH=/home/wang4/cuda-9.0/bin/:$PATH

然后按ESC键,再输入:wq!进行保存退出,

:wq!

深度学习+心脏医学图像分割——自动心脏诊断挑战赛(ACDC)项目的代码学习记录_第12张图片

输入source ~/.bashrc激活环境配置文件:

source ~/.bashrc

输入nvcc -V查看当前cuda版本,如果显示9.0,恭喜你,环境变量配置成功啦!

深度学习+心脏医学图像分割——自动心脏诊断挑战赛(ACDC)项目的代码学习记录_第13张图片

7.测试:

进入python,输入import tensorflow,再输入tensorflow.__version__,不报错即说明使用成功。

python
>>> import tensorflow
>>> tensorflow.__version__

三、把项目跑起来

1.由于训练时间很长,不可能一直开着本机电脑与学校的服务器保持连接,所以可以使用tmux来管理会话,这里感谢大佬的博客:

非root用户服务器安装tmux_不会概率的Bayes的博客-CSDN博客_服务器安装tmux

tmux的使用方法,参考下面这位大佬的博客和矩池云的官方帖:

TMUX使用教程_阿 mark的博客-CSDN博客_tmux使用教程

Tmux 使用教程 | 矩池云支持中心 (matpool.com)

以下是 Tmux 的最简操作流程:

  1. 新建会话tmux new -s [my_session]。
  2. 在 Tmux 窗口运行所需的程序。
  3. 按下快捷键Ctrl+b d将会话分离。
  4. 下次使用时,重新连接到会话tmux attach-session -t [my_session]。

2.安装项目运行所需的依赖库:

cd acdc_segmenter-master
pip install -r requirements.txt

3.修改config目录下的system.py:

project_root = '/home/wang4/acdc_segmenter-master'
#修改为你的项目代码目录
data_root = '/home/wang4/DataSet/ACDC_challenge_20170617/training'
#修改为你的项目训练集目录
test_data_root = '/home/wang4/DataSet/ACDC_challenge_20170617/testing'
#修改为你的项目测试集目录
local_hostnames = ['wang4']
#修改为你的运行平台的hostname

4. 在train.py文件下选择你需要运行的网络结构:

# from experiments import FCN8_bn_wxent as exp_config
# from experiments import unet2D_bn_modified_dice as exp_config
from experiments import unet2D_bn_modified_wxent as exp_config
# from experiments import unet2D_bn_modified_xent as exp_config
# from experiments import unet2D_bn_wxent as exp_config
# from experiments import unet3D_bn_modified_wxent as exp_config
# from experiments import unet2D_bn_wxentropy_bs5 as exp_config

在acdc_segmenter-master/experiments目录下打开你选择的网络所对应的参数设置文件。

以unet2D_bn_modified_wxent.py为例,建议修改learning_rate、max_epochs。learning_rate默认值为0.01,过大,会导致网络震荡;max_epochs默认值为20000,不修改后面可能需要手动中断训练;batch_size默认值为10,过大会导致在训练过程中遇到内存不够程序终止的情况,可以根据自己显存的情况来进行修改。

5.通过tmux在会话下输入:

python train.py

确认运行没有问题后,断开与服务器的连接,程序也能正常运行。

在训练完成之前的时间里,便可以学习源代码、数据集简介、数据预处理acdc_data.py的代码解析……

6.运行结果会保存在项目文件夹下的acdc_logdir文件夹下。

7.在训练过程中,可以通过tensorboard实时观察网络的训练情况。

在“FinalShell->连接管理器->SSH连接->隧道”中按下图进行隧道添加,直接将侦听端口目标端口都设置成6006(tensorboard的访问地址)即可。

深度学习+心脏医学图像分割——自动心脏诊断挑战赛(ACDC)项目的代码学习记录_第14张图片

在服务器端运行: 

tensorboard --logdir=acdc_logdir/[模型文件夹名]

本机浏览器访问127.0.0.1:6006,然后就可以开始愉快的看tensorboard的内容啦!

深度学习+心脏医学图像分割——自动心脏诊断挑战赛(ACDC)项目的代码学习记录_第15张图片

深度学习+心脏医学图像分割——自动心脏诊断挑战赛(ACDC)项目的代码学习记录_第16张图片

8.在训练期间或之后的任何时候,都可以通过键入以下内容来评估模型:

python evaluate_patients.py acdc_logdir/[model]

这里的[model]要改为自己的模型保存文件夹名,最终的分割结果保存在[model]/predications下。

你可能感兴趣的:(心脏医学图像处理,深度学习,linux,深度学习,python,人工智能,ai)