资讯动态

TTSR详解:参考图像超分如何用Transformer实现纹理迁移

发布时间:2026/10/14 2:52:25 来源:尧图企业网站定制
1. 这个TTSR到底解决了什么问题先说结论TTSRTexture Transformer Network for Image Super-Resolution是CVPR 2020的图像超分辨率方向工作核心解决的是“参考图像超分”Reference-based Super-Resolution任务。什么叫参考图像超分就是给你一张模糊的低分辨率目标图再给你一张或多张内容相关的高分辨率参考图比如同一场景不同视角、相似纹理的样本图让模型把参考图里的高清纹理细节“搬”到目标图上去。我当年第一次接触这个方向时也觉得奇怪——超分不就是从低分辨率图里自己脑补细节吗为什么还需要额外的参考图后来实际做实验才明白纯粹的单图超分SRCNN、EDSR、RCAN这些本质上是在做“预测”模型只能从训练数据里学到的统计先验来猜测缺失的高频信息。这种猜测在脸、建筑边缘这类结构信息上效果还行但遇到草地、布料、皮肤纹理这种高频重复模式出来的结果往往“平滑得过分”——细节糊成一团放大看像塑料。参考图像超分的思路就直白多了既然我手头可能恰好有一张同场景的高清图为什么不直接从中提取纹理来用呢比如你在拍一张低分辨率的建筑物正面而手头恰好有同一栋楼的侧面高清图立面砖块的纹理规律完全可以借用。TTSR就是2018到2020年这个方向上最有代表性的工作之一它用Transformer的思路把“从参考图中找对应纹理”这件事做得非常优雅在当时的DIV8K、CUFID等数据集上把PSNR和SSIM都刷到了SOTA。这个工作适合谁来读如果你是做图像生成、底层视觉、或者已经在做超分但是对怎么引入外部信息参考图、文本描述、音频特征感兴趣的研究者TTSR的设计思路非常值得拆开看。即使你不做超分它里面“如何用注意力机制做跨图像的信息迁移”这个核心模块对做图像编辑、风格迁移、视频插帧的人也有很强的参考意义。2. 先拆解整体设计与思路为什么是Transformer而不是别的2.1 参考图超分的最大难点怎么找到“该借的纹理”要理解TTSR的设计动机先得回到参考图超分最核心的难点上。给定目标低分辨率图LR和参考图Ref模型要做的不是简单地把Ref整张图叠加到LR上而是要“挑着用”——Ref里可能有大量区域和LR完全不相关只有某些局部纹理是能用的。早期参考超分方法比如2018年的CrossNet做法比较笨把LR和Ref在特征层面上简单融合或者用光流做对齐后再拼接。这样做有两个硬伤一是光流在纹理重复区域容易算错二是网络缺乏一个“显式的、可解释的”机制告诉模型具体去参考哪里。换句话说整个参考过程是隐式的模型自己也不知道该参照哪里效果自然不稳定。TTSR作者的切入点非常清晰把“找参考”显式建模成一个“查询-检索”的过程。这恰好是NLP里Transformer最擅长的事——Query查询向量和Key索引向量做相似度匹配再根据匹配分数对Value内容向量做加权求和。放到超分场景里Query就是LR图像里每个局部区域的特征Key和Value都来自Ref图像的特征图相似度高的位置就获得更高的注意力权重从而把该位置的纹理“搬”过来。2.2 整体网络架构一个端到端的多阶段结构TTSR整体是一个端到端的可微框架输入是LR和Ref输出是超分结果SR。整个流程可以拆成四条主线第一LR和Ref分别经过一个权值共享的特征提取主干基于EDSR的残差块堆叠得到多尺度的特征图。注意这里权值共享很关键——如果两个分支的网络参数不一致提取到的特征就不在同一个语义空间里后面的注意力匹配就失去了意义。第二特征提取主干输出的特征经过Transformer模块的核心计算得到融合了参考纹理的特征图。这里TTSR没有直接用单尺度特征而是用了多尺度注意力融合后面我会详细讲。第三融合后的特征经过一个重建子网络也是残差模块堆叠逐步上采样恢复分辨率。第四为了让参考纹理迁移得更准确作者设计了一个跨尺度的一致性损失强制要求不同尺度下的注意力图保持一致。这个流程看起来不复杂但每一个设计决策背后都有对应的痛点。比如为什么最后要做多尺度因为在超分任务里LR和Ref的纹理可能处于不同的尺度——LR里的某个纹理在Ref里可能大一圈也可能小一圈。只在一个尺度上做匹配必然漏掉对不齐的情况。TTSR的做法是让每个尺度都算一次注意力相邻尺度的注意力计算结果互相作为先验后一个尺度在前一个尺度的注意力图指导下计算这相当于给匹配加了一个“由粗到精”的路径。2.3 四大核心模块逐一看每个模块都回答一个为什么TTSR原论文把核心设计归纳为四个模块我按自己的理解重新组织一下因为这四个模块其实是在回答四个问题**可学习纹理提取器Learnable Texture Extractor**回答的是“特征怎么提才最适合纹理匹配”。作者没有直接用VGG特征或主干网络的最后一层特征而是用了一组专门训练的卷积层来提取“纹理特征”。我自己的理解是这个提取器训练的时候是被注意力一致性和重建损失共同约束的所以它学到的特征不是泛泛的语义特征而是“对纹理相似度判别最有利”的特征——同一个物体即使光照变了、视角偏了在它看来依然相似。**相关性嵌入模块Relevance Embedding Module**回答的是“LR和Ref的对应关系怎么算”。这一模块把LR特征作为Query和Ref特征作为Key做点积相似度计算然后沿着空间维度做softmax得到一个注意力热力图每个LR位置都对应Ref所有位置的匹配分数。这里有一个细节TTSR计算的注意力图并不是一个单一的矩阵而是按通道维度拆成多个head的类似Multi-Head Attention每个head关注不同的纹理维度——有的head在匹配颜色纹理有的在匹配结构边缘这个设计本质上就是Transformer里的多头注意力机制只是作者换了个名字。**硬注意力模块Hard Attention**回答的是“哪些位置的纹理可以100%直接搬”。在相关性计算之后作者取每个LR位置在Ref中相似度最大的那个位置把该位置的Ref特征直接做Transfer。这就是硬注意力——一个0/1的掩码决定“搬还是不搬”。我当时第一次看到这里觉得有点惊讶因为这相当于做了一个离散的选择但论文里说得很清楚只有相似度足够高的区域才有信心做硬迁移那些不够确定的位置交给软注意力去平滑处理。**软注意力模块Soft Attention**回答的是“不确定的位置怎么稳妥地搬”。软注意力就是标准的加权求和——每个LR位置的输出特征等于所有Ref位置特征按注意力分数加权平均。硬注意力保证了纹理的清晰度和真实感软注意力保证了平滑性和容错性两者配合才能既清晰又不产生突兀的拼接伪影。这四个模块加在一起才构成完整的TTSR纹理迁移流程缺一个效果都会明显打折。3. 核心机制深度拆解注意力计算和损失函数是怎么设计的3.1 特征和注意力的形状到底长什么样为了后文实操方便我先固定一套符号。假设LR和Ref经过特征提取器之后得到特征图F_lr和F_ref形状都是[H, W, C]其中H、W是特征图的空间尺寸通常比输入图像小几倍C是通道数。为了做注意力计算先把F_lr和F_ref都reshape成[H*W, C]的形状。Relevance Embedding这一步做的运算是R softmax((W_q F_lr) * (W_k F_ref)^T / sqrt(C))其中W_q和W_k是1x1卷积或线性层负责把特征做线性变换。标准Transformer里Query和Key的投影维度是固定的原论文里设置了4个head每个head在各自的子空间里算注意力分数。R的结果是一个形状为[H*W, HW_ref]的矩阵每一行是LR某个位置对所有Ref位置的匹配分数。Hard Attention的做法是每行取argmax得到一个one-hot向量H_att。然后直接把H_att和Ref特征做矩阵乘法得到硬注意力下的迁移特征F_harF_har H_att * (W_v F_ref)Soft Attention则是直接拿R作为权重对Ref的Value特征做加权求和F_soft R * (W_v F_ref)最后网络把F_har和F_soft拼接concat后送入后续重建层。这里硬注意力和软注意力是并行的而不是串联的。3.2 跨尺度注意力一致性这个设计容易被忽略但极其关键TTSR的另一个隐藏重点是多尺度注意力一致性。作者训练网络时并不是只在单一尺度上做TTSR操作而是把LR和Ref分别下采样到0.75倍和0.5倍然后每个尺度都算一轮注意力。这个做法的一个直接好处是小尺度的注意力计算相对更全局大尺度的注意力计算相对更局部两者内外互相约束。为了让不同尺度算出来的注意力图保持一致作者设计了一个损失函数来约束小尺度注意力图双线性插值放大到当前尺度后和大尺度注意力图之间的差值要尽量小。如果某个纹理在0.5倍尺度上匹配到了Ref的A位置那么在0.75倍和1.0倍尺度上也应该匹配到A附近的区域否则就说明匹配不稳定。我实际复现论文时对这个损失函数感受最深如果不加这个一致性约束单尺度的注意力图会出现明显的“闪烁感”也就是LR中相邻的两个像素注意力对应的Ref位置突然跳得很远这种在图像上表现为局部纹理错乱。而加了约束后整个注意力图的空间连续性会显著改善。这也是TTSR相比同期工作效果更稳的核心原因之一。3.3 损失函数三个组成部分的权重怎么配TTSR的总损失是三项损失的加权和L_total L_rec alpha * L_attention beta * L_reconstruction第一项L_rec是常规的像素重建损失L1 loss或MSE loss度量SR和GT之间的差异。第二项L_attention就是上面说的跨尺度注意力一致性损失。第三项L_reconstruction在论文里是指感知损失Perceptual Loss——用VGG网络中间层特征来计算SR和GT的相似度这个损失能让生成结果的纹理看起来更自然而不只是PSNR数字更高。原论文里alpha和beta都不是固定不变的作者训练时用了逐渐增大的策略——前期让重建损失主导确保结构稳定后期逐步提高感知损失的权重来丰富纹理细节。我自己复现时发现这个节奏很重要一上来就把感知损失的权重拉满训练很容易震荡甚至直接崩掉。4. 实操复现TTSR环境准备、训练配置和踩坑记录4.1 数据集和预处理这一步做不好后面全白搭参考图超分的数据集和普通超分不太一样。普通的DIV2K每张图都是独立样本而参考超分需要成对的样本组——低分辨率图像、对应的高分辨率GT、以及参考图像。TTSR论文主要在以下数据集上验证效果CUFID包含约1.2万个样本每个样本组由一张低分辨率图、一张高分辨率GT和多个不同视角的参考图组成拍摄场景是校园和城市建筑比较经典。SUN8080个场景、约1.4万个样本参考图是同一场景不同视角的图场景更丰富。Urban100虽然是单图超分数据集但建筑重复纹理多TTSR也拿来做了一些交叉验证。DIV8K8K分辨率的高清视频帧常用于训练大规模超分模型。如果你只是为了快速验证代码是否能跑通我建议先拿CUFID的小子集做大概两三百个batch就能看出训练趋势。数据预处理有个细节参考图Ref不能随便从数据集里取必须保证Ref的空间分辨率不低于GT的分辨率否则从Ref里提取的纹理本身就是模糊的迁移过去没有意义。我之前踩过这个坑——为了图省事直接从低分辨率图上采样一下当Ref结果训练了很久都没有正收益后来才意识到Ref的“信噪比”必须足够高。4.2 训练参数配置一张卡能跑两张卡更舒服TTSR的代码基于PyTorch作者开源过训练和测试代码整体对显存的要求不高但也不低。我当时用的配置是显卡单张12G显存的卡类似1080Ti或2080Ti级别Batch size164倍超分输入LR大小为48x48时显存刚好够初始学习率1e-4用Adam优化器训练迭代约50万步主干特征提取器用了EDSR的残差块结构depth16width64数据增强随机翻转、随机旋转90度、随机裁剪这里特别注意如果batch size太大显存不够优先考虑减小LR的输入尺寸而不是减小batch size因为TTSR的注意力计算是LR所有位置对Ref所有位置做匹配空间尺寸直接决定注意力矩阵的大小内存消耗随空间分辨率平方增长。48x48输入在12G卡上还算宽裕但到64x64就要小心了。4.3 我踩过的三个典型训练问题**问题一注意力图发灰。**训练到中期如果把注意力图可视化出来会发现几乎每个位置都在均匀地关注Ref的所有区域类似于“注意力坍缩”。出现这种问题的原因是softmax的温度太高也就是相关性分数分布太平滑。解决办法有两个一是把特征投影维度W_q和W_k的L2范数约束大一点增强区分度二是在softmax前对相关性分数乘一个缩放系数类似Transformer里的1/sqrt(d)但可以比这个值更激进。我实测把缩放系数从默认的0.125调大到0.2注意力图在10K步之后就开始分出明显的区域了。**问题二硬注意力区域有大量颜色断裂。**如果硬注意力把Ref中光照完全不同的纹理路径强行搬过来合成结果会在边界处出现明显的颜色块。后来我重新读论文才发现作者提取Ref特征的时候做了天然的颜色归一化——实际操作中给Ref分支多加了一个Instance Normalization层让特征更强调纹理结构信息而降低颜色信息。加上这个之后颜色断裂的情况明显好转。**问题三训练Loss降了但验证集PSNR不涨。**这个是最磨人的。排查后发现是感知损失的权重过高导致模型过度优化VGG特征空间的相似度反而牺牲了像素级别的精度。最终我把感知损失的权重下调到原来的四分之一并且改成前10万步不开启感知损失20万步之后再慢慢加PSNR才重新开始稳步上升。训练这种事很多时候不是越复杂越好而是“慢热”才稳。5. 复现过程中的关键经验与实用技巧5.1 硬件显存不够时怎么调整注意力计算TTSR的注意力机制虽然漂亮但真正部署到工程里时显存和时间的消耗是绕不开的问题。假设LR特征图是48x48Ref特征图是48x48那注意力矩阵就是2304乘以2304大概530万个元素。如果是单精度float这还勉强能接受但一旦尺度增大到96x96注意力矩阵就是9216乘以9216超过8000万元素单卡基本跑不动。如果你在显存受限的机器上跑TTSR我的建议是不要让LR的每个位置都和Ref的每个位置算注意力而是先用全局注意力定位到Ref的若干个候选区域比如top-k个相似区域再只在候选区域内部做细粒度匹配。这样注意力矩阵的大小从全局平方级降到局部线性级显存占用直接少一个数量级。精度会有轻微损失但工程上值得。5.2 参考图质量对结果的敏感性你以为它能“无中生有”其实它是“以好充好”做参考超分的人最容易产生的一个误解是有了TTSR随便拿一张参考图都能超分得很好。实际完全不是这样。TTSR的注意力机制只是“搬运工”它无法创造参考图里没有的纹理信息。如果你的参考图本身是模糊的、过曝的、或者纹理分布和目标图差异极大那么搬过来的纹理反而是有害的。我做过一个极端测试同一张LR分别用三张相关程度递减的参考图去跑TTSR。第一张是完美同场景高清图PSNR碱幅提升高达1.5dB甚至2dB第二张是同类别但不同具体物体比如参考图是另一栋楼的砖墙提升降到约0.6dB第三张是完全不相关的场景结果比不带参考图的单图超分还差。这说明TTSR对参考图的“可用性”是有自发判断的——注意力分数整体偏低时迁移的纹理占比自然减少相当于自动降级为单图超分。但也正因为这样低质量的参考图实际上是在“拖后腿”。5.3 注意力图可视化判断训练健康度的第一手段我真的建议每一个复现TTSR的人都要养成把注意力图可视化出来的习惯。训练过程中每5000步存一次注意力图你会发现它有着明显的变化规律训练早期0-5K步注意力图到处都是噪声注意力区域呈颗粒状分布说明模型还没学会什么是“纹理匹配”。中期10K-30K步注意力图开始呈现明显的结构相关性——同一个物体结构上的像素会映射到Ref的同一片区域。后期50K步之后注意力区域开始“收缩”也就是匹配越来越精确硬注意力的置信区域占比持续上升。如果注意力图一直停留在颗粒状分布、没有形成连续区域说明网络训练有问题多半是特征提取器没学好这时候调学习率也好、调损失权重也好都效果不大得从特征提取器的结构和初始化入手。我自己后来实践中把特征提取器的主干换成在ImageNet上预训练过的模型而不是随机初始化训练初期的匹配质量就明显提升——预训练特征本身已经具备良好的语义一致性。6. 和同期的超分方案比TTSR赢在哪、输在哪6.1 与单图超分模型的对比单图超分的代表是RCAN、SAN这些它们的特点是只从LR本身出发用非常深的网络和精巧的注意力机制来恢复高频信息。TTSR和它们对比有两个明显的不同第一输入信息量不同。单图超分的上限受制于LR本身的信息量——如果LR里某个纹理区域完全缺失了比如被压缩成色块你再深的网络也猜不出原始的纹理规律。而TTSR有Ref作为额外的信息源LR丢掉的细节可以从Ref里找到并补回来。所以TTSR在纹理丰富区的优势最明显在平坦区域天空、白墙反而和单图超分差不多。第二推理成本不同。单图超分只需要一次前向传播而TTSR至少需要同时前向传播LR和Ref两个分支注意力计算的开销又是平方级别。在相同输入尺寸下TTSR的推理速度大概比RCAN慢3到5倍。如果你做的是视频实时超分或者移动端超分这个成本可能就不太能接受了。我当时在DIV8K数据集上做过对比实验4倍超分的情况下TTSR在纹理密集的图块上比RCAN提升了约0.8dB但在平滑区域上差距只在0.2dB以内。这验证了TTSR的收益确实是“区域相关性”的——哪里纹理复杂哪里受益最大。6.2 与其他参考超分方法的对比TTSR之前最典型的参考超分方法是CrossNet它用光流把Ref变形到LR的角度再融合。这种方式的问题在于光流在纹理重复区域容易匹配错乱变形后的Ref反而引入了伪影。TTSR用注意力替代光流直接从特征层面做“软对齐”——不需要精确的逐像素对齐而是通过加权求和自适应地组合Ref里的有用信息这一改进非常有效。后来还有一批工作沿着注意力这条路线继续深挖比如将TTSR的跨尺度注意力扩展为跨尺度可变形注意力或者直接把TTSR的纹理迁移模块嵌入到扩散模型里作为条件控制模块。可以说TTSR是这一系列后续工作的“原点”。6.3 客观评价TTSR的局限性TTSR最明显的短板在三个地方首先匹配的精确度受到特征提取器感受野的限制。如果LR中的纹理尺度特别大占了图像1/4面积的墙面纹理单层特征的感受野不够注意力匹配容易“顾头不顾尾”导致同一个大纹理区域被拆成多个碎片分别匹配到Ref的不同位置最终合成结果会有隐隐的接缝。其次TTSR没有显式建模大视角变化。如果Ref和LR之间的视差太大比如LR是正面视角Ref是侧面90度视角即使注意力算到了正确位置Ref上对应的纹理在透视上也不一致这时候迁移过来只会带来错误的结构信息。最后TTSR对每张LR只需要一张Ref这是一个硬约束。实际生活中你可能有多张候选参考图但直接同时输入多张会让注意力计算复杂度成倍上涨。后来的工作比如用图神经网络聚合多参考图信息也是从这个痛点切入的。7. TTSR的后续演化与实际应用落地思路7.1 从学术论文到产业应用的三个方向学术论文的价值在于提供思路产业应用的价值在于解决问题。TTSR虽然是一个偏学术的工作但它带动的几个方向在产业界是能直接落地的第一个方向是商品图像增强。电商平台拍摄的商品图往往存在分辨率不足的问题尤其是纹理繁复的织物、木材、石材。如果同一商品有不同角度拍摄的精修高清大图作为参考图TTSR就能把低清局部图的纹理细节补起来。我见过一些跨境电商团队就是拿这套思路做商品主图增强的效果比单图超分好很多。第二个方向是视频监控和遥感图像的“参考增强”。同一个监控机位在不同时间拍摄的帧清晰度往往不一样——某一帧天气好、光线好细节清晰另一帧恰好有雾或光线差画面模糊。用清晰的帧作为参考图增强模糊帧的细节这在工程上是完全合理的应用场景。遥感图像同理不同时间的同一地块影像可以直接互为参考。第三个方向是虚拟现实中的纹理复用。三维场景重建时同一个物体表面在不同视角下的纹理清晰度可能不同。TTSR可以把高清视角的纹理迁移到低清视角渲染结果上这样既不用重跑一遍全局重建又能快速提升画面的纹理质量。我在和做三维重建的朋友聊的时候确认过这个思路在目前的NeRF/3D Gaussian相关流程里都有变体被用上了。7.2 模型轻量化与压缩的实践方向TTSR原始模型参数大约在4000万级别视主干和重建分支的设置而定做实验没问题但要放进现在的移动端或者Web端推理必须做压缩。我个人的实践经验是优先剪枝特征提取器和重建模块的通道数暂时不动注意力模块的结构因为注意力机制本身对通道数不算敏感——把注意力模块的投影维度从64降到32PSNR损失约0.1dB但参数量下降明显。另一个更激进的方案是直接把TTSR的注意力特征迁移能力“蒸馏”到一个单分支网络上。具体做法是用TTSR在原训练集上生成一批高质量的伪高清图Ref-enhanced SR图然后让一个学生网络可以是轻量单图超分网络去拟合这些伪高清图。这样在推理时就不需要再输入Ref图了——虽然理论上限比带Ref的原版TTSR低一些但部署成本极低而且比同规模的单图超分网络效果好得多。这种“用参考图离线提特征、在线无参考推理”的思路在工程落地中相当好用。7.3 对我个人项目实践的启发我自己用TTSR最多的场景其实不是纯超分而是在图像修复的前处理环节。比如一幅老照片缺失了一大块区域传统修复方法只能靠周围纹理推测手头恰好有类似的纹理样本图时我把TTSR的纹理迁移能力稍微改了一下把“从LR上采样恢复高频”改成了“从样本图中迁移缺失纹理”效果出乎意料地好。这种思路上的微调并不复杂——把Query换成缺失区域周围的特征把Key和Value换成样本图特征其余全部复用。这也是我特别推荐读者去做的不要只按论文原意理解TTSR试着把它的注意力迁移模块当成一个通用组件放进你自己的重建、修复、编辑流程里。8. 从复现到改进给初学者的三点务实建议最后说点值得长期留存的个人经验。第一做超分方向的实验一定要有稳定的评测习惯。PSNR、SSIM这些指标不要只算测试集全量平均一定要按纹理密集区和平滑区分开统计否则你看不出来TTSR的真实优势在哪。我是吃了这个亏的——前面几次实验明明PSNR涨了0.3dB但主观视觉上几乎看不出变化后来按区域分开统计才发现平滑区的提升占了绝大多数纹理区的提升微不足道。跑偏了很久才纠回来。第二注意力机制的可解释性是一个巨大的财富。TTSR的注意力图帮助你理解网络到底在关注什么。不要仅仅把它当成训练日志里的可视化手段当成调试工作流中最重要的排查工具来用。遇到“Loss下降但输出质量不涨”这类问题先看注意力图而不是反复调损失函数权重大概率能更快找到原因。第三所有超分模型都是“戴着镣铐跳舞”。模型能恢复的细节上限永远由输入信息和参考信息的质量共同决定结构设计只能决定利用率的上限。花时间在“如何获得更好的参考图”这件事上收益往往比花时间在“进一步模型调参”上更大。TTSR尤其如此——它是参考超分这个方向的标杆之一但真正能发挥它最大威力的永远是精心挑选和组织过的参考数据。做图像超分这几年来我最大的体会是这个领域卷的不是谁的网络结构更复杂而是谁对图像数据本身理解得更深。TTSR教会我的最重要的一件事就是“信息从哪里来比信息怎么融合更重要”。每次遇到一个看起来很复杂的模型我都会先问一句它到底从哪里获取了额外的信息想清楚这个问题基本就能抓住这个模型的灵魂了。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑