实时轻量超分辨率网络bicubic++ @CVPR2023


前言

这几天看到一个实时轻量的超分辨率网络,Bicubic++: Slim, Slimmer, Slimmest - Designing an Industry-Grade Super-Resolution Network (🚀 Winner of NTIRE RTSR Challange Track 2 (x3 SR) @ CVPR 2023),于是拉下来想看一下,整体效果还是很不错,网络结构非常简单,推理速度极快并且效果好。
官方的代码使用的pytorch_lightning,封装得很深,结构不是很容易去看,另外是将训练数据全部加载到内存里面,如果是自己的数据太大容易内存不足,开始调试也会加载很久,官方使用X3 SR,当超分辨率尺度不是3训练会报错,因为整除等问题验证时会报shape不一致,官方暂时没有放出推理代码。因此我重写了一套代码解决这些问题,当然从硬盘读取训练速度会慢一些,代码仓库

一、下载数据集

官方使用的DIV2K数据集,训练900张图,是使用3倍下采样的数据训练模型,同时指定了40张图作为验证集计算psnr,我重写的repo中,前860张作为训练集,最后40张作为验证,数据已经分好。
在这里插入图片描述
val_HR和val_LR分别为高低分辨率图各40张,DIV2K_train_HR 为860张高分辨率图,DIV2K_train_LR_bicubic/X3为860张3倍下采样图像。可以使用自己的数据训练,高低分辨率文件夹中的图像名称最好保持一致一一对应。

二、训练推理过程

训练:python3 train.py
推理:python3 inference.py
pytorch模型转onnx模型:python3 torch2onnx.py
onnx推理:python3 onnx_inference.py

lr图像:
在这里插入图片描述
bicubic插值图像:
bicubic本文bicubic++算法:
在这里插入图片描述

三、推理时间

单张图像推理过程不算前后处理时间,CPU:13700k GPU: 4090

pytorch GPU: 0.5ms左右
pytorch CPU: 17ms左右
onnxruntime GPU:4ms左右
onnxruntime CPU: 15ms左右
onnxruntime更慢,猜测是因为网络结构不复杂,没有需要优化的操作,当然也可能是我代码写错了。

四、注意

1、conf.yaml配置文件中patch_cropsize必须能整除超分辨率尺度参数,比如这里是3倍,patch_cropsize/3为整数。
2、degradation参数,如果blur或者img_noise为True,则会走degradation的方法,也就是从hr下采样生成lr而不是从文件夹读lr图像,这个过程比较慢,一张图大概一秒,如果在训练中开启了,训练速度会变慢,建议可以直接使用该方法将lr图像生成到本地再训练。
如果对您有帮助,不妨star一下!!!

  • 3
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 8
    评论
以下是基于卷积神经网络的图像超分辨率重建的Matlab代码示例: ```matlab % 读取低分辨率图像 img = imread('low_res_image.jpg'); % 定义超分辨率因子 scale_factor = 2; % 将图像转换为 YCbCr 颜色空间 img_ycbcr = rgb2ycbcr(img); % 提取 Y 分量 img_y = img_ycbcr(:,:,1); % 对 Y 分量进行双三次插值 img_y_upsampled = imresize(img_y, scale_factor, 'bicubic'); % 构建卷积神经网络模型 layers = [ imageInputLayer([32 32 1]) convolution2dLayer(3, 64, 'Padding', 'same') reluLayer() convolution2dLayer(3, 64, 'Padding', 'same') reluLayer() convolution2dLayer(3, 32, 'Padding', 'same') reluLayer() convolution2dLayer(3, 1, 'Padding', 'same') regressionLayer()]; % 设置训练参数 options = trainingOptions('sgdm', ... 'MaxEpochs', 50, ... 'MiniBatchSize', 128, ... 'InitialLearnRate', 0.001, ... 'Shuffle', 'every-epoch', ... 'ValidationData', {XValidate, YValidate}, ... 'Plots', 'training-progress'); % 训练卷积神经网络模型 net = trainNetwork(XTrain, YTrain, layers, options); % 对 Y 分量进行超分辨率重建 img_y_sr = predict(net, img_y_upsampled); % 将重建后的 Y 分量合并回去 img_ycbcr_sr = img_ycbcr; img_ycbcr_sr(:,:,1) = img_y_sr; % 将图像转换回 RGB 颜色空间 img_sr = ycbcr2rgb(img_ycbcr_sr); % 显示结果 figure; subplot(1,2,1); imshow(img); title('Low Resolution Image'); subplot(1,2,2); imshow(img_sr); title('Super Resolution Image'); ``` 这段代码中,我们首先读取低分辨率图像,然后将其转换为 YCbCr 颜色空间并提取 Y 分量。接下来对 Y 分量进行双三次插值,得到高分辨率的 Y 分量。然后,我们构建一个简单的卷积神经网络模型,使用训练数据对其进行训练,最后使用模型对 Y 分量进行超分辨率重建。最后,将重建后的 Y 分量合并回去并将图像转换回 RGB 颜色空间,最终显示结果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

程序鱼鱼mj

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

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

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

打赏作者

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

抵扣说明:

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

余额充值