MangaNinja: Line Art Colorization with Precise Reference Following

introduce

目标:输入目标线稿、参考彩色图(同一角色、但姿态/尺度/视角可能差很多)、(可选)用户给的匹配点​,输出:彩色结果,要求颜色与身份细节跟参考图一致 ,并且结构跟线稿一致

训练对:anime video:同一角色跨帧身份一致,但会出现缩放、姿态变化、旋转、遮挡、细节缺失。从同一个视频片段里随机抽两帧 ,一帧当参考,另一帧当目标;对目标帧用现成线稿提取器得到 line art。训练时再用 LightGlue 从两帧里提对应点对,作为"伪标注"的稀疏对应监督。


method

核心架构:双分支(Reference U-Net + Denoising U-Net)

MangaNinja 本质是一个 latent diffusion 的改造:用 VAE 把图压到 latent,再在 latent 空间做扩散去噪。论文里明确参考图先编码成 4 通道 latent 再送入 Reference U-Net。

2.1 Reference U-Net

作用:把参考图"拆开揉碎"成多层特征。

作者说 line art 上色"细节要求很严",难点在于要把参考图编码得足够细粒度,所以引入额外的 Reference U-Net 专门抽参考图多层特征。可以理解为:multi-level feature bank

2.2 Denoising U-Net

做扩散去噪,但条件不是文本,而是"线稿 + 参考图 + 点"主干去噪网络。输入条件有三类:

  1. 线稿结构条件。 把单通道线稿复制成 3 通道后,也走 VAE 压到 latent;然后与噪声 latent 拼接 ,最终输入变成 8 通道 (噪声 latent 4ch + 线稿 latent 4ch)。

    (也试了把线稿走 ControlNet,效果差不多,但为省资源选了拼接方案。)

  2. "参考图语义提示"条件:CLIP 图像 embedding 替代文本 embedding。 直接把原本扩散模型里的 text embedding 换成 CLIP encoder 提取的 image embedding。把"提示词"变成了"参考图的全局语义/风格提示",但真正的精细对齐靠下面的注意力融合与点引导。

  3. 点引导条件:PointNet 产生的点特征

    这个是 3.3 的重点,后面展开。


参考特征怎么注入主干去噪(注意力层 K/V 拼接)

很多 reference-guided 方法会在 cross-attn 上做文章,但 MangaNinja 的关键点是:

把 Reference U-Net 与 Denoising U-Net 在对应层的 self-attention里做融合------

具体做法:在 Denoising U-Net 的某个 self-attn 层,用目标分支的 Qtar去同时 attend:

  • 目标自己的 Ktar,Vtar

  • 参考分支的 Kref,Vref

写成论文公式(Eq. 1)就是把 K/V 直接 concat:

  • 同一层里,目标 token 不仅能看自己,还能看参考分支对应层的 token。

  • 多层(multi-level)都这么注入,就等于给了一个"从粗到细"的参考检索通路。

Progressive patch shuffle for local matching

(逼它学局部对应,而不是偷懒学全局风格)

观察到:线稿给的结构太强了,模型很容易只做粗全局匹配(比如整体色调/风格搬运),结果局部语义对齐学不牢,这会直接破坏"精确参考跟随"这件事。

所以提出 progressive patch shuffle

  1. 把参考图切成小 patch

  2. 随机打乱 patch 的位置,破坏整体结构一致性

  3. 这样模型没法靠"整体轮廓相似"偷懒,只能学更细的局部线索(甚至像素级)去建立对应关系

coarse-to-fine:打乱强度从弱到强,patch 网格从 2×2逐步加到 32×32。

当成"课程学习":

  • 早期:还允许一些全局线索

  • 后期:几乎逼着你必须会局部语义匹配

另外还配合翻转、旋转等增强,让参考与目标差异更大。


2.3 Fine-grained Point Control

细粒度点控制(PointNet + 注意力注入

动机:哪怕有隐式对应学习,线稿仍会丢掉很多彩色细节(阴影、花纹、局部材质),导致对应歧义;而工业流程里也需要一个轻量交互方式。

点对怎么表示:把匹配点对表示成两张与输入同分辨率的单通道点图(point maps):

  • 对每一对匹配点,在参考点图与线稿点图的对应坐标上,填入相同的整数 ID(比如 1,2,3...)

  • 其它位置为 0

  • 训练时随机采样最多 24 对,也允许采 0 对(意味着推理时也可以完全不用点,靠自动匹配)

这等价于在空间上给模型一个"稀疏但无歧义"的锚点集合。

PointNet 编码与注入方式(Eq. 2)

作者这里的 PointNet 不是经典点云 PointNet,而是"卷积堆叠 + SiLU"把点图编码成多尺度 embedding

然后把点 embedding 注入注意力:他们不是 concat,而是加到 Q 和 K 上(相当于对注意力相似度打偏置),公式 Eq. 2:

再用 Qtar′去 attend [Ktar′,Kref′]。

直观理解:点 embedding 会让"点附近/同 ID 的位置"在注意力里更容易互相对齐,从而把参考图的颜色细节更确定地拉到线稿对应部位。

点控制与 patch shuffle 的配套:坐标要跟着 shuffle 调整

如果参考图 patch 被打乱了,那么点图的坐标也必须按同样 shuffle 规则调整,否则点对就对不上了。

训练与推理的关键策略:Condition Dropping、Multi-CFG、Two-stage Training

Condition dropping:让模型"别太依赖某一个条件"

常见的 condition dropping:

  • 随机丢掉线稿条件

  • 逼模型在没有线稿结构提示时,也要能从参考图重建目标图,从而提升生成能力

更重要的是对点控制的帮助:当线稿被 drop 时,点对这种稀疏但精确的信号会迫使模型学会"看到点就要对齐"。

Multi classifier-free guidance

把"参考跟随强度"和"点控制强度"拆开调。推理时用多路 CFG,把三种预测组合起来(Eq. 3):

  • 无条件:ϵθ(zt,∅,∅)

  • 只有参考:ϵθ(zt,cref,∅)

  • 参考 + 点:ϵθ(zt,cref,cpoints)

并用两个系数分别控制:ωref与 ωpoints。

  • ωref越大 → 越依赖"自动匹配 + 参考跟随"

  • 想做更复杂、自动对不齐的任务 → 提高 ωpoints放大点的影响力

Two-stage training

  1. 第一阶段:同时对参考和点做 dropping,学会三件事:无条件生成、参考对齐、点对齐

  2. 第二阶段:只训练 PointNet(其他模块不动),强化 PointNet 编码点图的能力,从而更强点控

experiment

相关推荐
R.X. NLOS1 天前
知识点1:DDPM数学原理及理解
大模型·大厂面试·扩散模型·ddpm·数学原理
scott1985125 天前
DIFIX3D+: Improving 3D Reconstructions with Single-Step Diffusion Models
人工智能·计算机视觉·扩散模型·生成式
AI生成未来7 天前
复刻“黑客帝国”子弹时间!SpaceTimePilot:视频变可操控4D游戏,倒放/变速/运镜随你掌控
人工智能·aigc·扩散模型·视频生成
盼小辉丶9 天前
PyTorch生成式人工智能(30)——扩散模型(Diffusion Model)
pytorch·深度学习·生成模型·扩散模型
这张生成的图像能检测吗1 个月前
Wonder3D: 跨域扩散的单图像3D重建技术
pytorch·深度学习·机器学习·计算机视觉·3d·三维重建·扩散模型
海边夕阳20061 个月前
【每天一个AI小知识】:什么是扩散模型?
人工智能·经验分享·深度学习·机器学习·扩散模型
Echo_NGC22371 个月前
【DDPM 扩散模型】Part 7:最后总结!Denoising Diffusion Probabilistic Models论文全维度详解
人工智能·深度学习·神经网络·扩散模型·ddpm·高斯噪声
豆芽8191 个月前
计算机视觉:异常检测(paper with code汇总更新中)
人工智能·神经网络·计算机视觉·视觉检测·扩散模型
JOYCE_Leo161 个月前
Learning Diffusion Texture Priors for Image Restoration(DTPM)-CVPR2024
深度学习·扩散模型·图像复原