最近开始了找论文复现的步骤,通过MRI super-resolution关键词在Github搜索,确定了合适的开源项目,此篇论文为MICCAI 2021会议论文,之前有粗略的读过,且从github上看实现步骤较清晰、简单,故尝试复现此篇。
代码地址:https://github.com/chunmeifeng/T2Net
提示:以下是我在复现此篇论文时的步骤,仅供参考
在Read me ,可以看到此项目所需要的各个package名称及版本号
conda create -n T2NET python=3.8
conda install pytorch==1.7.0 torchvision==0.8.1 cudatoolkit=11.0
在使用conda list检查已有的packgae是否与要求的重合,或者直接安装覆盖(推荐此种,保持版本一致)
conda install numpy==1.18.5 scikit_image==0.16.2 runstats==1.8.0 pytorch_lightning==0.8.1 h5py==2.10.0 PyYAML==5.4
会发现图片中的3个package,在目前的andaconda镜像下载通道无法找到
分别使用conda install 和pip install
conda install numpy==1.18.5 h5py==2.10.0 PyYAML==5.4
pip install scikit_image==0.16.2 pytorch_lightning==0.8.1 runstats==1.8.0
建议使用自己没有问题的代码,检验环境是否配置正确
将Github上的工程打包下载在自己电脑,然后传输到服务器上对应的文件夹
Download and decompress data from the
Link:https://pan.baidu.com/s/1OdIoBwJy3GZB979JPBJS6w
Password: qrlt
缺点:传输过程很慢,要40 mins左右,可以试试直接在服务器下载
常用指令:https://cloud.tencent.com/developer/article/1404921
tar xvf test.tar
tar xvf train.tar
tar xvf val.tar
参考源代码的readme,需要对下载的数据集进行格式转换,Transform .h5 format to .mat format
根据此处提示,需要在ixi_config.yaml中更改路径
更改如下
Line4:data_dir: "/home/songqixin/arxivs/scode/T2net/h5/"
Line5:train_data_dir: "/home/songqixin/arxivs/scode/T2net/h5/train"
Line6:val_data_dir: "/home/songqixin/arxivs/scode/T2net/h5/val"
Line42:save_path: "/home/songqixin/arxivs/scode/T2net"
Line45:predict_data_dir: "/home/songqixin/arxivs/scode/T2net/h5/test"
python convertH5tomat.py --data_dir /home/songqixin/arxivs/scode/T2net/h5
pip install numpy==1.21
根据项目提示,运行该工程只需
python ixi_train_t2net.py
通过这,可以看到大家在运行这个项目时遇到的问题,有两个作用:1.判断这个项目实现的容易程度2.提前预判会出现的错误或者在后面运行的时候遇到的关于这个项目特有的error也可以来从讨论中尝试找到答案
挨个查看各个文件,存在的显性路径先更改,后面根据报错情况,更改隐藏路径
解决
pip install opencv-python
经过查Github中Issues的讨论,author说实验室没有用到1D-Random-3X_256.mat,可以注释掉。
解决
#经过查阅,下面这个引入路径没用到,直接注释掉
L15:sys.path.append('/home/songqixin/arxivs/scode/T2Net-master/')
#源代码的256模型不存在,直接替换成项目里存在的两个mat之一
L55: ixi_args.mask_path = ('/home/songqixin/arxivs/scode/T2Net-master/1D-Cartesian_6X_128128.mat')
这个文件下路径好多
#这个路径下对应的数据在已下载的项目中并不存在,考虑将引用路径的地方注释即可
Line36:
reconstruction_root='/home/jc3/YYL/JS_fastMRI/SR_fastMRI-master/experimental/ixi/reconstruction_data_ixi/r2/mat1/'
Line55:#self.LR_slice_files.append(os.path.join(reconstruction_root,file_name))
#把不存在的模型更改成项目中存在的128模型
Line67: masks_dictionary = loadmat(
'/home/songqixin/arxivs/scode/T2Net-master/1D-Cartesian_6X_128128.mat')
Line154: masks_dictionary = loadmat(
'/home/songqixin/arxivs/scode/T2Net-master/1D-Cartesian_6X_128128.mat')
先改这些,运行一下看看
还是路径的问题
解决
定位到还是mri_ixi_t2net.py的问题,隐藏路径不正确
self.data_dir
是因为路径无法迭代,多次尝试后(包括将self.data_dir更换为绝对路径,效果不行),将下面更换文件名称的命令注释掉,始终保持在开始设定的路径下即:/home/songqixin/arxivs/scode/T2net/h5
Line189: #full_file_path = full_file_path.replace('/h5/', '/mat/')
CUDA out of memory. Tried to allocate 8.00 GiB (GPU 2; 23.69 GiB total capacity; 12.74 GiB already a
解决
参考文章:https://blog.csdn.net/xiyou__/article/details/118529350
直接百度后,发现此类错误有四种解决方法,先尝试修改了使用GPU数量,还是未能解决,每个GPU运存都不够,然后参考文章,在config文件修改了Batch_size,先改大,发现未解决,然后依次修改至8,4,成功解决!
每次训练epoch的时长为8min,每次训练之后Loss再减少,各项评价指标在变好
此次项目运行实践耗时两天半,收获如下:
1、认清项目中代码文件的构成,有函数文件、运行文件、配置文件等,路径主要存在于运行和配置文件中。
2、学会了根据error提示的位置,快速定位需要改动的代码
3、要静下心挨个看运行文件的构成和各个定义、命令语句的作用,找出可以改动的地方
4、不要放弃,改累了就下个半天再改一下