图像超分辨率 之 DRN 论文解读与感想

article/2025/9/24 6:43:55

图像超分辨率 之 DRN (Closed-loop Matters: Dual Regression Networks for Single Image Super-Resolution)论文解读与感想

DRN是在2020年顶会(CVPR)上发表的一篇想法简单,但是结果非常不错的文章。

  1. 先来说一下文章的切入点

首先,对于图像超分辨率,可以说是一个经典的病态问题(ill-posed problem)。因为一个高分辨率图像可以通过不同的下采样(downscaled)方法获得不同的低分辨率图像,这也就是论文中所表达的 HR images that can be downscaled to obtain the same LR image。什么叫做病态问题呢,就是说这类问题是没有一个真正正确的结果的,或者说是我们无法去验证我们的结果是否正确。这让我联想起类似于一个一元函数,一个自变量却对应多个函数值(数学上这是不成立的)。由于病态问题的解不唯一,这就使得可能的模型映射空间无比巨大,在这个空间中寻找一个合适且性能优异的映射非常困难(the space of the possible functions that map LR to HR images becomes extremely large)。
其次,在真实应用时,我们通常是无法获取成对(paired data)的HR image和LR image的。我们知道在进行仿真实验时,我们通常会选择将一张HR图像进行人工降低分辨率(e.g.,performing Bicubic kernel to produce LR-HR pairs)那么我们的模型实际上是已知自变量和结果,在模拟一个Bicubic的逆变换,然而如果这个LR不是通过Bicubic 方法得到的,甚至是多种下采样方法共同得到的,很明显我们事先使用Bicubic人工生成的paired data所训练的模型,就会出现问题,这也就是作者所说的以往传统方法泛化性不好的原因(incur a severe adaptation problem and yield poor performance)。

  1. 针对上面两个问题,作者提出了理论上的解决方法

降低映射空间的复杂度 and 直接使用LR image对模型进行训练
如何降低映射空间的复杂度,很明显,给模型添加更多的限制就可,因为限制越多,所满足限制的可能的解就越少嘛。但是有一点需要强调,所添加的限制一定是对模型原本的限制有促进作用的限制,这样才能在原本的映射空间里求子空间(这样万能的对抗损失就没法用了)。了解过data imputation领域的应该知道,data imputation也是一种经典的病态问题,而如果将结果的不确定性考虑进去,所获得的结果精度往往会有很大的提升(经典的有GAIN1, MICE2
直接使用LR image对模型进行训练,这就牵扯到一个image to image conversion中一个经典的问题,unpaired data。在图像风格转换领域,使用unpaired data的经典之作是CycleGAN,它是通过将输入图像映射为目标域中的结果,又将这个结果映射回原始的输入图像来进行训练的,这就巧妙的避开了使用paired data训练模型。

  1. 紧接着,作者给出了一种全新的模型:DRN
    在这里插入图片描述

给出一个论文的模型图。可以看到相比于传统的SR model(蓝色部分),这篇文章多了一个往回的步骤(红色部分),因而整个训练过程呈现出一个循环,这也是为啥这篇文章叫这么个名字,生动形象。这个图中有两个已知量 ( x , y ) (x,y) x,y,这代表成对的LR image和HR image,在训练过程中,模型将 x x x映射成伪HR image y ^ \hat{y} y^,然后和真实的HR image求一个primal regression loss L p ( y , y ^ ) L_p(y,\hat{y}) Lp(y,y^),之后通过dual regression task将 y ^ \hat{y} y^再映射成LR image x ^ \hat{x} x^,求取一个dual regression loss L d ( x , x ^ ) L_d(x,\hat{x}) Ld(x,x^)。最后联合优化 L p + L d L_p+L_d Lp+Ld
当输入的数据是unpaired data时,也就是此时没有y,那么我们就放弃 L p L_p Lp一项,转而仅仅优化 L d L_d Ld一项,这么看,后一项才是本文的灵魂。
在这里插入图片描述

这个过程乍一看和CycleGAN很像,但是作者也对二者进行了对比,给出了不同点:
首先,CycleGAN是通过cycle loss实现的,而本文是通过添加额外的约束 L d L_d Ld实现的。这点我的理解是 在CycleGAN中,模型需要训练两个生成器和两个鉴别器,这就使得模型的训练时间和参数都增加了一倍,而在DRN中,这个往回走的过程是通过一个简单的下采样网络(文章称之为 dual network)来实现的,很明显这个下采样网络的结构要比原始网络简单,训练起来也容易的多。这里给出我个人的一个疑问:既然这个采样过程都是将一个图像进行相同倍数的下采样,可否将dual network和primal network的前半部分下采样共享参数呢,理论上这样可以在不破坏模型性能的基础上进一步提升模型训练效率,减少参数,这个问题有待思考。
其次,在训练数据的选择上,作者提出CycleGAN直接放弃了paired data,仅仅使用unpaired data进行训练,而本文可以同时使用paired data和unpaired data进行训练,其中两部分数据的比例使用 ρ = m / ( m + n ) ρ = m/(m + n) ρ=m/(m+n) 进行调节,其中m,n是两类数据的数量。关于这一点我觉得有点牵强,因为相比于图像超分辨率领域,图像风格转换领域的paired data难以获得的多,所以CycleGAN仅仅针对于unpaired data也是有现实因素在里面的(大清自有国情在啊…)不过我们不可否认,从文章后面的消融实验可以看出,通过 ρ ρ ρ来调节两类数据为适当比例进行训练,确实在一定程度上可以提升模型性能。

  1. 总结

本文作为第一篇在图像超分辨率领域使用环形训练方式的文章,用一种很独特的方法极大的提升了模型的性能。此外,虽然文章给出的是一种具体模型,但是我个人认为,这种方法是通用性的,只需将dual network稍加改进,便可添加到已有的图像超分辨率模型中使用。


  1. Yoon J., Jordon J. & van der Schaar M. (2018) Gain: Missing data imputation using generative adversarial nets. In International Conference on Machine Learning (ICML).。 ↩︎

  2. Sanchez-Morales, A., Sancho-Gómez, J. L., Martınez-Garcıa, J. A., & Figueiras-Vidal, A.R. (2020). Improving deep learning performance with missing values via deletion and compensation. Neural Computing and Applications, 32(17), 13233-13244 ↩︎


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

相关文章

关于CSRF攻击及mvc中的解决方案 [ValidateAntiForgeryToken]

一.CSRF是什么? CSRF(Cross-site request forgery),中文名称:跨站请求伪造,也被称为:one click attack/session riding,缩写为:CSRF/XSRF。 二.CSRF可以做什么&#xff…

CSRF简介

一.CSRF是什么? CSRF(Cross-site request forgery),中文名称:跨站请求伪造,也被称为:one click attack/session riding,缩写为:CSRF/XSRF。 二.CSRF可以做什么&#xf…

django种表单post出现CSRF verification failed( CSRF验证失败 ) 的两种解决方案

现象 表单界面如下&#xff1a; 在点击提交之后&#xff0c;出现如下错误页面&#xff1a; HTML的代码如下&#xff1a; contact_form.html <!DOCTYPE HTML PUBLIC ><html> <head><title>Contact us</title> </head><body><h1&…

Django CSRF验证失败. 请求被中断.

项目场景&#xff1a; Python版本&#xff1a;3.7 Django版本&#xff1a;3.1.7 问题描述&#xff1a; 出现了CSRF验证失败. 请求被中断. 原因分析&#xff1a; 在Django中有个设定&#xff0c;防止跨域来请求。比如有爬虫&#xff0c;爬虫不是从网站根目录开始搜寻&#x…

detail: “CSRF Failed: CSRF token missing or incorrect 问题解决方法

如果你尝试了所有方法之后还是没用&#xff0c;那定位你的Ajax方法&#xff1a; 1&#xff0c;var $crf_token $(‘[name“csrfmiddlewaretoken”]’).attr(‘value’) 2&#xff0c;headers:{“X-CSRFToken”: $crf_token} 原因分析&#xff1a; 这是由于你的django,有一个…

CSRF防御之token认证

一、CSRF是什么&#xff1f; CSRF&#xff08;Cross-site request forgery&#xff09;&#xff0c;中文名称&#xff1a;跨站请求伪造。攻击者盗用你的身份&#xff0c;以你的名义发送恶意请求。CSRF能够做的事情包括&#xff1a;以你名义发送邮件&#xff0c;发消息&#xf…

禁止访问 (403)CSRF验证失败. 请求被中断.

出现这个问题是因为django在收到表单提交过来的信息时&#xff0c;会检查提交过来的信息中是否有token,并会对token进行校验&#xff0c;如果校验通过&#xff0c;那就继续执行&#xff0c;反之就会认定这次的数据有伪造的风险。 解决方案&#xff1a; 在项目的settings.py文…

禁止访问 (403) CSRF验证失败. 请求被中断.————错误处理(测试接口时遇到的问题)

问题描述 解决措施 在Header参数中添加Content-Type和X-CSRFToken信息&#xff0c;这样就不会报错了。 运行结果

通过验证Referer解决CSRF安全防御问题

一、背景 JAVAWEB 类项目处于客户验收阶段&#xff0c;在安全扫描处出现 CSRF 问题&#xff0c;通过多个博客中解决思路都无法解决。后来通过同事提醒 可以试试判断 Referer页面来源参数&#xff0c;最终使用该方法解决问题。 二、环境 服务器&#xff1a;Linux 前端&#…

CSRF实战案例—绕过referer值验证

在一个添加管理员的界面引起了我的注意 尝试添加一个管理员&#xff0c;如下添加成功&#xff0c;我们可以观察其请求包中并未存在token字段&#xff0c;可能存在csrf漏洞。但是存在“Referer”和“Origin”字段 我们把referer字段删了只剩origin&#xff0c;查看是否可以请求成…

访问django后台,提示CSRF验证失败. 请求被中断.Referer checking failed - **** does not match any trust

1.非debug模式看到的报错 2.settings打开debug模式&#xff0c;才能把报错信息看的详细 3.去settings.py中&#xff0c;找到CsrfViewMiddleware 中间件&#xff0c;点击进入 4.搜索匹配报错信息 5.往下看看用到这个关键字的地方 6.从源码第一行开始看 7.settings.py&…

安全认证中的CSRF

1、什么叫做CSRF攻击 简单地说&#xff0c;就是说恶意网站&#xff0c;虽然没有盗取你的用户名和密码信息&#xff0c;但是却可以伪装成你&#xff0c;然后登录到银行&#xff0c;或者等危险网站&#xff0c;模拟你进行操作。利用的就是cookies这个特性&#xff0c;即浏览器提供…

csrf验证问题 -- 不同域名下Iframe嵌套Cookie失效导致csrf验证失败

问题原因 Cookie:SameSite Chrome 51 开始&#xff0c;浏览器的 Cookie 新增加了一个SameSite属性&#xff0c;主要用于防止CSRF攻击和用户追踪。 cookie的SameSite属性用来限制第三方Cookie&#xff0c;从而减少安全风险(防止CSRF)。 SameSite可以有下面三种值&#xff1a;…

接口报403,报CSRF验证失败的问题

问题定位&#xff1a;后台两个接口重名&#xff0c;走了优先级更高的接口&#xff0c;接口没有过滤CSRF&#xff1b; 一、csrf是什么 CSRF&#xff08;Cross-site request forgery&#xff09;跨站请求伪造&#xff0c;是一种常见的web安全漏洞&#xff0c;概括地说就是指&…

Django的csrf豁免:解决CSRF验证失败,请求被中断问题

1.CSRF介绍 跨站请求伪造&#xff08;英语&#xff1a;Cross-site request forgery&#xff09;&#xff0c;也被称为 one-click attack 或者 session riding&#xff0c;通常缩写为 CSRF 或者 XSRF&#xff0c; 是一种挟制用户在当前已登录的Web应用程序上执行非本意的操作的…

解决:禁止访问 (403) CSRF验证失败

在测试Django框架POST请求方式时&#xff0c;程序报错如下 在确保访问安全的情况下有一下两种方式&#xff1a; 1、在相应html文件form代码块中添加如下代码&#xff1a; <form method"post" action"/method_show/">{% csrf_token %} <!-- 改行…

Ubiquant LGBM Baseline 九坤量化大赛 版本44

数据描述&#xff1a; 该数据集包含来自数千项投资的真实历史数据的特征。你的挑战是预测与做出交易决策相关的模糊指标的价值。 Your challenge is to predict the value of an obfuscated metric relevant for making trading decisions. 这是一个代码竞赛&#xff0c;它依…

lgbm的roc曲线,auc计算

lgbm模型画ROC曲线 1、得到分类的概率 import numpy as npimport pandas as pdimport lightgbm as lgbfrom sklearn.model_selection import train_test_splitX_train, X_test, y_train, y_test \train_test_split(data.iloc[:, 0:-1], # featuredata.iloc[:, -1], # label…

LightGBM C++使用问题

~~~~~~~~~~~~~~~~~~~~串行single sample predict~~~~~~~~~~~~~~~~~~~~~~~~~ python下已测试通过&#xff0c;无问题&#xff1a; 然而C下问题是&#xff1a; 1&#xff0c;首先是与python下概率不一致&#xff1b; 2&#xff0c;然后是所有输入的结果都一样 初步怀疑版本问题…

kaggle学习笔记-otto-baseline5-LGBM的使用

数据处理 import polars as pltrain pl.read_parquet(../input/otto-train-and-test-data-for-local-validation/test.parquet) train_labels pl.read_parquet(../input/otto-train-and-test-data-for-local-validation/test_labels.parquet)def add_action_num_reverse_chr…