图像去模糊—NAFNet代码运行记录

图像去模糊代码—NAFNet运行记录

NAFNet论文是ECCV 2022的一篇文章,是计算机低级视觉-图像重建方面的工作,文章做的实验有图像去模糊、图像去噪、图像超分辨率等,实验效果非常棒,代码也写的非常好。
本博文教你如何用该论文的代码做图像去模糊的推理。实际上代码的readme.md已经写的很清楚了,但是有些人github也上不去,也挺闹心。
关于训练,因为前期准备数据集比较麻烦,暂时就不讲训练了。

1. 电脑环境

Centos (服务器操作系统)+miniconda (用于创建虚拟环境)+ NAFNet (代码) + torch (1.13.1+cu116)

2. 了解工作

论文题目:Simple Baselines for Image Restoration

论文地址:https://arxiv.org/pdf/2204.04676v4

论文github地址:https://github.com/megvii-research/NAFNet

强烈建议给个star,毕竟代码写的确实很棒,阅读对自己很有用。

官方给出的各个模型预训练权重结果如下,可以从谷歌云盘或者百度云下载。

Results and Pre-trained Models

nameDatasetPSNRSSIMpretrained models
NAFNet-GoPro-width32GoPro32.87050.9606gdrive | 百度网盘
NAFNet-GoPro-width64GoPro33.71030.9668gdrive | 百度网盘
NAFNet-SIDD-width32SIDD39.96720.9599gdrive | 百度网盘
NAFNet-SIDD-width64SIDD40.30450.9614gdrive | 百度网盘
NAFNet-REDS-width64REDS29.09030.8671gdrive | 百度网盘
NAFSSR-L_4xFlickr102424.170.7589gdrive | 百度网盘
NAFSSR-L_2xFlickr102429.680.9221gdrive | 百度网盘
Baseline-GoPro-width32GoPro32.47990.9575gdrive | 百度网盘
Baseline-GoPro-width64GoPro33.39600.9649gdrive | 百度网盘
Baseline-SIDD-width32SIDD39.88570.9596gdrive | 百度网盘
Baseline-SIDD-width64SIDD40.29700.9617gdrive | 百度网盘

如果不能访问github,可以从我百度云下载代码和预训练权重,experiments/pretrained_models路径中有所有的预训练模型权重。

百度云链接:

链接:https://pan.baidu.com/s/1m_i54ioEZsde8euky7qK6Q?pwd=rcu1
提取码:rcu1

备注:本文只进行推理预测,如果想要训练自己的数据集,需要对数据集进行相应的处理。

3. 前提准备工作

已经安装过anaconda或者miniconda,电脑存在conda环境。

4. 配置环境

  1. 新建环境
conda create -n nafnet python=3.10
  1. 激活进入环境
conda activate nafnet
  1. 安装必要的依赖
pip instll -r requirement.txt

如果无法安装tb-nightly是因为清华、bfsu镜像源的问题,临时更改为阿里源:

python -m pip install tb-nightly -i https://mirrors.aliyun.com/pypi/simple
  1. 安装torch
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

安装torch之后,记得查看torch是否可用cuda,使用如下命令,首先进入python环境,接着导入torch,然后使用如下命令查看cuda是否可用,如果可用,返回True,如果cuda不可用,返回False。

import torch
torch.cuda.is_available()

在这里插入图片描述

  1. 安装basicsr
python setup.py develop --no_cuda_ext

这个安装可能容易出现问题,记得查看安装是否成功。

显示如下表示安装成功:
在这里插入图片描述

如果没有Cython,可能会报错如下,
在这里插入图片描述

需要安装Cython

pip install Cython

5. 预测

如果是直接预测,不训练,使用如下代码就可以直接对图像去模糊。

python basicsr/demo.py -opt options/test/REDS/NAFNet-width64.yml --input_path ./demo/blurry.jpg --output_path ./demo/deblur_img.png

在这里插入图片描述

图像去模糊如下,效果非常好:
在这里插入图片描述

在这里插入图片描述

6. 训练

准备数据集可能比较麻烦了,在这就不讲了,就说一下训练的代码。如果有人需要,到时候再写一篇训练的博客。
训练时间一般比较长,一块卡,600张图片对,batch设置为4,训练大概也需要1天多了。
如果是单卡,使用如下命令训练,前提是数据集已经准备好,且放入了对应的文件中:

python -m torch.distributed.launch --nproc_per_node=1 --master_port=4321 basicsr/train.py -opt options/train/GoPro/NAFNet-width32.yml --launcher pytorch

训练成功,有类似如下界面
在这里插入图片描述

03-08
### NAFNet 神经网络架构概述 NAFNet 是一种新型的神经网络设计,其核心特点是完全移除了传统的非线性激活函数,如 Sigmoid 或 ReLU,这使得该模型被称为无非线性激活函数网络 (Nonlinear Activation Free Network)[^1]。 #### 原理 通过去除传统意义上的激活层,NAFNet 的设计理念在于简化计算流程并提高效率。研究表明,在某些情况下,这些复杂的非线性变换并不是必要的;即使在网络中省去它们,仍然可以获得良好的表现效果[^3]。这种创新性的方法不仅减少了参数数量和运算量,同时也降低了过拟合的风险。 #### 实现方式 为了验证这一假设的有效性和可行性,研究人员开发了一套完整的实验框架,并基于此构建了多个版本的基础模型来进行对比测试。结果显示,尽管结构更为简洁,但 NAFNet 在多种任务上的性能并未显著降低,证明了这种方法具有实际的应用价值[^2]。 ```python import torch.nn as nn class NAFBlock(nn.Module): def __init__(self, channels): super(NAFBlock, self).__init__() # 定义卷积层而不添加任何激活函数 self.conv = nn.Conv2d(channels, channels, kernel_size=3, padding=1) def forward(self, x): out = self.conv(x) return out ``` 上述代码展示了如何创建一个简单的 NAF 卷积模块,其中不包含任何形式的激活操作。 #### 应用场景 由于具备高效的特性以及易于部署的优势,NAFNet 可广泛应用于图像处理、自然语言理解等领域中的各类子任务上。对于那些对实时性有较高要求的应用程序来说尤为适用,比如移动设备端的小型化 AI 解决方案或是大规模分布式系统的在线推理服务等。
评论 6
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

百年孤独百年

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值