AI技术本质是数据驱动(Data-Driven),模型能有效学习庞大数据,需要与数据规模相匹配的可学习参数规模(也要有对应的算力)
因此,技术可分为两条主线:
-
数据
- 数据如果在模型外,主要就是数据集,更多是质量和标注的问题,即预处理
- 数据如果在模型内,则主要操作的是潜空间(Latent Space),
- 接近模型输入输出的层,离像素图比较近,称为特征图Features / Feature Maps
- 接近模型内部,是比像素更低维的向量,称为潜向量(Latent Code)
-
模型
AIGC模型即生成模型,基本是自编码器的结构,即模型包含两个部分,编码器和解码器可以概述为5类
- 自回归类(GPT)
- 生成对抗网络(GAN)
- 流模型(Flow)
- 变分自编码器(VAE)
- 扩散模型(SD)
1.当前基线
当前开源性能最好的模型是 Stable-Diffusion-v1.5 (SD),
- 潜空间用到了 Latent SD,
- 文生图部分用到了GPT的模块attention QKV
- 训练用到了VAE和GAN
2.当前应用
主要是文生图、图生图(图像编辑、风格迁移)、视频合成,其中“文生图”是主要部分,方法根据主线分为2类:
2.1 推理—数据层面方法
主要是改变潜空间去噪过程的latent code,即推理过程。注入其他语意、图像、时序信息
2.2 微调—模型层面方法
由于SD模型参数已经足够大,且其预训练的数据集也足够大,更多应用改进只能使用局部参数学习和局部数据。
主要是在固定预训练模型参数的基础上,微调局部参数、如增加一些层,或者加入新的模型配合。
3. 代表性方法
3.1 推理类
- FreeU
这个工作思路是: 发现SD的U-Net各层block中:
- 跳跃连接(skip connetions)的层输出features在傅立叶变换后是<低频分量,s>,即图像的全局结构,包括全局布局和平滑颜色,该分量变化缓慢,对噪声不敏感。
- 其他层(backbone)输出的是<高频分量,b>,即图像的边缘和纹理信息。这些细节变化较大,即对噪声非常敏感。
2类分量的去噪生成效果是这样:
去噪过程需要在擦除噪声的前提下,同时保持重要且复杂的细节,该方法就是放大<低频分量,b>的权重,减小<低频分量,s>的权重,以提升图像生成的效果。
效果如图:
3.2 微调类
- ControlNet
这个思路也是:冻结SD的模型参数,复制模型的每一个block,并在copy的block上下增加一层convolution(初始参数为0)。
这样就得到了一个每个block多2层的复制模型,用于像素级标签(condition)的输入,并训练这个复制模型,使得SD可以根据conditon生成对应目标
效果是这样:
- 第1行是条件:
- 后两张是第1列是条件
- 微调随着迭代次数的效果:
Reference
- https://zhuanlan.zhihu.com/p/696838411
- https://www.explinks.com/blog/wx-diffusion-model-practice-part-thirteen-controlnet-structure-and-training-process/
- FreeU: Free Lunch in Diffusion U-Net
- Adding Conditional Control to Text-to-Image Diffusion Models
- https://github.com/AUTOMATIC1111/stable-diffusion-webui