文字生成影像的原理
- 影像生成的应用
- 影像 是怎么生成的
- 图片生成图片:
- 影像生成影像
- 文字生成图片
- 按照文字AT的方式生成
- NAT
- 文字生成视频
- 怎么评价影像生成的好坏
- 引入CLIP模型
- 文字生成图片的难点
- 文字生成视频的难点
- 解决办法
- 减少attention数目
- 分迭代生成
前段时间sora生成的视频爆火,下面是它生成视频的一个截图,它不仅可以生成日常见到的,甚至可以创造出图像出来,虽然视频中有瑕疵,但不影响其立体震撼的效果。
影像生成的应用
-
影像生成影像
可以输入一段影像,让模型生成剩下的一部分 -
风格转换
输入一段影像,让模型转换一下视频风格 -
视频质量提升
一段不清晰的影像,把画质提升 -
音频+图片 talking head
目前比较常用的应用,给他一段音频,给他一个图像,就会配合语音且嘴型会变化的talking head
Paper: https://arxiv.org/abs/2403.17694
免费的Demo: https://huggingface.co/spaces/ZJYang/AniPortrait_official -
文字生成影像
给一段描述,生成一张图片,图片是由像素构成,像素越多,越清晰。10241024个像素比肯定比1616描述的同一张图片清晰的多
给一段描述,生成一段视频,实际上视频是由图片构成的,视频中的图片,叫做帧,每秒内包含的帧数叫FPS,通常FPS在24以上才会清晰流畅一些,游戏通常就需要更高的FPS
影像 是怎么生成的
图片生成图片:
图片比文字来说信息量很大,所以需要先切分成一小块 一小块(也叫一个patch)的,然后把这些块输入到编码器进行压缩,最终生成压缩后的向量,然后拉伸成一排向量后,输入给解码器,解码器再生成图片
影像生成影像
影片相对于图片,是进行更多的压缩,比如把时间上相邻的图片,切成一个块,然后进行压缩,然后这一段时长的影片,通过encoder压缩,最后拉伸成一排向量后,输入给解码器,解码器生成视频,下面图片摘自sora的论文:
文字生成图片
描述一段文字,生成一张图片。有个大规模的资料集 LAION ,包括文字叙述和对应的图片,可以用来作为训练数据。
按照文字AT的方式生成
AT就是AutoRegressive 的方式,也就是类似文字生成方式,生成一块图片之后,要把这块作为输入一起生成下一个图片块(patch)
NAT
也就是Non-AutoRegressive的方式,毕竟图片处理量不比文字,所以实际上上面生成的时候,一次性生成多个输出,并行操作。
也就是说位置p1等所有的位置的patch 同时生成出来,因为内部可以用attention,所以可以记住一些关联信息,当然这还完全不够。
文字生成视频
视频就是由图片组成的,所以按照道理来说,我们就按照上面生成图片的方法,生成多个图片不就行了?
当然不会有这么简单,下文会介绍文字生成视频的难点
怎么评价影像生成的好坏
引入CLIP模型
clip这个模型的训练,就是从大量的资料中训练的开源模型,如果描述和图片相符就给高分,相反就给低分。所以CLIP模型用来评价模型生成的好坏。
文字生成图片的难点
一张图的描述可能用很多种方式来描述,所以要生成你脑中一模一样的图片就很难。但是有一种解决方式就是,你上传图片给模型,告诉模型这张图片用s表示(注意找一个不常用的标识),然后每次生成就告诉它,按照s的方式生成图片,比如按照s的坐姿,画一张s的油画等等
文字生成视频的难点
按照生成图片的方式生成视频的难点在哪里呢?
假设视频 1s 24帧,一帧有64*64个patch块,一分钟的视频就有1440帧,600万个patch块,因为每个patch块要做attention,也就是600万的平方,也就是36兆次,运算量实在是太大了
解决办法
减少attention数目
600万个patch不一定都有会关系,我们就减少attention的数量:比如只关注临近的patch的attention,只考虑空间的attention(attention的次数就变成了64641440帧 约240亿),或者只考虑时间的attention(1440144064*64 约85亿次),或者空间和时间的attention
分迭代生成
我们不要一次都生成全部生成,分多次生成,逐步提高frame,清晰度等等,感兴趣的可以看看google公开的Imagen Video 的论文