DreamPose: Fashion Image-to-Video Synthesis via Stable Diffusion
讲任务:给一张图片和一段人类 body pose, 生成包含人类和织物的动作(就是说在animated过程中, 衣服花纹保持很好). 讲方法:基础模型是sd(text-to-image), 通过修改结构和微调策略支持添加额外的信号. 讲效果: 在fashion数据集上达到SOTA效果.
介绍
讲动机: 从社交媒体到零售平台, 时尚摄影都十分流行. 静态图片的传达信息有限, 不能捕捉到衣物的细微差别, 时尚视频, 在消费者做出决定中起重要作用.
讲任务: 给一张或多张图片和一个pose序列, 生成一个高质量的视频, 输入对象跟随pose序列.
讲难点: 1)纹理的运动, 卡通般的外观 2)糟糕的时间连续性, 分析原因是text控制下的sd, 对于其他控制信号, 可能需要更多的微调.
讲方法: SD已经能高效预测自然图片的分布, 以此为基础可以将任务简化为找到与条件信号一致的子空间. 重新设计了sd的编码器和条件控制机制, 两阶段微调策略微调UNet和VAE.
相关工作
Diffusion模型
Diffusion在文本条件下的图片生成, 视频生成, 3D生成任务下表现了杰出的效果. 从头训练计算成本高, 要求大量数据, Latent Diffusion在Latent Space中去噪, 极具缩减了计算成本, 生成质量只轻微减低. sd运用了这种技术, 它的预训练checkpoint被广泛应用.
静态图片动画化
从一张或多张图片生成视频. 非diffusion的方法通过多个分离的网络实现, 每一步要单独训练, 而且中间步骤的真实值可能很难获取. 近年有一些端到端的方法, 交叉注意力替换运动评估网络, 使用NeRF表示生成3D动画.
Fashion图片生成
之前是GAN的方法, 依赖optical flow对齐图片和pose, 这种方法难以保持衣服的风格, 没法生成遮挡的区域, 没法应对大的pose改变. 最近出现attention的方法, 通过cross-attention将image特征添加到目标帧.
下面就介绍了几种diffusion的方法, PIDM用了101,996张图片对, 在4张A100上跑了26天, 而本文的方法使用323个视频, 在2张A100上跑了2天.
Diffusion Model视频生成
很多text-to-video依赖text-to-image模型, 由于克服不了时间连续性的问题, 难以到达image任务的逼真度. 也有些方法从从开始训练, 对计算与数据要求很高. Tune-A-Video这种方法通过微调预训练的diffusion模型实现视频生成, 但是在Fashion数据集上表现出了纹理闪烁和结构不一致.
Diffusion Model条件控制
文本控制很受欢迎, 在控制高水平细节上很高效, 但是不能提供一个人pose或IP足够充分准确的信息.
下面介绍了几种方法, DreamBooth学习一个唯一的token去表示一个特别的对象, 其他人通过文本去编辑现有的图片或视频, PIDM使用单独的纹理编码器编码纹理, 并把目标pose和输入噪声连接起来. 本文的方法合并图片嵌入在UNet的cross-attention层, 图片嵌入来自CLIP和VAE.
背景
Diffusion方法作为一种生成模型最近超过了GAN, 标准的Diffusion模型从随机噪声分布迭代的恢复成一张图片. SD通过Latent Space节约计算时间, 牺牲极小的生成质量, 包含VAE和去噪UNet.
接着讲了一下这个公式:
这里划重点: Classifier-free guidance是一种采样方法, 通过隐式分类器将预测噪声的分布推向条件分布, 在训练过程中, 有一个随机概率, 会把条件输入换成空输入.
方法
概览
依赖sd, 输入的图片和一系列图片条件控制. 在推理阶段, 使用统一分布的高斯噪声, 独立的生成每一帧, 最后通过解码器得到目标视频.
结构
拆分CLIP-VAE编码
InstructPix2Pix(风格迁移的模型)通过直接连接图片控制信号和输入噪声的方式生成新图片, 这要求输入和输出的空间对齐. 本文探索了另一种方式, 把CLIP文本编码器换成了结合CLIP和VAE的编码信息, 和一个自定义的条件适配器.
一个关键目标是让训练目标尽可能的有意义, 使输入信号尽可能接近原始网络训练中使用的信号, 这帮助避免微调过程中表现退化. 大多数的diffusion方法选择保留原始的输出, 然后把新的输入信号参数设置为0.
SD将image与text通过CLIP使用同一个嵌入空间, 本文发现CLIP图片嵌入不能捕获到足够精细的细节, 因此它们加上的VAE编码器.
但是默认的结构不支持VAE潜在空间作为输入, 又添加了一个适配模块, 联合VAE和CLIP嵌入, 刚开始的时候为了避免训练过程中的network "shock", VAE的权重设置为0.
修改的UNet
pose条件和最终生成的图片是对齐的, 因此可以直接与输入噪声相加. 它们观察到用单一的pose训练容易出现抖动, 但是用5个连续的pose训练就不容易出现抖动. 就结构上而言, 他们修改UNet接受10个额外的输入通道(老实说这里没读懂).
微调
初始化使用预训练的SD checkpoint, CLIP checkpoint.
第一阶段在完整数据集上微调UNet和适配器模块, 为了生成pose和输入图片对齐的帧. 第二阶段针对特定图像微调.
单一的帧-pose对上训练很快出现伪影, 为了防止这个, 应用数据增强技术, 如随机裁剪.
同时发现微调VAE编码很重要, 恢复更多逼真的细节.
pose和图片 Classifier-Free Guidance
双Classifier-Free Guidance, 通过和控制:
数据集
UBC Fashion dataset
结果
定量实验选了三个模型, 几个评价指标, 所有结果都是最好的.
定性实验, 从人物IP, 布料褶皱, 精细图案这三个角度与其他方法比较, 认为本文模型最好.
消融实验: 1)预训练的CLIP代替自己的CLIP; 2)不使用VAE编码器; 3)只连接单一pose; 4)对输出帧应用时间平滑; 5)全方案
限制&未来工作
肢体消失, 幻觉, 方向不对齐. 猜测扩大数据集或者分割掩码可以解决. 另外在大的图案上有轻微的闪烁.
感受
可以感觉到真的读过大量的文献, 有自己的理解, 在此基础上有自己的创新. 每一步都有理可寻, 没有任何就该这样的说教, 这种写作风格很适合我这样的初学者阅读.
印象最深的是它的一个观点, 为了充分利用SD的生成能力, 我应该使输入信号尽可能接近原始网络训练中使用的信号. 还有增加VAE嵌入的方式也很喜欢, 先保持原参数不变, 再慢慢的增加自己改动.