可控人脸生成
对于可控人脸生成,优先解决人脸生成的问题,目前有三种生成的方式GAN、VAE、Diffusion三种模型,主流的选型为Diffusion Model,通过进行调研,目前主流的生成模型几乎为Diffusion Model。
- 文本生成图像
- 通过控制条件生成图像
- 文本生成视频
- 生成图片检测
文本生成图片
- OpenAI发布了Dalle系列,首先通过余弦相似度计算图像与文本的对比损失预训练一个文本与图像的对齐模型,第二步将文本通过对齐模型的文本编码器得到的文本embedding通过一个diffusion model变为图像embedding,再将图像embedding去生成一个64x64的图像,后续再接入两个Supper Diffusion Model将图像变成256x256和1024x1024.
- Imagen系列,直接采用预训练大规模的文本编码器,将文本通过编码器得到文本embedding,再通过diffusion model得到64x64的图像,后续同dalle系列的操作接入两个超分网络,增加图像的分辨率。
- Stable Diffusion(Latent Diffusion Model),和前系列最主要的区别在于,图像diffusion过程是在潜在空间进行完成,能极大程度减少推理时间。图像通过VAE等编码器,将图片维度由256x256等维度放到64x64的维度,整个扩散模型文本生成图片,变成文本生成64x64的潜在空间图像,再由VAE的解码器将64x64的潜在空间图像变为256x256的标准图像。
我们目前是采用Imagen的架构和Stable Diffusion的架构,这里我主要讲解一下我目前的情况及其遇到的问题以期待下一步解决。 我从Github上拉取了一个高星的实现,由于其提供的训练器不太好用,我将其改为我们之前代码的训练方式(即BLIP官方代码那种),添加了无文本的训练、有文本的训练、有文本的多卡训练、有文本的带超分的训练。对于无文本的训练,效果较好能达到使用水平。对于带文本的训练和其多卡训练,目前效果不行,loss下降较慢,可能与其主要的unet架构有一定的关系,也有FLIP的文本编码器不是特别大有关系(下一步要不要使用dalle的方式加一个diffusion模块将文本embedding变成图像embedding)。对于带文本的超分训练,效果较差,并且发现带有超分之后经常爆显存,只能减小超分网络的大小,这样又有一个问题,A6000的显存是48G,而A100是40G,我们的多卡是采用数据并行,对此相当于每一个卡都加载一个模型,是否需要改为模型并存。
对于该阶段,进度相对较慢,在寒假期间需要加快推进。
通过控制条件生成图像
目前主流的控制方式我所熟知的是Control net,还有昨天了解那篇Imagic。对于control net来说是使用文本+控制的canny等信息得到图片。
文本生成视频
其基础还是文本生成模型,加上一个时间序列。目前相似类型的工作为视频生成视频,图片生成视频,文本生成视频。
生成图片检测
Towards Universal Fake Image Detectors that Generalize Across Generative Models
我目前看了几篇文章,对于这篇文章觉得有点搞头。这篇文章的检测方式是将图像通过CLIP的图像编码器得到图像embedding,然后将图像embedding通过最近邻算法进行分类,然后得出不错的结果。我们是否针对人脸图像的检测,使用flip进行检测,然后使用粒球进分类。