InsightTok 解读:让离散视觉 Tokenizer 把「文字」和「人脸」也重建清楚

一句话概括:InsightTok 用两个"局部化、内容感知"的感知损失,专门把文字人脸这两类人眼最敏感的区域重建清楚,几乎不增加训练成本,也不改下游生成管线,而且这种提升能直接传递到自回归图像生成。

论文:InsightTok: Improving Text and Face Fidelity in Discrete Tokenization for Autoregressive Image Generation (arXiv:2605.14333,清华 & 微软研究院)。模型与代码已开源:HuggingFace


一、背景:离散 Tokenizer 为什么总把文字和人脸搞糊?

离散 tokenization(VQ-VAE/VQGAN 那一套)是当下自回归图像生成、以及统一多模态大模型的基石:一张连续图像被编码器映射成下采样后的网格,每个网格向量量化到一个有限码本里的离散 token,再由解码器重建回图像。在 token 空间建模,AR Transformer 就能像处理语言一样"逐 token 生成"图像。

问题在于:16× 的激进空间下采样 + 量化会不可避免地丢掉细粒度结构。而最先崩掉的,恰恰是文字和人脸------文字会糊到不可读,人脸会丢身份特征。这两类内容在认知上又是人最敏感的(心理学研究表明人会不成比例地关注文字和人脸,对其失真极其挑剔),在海报设计、人像生成、身份保持编辑等场景里也最关键。

过去的解法基本是"减小压缩率":把码本做大、或者每张图给更多 token。代价是计算和建模复杂度大涨,而且它本质上并没有"优先保护"关键结构。

InsightTok 的判断是:根因不是码本太小,而是监督信号不对齐

  • 标准的像素重建损失 + LPIPS 是为"通用重建"设计的,对文字可读性身份保持并不敏感;
  • 文字/人脸往往只占整图很小一块面积,它们的训练信号会被周围的大片背景稀释;
  • 结果是:在紧绷的离散瓶颈下,模型几乎没有"选择性压力"去保住这些高价值细节。

二、方法:在标准损失上加两项"内容感知"感知损失

标准 tokenizer 的训练目标是:

复制代码
L_image = L_rec + β·L_codebook + γ·L_perc + η·L_GAN

即 像素重建 + 码本承诺损失 + (LPIPS)感知损失 + 对抗损失。InsightTok 只是在它之上加了两项:

复制代码
L_InsightTok = L_image + α₁·L_text + α₂·L_face

2.1 文字感知损失 L_text

  1. 离线检测 :在 LAION 上用文字检测器(DB)标注出所有文本框 {b_text}
  2. 配对裁剪:把原图 x 和重建图 x̂ 在同一个框里裁出来,统一 resize 到 32×128 的 banner 形状;
  3. 特征空间比对 :送进一个预训练的文字识别网络(ABINet 那类),取 5 层中间特征,计算原图区域与重建区域的逐层特征 L2 差异。

直觉很简单:不再比像素,而是比"识别网络眼里这块字像不像同一行字"------这才和可读性对齐。

2.2 人脸感知损失 L_face

  1. 检测 + 关键点:用人脸检测器(ArcFace 配套)得到人脸框和 5 个关键点(双眼、鼻尖、两嘴角);
  2. 对齐到模板:用相似变换(缩放+旋转+平移)把人脸 warp 到 112×112 的标准模板,消除姿态/尺度/角度差异;
  3. 特征空间比对 :把对齐后的原图脸 / 重建脸送进 ResNet50 人脸识别网络,取多层特征算差异。

比的是"识别网络眼里这是不是同一个人",直接对齐身份保真度。

2.3 关键 trick:面积加权聚合

这是全文最值得抄的一个细节。每个区域的损失按 区域面积 / 整图面积 加权:

复制代码
w_n = Area(b_n) / Area(x)

为什么要降权小区域?因为小文字/小脸天生最难重建、特征误差最大,如果不加权,这些小而难的区域会主导整个优化,把其他区域的通用质量(rFID / PSNR)拖垮。论文消融证实:去掉面积加权,专项指标是上去了,但 rFID/PSNR 明显恶化。面积加权是平衡"专项提升 vs 通用质量"的关键。

2.4 两个工程上的好处

  • 几乎零额外开销 :所有检测都在数据预处理阶段离线完成 ,不进训练循环,训练相比 vanilla VQGAN 只增加约 2% 开销;
  • 推理零改动:检测/识别网络只在训练用,推理时就是一个普通 VQGAN 的 encode/decode,下游 AR 生成管线完全不用改。

三、实验结果

训练配置 :Tokenizer 426M 参数,下采样 16×,码本 16384,embed dim 256,256² 训练。三阶段:① 标准目标预训练 200k 步 → ② 加 L_text/L_face 训 40k 步 → ③ 冻结 encoder+quantizer,只微调 decoder 40k 步精修。下游 InsightAR 沿用 Janus-Pro 架构(7B MLLM + MLP adapter),只把 tokenizer 换成 InsightTok。

重建(TokBench 基准)

  • 相同压缩率下,文字准确率 T-ACC 比次优的 IBQ 高 28.89 个百分点 ,人脸相似度 +0.09
  • 即便对手 Emu3.5-IBQ 用了 131k 的大码本,仍被 16k 码本的 InsightTok 超越;
  • 同时 PSNR > 23.6,通用区域质量不掉------专项增强没有牺牲非文字非人脸区域。

自回归生成

  • 人脸(密集人群场景,MagFace 评分)和长文本渲染(T-NED)都在同 token 数的 AR 模型里最优;
  • GenEval / DPG 等通用文生图指标与 Janus-Pro 持平------targeted 增强不损害通用生成能力。

几个有意思的消融

  • 只微调解码器收益甚微 (T-ACC 24.15 vs 全模型 40.64)→ 证明增益来自更精细的潜在表示,而非更强的解码器;
  • 优于全局监督的 OCR-VQGAN(40.64 vs 28.19)→ 局部化监督比全局监督更有效;
  • 在 16k 和 65k 码本上都稳定涨点 → 方法可随瓶颈容量 scale。

四、上手:代码怎么用

InsightTok 就是标准的 VQGAN 自编码接口:

python 复制代码
# 编码:图像 -> 离散 token
latents, _, [_, _, indices] = vq_model.encode(input_image_tensor)
# 解码:token -> 重建图像
recon_image_tensor = vq_model.decode(latents)

仓库自带一个重建 demo(checkpoint 缺省会自动从 HuggingFace 下载):

bash 复制代码
python recon_demo.py \
  --ckpt_path <model-checkpoint-path> \
  --input assets/valset \
  --output outputs/recon/all_compares.png \
  --image_size 512

需要注意的两个工程细节:输入按 x*2-1 归一化到 [-1,1]、NCHW;重建走的是保宽高比 paddingsmart_padding LANCZOS 缩放居中补边 → restore_original 裁回原尺寸),保证任意分辨率输入都能无损还原尺寸。

五、小结与启发

InsightTok 的价值不在于复杂,而在于它指出了一个被长期忽视的方向:tokenizer 的训练监督,可以也应该是"内容感知"的,而不是对所有区域一视同仁地做通用重建。

可以直接借鉴的三点:

  1. 用任务专用的识别网络做感知损失,比通用 LPIPS 更贴合"可读性 / 身份"这类语义目标;
  2. 对齐到标准模板再比特征(人脸 warp 到 112²、文字 resize 到 banner),消除几何 nuisance;
  3. 面积加权防止小而难的区域主导优化------这是让"专项提升"和"通用质量"不打架的关键。

更大的意义是:它把"减小压缩率"之外的另一条路走通了------与其给更多 token,不如把有限 token 花在刀刃上。对做离散表示、统一多模态、文生图渲染文字的同学,都值得一读。

论文:arXiv:2605.14333 | 模型:huggingface.co/yueyang2000/InsightTok