代码复现中的环境配置流程和问题记录

本期是记录代码复现中的配置环境步骤以及在过程中遇到的问题。

一、安装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的缘故,欢迎大家交流补充。

原项目结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值