跳转至

CroCoDiLight: Repurposing Cross-View Completion Encoders for Relighting

会议: ICLR 2026
OpenReview: https://openreview.net/forum?id=GKvb3HCyNk
代码: https://github.com/alistairfoggin/CroCoDiLight
领域: 图像生成 / 重光照 / 本征图像分解
关键词: 重光照, 跨视角补全 (CroCo), 光照解耦, 阴影去除, 反照率估计, 自监督

一句话总结

本文揭示几何视觉预训练模型 CroCo 的隐空间里其实已经隐式编码了光照信息,于是用极小数据(比 CroCo 少两个数量级)把其 patch 隐表示解耦成"一个全局光照向量 + 逐 patch 本征向量",从而免训练地撬动重光照、阴影去除、反照率估计等一系列光度任务。

研究背景与动机

领域现状:跨视角补全(Cross-view Completion, CroCo)是近年很火的 3D 几何视觉预训练范式——给定同一场景两个不同视角的图像,遮住其中一张的若干 patch,让模型借助另一张补全。它被证明对立体深度、光流、点云预测(DUSt3R / MASt3R)等纯几何下游任务非常有效。

现有痛点:而光度类任务(重光照、阴影去除、本征分解)长期受困于训练数据稀缺——像素对齐、仅光照变化的成对图像极难采集,合成数据又有 sim-to-real gap,导致这些任务往往要为每个 benchmark 单独训练、泛化性差。

核心矛盾:CroCo 的训练对里两张图常常光照不同,模型要补全被遮 patch,就必须隐式地"估计目标光照→把内容去光照→几何投影→再按目标光照重新打光"。换句话说,CroCo 是少有的在预训练目标里就被迫学会重光照的视觉模型,但这份光度知识被埋在 patch embedding 里没人用。

本文目标:验证"CroCo 隐空间已含光照理解"这一假设,并把它显式抽取出来变成可操作的光照隐空间。

核心 idea【提取而非从零学】 既然光度知识已存在于冻结的 CroCo 编码器中,就只需用很小的数据训两个轻量 transformer 把隐表示解耦成光照与本征两部分,再重组回 CroCo 隐空间,便能在光照隐空间里做插值、迁移、阴影去除、反照率估计。

方法详解

整体框架

方法由四个组件串成一条"编码→解光照→换光照→重光照→解码"的管线:冻结的 CroCo v2 编码器 \(E\) 把图像编成 patch 隐 \(z\);解光照 transformer \(I\)\(z\) 拆成一个全局光照隐 \(s_0\) 和逐 patch 本征隐 \(\{s_1..s_N\}\);重光照 transformer \(R\) 再把(可替换的)光照隐与本征隐组合回 CroCo 隐空间 \(z'\);最后一个单视角解码器 \(D\)\(z'\) 高保真还原成 RGB。训练时用"同视角、不同光照"的对齐图像对来约束这一解耦。

flowchart LR
    X[输入图 X] --> E[冻结 CroCo 编码器 E]
    E -->|patch 隐 z| I[解光照 Transformer I]
    I -->|光照隐 s0| SW{换光照}
    I -->|本征隐 s1..sN| SW
    SW --> R[重光照 Transformer R]
    R -->|CroCo 隐 z'| D[单视角解码器 D]
    D --> Y[输出 RGB]

关键设计

1. 单视角解码器 \(D\):先把 CroCo 隐空间变成可看的图像。 原始 CroCo 解码器是双目的,只监督被遮 patch 的重建,单视角解码画质很差。作者为此单独训一个 12 层、16 头自注意力 + DPT head 的解码器,用自编码目标——冻结 CroCo 编码器给出隐 \(z\),让解码器还原原图 \(X' = D(z)\)。损失为感知损失与 MSE 的加权:\(L_{img}=\lambda L_{LPIPS}+(1-\lambda)L_{MSE}\),取 \(\lambda=0.5\)。这一步不需要成对数据,可在任意图像集(用了 ImageNet)上训,等于先打通"隐空间↔RGB"的高保真通道。

2. 解光照 / 重光照双 transformer:把光照塞进一个瓶颈向量。 解光照时在 patch 隐前面追加一个可学习 query \(z_0\)(赋予一个不会与真实 patch 冲突的位置 \(-1\) 的 RoPE 编码),送入 8 层自注意力的 \(I\),输出 \(\hat{s}=I(\hat{z})\),其中 \(s_0\) 承载整图光照、其余 \(s_i\) 是去掉光照影响的本征 patch。重光照 transformer \(R\) 架构与 \(I\) 完全相同,把光照隐与本征隐重新纠缠回 CroCo 隐 \(\hat{z}'=R(\hat{s})\),只保留 patch 部分 \(z'\) 解码。关键在于输入 \(R\) 的光照隐 \(s_0\) 不必来自原图——换成另一张图的光照隐,就实现了重光照。

3. 成对图像的双重自监督:本征一致 + 交叉光照。 训练只用"同视角、像素对齐、光照不同"的图像对 \(X_A, X_B\)。一方面,两图的本征 patch 应当一致(几何材质不变),用 MSE 约束 \(L_{intrinsic}=\frac{1}{N}\sum_i \|s_i^A - s_i^B\|^2\);另一方面,用 B 的光照隐去点亮 A 的本征隐,解码后应当还原出 B:\(X'_{A,B}=D(R(\{s_0^B, s_1^A,...,s_N^A\}))\),对称地得到 \(X'_{B,A}\),构成交叉光照损失 \(L_{cross\text{-}light}=L_{img}(X_A, X'_{B,A})+L_{img}(X_B, X'_{A,B})\)。两个损失一推一拉,迫使光照信息被瓶颈进 \(s_0\)、本征隐对光照不变。

4. 光照隐空间里的下游变换 \(S\) / \(A\):把任务都化成"换一个光照隐"。 既然光照与阴影都被编码进 \(s_0\),下游任务就退化为学一个 \(s_0\to s_0'\) 的映射。阴影去除模型 \(S\)(架构同 \(R\)、用 \(R\) 权重初始化)把含阴影光照隐映成无阴影光照隐,以无阴影图编码出的光照隐为 MSE 监督;反照率估计模型 \(A\) 同理把 \(s_0\) 映成"反照率光照隐"。训练时除 \(S\)/\(A\) 外全部冻结,再用 \(R\) 重组、\(D\) 解码。此外,由于光照隐工作在图像空间,对定相机时间序列(timelapse)可直接做光照插值、光照稳定化与时序上采样;高分辨率推理则用滑窗切成 \(448\times448\) tile、逐 tile 配光照隐再混合。

实验关键数据

主实验:阴影去除(ISTD+ / SRD,无需 mask)

方法 Mask ISTD+ SSIM↑ ISTD+ PSNR↑ SRD SSIM↑ SRD PSNR↑
HomoFormer (有 mask) Yes 0.968 35.26 0.955 35.33
OmniSR No 0.966 33.30 0.941 31.96
StableShadowRemoval No 0.968 35.10 0.944 33.24
CroCoDiLight (S) No 0.929 30.17 0.931 30.01
CroCoDiLight (oracle) No 0.936 33.41 0.937 32.47

指标上未达 SOTA(作者指出主要被全图细微色偏拖累),但作为联合训练、不为单一 benchmark 微调的通用模型已具竞争力;oracle(直接用无阴影图的光照隐)证明更优的隐空间映射确实存在。

反照率估计(IIW WHDR,未在 IIW 上训练)

方法 WHDR(%)↓
Ordinal Shading (2023) 24.9
IntrinsicDiffusion (2024) 17.9
CroCoDiLight 15.4
CroCoDiLight + 0.5 14.3

在"未训练于 IIW"的公平设定下取得 SOTA,反照率估计还只是副产物。

时序上采样(FloLPIPS↓)

方法 Clock Shadows Day-night Indoor Shadows
Image Space 0.309 0.041 0.950
Latent Space (Ours) 0.286 0.043 0.923

消融:CroCo 预训练到底有没有用

CroCo Pre-trained IIW WHDR↓ ISTD+ PSNR↑ SRD PSNR↑
✗ (简单编码器) 19.1% 29.71 29.87
✗ (随机权重) 27.7% 25.34 22.98
15.4% 30.17 30.01

关键发现

  • 预训练的 CroCo 编码器明显优于从零训的简单架构,而把 CroCo 架构随机初始化反而最差——说明增益来自 CroCo 学到的光度知识而非架构本身,直接坐实了核心假设。
  • 仅用 57k 图像对(36k 真实 + 21k 合成)即可完成解耦,比 CroCo v2 的 7M 对少两个数量级。

亮点与洞察

  • 视角新颖:第一次指出几何预训练目标 CroCo 因训练对存在光照差异,被迫隐式学会"去光照—重光照",把它从纯几何模型重新定位为光度模型,这是很漂亮的"模型已会、只需提取"叙事。
  • 统一性强:把重光照、阴影去除、反照率估计、时序插值统统归约为"在同一个光照隐空间里换/插一个向量",一个通用模型撑起多任务,无需逐 benchmark 微调。
  • 数据效率:用两个数量级更少的数据撬动光度任务,为数据稀缺的本征/光照研究提供了一条"借力几何预训练"的低成本路径。

局限与展望

  • 瓶颈太小损失锐利度:每个 tile 只用一个光照隐,压缩导致硬阴影难以重建,是 fidelity 与解耦之间的取舍。
  • 缺全局上下文:高分辨率滑窗逐 tile 处理会在阴影去除时产生色偏,这正是指标落后 SOTA 的主因。
  • 图像空间而非世界空间:像素对齐训练让光照在图像空间被提取,对错位敏感,且目前缺乏对重光照的精细控制(无法从任意图或文本条件指定光照)。
  • 展望:多光照隐 / 空间变化光照图、与其他预训练编码器对比、训练光照隐 mapper 引导视频插值、可控重光照等。

相关工作与启发

  • 重定位基础模型思路一脉相承:ViT 隐式会分割、扩散生成器隐式会单目深度(Marigold)/本征分解,本文把这套"挖掘隐式能力"的范式搬到了 CroCo 与光度任务上。
  • 与 UniRelight / Neural Gaffer / IC-Light / LumiNet 等生成式重光照不同,本文不追求生成新光照,而是解耦真实图像的光照以做插值与迁移,定义更清晰、更偏"理解"。
  • 启发:任何在预训练目标中"被迫"解决某子问题的模型,其隐空间都可能藏着可低成本提取的能力;解耦+重组的轻量适配范式值得推广到其他"隐式已会"的场景。

评分

  • 新颖性: ⭐⭐⭐⭐⭐ — "CroCo 隐式学会重光照"是极具洞察力的发现,并用消融严谨证实,叙事与切入角度都很出彩。
  • 实验充分度: ⭐⭐⭐⭐ — 覆盖阴影去除/反照率/时序插值三类任务并含关键消融;反照率达 SOTA,但阴影去除指标未领先,且对硬阴影/高分辨率色偏的分析多停留在定性。
  • 写作质量: ⭐⭐⭐⭐ — 假设—验证逻辑清晰,图 1 把"CroCo 隐式重光照"讲得很直观,方法描述完整可复现。
  • 价值: ⭐⭐⭐⭐ — 为数据稀缺的光度任务提供"借几何预训练"的通用低成本路线,代码开源,对重光照/本征分解社区有实际启发。