ICCV 2021 · Raster Text Editing · Inverse Graphics

De-Rendering
Stylized Texts

把一张已经栅格化的文字图像拆回文字内容、字体、位置、颜色、边框、阴影与被遮挡背景,再交给标准 2D 图形引擎生成重新渲染的编辑结果。

Wataru Shimoda · Daichi Haraguchi · Seiichi Uchida · Kota YamaguchiCyberAgent × Kyushu UniversityICCV 2021 · pp. 1076–1085arXiv:2110.01890
论文 Figure 1:输入文字图、恢复的渲染参数和颜色或文字编辑结果
Figure 1(原论文)。输入栅格图像经过 de-rendering 后成为可编辑参数;颜色或文字替换由外部图形引擎重新渲染。
01 · RESEARCH GAP

编辑问题被重新写成参数恢复问题

像素域风格迁移会产生模糊、折线和分辨率依赖。论文利用展示媒体中的文字通常由有限图形操作生成这一先验,把编辑转化为逆向恢复渲染过程。

输入

包含一个或多个排版文字区域的 RGB 栅格图像 \(x\)。文字可能覆盖未知背景,并含 fill、border、shadow。

结构化输出

字符与文本框、字符串、字体类别、效果可见性和参数、各层颜色、字符仿射调整,以及隐藏背景 \(x_{\mathrm{bg}}\)。

最终产物

外部 Skia 引擎可消费的参数化表示。用户能改文字、字体、颜色、边框、阴影、位置和背景,并在任意分辨率重渲染。

Paper Verified论文验证了基本效果族上的重建,以及文字和样式编辑的定性质量。它没有验证复杂纹理字、任意 glyph、任意混合模式、kerning 或完整几何变换。
Our Interpretation方法属于受限逆向图形学:神经网络给出统计上合理的初值,可微近似渲染器负责在图像证据下修正连续参数与有限离散分布,外部引擎负责产生真正可编辑的最终结果。
02 · REPRESENTATION

一个文字区域被拆成内容、几何、样式、效果和背景

表示的可编辑性来自语义分层。每个字段都有明确下游用途,渲染顺序固定为 shadow → fill → border。

文字与位置

检测文本框 \(b^{t}\)、字符框 \(b^{c}\)
内容94 类字符识别图与字符序列
位置修正每字符与文本级仿射参数
导出几何font size、width scale、offset

字体与效果

字体100 个 Google Fonts 类别
fillalpha + RGB
border可见性 + RGB + 5 档宽度
shadow可见性 + RGB + blur + dx + dy

隐藏背景

文字与效果遮挡的像素由 inpainting 模块预测。Book Cover 评测使用 Telea,Advertisement 使用独立训练的 MEDFE。模型把 inpaint 输出恢复到原尺寸,再以预测 alpha 混合文字擦除区域,减轻 256×256 上采样伪影。

表示边界

字体是封闭的 100 类分类;效果只包含 fill、border、shadow;图层顺序固定;每个效果使用纯色;复杂纹理、渐变、多重描边与自定义路径都超出表示范围。

03 · PIPELINE

前馈解析提供可行初值,反馈优化贴近输入,外部引擎生成最终矢量化结果

01 · DETECTHourglass 特征 + CharNet 风格检测头,定位文本和字符
02 · PARSE识别字符、字体、三层 alpha、颜色、效果可见性与参数
03 · INPAINT根据 OCR 与效果 alpha 擦除前景,恢复被遮挡背景
04 · REFINE预渲染 glyph alpha + 可微阴影与合成,Adam 优化 200 步
05 · EXPORT从框与仿射结果搜索 font size、宽度缩放和 offset,用 Skia 重渲染
论文 Figure 2:前馈解析、反馈优化、可微重建和外部图形引擎流程
Figure 2(原论文,官方项目页版本)。主干网络共享图像特征;前馈分支同时处理 OCR、背景和样式属性;反馈阶段只在可微重建图像上优化选定参数。

模型真正接收什么

公开测试脚本把原图 resize 到 640,并同时保留归一化图像与原始像素张量。前者进入 Hourglass,后者参与 alpha 分解、背景修复和重建。

模型真正输出什么

测试时保存外部 Skia 渲染图、可微重建图和一个 pickle 参数对象。参数对象包含背景像素、文本框参数、效果参数与可见性,编辑 notebook 直接修改这些字段。

04 · DIFFERENTIABLE RENDERING

离散 glyph 先预渲染成 alpha 字典,再用概率加权形成可导近似

字体选择和字符类别无法直接通过普通 rasterizer 求梯度。论文把所有候选形状提前画成 64×64 alpha,用类别概率的线性组合替代离散选择。

图层生成与 source-over 合成

\[ \alpha_k(i,j)=f_k\!\left(z(i,j),\theta_k\right) \] \[ \mathbf{c}(i,j)=\left(1-\alpha_k(i,j)\right)\mathbf{c}_{\mathrm{bg}}(i,j)+\alpha_k(i,j)\mathbf{c}_k \]

\(z\) 是字符形状,\(f_k\) 是第 \(k\) 个效果函数,\(\theta_k\) 是效果参数,\(\mathbf{c}_k\) 是该层 RGB。多层按 shadow、fill、border 依次把当前结果写回背景。

颜色反分解

\[ \widehat{\alpha}_k=D_{\alpha,k}(e(x)),\qquad \mathbf{y}_{i,j,k}=\frac{\mathbf{c}(i,j)-\left(1-\widehat{\alpha}_k(i,j)\right)\mathbf{c}_{\mathrm{bg}}(i,j)}{\widehat{\alpha}_k(i,j)} \] \[ \widehat{\mathbf{c}}_k=\underset{\mathbf{y}_{i,j,k}}{\operatorname{arg\,max}}\;P\!\left(\mathbf{y}_{i,j,k}\right) \]

alpha 先由网络预测,候选颜色按逆合成公式逐像素恢复,再选择区域内概率最高的颜色。反分解顺序为 border、fill、shadow;不可见效果直接跳过。

预渲染 alpha 的概率混合

\[ z(i,j;\Theta)=\sum_{\Theta'}P(\Theta')A_{\Theta'}(i,j),\qquad P(\Theta')=\prod_l P(\theta_l') \]

\(A_{\Theta'}\) 是某个字符、字体等离散组合的预渲染 alpha;\(P(\Theta')\) 是组合概率。公开实现对 fill 保留 top-20 字体、单个字符候选;border 固定 top-1 字体与字符,同时混合 5 档描边宽度。

反馈优化目标

\[ \Theta^{\ast}=\underset{\Theta}{\operatorname{arg\,min}}\;\left\lVert R(\Theta)-x\right\rVert_1 \]

公开实现用 Adam、学习率 0.01、200 次迭代。可优化字体分布、边框和阴影可见性及参数、字符仿射、三层颜色;字符类别、背景与检测框保持固定。前 100 步对目标与重建同时施加逐步减弱的 Gaussian blur。

反馈优化示例输入
官方优化演示的输入图像。
反馈优化的迭代动画
Figure 3 对应官方动态演示。参数从前馈初值逐步拟合输入外观。
05 · TRAINING

监督来自 Skia 合成器记录的准确渲染参数

合成器扩展 SynthText 的背景与放置规则,并保存生成图像时的字符、字体、效果和 alpha 真值。

数据构成

  • SynthText 场景背景:over-segmentation 生成放置区域,关闭文字旋转。
  • Book Cover 与 BAM:先检测并修复原有文字,再结合 saliency;Book Cover 另外利用 OCR 生成候选位置。
  • 纯色背景与 FMD 材质裁剪:随机放置。
  • 五类背景各生成 10,000 张,过滤过小放置区域后共 42,285 张。

训练设置

OCR 预训练80,000 SynthText,5 epochs
输入 / 特征640×640 / 160×160×256
优化器SGD,cosine schedule
学习率encoder 10⁻³;decoder 10⁻²
batch size4
inpainting独立训练,输出 256×256

联合解析损失

\[ \mathcal{L}=\mathcal{L}_{\mathrm{ocr}}+\mathcal{L}_{\mathrm{inpaint}}+\lambda_{\mathrm{font}}\mathcal{L}_{\mathrm{font}}+ \sum_k\left(\lambda_{\alpha}\mathcal{L}^{k}_{\alpha}+\mathcal{L}^{k}_{\mathrm{visibility}}+\mathcal{L}^{k}_{\mathrm{param}}\right) \]

字体使用 softmax cross entropy;alpha 与连续效果参数使用 MSE;效果可见性使用 binary cross entropy。论文给出 \(\lambda_{\mathrm{font}}=0.1\)、\(\lambda_{\alpha}=10\)。OCR 与 inpainting 损失分别沿用 CharNet 与 MEDFE。

Supplement Table 3 · 网络配置的完整模块映射

模块层级输入输出
BackboneHourglass → 3 次 stride-2 CONV → upsample → concat输入 3×H×We(x): 256×H/4×W/4
Word detector3×3 CONV 两支 + 1×1 头e(x)前景图 2×H/4×W/4;geometry 32×H/4×W/4
Character detector3×3 CONV 两支 + 1×1 头e(x)前景图与 geometry 各 32×H/4×W/4
Character recognizer3×3 CONV 链 + 1×1 头e(x)94 类字符图
Alpha特征上采样后与原图特征融合,Sigmoid 输出e(x) 与 xfill / shadow / border 三张 H×W alpha
Font3×3 CONV + 1×1 分类头文本框池化特征 256×1×1100 类字体
Effect visibility共享 V1 后两个 1×1 分类头文本框池化特征shadow 2 类;border 2 类
Effect parameters共享 P1 后 Tanh / Sigmoid / linear 头文本框池化特征shadow offset 2;blur 1;border width 5 类

Supplement Table 3 · 逐层配置(36 个数据行,连同表头共 37 行)

ModelLayersKernel, StrideInputInput sizeOutputOutput size
BackboneHour Glass Net-x3×H×WB1256×H/4×W/4
CONV + BN + RELU(3 × 3), (2 × 2)B1256×H/4×W/4B2128×H/8×W/8
CONV + BN + RELU(3 × 3), (2 × 2)B2128×H/8×W/8B3128×H/16×W/16
CONV + BN + RELU(3 × 3), (2 × 2)B3128×H/16×W/16B4128×H/32×W/32
Upsampling-B4128×H/32×W/32B5128×H/4×W/4
CONV + BN + RELU(3 × 3), (1 × 1)B1 and B5384×H/4×W/4e(x)256×H/4×W/4
Word detectorCONV + BN + RELU(3 × 3), (1 × 1)e(x)256×H/4×W/4W1128×H/4×W/4
CONV + BN + RELU(3 × 3), (1 × 1)W1128×H/4×W/4W232×H/4×W/4
CONV + BN + RELU(3 × 3), (1 × 1)W1128×H/4×W/4W332×H/4×W/4
CONV(1 × 1), (1 × 1)W2128×H/4×W/4Text foreground map2×H/4×W/4
CONV + RELU(1 × 1), (1 × 1)W3128×H/4×W/4Text geometry map32×H/4×W/4
Char detectorCONV + BN + RELU(3 × 3), (1 × 1)e(x)256×H/4×W/4C1128×H/4×W/4
CONV + BN + RELU(3 × 3), (1 × 1)C1128×H/4×W/4C232×H/4×W/4
CONV + BN + RELU(3 × 3), (1 × 1)C1128×H/4×W/4C332×H/4×W/4
CONV(1 × 1), (1 × 1)C2128×H/4×W/4Char foreground map32×H/4×W/4
CONV + RELU(1 × 1), (1 × 1)C3128×H/4×W/4Char geometry map32×H/4×W/4
Char recognizerCONV + BN + RELU(3 × 3), (1 × 1)e(x)256×H/4×W/4R1128×H/4×W/4
CONV + BN + RELU(3 × 3), (1 × 1)R1128×H/4×W/4R232×H/4×W/4
CONV + BN + RELU(3 × 3), (1 × 1)R2128×H/4×W/4R332×H/4×W/4
CONV(1 × 1), (1 × 1)R394×H/4×W/4Char recognition map32×H/4×W/4
AlphaCONV + BN + RELU(3 × 3), (1 × 1)e(x)256×H/4×W/4A1128×H/4×W/4
CONV + BN + RELU(3 × 3), (1 × 1)A1128×H/4×W/4A232×H/4×W/4
Upsampling-A232×H/4×W/4A332×H×W
CONV + BN + RELU(3 × 3), (1 × 1)x3×H×WA432×H×W
CONV + BN + RELU(3 × 3), (1 × 1)A3 and A464×H×WA532×H×W
CONV + BN + RELU(3 × 3), (1 × 1)A532×H×WA632×H×W
CONV + Sigmoid(3 × 3), (1 × 1)A632×H×WAlpha for decomposition3×H×W
FontCONV + BN + RELU(3 × 3), (1 × 1)e^{t}_{b}(x)256× 1× 1F1128× 1× 1
CONV(1 × 1), (1 × 1)F1128× 1× 1Font categories100× 1× 1
Effects visiblityCONV + BN + RELU(3 × 3), (1 × 1)e^{t}_{b}(x)256× 1× 1V1128× 1× 1
CONV(1 × 1), (1 × 1)V1128× 1× 1Shadow visibility2× 1× 1
CONV(1 × 1), (1 × 1)V1128× 1× 1Border visibility2× 1× 1
Effects paramsCONV + BN + RELU(3 × 3), (1 × 1)e^{t}_{b}(x)256× 1× 1P1128× 1× 1
CONV + Tanh(1 × 1), (1 × 1)P1128× 1× 1Shadow offset2× 1× 1
CONV + Sigmoid(1 × 1), (1 × 1)P1128× 1× 1Shadow blur1× 1× 1
CONV(1 × 1), (1 × 1)P1128× 1× 1Border weights5× 1× 1

模块概览后完整列出补充材料的 36 个数据行,连同表头共 37 行;逐层表保留原论文输入和输出尺度。Word / character 检测与识别在 \(H/4\times W/4\) 尺度工作,alpha 分支恢复到原图尺度。

Paper vs. ImplementationSupplement Table 3 的通道数存在内部不一致:W2、W3、C2、C3、R2、R3 的输出写为 32 通道,后续层输入又写为 128 通道;字符分类头的输入写为 94 通道、输出写为 32 通道。逐层表保留这些原始数值。官方 src/models/layers/inner_ocr.py 默认中间通道为 128,文字与字符前景头各输出 2 通道,距离头各输出 4 通道,方向头各输出 1 通道,字符分类头输出 94 通道。实际实现还有单独的方向头,不能直接按原表的 32 通道几何头构建模型。该结论来自源码检查,本次没有训练或运行完整论文模型。
Undisclosed论文没有披露总训练 epoch、训练硬件、训练时长、梯度累计、数值精度或随机种子。公开脚本增加了 31 epochs、momentum 0.9 与 weight decay \(2\times10^{-4}\),但其默认学习率和 batch size 与论文报告设置存在差异,不能直接作为论文配置补全。
06 · INFERENCE & EDITING

推理先恢复参数,再把编辑操作变成字段修改

初始解析

一次前馈推理得到 OCR 框、字符、字体、alpha、效果参数和背景。检测不到文字时公开脚本直接结束。

反馈优化

每个词 200 步 Adam,论文报告约 1 分钟。优化发生在 640 像素工作空间;字符与字体 alpha 通过预渲染字典近似。

参数导出

字符仿射结果更新 box;每个词选取“最佳字符”作为几何引导,搜索 font size 和 width scale,计算 baseline 与 offset。

编辑映射

  • 改文字:替换字符串并重新生成 glyph。
  • 改字体:替换 100 类中的 font id。
  • 改颜色:直接写 fill / border / shadow RGB。
  • 改效果:修改边框宽度、阴影 blur 与 offset、可见性。
  • 改位置:修改文本 offset 或导出几何。
  • 改背景:替换或编辑恢复出的背景图。

停止与输出

公开脚本固定运行 200 次优化,没有 beam search、采样、reranking 或早停。最终 Skia 渲染图用于交付,可微重建图用于拟合诊断,pickle 保存参数以便继续编辑。

官方文字编辑动态示例一
官方项目页文字编辑演示:参数空间编辑保持锐利边缘。
官方文字编辑动态示例二
官方项目页样式编辑演示:字体、颜色和效果可独立控制。
07 · EXPERIMENTS

反馈优化稳定提高可微重建,导出到外部引擎时会损失一部分拟合精度

Book Cover 随机取 1,000 张图并用 CRAFT 提取标题区域;Advertisement 随机取 508 张图并评估所有文字区域。指标是平均 L1 与 PSNR。

论文 Figure 4:书封输入、初始重建、优化重建和外部引擎输出
Figure 4(原论文结果,官方仓库图)。从左至右是输入、前馈初值、反馈优化后的可微重建和外部引擎输出;细边框、阴影方向和非对齐文字展示了可解释参数的效果。

Table 1 · Reconstruction performance(完整重建)

数据集方法L1 ↓PSNR ↑含义
Book cover
1,000 images
Feedforward0.1529.22前馈解析初值
With refinement0.0830.02可微渲染内的最佳拟合
External rasterizer0.1829.73导出参数后 Skia 重渲染
Advertisement
508 images
Feedforward0.1628.77前馈解析初值
With refinement0.0929.37可微渲染内的最佳拟合
External rasterizer0.1929.16导出参数后 Skia 重渲染
Paper Verified反馈优化在两套数据上都提高 PSNR:Book Cover +0.80 dB,Advertisement +0.60 dB。外部 rasterizer 相对前馈的 PSNR 仍分别高 0.51 dB 与 0.39 dB,但 L1 反而更差。论文只验证了可微重建与外部渲染之间存在差距。
Our Interpretation参数导出、字体度量和渲染器近似可能共同造成外部渲染差距;实验没有分别隔离这些因素。

Table 2 · Component contribution(完整消融)

Book Cover 设置PSNR ↑相对 Full证据解释
Full refinement30.02—完整优化
Without color refinement29.53−0.49覆盖面积大的颜色误差影响最大
Without font refinement29.78−0.24字体概率优化有可测贡献
Without shadow refinement29.79−0.23阴影区域较小,PSNR 敏感度有限
Without border refinement29.99−0.03细边框占像素少,PSNR 几乎不变
No refinement29.22−0.80完整反馈阶段的总体增益
Evidence Boundary这一消融只报告 Book Cover 的 PSNR,没有文字识别、字体分类、效果参数、编辑成功率或用户研究。小区域效果的 PSNR 变化小,无法证明边框与阴影优化没有感知价值。
论文 Figure 5:广告图像的重建与文字编辑
Figure 5(原论文结果,官方仓库图)。广告图像具有多种长宽比和复杂文字布局;示例显示重建与编辑可以覆盖多个区域。

与 SRNet 的比较

论文只给出 Figure 6 定性比较。SRNet 接收源风格图与目标文字 mask,在像素域生成新文字;本文用外部引擎生成目标 alpha,再以恢复参数重渲染。作者观察到 SRNet 的直线和字符边缘常出现小伪影。

公平性限制

没有量化指标、同预算训练说明或用户研究。两者的输出表示、训练目标和输入接口不同;这组结果支持“参数化渲染能保持锐利边缘”的示例性判断,无法建立全面的 state-of-the-art 优越性。

08 · PAPER VS IMPLEMENTATION

公开仓库提供推理与编辑代码,训练复现需要恢复论文配置

审计基于官方 GitHub commit 5661702f4c83233bc7a8c4558ee3fc6733838b5b。

训练默认值不等于论文设置

train.py 默认只指向临时纯色数据;论文五类数据路径位于注释模板中。CLI 默认 batch size 8,论文为 4。trainer 把 backbone 设为 0.01、text parser / down 设为 0.1,均比论文报告的 0.001 / 0.01 大 10 倍。

隐藏的反馈优化启发式

公开实现前 100 次迭代同时模糊目标和重建,sigma 从接近 10 逐步降到 0;论文正文只说明 Adam 与 200 iterations。该 coarse-to-fine 技巧会显著影响收敛。

离散搜索的真实稀疏度

fill alpha 对字体保留 top-20,对字符固定 top-1;border 对字体与字符均固定 top-1,只混合 5 档宽度。文字内容因此完全由 OCR 决定,反馈阶段不能纠正字符误识别。

导出后处理

代码对每个词选取重建误差更可靠的字符框,分别向上与向下最多搜索 1,000 个 font size 候选,再求 width scale。论文只概述为 grid search,公开实现揭示了边界和最佳字符启发式。

发布资源

仓库提供预训练权重链接、100 字体包链接、预渲染 alpha 生成脚本、测试脚本、数据生成器、训练代码和编辑 notebook。Google Fonts 目录后来变化,README 已要求下载固定字体归档。

仍未封闭的复现信息

真实五类训练数据目录、准确版本锁定、预训练 CharNet 权重来源、训练硬件和时长均未在仓库配置中封闭。默认训练路径用于 quick start,不能直接复现论文表格。

09 · REVIEWER

表示选择清楚、编辑能力真实,实验覆盖和开放世界泛化仍然有限

Strengths

  • 将 OCR、inpainting、样式解析和可微优化组合成可解释表示。
  • 最终输出能被标准图形引擎执行,编辑语义直接且分辨率无关。
  • 预渲染 alpha 让离散字体参与梯度优化,设计简洁有效。
  • 补充材料与代码公开了分支配置、生成器与编辑接口。

Weaknesses

  • 100 字体封闭集与三种固定效果限制真实设计覆盖。
  • 字符识别错误在反馈阶段被冻结,视觉拟合无法修正内容。
  • 测试时每词约 1 分钟,复杂海报会线性累积开销。
  • 核心比较以定性 Figure 为主,缺乏文字正确率与编辑感知评估。
  • 外部 rasterizer 与可微近似仍有明显误差。

Potential Improvements

  • 用可检索字体库或 glyph embedding 处理开放字体集合。
  • 联合字符候选搜索与视觉重建,允许反馈阶段纠正 OCR。
  • 学习可微字体度量与外部 renderer 校准,减少导出误差。
  • 加入纹理、渐变、混合模式和多层效果的可组合程序表示。
  • 以局部裁剪、缓存和并行优化降低多文字区域延迟。
Research Extension这套方法可以推广到程序化材质或 shader graph 的逆向恢复:前馈模型预测可执行节点与参数,可微 renderer 用目标图像修正连续参数,真实引擎完成最终验证。关键研究问题会从“字体候选有限”扩展为“图拓扑和节点类型离散”,需要 constrained decoding、graph repair、renderer feedback 和 test-time search。该方向属于研究设想,论文没有实验验证。

事实层级

Paper Verified
两数据集重建表、Book Cover 组件消融、可编辑参数和定性示例。
Author Claim
基本三类效果覆盖多数展示媒体文字;论文没有给出覆盖率统计。
Our Interpretation
受限逆向图形学与程序恢复视角,以及对材质图生成的研究延伸。
10 · SOURCES

一手资料与核查范围

  1. CVF ICCV 2021 Open Access:正式题名、作者、页码、主文 PDF 与 4 页 supplementary material。
  2. arXiv:2110.01890:可检索公式与附录 HTML。
  3. 官方项目页:概念图、流程图、优化动画、编辑演示和结果图。
  4. 官方 GitHub 仓库:模型、训练、反馈优化、Skia 导出、数据生成与编辑 notebook;核查 commit 5661702f4c83233bc7a8c4558ee3fc6733838b5b。
  5. 本地 ICCV 正式 PDF:10 页正文;官方 CVF supplement:4 页。网页完整重建 Table 1 与 Table 2,并根据 Supplement Table 3 整理全部分支配置。

通讯作者:PDF、CVF 页面、项目页与仓库均未显示明确 correspondence 标记;Kota Yamaguchi 只按末位作者规则保留为未核实候选。