【一、整理-加上数据图片】MT-Unet模型的复现使用【个人记录学习】

找MT-UNet-main代码----GitHub

一、复现MT-UNet

1.思路:先复现MT-UNet-main,再用我们的数据集跑

2.代码中有ACDC dataset 数据,但我们要跑Synapse dataset. 

3.找dataset数据:根据作者提示去 TransUnet.项目中寻找。

4.TransUnet作者提供了两种方法:

  • 发邮件,联系作者,要已经处理好的Synapse dataset.数据集,但是作者至今未回复,GitHub项目issues里面,其他的研究人员也未能联系到作者获取到数据集。
  • 根据TransUnet作者提示:“在Synapse官方网站注册并下载数据集。将其转换为numpy格式,剪辑在[- 125,275]范围内的图像,将每个3D图像归一化为[0,1],从3D volume中提取2D切片用于训练用例,而对测试用例保留h5格式的3D volume。

5.采用4.2的方法,去在Synapse官方网站注册,并选择其中的一个16G左右数据集进行了下载。然后,按照作者的预处理要求,对原始数据进行了处理。这里的原始数据,后面发现,和作者论文中使用的数据并不是同一组,无法知道作者使用的数据是哪一组

6.原始数据(img.nii.gz和label.nii.gz)处理成了case0001_slice000.npz用于训练和case0001.npy.h5用于测试(.npy是numpy的数组以未压缩的原始二进制格式保存在扩展名为.npy文件中,而.npz相当于对多个.npy文件的压缩文件。而.h5文件就是 “dataset” 和 “group” 二合一的容器。Dataset中可以存储numpy的数据等。有时.h5文件也可以用来存储训练的模型的参数),以及保存名称的train.txt和test.txt。(Q1至于为什么没有val的部分,还没时间研究)

7.阅读代码,并进行修改和调试。除了一些其他细节外,主要是改了两个地方:

  • 增加了log,将训练的一些日志写入.txt
  • 更改了test,由于测试用例太多,花费时间太长,将每save_interval轮(epoch)测试一次,改为了30轮之后再每save_interval轮(epoch)进行测试。然后,将每测试一次就保存一次img、gt、pre改为了,只有这次的测试的dice大于best_dice才进行保存。

8.在本地将代码调通以后,然后扔到服务器上,安装相应环境进行测试batch_size=12,size=(244,244,3),epoch=100 r=0.0001(每一轮衰减0.01),class=14.到目前为止的训练结果(还没训练完,训练25轮了):

【一、整理-加上数据图片】MT-Unet模型的复现使用【个人记录学习】_第1张图片

论文中的数据:

【一、整理-加上数据图片】MT-Unet模型的复现使用【个人记录学习】_第2张图片

25轮的结果就和论文的相差不多,至于为是什么会有这样的结果,我反思和思考了许久,最后的原因很搞笑,是因为自己写代码在预处理数据出现了点问题,大概可以说是将训练的数据和测试的数据用为同一组数据了(Q2,这个数据的问题,后面会进行修改重新训练)

9.想查看训练结果的图像,测试保存下来的是img.nii.gz、gt.nii.gz、pre.nii.gz

于是查找资料,可以用ITK-SNAP软件打开显示:

  【一、整理-加上数据图片】MT-Unet模型的复现使用【个人记录学习】_第3张图片【一、整理-加上数据图片】MT-Unet模型的复现使用【个人记录学习】_第4张图片

                               Img.nii.gz                                                         pre.nii.gz

  【一、整理-加上数据图片】MT-Unet模型的复现使用【个人记录学习】_第5张图片【一、整理-加上数据图片】MT-Unet模型的复现使用【个人记录学习】_第6张图片

                         Img.nii.gz+ pre.nii.gz                                       Img.nii.gz+ gt.nii.gz

10.至此,原文的用Synapse dataset复现项目,因为Q2的原因,差不多算是完成了90%. 

你可能感兴趣的:(深度学习,python,计算机视觉,pytorch)