图像超分辨率重建(pytorch)

article/2025/4/19 10:43:08

本文代码

         本文代码主体来自CVPR2020论文《Closed-loop matters: Dual regression networks for single image super-resolution》,但原作者并未提供论文亮点--如何使用unpair数据进行训练的代码,所以我在其基础上补齐了该过程的代码。

        代码仓库:https://github.com/VitaminyW/Super_Solution

        PS:对代码存在问题可以通过私信或评论区提问。

一、数据预处理

为了训练模型实现8倍超分,本工作中使用BICUBIC算法对高清图像进行下采样8倍,从而获得作为网络输入的低分辨率图像。

BICUBIC算法:双三次插值又称立方卷积插值。三次卷积插值是一种更加复杂的插值方式。该算法利用待采样点周围16个点的灰度值作三次插值,不仅考虑到4个直接相邻点的灰度影响,而且考虑到各邻点间灰度值变化率的影响。其权重函数如下所示,

 

       其中a=-0.5,x为待插值点与插值点的距离。插值过程可由下式所示,

   

       其中代表距离待插值点的像素值。

图1. 0200.png下采图像展示

二、算法原理

        

图2.DRN网络结构图

2.1  算法目标

      在超分辨率问题中,存在着两个问题:

      a. 从超分辨率图像到低分辨率图像存在着非常多种下采样方式,即真实世界的低分辨率图像形成的原因多种多样。

      b. 深度学习是一种基于数据的学习方式,若数据集的输入是由某种特定下采方式得到的,则模型可能会学习到该特定下采方式的伪逆。

2.2  解决方法以及算法原理

      a. 正向过程

           网络通过借鉴UNet网络的结构方式,通过多级下采样提取图像特征,并通过concat方式结合原有图像特征与上采特征图进行上采样,从而产生多个高分辨率图像。若网络存在3个层级,则每个层级分别对应1倍、2倍以及4倍分辨率重建网络。最后通过MSE或MAE损失函数可以促使网络学习如何进行正向重建。

      b. 对偶过程

           正向过程是求解由低分辨率到高分辨率的解,即该问题解空间较大,所以需要较为复杂的网络结构。对偶过程指在学习数据中由高分辨率到低分辨率的下采过程,该过程解空间较小,可以使用较为简单的网络结构进行学习。

      c. 半监督学习

           由于对偶过程输入的为网络重建出来的高分辨率图像,其学习标签为低分辨率图像,所以该过程不依赖于是否拥有真实超分标签,从而网络可以进行半监督学习。

      d. 损失函数

        其中表示第i张低分辨率图像,表示第张高分辨率图像,代表网络重建,分别代表正向过程和反向过程的评估函数,代表指示是否有对应的的函数,若有为1,否则为0. 由函数,在编程中易得pair数据与unpair数据分别计算损失函数进行反向传播。

三、代码流程

        

3.1 详细步骤:

3.1.1 构建数据集,数据集结构如下图所示:

下采样代码位于代码目录的dataProcessing.ipynb

图3. 数据集结构

3.1.2 设置option.py文件

        将--data_dir,--data_train,--data_val参数修改为对应数据集路径与名称。也可选择通过命令行输入。

3.1.3 运行训练代码

        使用终端打开main.py所在文件目录,输入以下指令进行训练。

python main.py –batch_size 32 –n_GPUs 4 –save ./experiment/training_result --model DRN-S

3.1.4 由于原文作者未提供使用unpaired数据进行网络fine-tune代码,本工作根据论文逻辑,编写了 main_fine_tune.py代码,输入以下指令进行训练

python main.py –batch_size 32 –n_GPUs 4 –save ./experiment/fine_tune_result --pre_train {预训练正向模型的参数保存地址} --pre_train_dual {预训练对偶模型的参数保存地址} --model DRN-S

3.1.5 由于原文作者未提供重建unpaired数据的代码,本工作根据代码逻辑编写了对应main_reconstruction.py代码,输入指令进行预测。

python main_reconstruction.py --no_augment --model DRN-S --test_only --save ./reconstruction --save_results --batch_size 1 --save ./reconstruction --pre_train {fine-turn后正向模型的参数保存地址} --pre_train_dual {fine-turn后对偶模型的参数保存地址}

3.2 过程截图

a. ./experiment/training_result文件夹下:

图4.train输出内容展示

b. ./experiment/fine_tune_result

图5.fine-tune输出内容展示

c. ./reconstruction

图6.reconstrution输出内容展示

四、部分结果展示

 


http://chatgpt.dhexx.cn/article/teyiVeyg.shtml

相关文章

第五章 图像复原与重建

第五章 图像复原与重建 文章目录 第五章 图像复原与重建5.1图像复原与增强的概念5.2噪声5.3空间滤波5.4频率域滤波5.5图象复原相关技术5.6由投影重建图像 5.1图像复原与增强的概念 图像增强:是一个主观过程,我们根据自己的需求增强图片的某一部分内容图…

CT图像重建算法------迭代投影模型之距离驱动算法(Distance-Driven Model,DDM)

一、图像重建算法分类 CT图像重建算法主要有3类:1、反投影法;2、迭代重建算法;3、解析法:包括滤波反投影法和傅里叶变换法 二、迭代重建算法分类 迭代重建算法在求解的过程中需要不断地求解矩阵元素,目前系统矩阵的建模方式主要…

图像复原和重建技术

1、常见的图像噪声模型  图像复原是将图像退化的过程加以估计,并补偿退化过程造成的失真,以便获得未经干扰退化的原始图像或原始图像的最优估值,从而改善图像质量的一种方法。  典型的图像复原方法是根据图像退化的先验知识建立一个退化模型,以此模…

数字图像处理——第五章 图像复原与重建

数字图像处理——第五章 图像复原与重建 文章目录 数字图像处理——第五章 图像复原与重建写在前面1 图像退化/复原过程的模型2 噪声模型2.1 高斯噪声2.2 椒盐噪声 3 仅有噪声的复原——空间滤波3.1 均值滤波器3.2 统计排序滤波器3.3 自适应滤波器 4 用频率域滤波消除周期噪声5…

机器人群控避障算法ORCA

最优互补避碰ORCA算法 建议参考资料 ORCA-有关机器人群碰撞避免算法解读(柳朦朦) 导航动态避让算法RVO的优化ORCA(Optimal Reciprocal Collision Avoidance)-漫漫之间n Reciprocal n-body Collision Avoidance英文PDF 避障算法-VO、RVO 以及 ORCA&a…

限流算法的原理

计数器算法 在一定时间内,对处理的请求数进行计数,每次到达时间临界点则计数器清零。在一定时间间隔内,若计数器数字超限,则进行限流。 该算法的问题是,在两端临界点附加可能出现两倍的流速。 滑动窗口算法 基于计…

A*算法图解

A*(A-star)算法是一种静态网路中求解最短路径最有效的直接搜索算法。在电子游戏中最主要的应用是寻找地图上两点间的最佳路线。在机器人领域中,A*算法常用于移动机器人路径规划。 为了便于理解,本文将以正方形网格地图为例进行讲解…

a 算法原理 java_最短路径A*算法原理及java代码实现(看不懂是我的失败)

算法只要懂原理了,代码都是小问题,先看下面理论,尤其是红色标注的(要源码请留下邮箱,有测试用例,直接运行即可)A*算法百度上的解释:A*[1](A-Star)算法是 算法只要懂原理了,代码都是小问题&#…

A*算法原理简析

引言 。 A算法是一种启发式的搜索算法,它是基于深度优先算法和广度优先算法的一种融合算法,按照一定规则确定如何选取下一个节点。在介绍A算法之前,需要了解一下什么是启发式搜索算法,深度优先算法以及广度优先算法。 启发式搜…

A*算法原理

A* 算法 概述 虽然掌握了 A* 算法的人认为它容易,但是对于初学者来说, A* 算法还是很复杂的。 搜索区域(The Search Area) 我们假设某人要从 A 点移动到 B 点,但是这两点之间被一堵墙隔开。如图 1 ,绿色是 A ,红色是 B…

A Star算法原理及其实现

A -Star算法 A*(A-Star)算法是一种求解最短路径最有效的直接搜索方法,也是许多其他问题的常用启发式算法。 一、简介 二、寻路方式 三、运行机制 四、常用估价算法 五、示例 一、简介 A*(A-Star)算法是一种求解最短路径最有…

sift算法原理,按步骤记录

sitf算法是一种描述图像特征的,重要的,基础的方法。主要由以下几个步骤构成: 0.尺度空间理论 尺度空间理论认为,人眼在认知画面时,在不同的尺度上使用的是不同特征,例如观察树叶时使用的是小尺度特征&…

DQN算法流程及原理

相关名词解释: Agent:智能体;s—state:状态(放在格子游戏中,就是智能体的位置坐标(x,y))a—action:智能体采取的动作(例如上下左右)r—reward:奖励&#xff…

D*算法原理与程序详解(Python)

提示:前文写了D搜索算法,是一种贪心算法。 文章目录 一、D*算法是什么?二、原理以及代码步骤1.原理分析2.代码解释 总结 一、D*算法是什么? D*算法也是用于机器人路径规划问题的启发式方法,它是一种局部规划方法&…

unityA星寻路算法基础原理

作者: 风不停息丶 文章目录 🧑‍💻A星寻路简介👉代码基础架构👍代码实现格子类寻路管理类效果 结尾总结 🧑‍💻A星寻路简介 A*寻路就是用来计算玩家行进路径的,通过它可以计算出避开…

【YOLO系列】YOLO.v1算法原理详解

YOLO(You Only Look Once)系列算法原理 前言 :详细介绍了yolo系列目标检测算法的原理和发展过程。 系列: 【YOLO系列】YOLO.v1算法原理详解 【YOLO系列】YOLO.v2算法原理详解 【YOLO系列】YOLO.v3算法原理详解 【YOLO系列】YOLO.v4 & YOLO.v5算法原…

A*算法原理与实现

前言 A*算法最初发表于1968年,由Stanford研究院的Peter Hart, Nils Nilsson以及Bertram Raphael发表。它可以被认为是Dijkstra算法的扩展。 由于借助启发函数的引导,A*算法通常拥有更好的性能。 一、 A*吸取了Dijkstra 算法中的cost_so_far,为…

激光SLAM之NDT算法(1)算法原理

/在激光SLAM之NDT算法(2)-建图中我会给出实测可用的建图代码,并予以解释代码结构,这里就先讲讲原理吧!!!/ 无人车激光SLAM系统简单可以分为建图和定位两部分,无人车的定位问题,实际上就是要找出无人车当前在地图的那个位置&#x…

A*算法的原理及应用

A*算法的原理 A* 算法是一种高效的启发式搜索算法,在二维的栅格地图上寻路效果好,它通过估算节点的代价评估函数值并作为节点的综合优先级,当选择下一个需要遍历的节点时,再选取综合优先级最高的节点,逐步地找到最优路…

Bresenham 画圆算法原理

文章目录 前言Bresenham 画圆算法原理两个近似构造判别式圆与网格点的关系关系由来关系含义p i p_i pi​ 递推画圆程序伪码圆与网格点的关系图示前言 首先简要介绍一下生成圆的方法: 直接利用圆的方程生成圆利用圆的对称性生成圆方法一由于会涉及到浮点运算等因素,不采取该方…