本期是记录代码复现中的配置环境步骤以及在过程中遇到的问题。
一、安装Pycharm软件
在这里安装最新版本的即可,对于30天免费试用,可以去B站搜索下载破解版,过程不再赘述。
二、下载Anaconda
先去看自己电脑是不是NVIDIA的显卡,在电脑--设备管理器--显示适配器中查看,也可以在CMD命令中输入NVIDIA -smi来看,需要下载低于自己电脑版本的cuda,自定义安装好后,再去在电脑--高级环境--环境变量--path--->新建,如下图3。
三、建立虚拟环境
以此篇文献为例:《CDDFuse: Correlation-Driven Dual-Branch Feature Decomposition
for Multi-Modality lmage Fusion》,在文献摘要结尾处复制源代码,打开Github,下载源代码压缩文件。
问题1:Github关键时刻打不开
解决办法:(1)下载UU加速器/Steam++(2)使用Gitee Search,直接去搜项目文件
阅读Readme文件,看要求需要下载什么版本的python,在Anaconda prompt/Pycharm终端下运行:
# create virtual environment
conda create -n cddfuse python=3.8.10 #看项目文件要求
conda activate cddfuse
四、更改Python解释器
打开Pycharm,右下角点击interpreter settings,在python interpreter中选择添加解释器,即add local interpreter,选择已有的环境,再将type设置为Conda环境,最后选择自己建立的虚拟环境名称即可,如下图所示。
五、安装Pytorch
Pytorch一定要去官网下载,下载前要看项目要求的pytorch版本,PyTorchhttps://pytorch.org/如果Readme文件中没有说明的话,看看有没有requirements.txt文件,例如小编这个示例项目要求的是torch是1.8.1版本,那就选择对应版本的Pytorch即可。
问题2:没有对应GPU版本的pytorch和Cuda
解决办法:(1)分开下载,先安装cuda,再安装pytorch
conda installcudatoolkit=10.1 -c http://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/win-64/ # 安装Cuda
conda installcudnn=7.6 -c https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/win-64/ # 安装cudnn
conda install pytorch==1.7.0 torchvision==0.8 cudatoolkit=10.1 -c https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/pytorch/win-64/# 安装pytorch
(2)若版本为1.8.1的pytorch,11.7的cuda,可以直接采用以下命令安装
pip install torch==1.8.1+cu111 torchvision==0.9.1+cu111 torchaudio==0.8.1 -f https://download.pytorch.org/whl/torch_stable.html
验证安装:方法1:运行conda list,若torch后面显示1.8.1+cu111,则成功下载GPU版本。
Conda cddfuse list #查看下载库
方法2:运行代码验证,若结果显示true则是GPU版本,若为false,则是CPU版本。
python
import torch
torch.cuda.is_available()
问题3:下载慢/下载失败
解决办法:更换清华源或其他镜像
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/pytorch
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge
conda config --set show channel urls yes #清华源镜像
其他镜像链接:
阿里云:https://mirrors.aliyun.com/pypi/simple/ 中国科技大学:https://pypi.mirrors.ustc.edu.cn/simple/ 华为云: https://repo.huaweicloud.com/repository/pypi/simple/ 腾讯云:https://mirrors.cloud.tencent.com/pypi/simple/
问题4:镜像或虚拟环境出错
解决办法:删除重新安装
conda config --remove-key channels #删除清华源
Conda remove -n name --all #删除虚拟环境
六、安装其他包/依赖库
若项目文件中有requirement.txt,可以使用命令直接安装
# install cddfuse requirements
pip install -r requirements.txt
基本的安装包和环境配置好后,可以根据readme文件中的步骤去进行数据预处理和训练,在运行过程中,若出现缺少安装包的情况,再去运行pip install xxx进行下载。
七、数据预处理和训练
如下图,CDDFuse项目中提到,在预处理时,需要自己去下载MSRS数据集,同样将代码压缩包下载下来,放到要求的MSRS_train目录下,再去运行dataprocessing.py文件,结果会自动生成一个data/MSRS_train_imgsize_128_stride_200.h5文件,即运行成功。
python MMIF-CDDFuse-main/dataprocessing.py
问题5:运行dataprocessing.py报错
解决办法:更改自己保存文件的路径,右击文件的copy path,记得文件中的路径也需要更换。
根据步骤再去运行train文件,同理,运行以下代码。
python MMIF-CDDFuse-main/train.py
问题6:运行结果显示Cuda out of memorty (原因:批量数据过大、模型过于复杂以及显存未及时释放)
解决办法:减小批量大小、压缩模型、使用半精度浮点数、清理显存以及进行分布式训练等方法来有效管理显存。
(1)将正在运行的GPU后台清理掉,运行nvidia-smi,查看哪些正在进行的程序,再进行释放显存。
python
import torch
torch.cuda.empty_cache() # 手动清理显存
(2)降低批量大小,原代码中显示Batch size=8,在这里小编把batch_size设置为4,则成功运行。
此页面表示,数据正在训练中,由于时间较长,小编就运行到这里,没有进行后面的test过程。如果有什么问题,欢迎大家交流和补充,谨以此篇记录小编在运行时发现的问题。
———————————————————————————————————————————____________
八、数据测试
小编又回来啦!通过小编不懈的努力,将batch_size从16改为8再到4、5,最后确定为2,再不断的调试num_epochs和epoch_gap,分别从120和40,更改为30和20,训练时间从12天缩短到3个小时,终于运行成功啦!
继续运行下面的测试代码
python MMIF-CDDFuse-main/test_IVF.py
问题7:运行结果显示OSError: cannot write mode F as PNG
解决办法:通过搜索发现是数组类型不对,但改为uint8后仍然报错,于是小编就把数据喂给deepseek,告诉他问题和疑惑,再询问他解决办法,大功告成!操作步骤如下:
deepseek先是分析了小编的问题,又给出了解决办法,真的爱了!
总结来说:错误 OSError: cannot write mode F as PNG 表示尝试保存 float32 类型(mode='F')的图像为 PNG 格式,而 PNG 仅支持 uint8 或 uint16 数据类型。直接强制转换 float32 → uint8 会导致数据范围错误(如数值未归一化到 [0, 255]),进而引发 data type 'np.uint8' not understood 异常。
我直接一个复制粘贴,将原来的代码替换为以下内容:
旧代码:
def img_save(image,imagename,savepath):
if not os.path.exists(savepath):
os.makedirs(savepath)
# Gray_pic
imsave(os.path.join(savepath, "{}.png".format(imagename)),image)#旧代码
更换为:
def img_save(image, imagename, savepath):
if not os.path.exists(savepath):
os.makedirs(savepath)
if image.dtype == np.float32:
image = (image - np.min(image)) / (np.max(image) - np.min(image)) * 255
image = image.astype(np.uint8)
if len(image.shape) == 3 and image.shape[2] == 3: # RGB/YCrCb
mode = 'RGB'
elif len(image.shape) == 2: # GRAY
mode = 'L'
else:
raise ValueError(f"不支持的图像维度: {image.shape}")
imsave(os.path.join(savepath, f"{imagename}.png"), image)
OK! 成功!运行结果如下所示:
(cddfuse) D:\DOWNLOAD\PycharmProjects>python MMIF-CDDFuse-main/test_IVF.py
================================================================================
The test result of TNO :
EN SD SF MI SCD VIF Qabf SSIM
CDDFuse 7.12 46.0 13.15 2.19 1.76 0.77 0.54 1.03
================================================================================
================================================================================
The test result of RoadScene :
EN SD SF MI SCD VIF Qabf SSIM
CDDFuse 7.43 54.66 16.36 2.3 1.81 0.69 0.52 0.98
================================================================================
接下来再去运行:
python MMIF-CDDFuse-main/test_IVF.py
问题8:结果显示FileNotFoundError: [Errno 2] No such file or directory: 'models/CDDFuse_IVF.pth'还有
FileNotFoundError: [Errno 2] No such file or directory: 'CDDFuse_IVF.pth'
解决办法:重要的事情说三遍!路径问题!路径问题!路径问题!将运行的代码路径全部换成自己所在目录下,安全下车!
结果如下:
(cddfuse) D:\DOWNLOAD\PycharmProjects>python MMIF-CDDFuse-main/test_MIF.py
================================================================================
The test result of MRI_CT :
EN SD SF MI SCD VIF Qabf SSIM
MMIF-CDDFuse-main\models\CDDFuse_IVF 4.73 88.38 33.82 2.23 1.74 0.5 0.59 1.33
MMIF-CDDFuse-main\models\CDDFuse_MIF 4.77 78.99 38.14 2.6 1.4 0.61 0.68 1.35
================================================================================
================================================================================
The test result of MRI_PET :
EN SD SF MI SCD VIF Qabf SSIM
MMIF-CDDFuse-main\models\CDDFuse_IVF 4.15 81.49 28.04 1.86 1.81 0.66 0.65 1.48
MMIF-CDDFuse-main\models\CDDFuse_MIF 4.14 70.56 29.57 2.02 1.68 0.71 0.71 1.51
================================================================================
================================================================================
The test result of MRI_SPECT :
EN SD SF MI SCD VIF Qabf SSIM
MMIF-CDDFuse-main\models\CDDFuse_IVF 3.82 71.62 20.66 1.89 1.87 0.65 0.68 1.47
MMIF-CDDFuse-main\models\CDDFuse_MIF 3.82 58.13 20.87 2.47 1.34 0.97 0.78 1.49
================================================================================
可以发现models下面多了一个文件,以及一个测试结果文件夹test_result,包括红外可见光融合和医学可见光融合。
虽然代码复现成功了,但结果和项目readme文件中的结果还是有一点出入,不知道是不是因为小编更改了num_epochs和epoch_gap的缘故,欢迎大家交流补充。
原项目结果: