Language-Assisted Super-Resolution from Real-World Low-Resolution Patches

LA-SR 概念图: 一张老虎照片里近处的虎是 HR、远处的草是 LR, 用深度分割出真实 LR/HR 补丁, 再在 CLIP 的内容×质量二维语言空间里对齐
Fig. 1 — LA-SR 总览。同一张照片因主体到相机的距离不同, 天然含 LR (远处草) 与 HR (近处虎) 区域。用深度分割出真实 LR/HR 补丁后, 把每块编码到与其内容文本强相关的位置, 其中 LR 对齐低质文本、HR 对齐高质文本。SR 网络被训练去产出同时对齐「输入内容 + 高质文本」的图 (图中红 ✖ 位置), 从而既保内容又长细节。横轴 = 内容, 纵轴 = 质量。

问题

真实超分要成对 HR-LR 数据, 现实拿不到;合成退化 (bicubic / ISP 管线) 抓不住真实退化的复杂度, 训出来在真图上泛化差。

数据观察

同一张高清图里, 远景因景深天然是真·LR、近景是 HR。用深度图 + top-k 就能从任意图抠出真实退化的无配对 LR/HR 补丁, 不需专用相机。

方法

把无配对超分重定义在 CLIP 语言空间:内容文本 (BLIP 生成) + 质量文本 ({good}/{bad}) 作锚, 两个对比损失分别管「保内容」和「拉画质」。

结果

真实低质数据 (DRealSR/CameraFusion/OST) 上无参考感知指标 (CLIPIQA/MUSIQ/TOPIQ/BRISQUE) 全面胜过合成退化训练的 RealESRGAN 与无/自监督基线。

SISR

单图超分辨率:从一张低分辨率图 (LR) 重建高分辨率图 (HR)。

成对 / 无配对

成对 = 每张 LR 都有对应 HR 真值可做逐像素监督;无配对 = 只有一堆 LR 和一堆无关的 HR, 没有一一对应。

合成退化

人工把 HR 降质造 LR (bicubic 下采样、加噪、模糊、JPEG、模拟 ISP)。便宜但和真实退化有域差。

CLIP

把图像和文本编码到同一空间、可算余弦相似度的视觉-语言模型。LA-SR 用它的图像/文本编码器当「懂内容也懂画质」的裁判。

对比损失 (InfoNCE)

拉近匹配对 (图↔它的文本)、推远不匹配对的损失。LA-SR 用它把图对齐到内容文本与质量文本。

深度图

每个像素到相机的相对距离图。这里用预训练 DepthFM 估计, 亮=远 (选作 LR 中心), 暗=近 (选作 HR 中心)。

无参考 IQA

不需真值 HR 就能给画质打分的指标:BRISQUE (越低越好)、CLIPIQA / MUSIQ / TOPIQ (越高越好)。感知超分的主战场。

DGDML-SR

LA-SR 的灵感来源 (Cheng 2020):也用景深抠 LR/HR, 但要求两块纹理相似才配对, 现实很少成立——LA-SR 去掉了这个约束。

1. 出发点 (Motivation)

超分的地基裂缝是数据。 训一个超分网络通常要成对的 HR-LR:同一内容, 一张高清一张低清, 好做逐像素监督。但真实世界几乎拿不到这种对——你没法让同一时刻同一场景既拍高清又拍低清。于是主流做法是人工造 LR:把 HR 用 bicubic 下采样, 或模拟相机 ISP 管线 (加噪、模糊、压缩)。

问题是合成退化不像真的。真实低清图的退化是镜头、传感器、抖动、景深、压缩层层叠加的复杂结果, 手工核和 ISP 模拟抓不全, 训出来的网络一遇真图就泛化崩。另一条路是用专用硬件 (分光棱镜双拍、多焦距相机) 采真实 LR-HR 对, 但要贵设备、还绑死在某个相机型号上, 换个场景又不灵。

LA-SR 的破题点是一个朴素观察 (受 DGDML-SR 启发):同一张高清照片里, 因为主体到相机的距离不同, 不同区域天然就有不同的分辨率——远处的草、树叶因景深模糊、占像素少, 本身就是「真·LR」;近处的虎清晰、占像素多, 是 HR (见 Fig. 1)。这意味着从任意一张高清图, 用深度就能抠出真实退化的 LR 和 HR 补丁, 不要专用相机、不要合成退化。

但这些 LR 补丁没有配对的 HR 真值 (远处那块草, 你没有它的高清版), 逐像素监督用不了。DGDML-SR 的老办法是在同图里找纹理高度相似的两块凑配对, 但「远处的草恰好和近处某块草长得一样」这种假设现实极少成立。

LA-SR 换个空间做监督:把无配对超分重定义在语言空间里。 用 CLIP 这类视觉-语言模型——它既懂语义内容也懂感知质量——不需要像素级配对, 只要让生成结果在语言空间里「内容对得上输入、质量对得上 HR」即可。具体两个损失:linguistic-content loss 保住输入内容, linguistic-quality loss 保证输出画质。

2. 方法 (Method)

LA-SR 训练框架: (a) 用深度模型 + 固定核抠出 I_LR 和 I_HR; (b) CLIP 图像编码器出 F_LR/F_HR/F_SR, 文本编码器出内容文本 C 和质量文本 Q, 四个对比损失把它们对齐
Fig. 2 — LA-SR 训练框架。(a) 补丁准备:深度模型估深度 → 固定核平滑 → 得深度图 D → top-k 选远处中心作 $I_{LR}$、近处中心作 $I_{HR}$。(b) 训练:图像编码器 $\mathcal{E}_I$ 出 $F_{LR}/F_{HR}/F_{SR}$;文本编码器 $\mathcal{E}_T$ 把 BLIP 生成的内容文本编成 $C_{LR}/C_{HR}$、把质量文本编成 $Q_-/Q_+$。四个对比损失:$\mathcal{L}^{\mathcal{E}}_{LC}$/$\mathcal{L}^{\mathcal{E}}_{LQ}$ 训编码器, $\mathcal{L}^{SR}_{LC}$/$\mathcal{L}^{SR}_{LQ}$ 训 SR 网络。SR 网络本身是不改动的现成 RRDB/ESRGAN 主干, 创新全在损失。

说明:LA-SR 未开源代码 (arxiv、作者 Scholar / 主页均无仓库链接)。以下代码块为等价伪代码——非原文逐字, 据论文式 (1)–(5) 与 §3 重构, 用来锚定每个损失在算什么, 非可直接运行。

2.1 第一步:用深度抠出真实 LR/HR 补丁

先用预训练深度估计网络 (DepthFM) 得到每像素到相机的相对距离。这里有个细节:为了让「一整块补丁」的深度稳定 (而不是被单像素噪声带偏), 作者对深度图卷一个全 1 的大固定核 (\(\mathbb{R}^{1\times3\times29\times29}\)), 用邻域平均得到最终深度图 \(D\)。然后 top-k 选最远的 k 个像素\(I_{LR}\) 的中心、最近的 k 个\(I_{HR}\) 的中心, 抠出小的 \(I_{LR}\in\mathbb{R}^{h\times w\times3}\) 和大的 \(I_{HR}\in\mathbb{R}^{H\times W\times3}\), 其中 \((H,W)=(sh,sw)\), \(s\) 是放大倍数。与 DGDML-SR 的关键区别:不要求 LR/HR 纹理相似, 任意内容都能抠。

等价伪代码 — 非原文逐字 (据 §3.1 重构):深度引导的 LR/HR 补丁提取

def prepare_lr_hr(img, depth_model, s, h, w, k):
    D = depth_model(img)                      # 每像素到相机的相对距离
    D = avgpool_fixed_kernel(D, ksize=29)     # 全1大核平滑: 按邻域定补丁深度
    far  = topk_pixels(D, k, mode="farthest") # 亮区=远 -> LR 中心
    near = topk_pixels(D, k, mode="nearest")  # 暗区=近 -> HR 中心
    I_LR = crop(img, centers=far,  size=(h, w))        # 小的真·LR 补丁
    I_HR = crop(img, centers=near, size=(s*h, s*w))    # 大的 HR 补丁 (内容与 LR 无关)
    return I_LR, I_HR

2.2 编码器:去掉位置编码的 CLIP

图像编码器 \(\mathcal{E}_I\)、文本编码器 \(\mathcal{E}_T\) 都取自预训练 CLIP。一个工程要点:CLIP 原生固定输入 224×224, 而这里补丁尺寸各异 (LR 56×56、HR/SR 224×224), 所以去掉图像编码器的位置编码, 让它吃可变尺寸输入。所有特征 \(\in\mathbb{R}^{1\times c}\) (batch=1 时)。

2.3 Linguistic-content loss:在语言空间保内容 (eq. 1–2)

以前的超分直接比 \(I_{SR}\)\(I_{HR}\) 像素来保内容——这里没配对, 用不了。改为:先用图像转文本模型 (BLIP) 从 \(I_{LR}\)\(I_{HR}\) 生成内容文本, 经 \(\mathcal{E}_T\)\(C_{LR}\)\(C_{HR}\);图像特征 \(F_{LR}\)\(F_{HR}\)\(F_{SR}\)\(\mathcal{E}_I\) 得到。核心是一个对比函数:

\[\text{Cont}(A,B) = -\frac{1}{*}\sum_{i=1}^{*}\log\frac{e^{\cos(A_i,B_i)}}{\sum_{k=1[k\neq i]}^{*} e^{\cos(A_i,B_k)}},\qquad \mathcal{L}^{\mathcal{E}}_{LC}=\text{Cont}(F_{LR}\,\|\,F_{HR},\ C_{LR}\,\|\,C_{HR})\]

—— 翻译: $\text{Cont}(A,B)$ 就是 InfoNCE 式对比——拉近配对 $(A_i,B_i)$ 的余弦相似度、推远与其它 $B_k$ 的相似度 ($\|$ 是沿 batch 维拼接)。$\mathcal{L}^{\mathcal{E}}_{LC}$ 把「LR 图↔LR 的内容文本」「HR 图↔HR 的内容文本」拉到一起, 同时和别的图/文本推开——即训编码器把图像对齐到它自己的内容描述

对 SR 网络, 则要求生成图 \(I_{SR}\) 的特征 \(F_{SR}\)输入 \(I_{LR}\) 的内容文本 \(C_{LR}\) 强相关 (保证 SR 与输入同内容):

\[\mathcal{L}^{SR}_{LC} = \text{Cont}(F_{SR}, C_{LR})\]

内容损失合起来 \(\mathcal{L}_{LC}=\mathcal{L}^{\mathcal{E}}_{LC}+\mathcal{L}^{SR}_{LC}\)

2.4 Linguistic-quality loss:在语言空间拉画质 (eq. 3–4)

内容要 \(I_{SR}\)\(I_{LR}\) 一致, 但质量要 \(I_{SR}\)\(I_{LR}\) 更好 (它用更多像素表达同样内容)。前提假设:近处 \(I_{HR}\) 比远处 \(I_{LR}\) 细节更多。先准备两组质量文本:低质 (如 {bad}) 和高质 (如 {good}), 编成 \(Q_-\)\(Q_+\)。训编码器把 \(F_{HR}\) 判为比 \(F_{LR}\) 更高质:

\[\mathcal{L}^{\mathcal{E}}_{LQ} = \text{Cont}(F_{LR}\,\|\,F_{HR},\ Q_-\,\|\,Q_+)\]

—— 翻译: 把「LR 图↔低质文本」「HR 图↔高质文本」拉到一起——教编码器沿质量轴区分 LR 和 HR。这一步让后面 $\mathcal{L}^{SR}_{LQ}$ 的梯度有意义:编码器得先真的能分好坏, SR 才有方向往「好」走。

对 SR 网络, 要求每个 \(I_{SR}\) 都对齐到唯一的高质文本 \(Q_+\) (不同于内容损失里每张图配各自的文本):

\[\mathcal{L}^{SR}_{LQ} = -\frac{1}{*}\log\frac{e^{\cos(F_{SR},Q_+)}}{e^{\cos(F_{SR},Q_-)}}\]

—— 翻译: 把生成图 $I_{SR}$ 的特征往高质文本 $Q_+$ 拉、往低质 $Q_-$ 推——直接命令「你要长得像 good, 别像 bad」。实际训练里 $Q_\pm$ 扩到 $N$ 个 batch, $*$ 取 $N$。

质量损失合起来 \(\mathcal{L}_{LQ}=\mathcal{L}^{\mathcal{E}}_{LQ}+\mathcal{L}^{SR}_{LQ}\)。下面伪代码把四个对比损失串起来:

等价伪代码 — 非原文逐字 (据式 1–4 重构):两组语言损失的联合计算

def cont(A, B):                                # InfoNCE 式对比 (式1)
    S = cosine_sim_matrix(A, B)                # (*, *)
    pos = torch.exp(torch.diag(S))             # e^{cos(A_i, B_i)}
    neg = (torch.exp(S) * (1 - eye)).sum(dim=1)# Σ_{k≠i} e^{cos(A_i, B_k)}
    return -(torch.log(pos / neg)).mean()

# 图像特征 / 文本特征
F_LR, F_HR, F_SR = E_I(I_LR), E_I(I_HR), E_I(I_SR)
C_LR, C_HR       = E_T(blip(I_LR)), E_T(blip(I_HR))     # 内容文本
Q_neg, Q_pos     = E_T("bad ..."), E_T("good ...")      # 质量文本

L_LC = cont(cat(F_LR, F_HR), cat(C_LR, C_HR)) + cont(F_SR, C_LR)          # 式1 + 式2
L_LQ = cont(cat(F_LR, F_HR), cat(Q_neg, Q_pos)) \
       - log(exp(cos(F_SR, Q_pos)) / exp(cos(F_SR, Q_neg))).mean()        # 式3 + 式4

2.5 改良 VGG 损失 + 总损失 (eq. 5)

只靠两个语言损失可能保不住低频信息 (结构、颜色)。作者在 \(I_{SR}\)\(I_{LR}\) 之间加一个改良的感知 (VGG) 损失——因两者分辨率不同, 对 \(I_{SR}\) 多加几层池化再取 VGG 特征。总损失:

\[\mathcal{L}_{tot} = \lambda_{LC}\mathcal{L}_{LC} + \lambda_{LQ}\mathcal{L}_{LQ} + \lambda_{VGG}\mathcal{L}_{VGG}\]

其中 \(\lambda_{LC}=0.5\), \(\lambda_{LQ}=0.5\), \(\lambda_{VGG}=0.1\)三者分工:\(\mathcal{L}_{LC}\) 管语义对齐、\(\mathcal{L}_{LQ}\) 管感知画质、\(\mathcal{L}_{VGG}\) 管低频结构与颜色。一个训练步里编码器和 SR 网络一起更新——语言损失同时含训编码器的 \(\mathcal{L}^{\mathcal{E}}\) 项和训 SR 网络的 \(\mathcal{L}^{SR}\) 项:

等价伪代码 — 非原文逐字 (据式 5 + §3 重构):一个训练步

def train_step(img, sr_net, E_I, E_T, depth_model, opt):
    I_LR, I_HR = prepare_lr_hr(img, depth_model, s=4, h=56, w=56, k=K)
    I_SR = sr_net(I_LR)                                   # 现成 RRDB 主干, 一次前向

    L_LC = compute_content_loss(I_LR, I_HR, I_SR, E_I, E_T)   # 式1 + 式2
    L_LQ = compute_quality_loss(I_LR, I_HR, I_SR, E_I, E_T)   # 式3 + 式4
    L_VGG = modified_vgg(I_SR, I_LR)                          # 多加池化对齐分辨率差

    L = 0.5*L_LC + 0.5*L_LQ + 0.1*L_VGG                       # 式5
    opt.zero_grad(); L.backward(); opt.step()                # 同时更新 E_I, E_T, sr_net
    return L

3. 实验结果 (Results)

设置:只用高清图 (DF2K + LSDIR) 训练;SR 主干用不改动的 RRDB (ESRGAN 骨干), 从 PSNR 预训练权重初始化, 微调 30 万步, lr \(5\times10^{-5}\), batch 16, \(I_{LR}\) 56×56 / \(I_{HR}\) 224×224, 4×Quadro RTX 8000 训 50 小时。评测以无参考感知指标为主 (BRISQUE↓, CLIPIQA↑, TOPIQ↑, MUSIQ↑)。

3.1 对比无 / 自监督方法 (Table 1)

在真实低质数据上 LA-SR 全面领先, 尤其 CameraFusion:

方法 数据集 BRISQUE↓ CLIPIQA↑ TOPIQ↑ MUSIQ↑
DASR (无监督) DRealSR 45.67 0.29 0.26 27.73
SRTTA (无监督) DRealSR 37.06 0.42 0.32 37.22
LA-SR DRealSR 30.07 0.46 0.40 40.70
MASA-SR (用参考图) CameraFusion 28.23 0.60 0.56 58.88
DCSR (用参考图) CameraFusion 34.46 0.48 0.41 55.29
LA-SR (无参考图) CameraFusion 12.47 0.69 0.58 58.97

注意 MASA-SR / DCSR 还额外用了参考图, LA-SR 什么额外输入都不用, 在 BRISQUE / CLIPIQA / TOPIQ 上仍反超。

3.2 对比监督方法 (Table 2)

即使对上用成对数据训的监督方法, LA-SR 的感知指标也普遍最好。举几组 (×4):

方法 Set5 BRISQUE↓ Set5 CLIPIQA↑ Urban100 CLIPIQA↑ OST MUSIQ↑
ESRGAN (bicubic 训) 61.08 0.53 0.54 35.25
ESRGAN† (真相机 LR 训) 32.13 0.47 0.45 43.13
RealESRGAN (合成退化训) 24.20 0.52 0.59 62.06
LA-SR 11.53 0.65 0.71 60.82

bicubic 训的 ESRGAN 因训练/测试域差最差;真相机 LR 训的 ESRGAN† 绑死型号泛化有限;合成退化的 RealESRGAN 在高清图上吃力。LA-SR 因训练用的就是自然景深退化的真 LR, 在真实低质图上也稳。它甚至在AI 生成图 (LDM / Dataset Diffusion) 上也领先, 说明跨域泛化。

3.3 关键消融

3.4 编码器学到了什么 (Fig. 7)

t-SNE: (a) LR 特征与 HR 特征被清晰分成红蓝两簇; (b) HR 特征按内容关键词 (Book/Car/Cat/Dog/Metal/Tree/Sky/Water) 聚成不同簇, Cat 和 Dog 靠得近
Fig. 7 — 编码特征的 t-SNE。(a) 编码器把 $F_{LR}$ (红) 与 $F_{HR}$ (蓝) 分到两个空间——证明它确实沿质量轴区分 LR/HR, 使 $\mathcal{L}^{SR}_{LQ}$ 的梯度有意义。(b) HR 特征按内容关键词聚簇 (同色=同关键词);有趣的是 Cat 和 Dog 的簇靠得近, 反映编码器捕捉到二者的语义相似。
×4 超分定性对比: bicubic / ESRGAN / ESRGAN† / RealESRGAN / LA-SR 在鸟羽毛、达斯维达、玫瑰上的放大对比, LA-SR 细节更锐更自然
Fig. 4 — ×4 定性对比。即便对上监督方法, LA-SR 在发丝、羽毛、花瓣纹理上都更锐、更自然 (放大看)。

4. 实现细节 (Implementation)

无官方代码, 以下细节全部来自论文正文 (§3–§4);实现者复现时这些是坑位。

  1. 深度模型是 DepthFM (Gui et al. 2025), 一个 flow-matching 的快速单目深度估计。LA-SR 只用它的相对深度排序 (谁远谁近), 不需要绝对尺度。
  2. 29×29 全 1 固定核平滑深度是防「单像素深度噪声选错补丁中心」的关键——按邻域平均决定一块补丁的深度, 再 top-k 选中心。这一步论文强调过, 容易被复现者忽略。
  3. CLIP 图像编码器去位置编码 (仿 Wang et al. 2023b), 否则固定 224×224 吃不下 56×56 的 LR 补丁。文本编码器保持原样。
  4. 内容文本来自 BLIP (Li et al. 2022) 的 image-to-text, 对每个补丁在线生成 caption;质量文本是预定义的固定短语 ({good, detailed, clear, high-reso.} / {noisy, low-reso., bad})。
  5. 式 (4) 的分母只有 \(Q_-\)、分子只有 \(Q_+\)——不同于式 (2) 每图配各自文本, 质量损失让所有 SR 图对齐同一个 \(Q_+\)。这是「内容要多样、质量要统一往好走」的设计取舍。
  6. SR 网络从 PSNR 预训练权重初始化再用 LA-SR 微调 (和 RealESRGAN/BSRGAN 一样的暖启动套路), 不是从零训。
  7. 改良 VGG 损失对 \(I_{SR}\) 多加池化以对齐 \(I_{LR}\) 的分辨率差 (56 vs 224), 才能在不同尺度上比 VGG 特征。
  8. 对比函数式 (1) 的分母写作 \(\sum_{k\neq i}\) (只含负样本), 与标准 InfoNCE (分母含正样本) 略有出入。按论文字面它最大化「正相似 − 负相似」;这属于论文表述细节, 语义上仍是「拉正推负」, 不影响理解, 但复现者需照式子实现。

论文 vs 代码的出入:无代码可对照, 无法做逐行交叉验证——这是本页最大的不确定性来源。所有公式落地 (尤其式 1 的分母、VGG 的额外池化、质量文本的具体措辞) 都只能按论文文字理解, 官方未开源前无法确认实现与描述完全一致。

5. 批判与延伸 (Critique & Extensions)

5.1 具体不足

5.2 交叉验证:同是「真实退化超分」, 三条路线的分歧

LA-SR 属于「怎么搞到真实退化的训练信号」这条主线。对照本站另外两篇思路迥异的真实超分工作:

维度 LA-SR (本文) RealESRGAN (合成退化派) DGDML-SR (Cheng 2020, 景深派前身)
LR 从哪来 高清图里景深远景, 真退化 HR 叠高阶合成退化 (噪/模糊/压缩) 同图景深远景
配对方式 无配对, 靠语言空间对齐 合成即天然成对 同图找纹理相似块凑对
监督信号 CLIP 内容/质量文本对比 逐像素 + GAN + 感知 内部退化学习 + 像素
自曝软肋 只覆盖景深退化, 需合成退化补重度 合成 ≠ 真实, 高清图上吃力 纹理相似假设现实少成立

一致:三者都认同「bicubic 下采样训不出真实超分」, 也都承认真实退化难获取。

矛盾与本文裁决:(1) RealESRGAN 主张「把退化建得够复杂就能逼近真实」, LA-SR 的 Table 2 反驳——合成退化训的模型在自然高清图上反而吃力 (域仍不匹配);但 LA-SR 的 Table 5 又反过来承认——遇到重度退化时还得请回 RealESRGAN 式合成退化。两者其实互补:LA-SR 强在自然/轻度退化, 合成退化强在重度/artifact 退化。(2) 相对 DGDML-SR, LA-SR 去掉「纹理相似」硬约束是明确进步 (Table 3 的 depth-based ≫ random 佐证了「不需要相似」这条也成立), 分歧成因是 DGDML-SR 在像素空间配对必须要相似纹理, 而 LA-SR 搬到语言空间后只需内容语义对齐, 天然松绑。

5.3 研究启发 (可迁移的套路)

数据不够, 换空间做监督

没有配对真值时, 别硬凑像素对——把监督搬到一个「懂内容也懂质量」的预训练表征空间 (这里是 CLIP)。逐像素约束 → 语义/属性约束, 是绕开「拿不到配对」的通用招。

把免费的物理先验当标注

景深让「远=退化、近=清晰」天然成立——一张普通照片里就藏着无数无配对 LR/HR。找任务里「本就存在、免费、可自动提取」的物理信号当弱标签, 比造合成数据更接近真实分布。

内容与质量解耦成两个损失

图像复原的两大轴 (保内容 / 提质量) 诉求不同, 就该拆成两个独立对齐目标:内容要「各图配各文本」(多样), 质量要「所有图往同一好文本」(统一)。别用一个损失硬扛两件事。

反直觉:去掉位置编码换灵活性

为吃变尺寸输入, 直接把 CLIP 的位置编码删了。当空间精度不是瓶颈 (质量判断为主) 时, 牺牲结构信息换输入灵活是划算的——先想清楚下游到底需不需要那部分归纳偏置。

警惕「同源指标自证」

用 CLIP 训、又用 CLIPIQA/MUSIQ 评, 涨分可能只是「讨好了同一个 CLIP」。凡是训练信号和评测指标共享底座, 结论都要打折——尽量找不共享机理的第三方指标 (或人评) 佐证。

5.4 延伸阅读

本站相关的真实/感知超分工作:

讨论 / Comments

评论托管在本仓库的 GitHub Discussions, 需 GitHub 账号。