AIGC项目相关全回顾
在StyleGan系列时代,AIGC还只是实验室的产物,即使DALL-E出现,仍然没有普及,但是自从stable diffusion横空出世,整个AIGC领域进入了飞速发展期,随后ChatGPT火遍全球,打通了text-image的最后一环。
基于开源实现的一个标准数字人目前的最优方案:ChatGPT出prompts+text,MidJourney出图,Elevenlabs进行text2speech,最后由D-ID进行唇形驱动。
而基于各个公司的私有解决方案,无非是替代了这其中的某个环节,辅以自研技术。
Image Generate
Image Generate的核心是Nvida的StyleGan三部曲。
StyleGAN1基于PGGAN(Progressive Growing GAN)做改进,PGGAN的generator从4x4渐进式的upsample到1024x1024,渐进式学习图像特征,StyleGAN1为了精细化控制图像生成的质量,创造性的提出了latent space,也就是隐变量W,主要创新点如下:
- 使用FC构建Mapping Network,由图像获得1x512的latent,进行图像特征的解耦
- 样式控制AdaIN,将W经过一个affine transform变为scale+bias的加权因子,在conv+norm后施加给不同尺度的生成器中,来提供样式信息
- 4x4输入使用常值,减少特征纠缠(使得信息全部由W提供)
- AdaIN之前向每个通道增加一个随机噪声,增加生成图像的多样性
此外还使用bilinear sampling(双线性采样)代替nearest sampling等trick提升效果。
由于图像变为了latent space中的latent,也就是W,从而延伸出了一些trick,包括style mix和truncation,style mix可以将两个W的特征融合,truncation对特征截断,可以在图像生成时控制图像的差异程度。
SPADE可以顺带提一下,因为nvidia的视觉团队很擅长利用normalize做文章,SPADA将semantic mask变换为scale+bias变成了spatial adaptive normalization,使用pix2pixHD的generator结构,实现了semantic image synthesis,产出主要是互娱项目,小孩通过笔画即可生成图像,参考神笔马良项目。
Pix2Style2Pix也可以顺带提一下,很多基于StyleGAN的工作,大部分为了提升特征控制的稳定性,psp使用feature pyramids(特征金字塔)结构替代了StyleGAN的FC结构,希望获得更稳定的人脸编辑效果。
update. 以色列特拉维夫的STIT(stitch it in time)基于StyleGAN做了基于视频前后帧的更稳定的人脸编辑
StyleGANEX 使用dilated conv构建generator,编码使用psp结构,实现了对未对齐面部更好的编辑效果
StyleGAN2认为AdaIN造成了生成图像中存在的水滴(伪影),于是使用权重解调(weight demodulation)修改了AdaIN,normalize过程中不再需要mean,只需要计算std,并将noise移出style模块。
此外学习resnet skip-connection结构,在generator和discrimator的中间层增加了连接,利用不同尺度信息,扩大网络规模;
使用lazy regularization,提高评估loss速度;
使用path length regularization,对生成器图像到latent求一个梯度(jacobian matrix)计算loss,使图像到latent的过程更加线性。
StyleGAN2-ada(adaptive discriminator augmentation)解决了小数据集训练stylegan数据如何增强的问题,每4个batch测量discriminator的过拟合程度,如果过拟合了,减少augmentation的概率P,即adaptive P.
StyleGAN3弱化了特征与像素的对应关系,引入fourier特征,从频率的角度减少混叠(aliasing),引入低通滤波器,在低分辨率降低截止频率,更多的过滤掉无用的高频信息,提升了图像的平移不变性,使用1x1 conv代替3x3 conv,提升了图像的旋转不变性。
工程上的主要产出在StyleGanv2阶段,使用stylegan-2-ada完成了一些图像生成项目,包括AnimeFace的生成(复刻Waifu)、NFT图像生成、盲盒角色生成(生产交付),同时辅助了一些其他项目,例如人脸图像的生成(丰富人脸训练数据)、TalkingHead的人脸来源、人脸的lantent project + style mix,做两个明星脸混合,创造不存在的ID、人脸edit+实时DeepFake等。
复刻Waifu:
Face edit,通过反向的vgg net将人脸图片project到latent space,然后通过direction对latent微调:
Image Inpainting
公司做算法集成平台,为了拥有inpainting的AI能力,从LAMA和ZITS入手,构建了本地API。
LAMA主要利用FFC(fast fourier convolution)+upsample/downsample来构建pipeline
ZITS更新一些,基于transformer结构,借鉴了LAMA的loss/FFC等,对mask 进行position encoding,建立Fourier CNN Texture Restoration结构,主要克服了高分辨率下的inpainting问题。
StableDiffusion
主要工作围绕StableDiffusion展开,包括延伸的Lora和Dreambooth,基于kohya_ss训练lora模型,基于Dreambooth webui插件训练Dreambooth模型,完成了百变头像(dreambooth/lora)、视频风格化(mov2mov)、服装模特(controlnet)、复现Midjourney的商品生成效果等。
简介
CompVis推出latent diffusion,包括后面的stable diffusion模型,核心都是在做一件事,latent text-to-image using diffusion.
Diffusion是text2image的核心,就是一个图像加噪过程,反向则是通过U-net的denoise过程,之所以要在latent space做,是为了降低计算成本。
stable diffusion v1在860M U-net上,基于CLIP Vit-L/14 text encoder训练的sd模型,支持512x512分辨率,由于良好的开源成为最火的diffusion项目。
sd在denoise中的sample过程,最初提出的是DDPM,目前最快的是DPM++ SDE,原理参考 lucheng的回答 Diffusion数学原理,从VAE到GAN到Diffusion,都是为了解决一个前向概率分布的反向求解问题,Diffusion反其道而行之,先确定反向求解是最简单的高斯分布形式(denoise),然后只需要学习前向过程(diffusion)即可。
DDPM是SDE的一阶形式,忽略了方差,只使用unet预测的噪声的均值,通过重参数求解t-1时刻latent;
DDIM是DPM的一阶形式,引入了方差,通过牺牲随机性换取性能,50次sample可以得到DDPM1000次的结果;
DPM++ SDE是二阶形式的SDE(随机微分方程)版本,对应的DPM是求解ODE(常微分方程),效率更高;
controlnet一定程度上解决了sd不可控的问题,通过复制部分trainable layer,添加zero convolution,训练了基于openpose/hed/depth等模型;
其他一些paper:
Google提出imagen,但没有开源
OpenAI提出GLIDE + DALL-E,没有开源
Paddlepaddle的ERNIE-ViLG
清华团队的CogView2,纯transformer结构,宣传对中文的支持更好
SD图像生成
Cartoon Portrait (卡通肖像
基于anythingv3模型,做img2img任务,提供生产服务:
SD模型Finetune
共有四种方式,包括Dreambooth、Lora、TextualInversion、HyperNetwork,Dreambooth是对整个网络参数finetune,Lora是添加额外low rank layer进行finetune,TextualInversion是对text embedding vector进行finetune,HyperNetwork是使用网络生成额外添加层。
早期使用Dreambooth训练,耗时久,模型文件大,后期Lora成为后起之秀,在civitai上更多的模型选择safetensor格式,基于Lora finetune SD模型,加入更多character和style等等。
Avatar with multiple styles (百变头像
使用人物头像,训练dreambooth模型,实现类似于 midjourney 的效果,需要测试大量prompts (参考lexica等),提供生产服务:
Virtual-Try-on
传统的Virtual-Try-on任务使用GAN来完成,同时依赖分割模型的效果,例如HR-VITON,测试会发现仅仅在训练数据的domain中work,在域外数据并不能很好的work,这符合对GAN的一贯认知。
基于sd做try-on的简单思路是训练衣服的dreambooth/lora模型,然后通过controlnet+prompts对模特进行控制,实测发现脸部质量难以控制,迁移能力差:
基于dreambooth finetune sd2.1 inpainting模型,同样可以实现Virtual-Try-on的效果,但整体受限制较多,需要在源数据、mask、生成prompts等多个环节把控质量:
传统lora模型训练用到kohya_ss,原因webui的dreambooth lora模式受限制太多,kohya_ss符合civitai的形式
inpainting model finetune用到diffusers,但inpainting模型的finetune代码还有bug,修复后提PR,训练的lora模型也不能够在webui中使用 (23.4)
SD视频生成
mov2mov插件,自动对视频抽帧,每帧图像通过img2img+controlnet+lora进行风格化生成,调整denoise参数控制风格化强度;
enhanced-img2img,引入了multi-frame rendering,将当前帧图像与前后帧(或初始帧)拼接,提高视频风格化的稳定性,也提高了VRAM和速度的消耗;
参考效果
Text2Video
meta的Make A Video
Google的Imagen Video和Phenaki
清华团队的Cogvideo
新加坡国立的 Tune-A-Video是将T2I任务迁移到T2V,修改SD的unet中的cross attention,加入时空attention,通过视频的前后帧信息训练unet的attention部分,生成时同时需要训练视频的inverse noise来在sample过程指导,实测效果一般,只能生成短序列video;
Nerf
Nerf((Neural Radiance Fields) )是一种新颖视图合成的novel方法,通过5D coords,经过MLP而不使用convolution,输出color/volume density,也就是体密度,然后使用volume render将物体进行渲染。
ADNerf