01 · 先读结论
SurfaceNet 用一次前向传播,把一张近似平面材质照片转换成 diffuse、normal、roughness、specular 四类 SVBRDF 图。它把逐像素监督与局部对抗学习结合,希望同时恢复细节,并利用没有材质真值的真实照片缩小 synthetic-to-real 差距。
真正的贡献:不是提出新的 BRDF,而是把共享多头 encoder–decoder、输入图像的多尺度 skip,以及 PatchGAN 材质先验组合起来。训练要用生成器和判别器;推理只用生成器,不做 diffusion 采样,不做 MaterialGAN 式测试时 latent 优化。[P §§1–3]
| 结论 | 论文证据 | 必须保留的边界 |
|---|---|---|
| 在 synthetic 测试上更准确 | Tables 1–2,五项 RMSE 均低于各自列出的 baseline | 分 flash / natural illumination;natural 比较把 roughness/specular 平均为空间同质参数 |
| PatchGAN 对细节有帮助 | Table 3 image discriminator → patch discriminator,全部五项下降 | 单次实验,无方差;感受野、参数量和全局分类方式也同时改变 |
| 真实图像适配有效 | Figure 8 的 qualitative 比较 | 真实域没有 ground truth 数值;加入真实图后,synthetic 五项 RMSE 全部变差 |
| 支持高分辨率 | 正文 Figure 7 展示 1024 × 1024;作者声称补充材料有 2048 × 2048 | 未取得独立补充材料;公开实现还存在非方形输入问题 |
复现警报:论文写 ResNet-101,公开代码使用 ResNet-50;论文的真实域训练是核心卖点,当前 trainer 却没有实现其实际训练路径。公开代码还采用不同 GAN loss、权重与默认训练配置。读论文结果和读仓库实现必须分层,不能直接把“官方代码”当成论文原始实验快照。

02 · 身份与固定版本
论文作者为 Giuseppe Vecchio、Simone Palazzo、Concetto Spampinato,单位为 University of Catania 的 PeRCeiVe Lab。固定阅读 arXiv 2107.11298v1,2021-07-23 提交,PDF 共 9 页,SHA256 为 1378dbc603ea1682ae9ec88162a2ca4afba062f17d8e1f35dbb2889fa1c21ad6。已有文件与固定公开 PDF 的 hash 已核对,不替换或改页码。
正式发表为 ICCV 2021;作者项目页与 CVF 引用给页码 12840–12848,IEEE 向 Crossref 注册的同一论文 DOI 10.1109/ICCV48922.2021.01260 对应页码为 12820–12828。这是两套出版索引的差异,不能把旧笔记中的 CVF 页码直接判错。arXiv metadata 给的 10.1109/ICCV48922.2021 不够精确,归档时应保留完整文章 DOI。[V][R]
全文未标明通讯作者;原 note 的 Concetto Spampinato 保留为末位候选、unverified。第一作者及机构已由原文确认,不凭顺序补出已核实通讯角色。旧 note 中 GAN / CNN 方法分类正确,主题里的 diffusion models 没有本文方法支持;原文仍完整保存,仅在追加与归档计划中建议复核。
本次确实读了什么
完整固定 PDF、其 arXiv HTML 和 TeX 源码包、作者项目页、官方 poster、官方 Git 仓库当前 commit 与关键历史代码。固定 PDF 没有附录;正文反复提到的 supplementary architecture / 2048 结果,没有出现在官方项目页入口、CVF 索引的附加链接或完整 arXiv source archive 中。源码包含两份重复主文目录,不含 supplement。因此不能声称已读到这份独立补充材料,也不虚构其层表。
本页涵盖固定论文全部 8 幅图和 4 张表;公开代码能补充实现细节,但属于后发、且有差异的实现。未启动模型、未训练、未执行官方 Python。浏览器 QA 按约定留待本地下载后;本轮只做内容、来源、数学源码、资源解码与文件完整性的静态验收。
03 · 为什么用局部对抗学习
SVBRDF capture 的目标不是把照片“变清晰”,而是估计可在新光照下重渲染的表面参数。照片同时混合了材质、法线、照明与相机响应:一块亮斑可能是浅色 diffuse、高 specular、低 roughness 或照明方向。只有一张图时无法唯一解开,必须依赖材质先验。
逐像素 L1 / L2 监督提供配准与数值锚点,但多解情况下常得到平均化、模糊的图。PatchGAN 学习局部多通道材质块是否接近训练真值分布,能补充细节、边缘和跨参数关联。材料通常具有局部纹理结构,所以作者认为局部判别比只给整图一个真假分数更合适。[P §§1–3]
关键区别:“更像真实材质图”不自动等于“这张输入照片的真实材质”。判别器能鼓励锐利结构,也能奖励不存在于实物的高频细节。L1 与 MS-SSIM 在 synthetic 配对数据上负责约束输入与输出对应,真实照片没有对应真值,因而更需要谨慎评估幻觉。
与 baseline 的关系
- Deschaintre 2018 [8]:单图、rendering-aware 网络,用渲染误差监督参数;SurfaceNet 主要以材质图监督与对抗监督取代这一训练途径。
- Deschaintre 2019 [9]:支持多图的网络,本文拿它做单图设置比较;不能据此说它在多视角优势场景下也不如本文。
- Gao 2019 [14]:高分辨率、多输入数量的 inverse rendering 路线,利用 latent / rendering 优化;本文强调直接估计,不依赖测试时迭代优化。
- Li 2017 [19]:自然光照单照片估计,diffuse / normal 空间变化,而 roughness / specular 同质;Table 2 因此缩减了本文相应输出。
- MaterialGAN [15]:学材质生成 prior,再优化 latent 匹配观察;SurfaceNet 的 GAN 是训练正则,推理仍是条件回归器,两者不能因都用 GAN 就视为同一流程。
引用编号在正式会议版可能变化;本页所有 [8]/[9]/[14]/[19] 都固定对应用户的 arXiv v1,不将另一版本的编号混入原表。
04 · 输入、四张参数图与物理边界
输入为单张 RGB 材质照片 \(\mathbf I\in\mathbb R^{H\times W\times3}\),表面大致平面,非平面的细节由 normal map 表示。输出是:
| 参数图 | 通道 | 解释 | 需要避免的误解 |
|---|---|---|---|
| Diffuse d | 3 | 漫反射颜色 / albedo | 不应残留输入光照和高光 |
| Normal n | 3 | 表面局部朝向、凹凸细节 | 不是完整三维几何、厚度或可见外轮廓 |
| Roughness r | 1 | 控制微表面高光展宽 | 不是 diffuse 纹理对比度,也不是金属度 |
| Specular s | 3 | 镜面反射颜色参数 | 不能直接当 metallic map;specular workflow 与 metalness workflow 不同 |
论文使用 Cook–Torrance 和 GGX microfacet distribution,认为其它能由参数图描述的反射模型也可适用。但只实际验证了这组参数与数据,不能把“可扩展”写成对各向异性、透射、次表面或多层涂层都已验证。
为了理解这些参数的作用,常用微表面反射形式可写为下式。它是物理解释,不是论文新提出的训练公式;具体 renderer 的 roughness 转换和能量分配约定仍需匹配数据生成器:
其中 h 为半角向量,D 控制微表面朝向分布,F 为 Fresnel 项,Ggeom 表示遮蔽。这个式子说明单张图里 roughness、specular、normal 和 lighting 可以互相补偿:输入重渲染相似,不保证每张材质图正确。
训练并没有显式预测光源、环境贴图、相机响应、UV 或程序图。renderer 主要用于制作 synthetic 数据与评测重渲染,不在 SurfaceNet 的论文 loss 中作可微训练闭环。公开仓库也没有对应 renderer 代码,因此不能把“无 rendering loss”误写为“论文完全不需要渲染”。
05 · Generator:共享特征与输入图像 skip

论文的 generator 以 DeepLabV3 风格的 ResNet-101 encoder + ASPP 提取多尺度信息,256 × 256 输入变成 2048 × 32 × 32 特征,再由 ASPP 投影为 256 通道。三个可学习上采样块依次恢复 64、128、256 空间尺寸;每一层都拼接相应下采样的原始 RGB。最后共享 256 × 256 × 256 特征,再用四个独立 head 输出材质图。[P §3.1, Fig.2]
方括号为通道拼接,每次 256 特征通道加 3 个 RGB 通道成为 259。这里的 skip 是原始图像的多尺度副本,不是通常 U-Net 中 encoder 对应层的特征 skip。原图中的高频纹理可直接回到 decoder,但光照和高光也一起被送入,模型需要学会分离。
ASPP 的作用是并行捕捉不同尺度上下文,让同一材质的局部结构与较大范围色彩关联起来;论文并未在主文列 dilation rates、每个分支层表和完整初始化。不能把某个 torchvision 版本的默认值追认为作者固定设置。
| 阶段 | 论文 | 当前代码 |
|---|---|---|
| Encoder | ResNet-101 | resnet50,pretrained=True,replace_stride_with_dilation=[False, True, True] |
| Bottleneck | ASPP + 256 通道 | DeepLabHead(2048, 256) |
| Upsample,重复 3 次 | 转置卷积 + residual | 4×4 ConvTranspose,stride 2,padding 1;BN、ReLU、BasicBlock |
| 最终同尺寸层 | conv + BN + ReLU,图中共享 256 通道 | 3×3 ConvTranspose,stride 1,padding 1;BN、ReLU、BasicBlock |
| 四个 heads | 独立参数图预测 | 1×1 Conv,输出 3 / 3 / 1 / 3 通道 |
| 输出处理 | 主文没有完整规定 | center crop 回输入尺寸;clamp 到 [-1,1],没有显式 normal unit normalization |
这不是“大模型 / 小模型”两种由论文分别评测的配置:主表只报告一个 SurfaceNet。ResNet-50 是公开仓库实现与论文描述的差别,不能给它分配论文 ResNet-101 的得分。多数运算和 encoder 共享,head 很小,这有利于四类参数之间复用线索,但没有显式物理一致性约束。
高分辨率为何可行,又为何不能无条件保证
全卷积模型不把训练分辨率写死在全连接层,因此可以扩大空间输入。但 receptive field 的像素尺度、ASPP 的全局统计、显存和材质尺度分布都会改变。256² 到 2048² 的输出像素数增加 64 倍,不代表质量和延时保持不变。作者没有报告这组变化的数值曲线或 GPU memory。
06 · Patch discriminator 到底看见什么
正文公式把判别器简写为 D(M),容易让人以为它只看材质图。Figure 1 明确画出 estimated maps + input 和 ground truth maps + input 的拼接,当前代码也把 RGB 与四张 maps 一起输入,共 3 + 10 = 13 通道。因此它是 image-conditioned material discriminator,不能只讨论无条件材质边缘分布。[P Fig.1][C discriminator / trainer]
“real”在判别器标签中意为 ground-truth pair,而该 ground truth 主要来自 synthetic 数据;不要把 D 的 real label 和真实照片域混为一谈。无标注真实照片产生的预测是 fake pair,仍试图让 D 接受。
| 层 | 通道 | kernel / stride / padding | 输出尺寸 | 累积理论感受野 |
|---|---|---|---|---|
| Conv 1 | 13 → 64 | 4 / 2 / 1 | 128 × 128 | 4 × 4 |
| Conv 2 | 64 → 128 | 4 / 2 / 1 | 64 × 64 | 10 × 10 |
| Conv 3 | 128 → 256 | 4 / 2 / 1 | 32 × 32 | 22 × 22 |
| Conv 4 | 256 → 512 | 4 / 2 / 1 | 16 × 16 | 46 × 46 |
| Conv 5 | 512 → 512 | 4 / 1 / 1 | 15 × 15 | 94 × 94 |
| Conv 6 | 512 → 1 | 4 / 1 / 1 | 14 × 14 | 142 × 142 |
中间主要使用 BatchNorm 和 LeakyReLU(0.2),最后直接输出 patch score。上表不是未取得 supplementary 的复刻,而是已核对代码的结构。142² receptive field 是理论支持范围,实际有效权重不同;相邻输出间距 16 像素,patch 高度重叠。论文所说“缩小约 18 倍”是 256 到 14 的尺寸描述,不能当成网络 stride=18。
主文说先平均 patch likelihood 再用 adversarial loss;公开代码直接对整张 14² score map 做 MSE 再平均,而且没有 sigmoid,score 不是校准概率。这两个训练目标并不相同,后面会给出具体差别。
隐式域适配的潜在捷径
研究解读:若 D 能仅凭输入 RGB 的 synthetic / real 风格识别来源,而正例只有 synthetic 配对,真实图分支可能被域信息轻易判 fake。G 只能改 maps,不能改输入 I,便难以纠正这条捷径。论文没有显式 domain-classifier、gradient reversal、feature-distribution loss 或真实 ground-truth 正例来证明捷径被避免。有限容量与域重叠可能使训练仍有帮助,但“强制学到域无关特征”应视为作者解释,而非有独立测量的事实。
07 · 损失函数必须先纠正优化方向
论文 Eq.1 将训练写成总 loss 的最小化,Eq.2 分为 supervised 与 unsupervised 两项:
但 Eq.3–5 的记号和符号不能照字面全放进同一个 minimizer。正文又混用 Lsup/Lrec、Lunsup/Ladv,并在介绍 adversarial loss 的一句话误写成 Lsup。这里分为“原式”和“与文字目标一致的最小化形式”。[P §3.3]
Eq.3 的 MS-SSIM 符号问题
论文明确把 MS-SSIM 称为 similarity;若 beta 为正,最小化正 similarity 会鼓励变得不相似。因此实际可用的表达应把相似度转成距离,例如:
这是根据优化方向与公开 msssim_loss=1−msssim 给出的解释,不静默篡改原式。L1 约束数值、亮度和颜色偏差,MS-SSIM 约束局部对比与多尺度结构;两者的作用也不宜简单划成“一个只管低频、一个只管高频”。
Eq.4–5 的 log 目标实际上需要最大化
若把这两个正 log 当 loss 最小化,会让 D 接受假例、拒绝真例,让 G 主动降低被接受概率,恰好违背文字叙述。它们应作为最大化效用,或取负号变成最小化损失。不能把 D 与 G 的目标直接相加后对所有参数一同下降。
这是一种与文意一致的 non-saturating GAN 规范化写法,并显式补出 Figure 1 的条件 I;固定论文没提供 source-mixing 比例、每轮 D/G 更新次数和 patch 聚合细则,不能从这个解释式推定全部复现设置。
公开实现另用 least-squares GAN
q 表示 patch location;模型输出没有 sigmoid。generator 每个 map 的 loss 还含 L1 + 0.88 × MS-SSIM loss + 全 tensor 标准差差值,这个 std 项不在论文中:
std 跨 batch、channel、space 计算而非逐像素;它匹配全局对比度,也可能把不同样本统计耦合。公开实现只监督 synthetic path,不能用此式声称完整实现了论文的 real-domain training。
08 · 数据与域适配设置
| 集合 | 规模 / 来源 | 监督 | 划分与用途 |
|---|---|---|---|
| Synthetic SVBRDF | Deschaintre 2018 数据,源自 Allegorithmic Substance Share,约 200,000 SVBRDFs / 配对样本 | 输入 rendering + diffuse、normal、specular、roughness | 沿用 [8] train/test split;本文未列每个 split 精确数量 |
| Flash setting | 固定距离、中心位置的 phone-like flash 渲染 | 四图 ground truth | Table 1、Figures 3/5 对比 |
| Natural illumination setting | 同一 synthetic test split,用 HDRI Haven 库的随机环境重渲染 | 四图 ground truth | Table 2 / Figure 4;训练是否另重渲染、环境划分细节未充分说明 |
| Real material photos | 3DJungle、DTD 人工挑选样本与手机拍照;14 类,每类 80 张,512² | 只有 RGB,无 SVBRDF 标签 | 1,120 总计;910 train(每类 65)、210 test(每类 15) |
14 类完整名单为 asphalt、bark、bricks、concrete、fabric、floor、foliage、granite、ground、marble、metal、parquet、sand、stone。作者说是 hand-picked,不是直接拿整个 DTD,也没有公布文件名单和 split manifest。约 200,000 也不能理解为 200,000 个独立、未经裁剪扩增的程序材质源文件。[P §4.1]
两种训练实验不要混在一起
主 synthetic 数字:只用有标注 synthetic 数据训练,Table 1 的 SurfaceNet 即 0.017 / 0.030 / 0.029 / 0.014 / 0.058。真实照片实验:再加入无标签 real data,通过对抗项训练,以 qualitative 图判断迁移。Table 4 的 L(real) 则仍在 synthetic test 上测,表现略降。把 Table 1 的最好数字和 Figure 8 的真实适配说成一个单一 checkpoint 无差别拥有全部优势,证据不足。
真实图无 ground truth,所以不能计算对应 map RMSE;作者通过重渲染视觉比较。重渲染相似本身也可能来自材质/光照互相补偿,尤其单图下没有交叉光照采集。对于 domain adaptation,理想补实验应有未参与训练的真实材质及受控多光照 ground truth,而不只看单个砖墙例子。
当前 loader 预处理为 Resize → CenterCrop → ToTensor → Normalize(0.5,0.5),将各 map 与 rendering 映为 [-1,1];roughness 转灰度,其他转 RGB。每次访问材质目录随机选一张 render/ 内图片,验证集也沿用这个随机选择。没有随机 crop、normal 翻转修正、曝光增强或 gamma 线性化的显式代码;不能自行补成论文 augmentation 方案。
09 · 训练与推理配置
| 设置 | 固定 v1 论文 | 当前代码 |
|---|---|---|
| Backbone | ResNet-101 / DeepLabV3 | ImageNet-pretrained ResNet-50 |
| 训练尺寸 | 256 × 256 | resize 默认 256,center crop |
| Optimizer | Adam | Adam 默认;betas=(0.9,0.999) |
| Learning rate | 4 × 10−5 | 0.001,即 25 倍 |
| Batch size | 6 | 64 |
| 时长单位 | 250,000 iterations | 20,000 epochs 默认;不是相同训练时长 |
| GAN weight | alpha=0.2 | alpha_adv=0.015;2021 初始 trainer 曾为 0.15 |
| MS-SSIM weight | beta=0.84 | alpha_m=0.88,外加 std loss |
| GAN 开关 | 完整方法开启 | --train-adversarial 默认为关闭 |
| G 对抗起点 | 未报告预热步数 | adv_start=300,000;D 从一开始训练,G 达到起点才用 adversarial loss |
| Real 训练 | 无标签 real 与 synthetic 联合 | --train-real 构造 loader,但主循环不用它;实际 real 分支未实现 |
| GPU / 运行时 | 主文未报告 GPU、训练小时数、显存、推理时延 | Accelerate 配置控制设备;本次未执行 |
| 其它缺项 | seed、Adam betas、weight decay、LR schedule、precision、source ratio、D/G 频率、初始化细则 | 代码部分可看,但无固定依赖版本;不能回填为论文值 |
250,000 × batch 6 = 1,500,000 sample exposures 是简单计算,不能视为 1,500,000 个不同材质或精确 epoch 数。论文指出 alpha 太大会压过 reconstruction loss,beta 小幅变化影响不大,但没有给完整 sweep 曲线或表。
论文应有的训练流程
- 取 synthetic 配对 RGB/maps,生成预测;以 L1 与结构 loss 约束输出真值
- 用真实配对 maps 和生成 maps 构造 D 正负样本;当前图示包含 RGB 条件
- 冻结 G 结果更新 D;更新 G 时让输出通过 D,并保留 synthetic reconstruction
- 对无标注真实 RGB,仅提供对抗信号,不伪造 map labels
- 按独立 validation 选择 checkpoint;推理删除 D,只跑 G,输出四张 maps
这段是从论文可重建的算法逻辑,不是假装已取得作者缺失 supplementary 的逐步训练脚本。真实域正例如何配对、采样比例和稳定化都还需要更多信息。当前仓库代码只实现了 synthetic 训练路径,且 D/G objective 与主文不同。
推理不需要的步骤
没有文字 prompt、CLIP、temperature、top-k、DDIM、采样次数或迭代 inverse rendering;它不是 diffusion 模型。模型 eval 下对固定输入给确定性前向预测,除非用户自己加 augmentation 或修改网络。后续物理渲染用来检验或使用生成 maps,不能把它混成网络内部的额外预测。
10 · 评测协议与全部主表
map 误差为逐元素 RMSE。不同通道的量纲、归一化和有效范围影响数值;normal 的 RGB RMSE 不是角度误差,roughness 误差对视觉效果也不线性。[P §4.2]
论文评测还取五个 phone-like flash 位置:top-left、top-right、bottom-left、bottom-right、center,对估计 maps 与 ground-truth maps 各渲染五张,比较重渲染 RMSE。Tables 1–2 图注简写成与 original image / rendering 比较,正文的五光位说明更完整;论文没有明确给“先平方平均后开方”还是“每图 RMSE 再平均”的跨视图聚合实现。公开代码只记录 maps 的 RMSE,没有这套 renderer metric。
| 方法 / 配置 | Diffuse ↓ | Normal ↓ | Roughness ↓ | Specular ↓ | Rendering ↓ |
|---|---|---|---|---|---|
| Deschaintre 2018 [8] | 0.019 | 0.035 | 0.129 | 0.050 | 0.083 |
| Deschaintre 2019 [9] | 0.081 | 0.057 | 0.108 | 0.063 | 0.187 |
| Gao 2019 [14] | 0.050 | 0.062 | 0.119 | 0.202 | 0.108 |
| SurfaceNet | 0.017 | 0.030 | 0.029 | 0.014 | 0.058 |
Flash 主表:本文全部五项胜出。相对各指标最优 baseline,diffuse 0.019→0.017,normal 0.035→0.030,roughness 0.108→0.029,specular 0.050→0.014,rendering 0.083→0.058。roughness 改善最大约 73.1%,specular 为 72.0%,rendering 为 30.1%;这些是 RMSE 相对下降,不是“感知质量提高百分比”。
| 方法 / 配置 | Diffuse ↓ | Normal ↓ | Roughness ↓ | Specular ↓ | Rendering ↓ |
|---|---|---|---|---|---|
| Li 2017 [19] | 0.093 | 0.081 | 0.331 | 0.181 | 0.106 |
| SurfaceNet | 0.033 | 0.055 | 0.094 | 0.041 | 0.078 |
Natural 主表:本文先把 roughness 与 specular 逐图取像素平均,以匹配 Li 2017 的 homogeneous 参数。对这两项,表中评测不再测试空间细节恢复;因此不能把 roughness 0.331→0.094 说成空间变化 roughness 的逐像素收益。diffuse / normal 仍为图,Figures 4/6 也只展示两种共同 map。
原文称 reduce to scalar values,但 specular 实际是 RGB 参数;它没有清晰说明是否还跨颜色求平均,所以这里用向量均值明确保留颜色维,作为合理解释而非已核实 eval 实现。两个任务设置和 baseline 集合不同,不能把 Table 1 与 2 的 Rendering 数字直接当成同分布排名。
| 条件 | Diffuse | Normal | Roughness | Specular | Rendering |
|---|---|---|---|---|---|
| Flash,逐指标最佳所列 baseline | 10.5% | 14.3% | 73.1% | 72.0% | 30.1% |
| Natural,相对 Li 2017 | 64.5% | 32.1% | 71.6% | 77.3% | 26.4% |
论文没有随机 seed 复现实验、confidence interval、标准差或 paired significance test;所谓 SOTA 是该时期该比较范围下的作者结论,不是今天所有条件下的排名。真实照片评测完全是 qualitative,不存在正文宣称的真实域四图定量误差表。
11 · Synthetic 结果逐图读

Figure 3:flash 图案包含带高光的石材/拼块。列为 rendering、diffuse、normal、roughness、specular;行包括 GT、[8]、[9]、[14]、Ours。作者观察 [8] diffuse 偏亮且 normal 缺细节;[9] normal 对比过强、roughness 扁平;[14] normal 过度放大噪声,高光与材质的分离不稳定。本文更保留粗糙度边界和局部纹理。
重要的是同时看四图与 rendering:只看输入重建可被多种错误参数组合骗过;只看某图更锐利,也可能把光照当成 geometry。此图与主表共同支持 synthetic 优势,但一个样例不能覆盖所有金属、光滑、高频材质。

Figure 4:natural illumination 下对比 GT、Li 2017 与本文,显示 rendering、diffuse、normal。Li 的法线整体偏平、diffuse 混入照明,本文在局部拼接处更接近 GT。roughness/specular 因双方按同质设定比较而不展示,不是模型从任务中删除了两张图。
正文说重渲染 test split 以形成自然照明设置,却未给完整环境列表、曝光和 train/test 环境隔离。渲染输入里几何材质分布与训练相近也可能提高表现;后续应按原始材质身份和环境共同切分,避免同源 crop 或照明泄漏。
12 · 真实图像和高分辨率

Figure 5:真实 flash 照片没有 GT maps,展示各方法 diffuse、normal、roughness、specular、重新渲染,再放原照片。本文的粗糙度较平滑但保留辐射状边界;其它方法分别有缺细节、过度平滑或过度对比。视觉上与输入更一致是有意义的,但不能因此核实每个像素的真实 BRDF。

Figure 6:真实自然光材料,比较 diffuse、normal 与重渲染;本文的 rendering 更接近 source picture。这是单例 qualitative evidence,不是对真实域全 210 张测试集的数值统计。照明估计和输入曝光不完全公开,也会影响 rendering 的视觉接近程度。

Figure 7:手机自然光下的 1024 × 1024 砖墙,输出有可见砖缝和细粒度 normal。引言声称可达 2048 × 2048、并指向补充材料;本次未取得该独立补充材料,所以只把正文的 1024 例图当成可直接检查的高分辨率证据。没有 tile seam、跨尺度一致性、峰值显存或处理速度的定量验证。

Figure 8:同一真实砖墙,上行 synthetic-only,下行 synthetic+real。加入真实图后 roughness/specular 中的砖纹更清楚,输出渲染也更接近原图。作者把这种现象解释为域无关特征和正则化;但没有真实 maps ground truth、域可分性测试或多 seed 统计,不能把解释当成已经证实的机制。
13 · 全量消融与不能跳过的负结果
| 方法 / 配置 | Diffuse ↓ | Normal ↓ | Roughness ↓ | Specular ↓ | Rendering ↓ |
|---|---|---|---|---|---|
| Base | 0.207 | 0.156 | 0.322 | 0.138 | 0.185 |
| + Dec. | 0.086 | 0.093 | 0.130 | 0.042 | 0.087 |
| + Skip | 0.073 | 0.122 | 0.253 | 0.084 | 0.073 |
| + Image | 0.021 | 0.037 | 0.065 | 0.022 | 0.067 |
| + Patch | 0.017 | 0.030 | 0.029 | 0.014 | 0.058 |
Base:DeepLabV3 encoder,使用插值恢复输出,无图像 skip、无 adversarial loss。+Dec:加入可学习上采样。+Skip:再拼接下采样输入。最后对比 image-level 与 patch-level discriminator。原表图注提到 “Full”,但表内实际行名是 +Image / +Patch;本页保持实际表行,不凭图注补造第六行。
作者称所有架构变化都改善 accuracy,表格不支持这个逐指标强结论:+Dec→+Skip 时 diffuse 0.086→0.073、rendering 0.087→0.073 改善,但 normal 0.093→0.122、roughness 0.130→0.253、specular 0.042→0.084 都变差。粗糙度恶化约 94.6%,specular 翻倍。skip 可能带入输入外观污染,是否如此仍需额外实验,不能只由相关变化确定原因。
+Image→+Patch 则五项全降,尤其 roughness 0.065→0.029,下降 55.4%;rendering 0.067→0.058,下降 13.4%。这是 patch discriminator 的直接证据,但公开 ImageDiscriminator 使用额外层和 adaptive max pooling,不是仅替换相同网络的末端平均,比较还混有 receptive field 和容量差异。
| 方法 / 配置 | Diffuse ↓ | Normal ↓ | Roughness ↓ | Specular ↓ | Rendering ↓ |
|---|---|---|---|---|---|
| L1 | 0.162 | 0.147 | 0.335 | 0.184 | 0.134 |
| Lsup | 0.073 | 0.122 | 0.253 | 0.084 | 0.088 |
| Lunsup | 0.133 | 0.112 | 0.274 | 0.119 | 0.128 |
| L (synth) | 0.017 | 0.030 | 0.029 | 0.014 | 0.058 |
| L (real) | 0.022 | 0.033 | 0.043 | 0.022 | 0.064 |
L1→Lsup:加入 structural loss 后五项更好。Lunsup alone:对比 Lsup,只有 normal 稍低(0.112 vs 0.122),其它都更差,说明 GAN 材质先验不能替代配对数值监督。Full synthetic:五项均最好。
Full real 不是“真实域误差”:该行仍在 synthetic test 评估,指训练加入真实图片。相对 full synthetic,diffuse 0.017→0.022(+29.4%)、normal +10.0%、roughness +48.3%、specular +57.1%、rendering +10.3%。绝对误差增加较小,但相对变化并非全部可忽略。“牺牲一点 synthetic 换真实域泛化”是作者的解释;真实域增益只有 Figure 8 的定性支持。
跨表不一致:Table 3 的 +Skip 和 Table 4 的 Lsup 前四项完全相同(0.073 / 0.122 / 0.253 / 0.084),Rendering 却分别为 0.073 与 0.088。正文没有解释是否运行、renderer 或设置不同。这里保留两个原值并标明待核实,不擅自选一个“修正”。
仍缺的消融
- 没有 ResNet-50 / 101 严格对照,也没有多头共享 vs 四个独立模型的参数/精度比较
- 没有输入 skip 的光照泄漏诊断、normal 方向约束或物理一致性 loss 对照
- 没有 1120 真实数据的规模曲线、14 类逐类结果、真实 source ratio、域判别捷径测试
- 没有 alpha/beta 扫描曲线、MS-SSIM 的独立实现验证和随机 seed 方差
- 没有保持相同参数量与 receptive field 的 image/patch 判别器受控比较
14 · 官方代码审计:能直接复现到哪一步
当前主分支固定在 4b4c009ecaaa41ababce28c83c600187b2db928d,最后提交 2023-11-03,主分支 28 commits。2021-07-23 的论文同期仓库只有 README、LICENSE 与图片;2021-11 才加入模型和部分 trainer。旧 trainer 尚不完整,不能作为完整原始训练代码。当前代码仍明显不同于 v1 方法。[C]
| 项 | 源码事实 | 对使用者的影响 |
|---|---|---|
| Backbone | 直接 import resnet50 as resnet;2021 历史模型同样如此 | 不是论文写的 ResNet-101 |
| 无标签 real path | real DataLoader 可构造;run_epoch 只迭代 synth;forward_batch(real=True) 直接 raise NotImplementedError | --train-real 并未实现论文 domain adaptation,缺陷不应隐藏 |
| README 训练命令 | 没有带 --train-adversarial;该选项默认 false | 照 README 的最短命令不会启用 GAN |
| GAN 预热 | G adversarial 从 step 300000 起;paper 总训练 250000 | 只把总步数改成论文值仍可能全程没有 G adversarial 信号 |
| 训练 objective | LSGAN、0.015、0.88、额外全 tensor std;不是论文 logGAN +0.2/+0.84 | 不能把当前脚本给出的数字当论文 loss 复现 |
| 推理入口 | README 引用 eval.py,但固定树中不存在 | 推理命令不完整;没有已验证可下载的官方 pretrained checkpoint 链接 |
| 依赖入口 | README 指 requirements.txt,固定树中不存在 | 没有依赖锁定;库 API 和默认值需要重新核实 |
| 任意长宽 | F.interpolate(x, feat.shape[-2]) 传入单个整数,把两维都设成 feature height | 非方形输入的 RGB skip 与特征宽度可不匹配;论文的 arbitrary size 不等于该实现支持任意长宽比 |
| 输出物理有效性 | 各 head clamp [-1,1],无 normal normalization、能量守恒或 diffuse/specular 约束 | 渲染前应做约定一致的解码与验证 |
| 验证随机性 | SurfaceDataset 每次访问随机取 render,test loader 也用该类 | 即使 shuffle=False,验证输入仍可变;没有显式 seed 控制 |
| 指标 | 训练/验证只算 map L1、RMSE 和 denormalized RMSE | 没有五光位 rendering RMSE 或论文自然光评测 |
| 数据 | 固定目录名和 map PNG 约定;PicturesDataset 只取 *.png | 1120 真实样本名单、split、预渲染脚本未随代码提供 |
| 相对路径 | SurfaceDataset 把 iterdir 已返回的带目录路径再与 dset_dir 拼接 | 相对 dataset 路径可能重复前缀;绝对路径通常避免此问题,需 smoke test |
两个容易让复现数字失真的实现细节
MS-SSIM 聚合:当前代码构造五尺度对比项和 similarity,最后写 prod(pow1[:-1] * pow2[-1])。若每尺度已归约成标量,最后一尺度 similarity 被广播乘入前四项,最终其幂出现四次,而通常的多尺度乘积只乘一次:
代码还在 loss 路径把 similarity / contrast 分别做 (x+1)/2,注释自己说明这不符合原始定义,用于防止 fractional power 的 NaN。这里只确认计算语义,不断言论文实际训练采用相同代码或已量化影响。独立算术例子中,末尺度 s=0.8、w=0.1333,其额外比值是约 0.9146,说明不能把它当标准库 MS-SSIM 无差别替换。
平均 patch 后取 loss 与平均各 patch loss:论文叙述可能让人先平均预测,再平方或取 log;实现用逐 patch MSE。对平方形式:
逐 patch MSE 额外惩罚 patch 间方差,不能由“都叫 PatchGAN”忽略这个区别。没有 sigmoid 的 score 也不能称为概率。
训练循环的其它注意点
当前 synthetic loader 由 Accelerate prepare,real loader 没纳入实际循环;代码 resume 从 checkpoint 目录名抽 epoch。每轮都跑验证并记录 tensorboard;没有固定 LR scheduler 或显式混合精度设置。D 更新用 fake.detach(),G 更新时通过 D 回传,但没有显式冻结 D 参数,产生的 D 梯度会在下次 D 更新前清零;这是额外计算,不自动等于 D 被 G optimizer 更新。
MIT LICENSE 覆盖仓库代码;图像、Substance 材质、DTD 与预训练 backbone 仍应各自核对来源约定。本次下载与静态阅读官方代码,没有运行其训练、安装或推理入口。
15 · 复现计划与本次独立检查
先决定复现对象:论文 ResNet-101/log-GAN/真实适配,还是公开 ResNet-50/LSGAN/synthetic-only 实现。两者不是同一个 baseline;建议命名为“paper-described configuration”和“public-code configuration”,并单列差异。修复后的实现属于研究者改版,不能伪装成原作者结果。
- 固定 paper hash、代码 commit、数据 split 与 renderer;保存完整命令、依赖版本、seed 和 checkpoint hash
- 补齐 README 缺失的依赖及推理入口,只对确认的代码路径做 smoke test,不执行任何未知 checkpoint 反序列化
- 验证 square / nonsquare、不同尺寸、padding、normal vector norm、roughness 范围、specular 颜色和 gamma 约定
- 把 L1、标准 MS-SSIM、当前 MS-SSIM、std term、logGAN、LSGAN 分别实现成可切换组件,测试梯度方向
- 先跑 synthetic 配对训练,再加入明确的 real sampling 路径;检查 D 是否通过输入域捷径区分真假
- 复现原表时按 flash / natural 设置分开,natural r/s 平均规则和五光位 RMSE 聚合必须固定
- 真实测试除 qualitative 展示外,采集多光位照片、参考 BRDF 或可核实 geometry,以评估“好看但错误”的 maps
本次仅用独立、重新写的普通算术做以下检查,没有导入作者 Python:六层卷积输出 14² 与 receptive field 142;四输出共 10 通道、conditional D 13 通道;MS-SSIM 广播重复因子;patch MSE 分解;[-1,1] 与 [0,1] 的 RMSE 线性缩放;所有主表相对变化。它们验证解读自洽,不等于模型复现。
代码同时记录 normalized 与 unnormalized RMSE,若选错列,误差会恰好差两倍。论文主文未把这一实现选择说清,不能仅靠接近的小数推定复现成功。
16 · Reviewer 视角
有说服力的地方
四类材质图共享 encoder/decoder,独立 head 结构简洁;输入图 skip 提供细节通路;PatchGAN 对局部结构与多图参数的统计关系有针对性。主 synthetic 数值和 patch-vs-image 消融都给出一致改善,尤其 roughness/specular 大幅降低。方法不依赖测试时优化,作为快速 material-map estimator 的系统方向有价值。
核心证据缺口
- 真实域主张强于证据:没有真实 maps 真值,只有 selected qualitative examples;域无关特征没有直接分析
- 纸面 loss 不可直接照抄:MS-SSIM similarity 的正号、GAN log 的最大化方向、多个 loss 名称混用会误导实现
- 消融并非步步更好:skip 损害三项参数误差;跨表 rendering 有未解释差异
- 复现发布不完整:backbone 不同、real training 未实现、eval.py/requirements 缺失、未验证官方 checkpoint
- 物理可识别性:GAN 纹理 prior 无法唯一分开照明/normal/roughness/specular,也没有能量守恒和跨光照约束
- 高分辨率与鲁棒性:没有分辨率规模曲线、显存/速度、旋转、曝光、噪声、非平面、各向异性和透明材质专项测试
总体应把它看作有清晰思路和 synthetic 证据的 conditional GAN 材质估计系统,而不是已经闭合真实世界物理恢复与开源复现两条链的通用方法。仓库的不足不能反推论文实验必然无效,但足以要求任何复现报告明确其版本和修订。
优先补的三类实验
第一,保持 backbone、训练数据、GPU budget 一致,比较 logGAN / LSGAN、image / patch、带 / 不带 RGB 条件的判别器。第二,完整量化 real adaptation 的收益与 synthetic trade-off,包含 withheld material identities、按类别结果和 confidence interval。第三,用多光照和不同 camera view 的重渲染验证材质图,而不是单输入图复原。
17 · 对 Procedural Material Generation 的研究延伸
本节均为进一步研究设想。SurfaceNet 输出的是像素材质 maps,没有生成 SBS/SBSAR、节点图、shader program 或程序参数;没有 graph validity、compiler、DiffMat、renderer-in-the-loop 搜索或修复。它可作为 PMG 的观测解析器和局部材质 prior,不能直接被当作程序生成器。
方向一:估计 maps 作为候选约束,而非唯一真值
输入照片先得到四图估计,再用程序图 G、参数 theta 生成材质 maps,由 renderer R 在多光照/多视角下匹配。由于单图歧义,给各 map、区域分配置信度,不让某张错误但锐利的 normal 主导整个图搜索:
Bk 是程序执行得到的第 k 张参数图,V 检查节点类型/端口/可执行性,Omega 约束图复杂度和 bitmap 依赖。只有 renderer 能解释图像,不意味着图拓扑真实;应同时报告重渲染、可编辑性、图大小、重复结构和未见光照表现。
方向二:把 PatchGAN 放到程序输出空间
判别器可看程序执行后的联合 diffuse/normal/roughness/specular patch,作为局部材质合法性评分。但不能把对抗 score 当真实物理质量的标尺;程序可能通过 checkerboard、过强对比或频率偏置钻 reward 漏洞。需要保留参数监督、正常范围、normal integrability 或多光照渲染损失。
最小可检验实验:同一 graph grammar 下比较 pixel-only、pixel+joint-map patch prior、pixel+renderer、pixel+两者。测试在未见 lighting 下的误差、图执行率、结构编辑一致性和节点复杂度;控制搜索预算,避免把更多计算当成方法收益。
方向三:显式处理 RGB 条件的域捷径
当前 conditional D 的正例仅在 synthetic 域,可能把域识别与材质真假混在一起。可以比较三种判别器:只看联合 maps、看 photometric-normalized RGB+maps、对 synthetic/real 做域均衡或域不变特征。还可以通过 renderer 生成与真实输入匹配的候选正例,但必须处理错误光照和相机估计,不能自称 ground truth。
一个诊断实验是固定 maps,只替换 input image 的风格/曝光,观察判别 score 是否大变;如果是,D 可能利用 RGB 域捷径而不是材质质量。再固定 input,扰动 roughness、法线方向或 specular,测试它是否真的对物理相关错误敏感。
方向四:多尺度一致性与无缝程序纹理
SurfaceNet 的全卷积泛化关注局部细节,但程序材质还要求周期边界、方向性、尺度和跨 tile 一致。可以让同一个程序在不同分辨率与裁剪下执行,要求估计/生成 maps 在对应区域一致;另加 tile edge continuity 约束。需要把真实结构尺度和像素纹理尺度分开,避免模型把一块大砖当成许多小砖。
上式是研究目标草案,不是论文 loss。对于非周期材质应关闭 tile 约束,否则会抹除合理的全局布局。实验分别报告 tileable 与非 tileable 子集,别把强制周期化算成所有材质的改善。
方向五:从单点估计转向不确定性驱动采集
单图 r/s 歧义可用模型 ensemble、输入曝光扰动一致性或校准误差估计标出高不确定区域;然后选择一张最有信息的新 flash 位置,而不是盲目生成更多“好看”候选。对 PMG,只有当新增照片能缩小程序参数候选集合时,采集才真正有效。
推荐先建立一个小而严格的真实材质多光照验证集,测试 SurfaceNet maps 是否有助于程序搜索减少迭代、降低 bitmap 依赖和增强可编辑性。若结果只改善输入图相似度却恶化新光照,应回到物理验证与不确定性建模,而非继续提高 PatchGAN 权重。
18 · 来源、归档建议与未解决事项
- [P] 固定论文:arXiv v1 PDF;对应 HTML;官方 source archive。固定 PDF 全部 9 页已读,4 表与8图完整覆盖。
- [O] 作者项目页:SurfaceNet;官方 poster。poster 的结果标题误写成真实/自然光,但数值对应主文 synthetic flash;其中 0.50 / 0062 的写法亦有排版问题,所以全部数字优先以固定论文为准。
- [V] 正式会议索引:CVF ICCV 2021 页面。索引记录可检索,直接页面本次返回403;使用作者与 arXiv 一手来源完成正文阅读,没有访问私有馆藏。
- [R] DOI 注册元数据:Crossref 文章记录,publisher=IEEE、2021-10、注册页码12820–12828;与 CVF 页码并列保存。
- [C] 官方代码固定版本:完整仓库快照;generator;discriminators;trainer;losses。
原 note 保留:全部 YAML、作者链接、BibTeX、旧图链接和用户 ResNet-101 / ASPP 笔记均保持原字节前缀。追加说明应补 ICCV 2021、文章 DOI、project page;主题 diffusion models 建议后续复核,不静默删除。图像/3D 等既有分类可保留并说明主要输出是二维 SVBRDF buffers。
不能声称完成的内容:未取得正文引用的独立 supplementary;没有公开代码中缺失的训练真实域流程、推理入口、依赖文件与可核实 checkpoint;没有模型训练/推理实测;没有实际浏览器布局/MathJax 渲染验收。全部 8 幅图使用下载解码且与官方 source archive 字节一致的联网原图,离线阅读需要网络可用或后续获准做资源本地化。