【Linux】SeAFusion红外-可见光图像融合代码复现

该文章已生成可运行项目,

简介:SeAFusion(2022)是一种语义感知的实时图像融合框架,专为红外与可见光图像融合设计,旨在提升融合结果对高级视觉任务的支持能力。其核心创新在于将图像融合与语义分割任务深度联动,通过引入语义损失函数,将高层语义信息反馈至融合网络,促使其保留源图像中对下游任务(如目标检测、语义分割)至关重要的语义特征。技术层面,SeAFusion 采用轻量级双分支架构,通过梯度残差密集块(GRDB)强化细粒度细节的提取能力。GRDB 通过主密集流实现特征复用,并利用梯度算子提取的残差连接增强边缘和纹理信息的保留。此外,框架设计了联合自适应训练策略,交替优化融合网络与分割网络,在保证融合图像质量的同时,提升其对语义分割等任务的促进作用,避免传统方法中 “模式坍塌” 问题。实验结果表明,SeAFusion 在实时性(支持 4K 分辨率下的实时处理)和任务驱动评估中表现优异,融合图像不仅具备自然的视觉效果,还能显著提升后续高级任务的精度。该框架为多模态数据融合提供了新范式,尤其适用于安防监控、自动驾驶等需兼顾图像质量与语义信息的场景。

本教程配置:Ubuntu-20.04,CUDA-11.6,torch-1.13.1,python-3.8

1.环境配置

1)创建环境

conda create -n sea python=3.8
pip install torch==1.13.1+cu116 torchvision==0.14.1+cu116 torchaudio==0.13.1 --extra-index-url https://download.pytorch.org/whl/cu116 -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install opencv-python-headless
conda install numpy
conda install pillow

2)代码导入

git clone https://github.com/Linfeng-Tang/SeAFusion.git

2.数据集修改

1)构建数据集

2)修改数据集位置

位置:seafusion-main>TaskFusion_dataset.py

3.训练

1)修改getitem

运行代码时报错:np.asarray(Image.fromarray(image_vis), dtype=np.float32).transpose()
ValueError: axes don't match array,为了解决通道数不一致问题修改getitem函数

位置:seafusion-main>TaskFusion_dataset.py

    def __getitem__(self, index):
        if self.split == 'train':
            vis_path = self.filepath_vis[index]
            ir_path = self.filepath_ir[index]
            label_path = self.filepath_label[index]

            # 读取可见光图像
            image_vis = np.array(Image.open(vis_path))
            if image_vis.ndim == 2:  # 如果是灰度图像
                image_vis = np.stack((image_vis,) * 3, axis=-1)  # 转为三通道

            # 读取红外图像
            image_inf = cv2.imread(ir_path, 0)

            # 读取标签图像
            label = np.array(Image.open(label_path))

            # 转换并归一化可见光图像
            image_vis = (
                np.asarray(image_vis, dtype=np.float32).transpose((2, 0, 1)) / 255.0
            )

            # 处理红外图像
            image_ir = np.asarray(image_inf, dtype=np.float32) / 255.0
            image_ir = np.expand_dims(image_ir, axis=0)

            # 处理标签
            label = np.asarray(label, dtype=np.int64)

            name = self.filenames_vis[index]
            return (
                torch.tensor(image_vis),
                torch.tensor(image_ir),
                torch.tensor(label),
                name,
            )

2)修改batch_size

运行代码时报错:torch.cuda.OutOfMemoryError: CUDA out of memory. Tried to allocate 600.00 MiB (GPU 0; 23.54 GiB total capacity; 7.20 GiB already allocated; 462.00 MiB free; 7.23 GiB reserved in total by PyTorch) If reserved memory is >> allocated memory try setting max_split_size_mb to avoid fragmentation.  See documentation for Memory Management and PYTORCH_CUDA_ALLOC_CONF,为了解决CUDA内存不足的问题,可降低批次大小

位置:seafusion-main>train.py

3)新建logs文件夹

运行train.py时报错FileNotFoundError: [Errno 2] No such file or directory: '/data/private/nfs_ds1/algorithm/SeAFusion-main/logs/BiSeNet-2025-04-01-07-02-00.log'
新建logs文件夹即可解决

4)修改run_fusion

运行train.py时报错FileNotFoundError: [Errno 2] No such file or directory,只需要添加train到如下位置即可:

5)训练

终端运行:CUDA_VISIBLE_DEVICES=4 train.py

本文章已经生成可运行项目
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值