行业知识
Sora之前的视频生成发展史:从Gen2、Emu Video到PixelDance、SVD、Pika 1.0
前言
考虑到���生视频开始爆发,比如11月份就是文生视频最火爆的一个月
- 11月3日,Runway的Gen-2发布里程碑式更新,支持4K超逼真的清晰度作品(runway是Stable Diffusion最早版本的开发商,Stability AI则开发的SD后续版本)
- 11月16日,Meta发布文生视频模型Emu Video
- 11月18日,字节跳动半路杀出发布PixelDance
- 11月21日,开发并维护Stable Diffusion后续版本的Stability AI终于发布了他们自家的生成式视频模型:Stable Video Diffusion(SVD)
加之不止一个B端客户找到七月,希望帮其做文生视频的应用,故我司第一项目组准备在AIGC模特之后,做文生视频项目,最终把文生3D、文生数字人都串起来
当然,我司还是三大项目组
- 除了已经对外发布的AIGC模特生成系统外,文生图、文生视频、文生3D、数字人,都在第一项目组
- 论文审稿GPT(目前正在迭代第二版《七月论文审稿GPT第2版:从Meta Nougat、GPT4审稿到Mistral、LongLora Llama》),包括后续的AI agent商用项目,在第二项目组
- 企业多文档的知识库问答(目前正在解决各种已知问题中),则在第三项目组
第一部分 视频生成的iPhone时刻:Runway先后发布Gen-1、Gen-2
1.1 Gen-1:对现有的3D动画和手机视频进行AI编辑
今2023年2月,之前开发stable diffusion最初版本的Runway提出了首个AI编辑模型Gen-1,Gen-1可以在原视频的基础上,编辑出咱们想要的视频。无论是粗糙的3D动画,还是用手机拍出来的摇摇晃晃的视频,Gen-1都可以升级出一个不可思议的效果(当然,其背后原因是Gen1 trained jointly on images and videos)
比如用几个包装盒,Gen-1就可以生成一个工厂的视频,化腐朽为神奇,就是这么简单
1.1.1 Gen-1何以做到:给图像模型增加时间线,且对图像和视频做联合训练
Gen-1对应的论文为:Structure and Content-Guided Video Synthesis with Diffusion Models,顺带说一嘴,有的文章会把这篇论文混淆成Gen2的论文,但实际上,runway只对外发布了Gen-1的论文,2的论文在23年年底之前还没对外发,大家注意
如下图所示,可以基于潜在视频扩散模型(latent video diffusion models),通过给定「下图中间部分」的原始输入图像,然后既可以通过如「下图左上角」的文字引导生成视频,也可以通过如「下图左下角」的图像引导生成视频
怎么做到的呢?
- 首先,视频之所以可以通过文字引导生成,离不开文字引导图像生成的那一系列前置工作(Text-conditioned models, such as DALL-E2 and Stable Diffusion,enable novice users to generate detailed imagery given only a text prompt as input)。毕竟潜在扩散模型提供了“在感知压缩空间高效合成图像”的方法
- 其次,通过引入带有时间线的预训练图像模型(temporal layers into a pre-trained image model),且在图像和视频上做联合训练「即在一个大规模的无字幕视频,和配对的“文本-图像”的数据集上进行训练( trained on a large-scale dataset of uncaptioned videos and paired text-image data)」,从而将潜在扩散模型扩展到视频生成
Gen1提出了一个可控的结构和内容感知的视频扩散模型(We propose a controllable structure and content-aware video diffusion model)
同时,在推理阶段可以修改由示例图像或文本引导的视频(意味着编辑视频的操作完全在推理阶段中执行,无需额外的针对每个视频的训练或预处理,即Editing is performed entirely at inference time without additional per-video training or pre-processing)
且选择用单眼深度估计的技术来表示结构,且由预先训练的神经网络预测嵌入表示内容(We opt to represent structure with monocular depth estimates and content with embeddings predicted by a pre-trained neural network,顺带解释下:单眼深度估计是一种计算机视觉技术,它旨在从仅使用单个摄像机拍摄的二维图像中推断出场景的三维深度信息)
- 然后在视频生成的过程中提供了几种控制模式
首先,类似于image synthesis models,训练模型,使得其可以推断视频的内容,例如他们的外观或风格,及匹配用户提供的图像或文本提示
第二,受到扩散过程的启发,将information obscuring process应用到structure representation,以选择模型对给定结构的坚持程度(we apply an information obscuring process to the structure representation to enable selecting of how strongly the model adheres to the given structure)
最后,还对推理过程进行了调整,通过自定义指导方法,以及受classifier-free guidance的启发,以控制生成的剪辑的时间一致性(to enable control over temporal consistency in generated clips),相当于做到了时间、内容、结构三者在一致上的统一对齐
1.1.2 Gen1的训练过程、推理过程的详解
咱们模型的目标是保留视频结构的同时(结构一般指视频的几何、动力学的特征,比如对象的形状、位置以及他们的时间变化),编辑视频的内容(内容一般指的是视频外观及其语义的特征,比如对象的颜色、样式以及场景的光亮度)
为了实现这一目标,需要基于结构表示和内容表示的基础上学习视频的生成模型,从而通过输入的视频推断出其结构表示,然后根据编辑视频的描述文本进行修改(modify it based on a text prompt c describing the edit),如下图所示
- 在上图左侧的训练过程中,输入的视频x用一个固定的编码器 编码到,并扩散到
另一边,通过对“使用MiDaS获得的depth maps”进行编码,来提取一个结构表示,并通过使用CLIP对其中一个帧进行编码,来提取内容表示 (We extract a structure representation s by encoding depth maps obtained with MiDaS, and a content representation c by encoding one of the frames with CLIP. )
然后,在、、以及通过交叉注意块提供的的帮助下,模型学习在潜在空间中逆转扩散过程
- 在上图右侧的推理过程中,输入视频的结构以同样的方式提供。为了通过文本指定内容,将CLIP文本嵌入转换为图像嵌入(To specify content via text, we convert CLIP text embeddings to image embeddings via a prior)
1.1.2.1 对潜在扩散模型的回顾
扩散模型的正向扩散过程被定义为
将符合正太分布的噪声缓慢添加到每个样本,得到,该正向扩散过程模拟一个马尔科夫链,噪声的方差为,而
至于逆向过程则根据以下公式定义
其中,方差是固定的,只需学习其中的均值即可,我们需要优化目标的损失函数即为
最终转化为
友情提醒,如果你对上述扩散模型DDPM的推导有任何疑问,可参见此文的第二部分《AI绘画能力的起源:从VAE、扩散模型DDPM、DETR到ViT/Swin transformer》,对关于DDPM的每一步骤的推导都非常详尽
1.1.2.2 时空潜在扩散(Spatio-temporal Latent Diffusion)
为了可以正确的对视频帧的分布进行建模,需要做以下工作
- 引入时间层来扩展图像架构,且这些时间层仅对视频输入有效,另自动编码器保持固定并独立处理视频中的每一帧
we extend an image architecture by introducing temporal layers, which are only active for video inputs. All other layers are shared between the image and video model. The autoencoder remains fixed and processes each frame in a video independently. - UNet主要由两个模块组成:残差块和transformer块,通过添加跨时间的一维卷积和跨时间的一维自注意力将它们扩展到视频(we extend them to videos by adding both 1D convolutions across time and 1D self-attentions across time) 在每个残差块中,如上图左侧所示,在每个2D卷积之后引入一个时间卷积(In each residual block, we introduce one temporal convolution after each 2D convolution)
同样的,如上图右侧所示,在每个2D transformer块后,都包含一个temporal 1D transformer block(which mimics its spatial counterpart along the time axis),且将learnable positional encodings of the frame index输入到temporal transformer blocks中
相当于
在每个空间卷积之后添加一个一维时间卷积(注意,是空间卷积 VS 时间卷积)
在每个空间注意力层之后添加一个一维时间注意力层(注意,是空间注意力 VS 时间注意力) - 最终实现时,将图像视为只有单帧的视频,以统一处理这两种情况
批量大小为b、帧数为n、通道数为c、空间分辨率为w ✖️ h,即形状为b × n × c × h × w的分批张量,被重新排列为「w × h (i.e. shape b × n × c × h × w) is rearranged to」
(b · n) × c × h × w for spatial layers, to
(b · h · w) × c × n for temporal convolutions, and to
(b · h · w) × n × c for temporal self-attention
//待更
1.1.2.3 结构与内容的表示(Representing Content and Structure)
扩散模型非常适合对等条件分布进行建模,由于大规模配对的视频-文本数据集比较缺乏,所以只能限制在无字幕的视频数据上进行训练
- 总之,我们的目标是根据用户提供的编辑视频的文本提示来编辑视频,但还是面临一个问题:即我们没有视频三元组的训练数据、编辑prompt、和生成的输出,也没有成对的视频和文本字幕(Thus, while our goal is to edit an input video based on a text prompt describing the desired edited video, we have neither training data of triplets with a video, its edit prompt and the resulting output, nor even pairs of videos and text captions)
- 因此,我们必须从训练视频本身导出结构和内容的表示,即、,从而损失函数为
- 相反,在推理过程中,结构和内容分别来自输入视频和文本提示, edited version x of y通过对以、为条件的生成模型进行采样获得的
内容表示层面上
- 为了从文本输入x和视频输入x都可以推断出内容表示(content representation),他们利用CLIP的image embeddings来表示 represent content.
对于视频输入,他们在训练期间随机选择一个输入帧,类似于可以训练一个先验模型,该模型允许从text embeddings中采样image embeddings,这种方法可以通过图像输入而非文本来指定编辑This approach enables
- 待更..
// 待更
1.2 Gen-2获得了史诗级的升级——可以从头开始生成视频
很多同学还没来得及体验Gen-1,没想到在2023年3月份,runway很快又推出了Gen-2的内测版本,并于6月份正式对外发布(这是runway对Gen-2介绍的页面:https://research.runwayml.com/gen2),相比Gen-1,Gen-2获得了史诗级的升级——可以从头开始生成视频。如果说去年发布的stable diffusion/midjourney是文生图的代表,那Gen2便是文生视频的第一个代表
- Gen-2刚开始发布时还只能生成4秒钟的视频,每个用户的免费试用额度为105秒,即可以生成约26个Gen2视频
- 到了8月份,生成视频的最大长度便从4s提升到了18s
- 9月,新增导演模式,可以控制镜头的位置和移动速度
1.2.1 基于Gen-2生成视频的8种模式
- Text to Video
- Text + Image to Video
- Image to Video,比如输入下面这张图片
Gen-2便可以根据上面这张图片生成对应的视频
Gen2:Image to Video
- Stylization
- Storyboard
- Mask
- Render
- Customization
1.2.2 Gen-2在23年11月的更新:生成视频4K超高清且涂哪动哪
Gen-2在11月份连续推出2次重大更新
- 11月3日,Runway的Gen-2发布里程碑式更新,支持4K超逼真的清晰度作品
- 11月21日,上线“涂哪动哪”的运动笔刷新功能,直接标志出生成模型可控性上的一个重要里程碑
第二部分 Meta发布生成式视频模型:Emu Video
11月16日,Meta发布文生视频模型Emu Video,该模型既支持灵活的图像编辑(例如把「兔子」变成「吹小号的兔子」,再变成「吹彩虹色小号的兔子」),也支持根据文本和图像生成高分辨率视频(例如让「吹小号的兔子」欢快地跳舞)
那其背后的原理是怎样的呢?事实上,这其中涉及两项工作
- 灵活的图像编辑由一个叫「Emu Edit」的模型来完成。它支持通过文字对图像进行自由编辑,包括本地和全局编辑、删除和添加背景、颜色和几何转换、检测和分割等等
此外,它还能精确遵循指令,确保输入图像中与指令无关的像素保持不变,比如给鸵鸟穿裙子
- 高分辨率的视频则由一个名叫「Emu Video」的模型来生成。Emu Video 是一个基于扩散模型的文生视频模型,能够基于文本生成 512x512 的 4 秒高分辨率视频。且有人工评估表明,与 Runway 的 Gen-2 以及 Pika Labs 的生成效果相比,Emu Video 在生成质量和文本忠实度方面的得分可能更高。以下是它的生成效果:
在其官方博客中,Meta 展望了这两项技术的应用前景,比如让社交媒体用户自己生成动图、表情包,按照自己的意愿编辑照片和图像等等。当然,关于生成动图/表情包这点,Meta 在之前的 Meta Connect 大会上发布 Emu 模型时也提到过(参见:Meta 版 ChatGPT 来了:Llama 2 加持,接入必应搜索,小扎现场演示)
接下来,我们分别介绍下这两个模型
2.1 Emu Edit :精确的图像编辑
2.1.1 相比InstructPix2Pix的优势:更准确的执行指令
Emu Edit对应的论文为《Emu Edit: Precise Image Editing via Recognition and Generation Tasks》,其项目地址则为:https://emu-edit.metademolab.com/
如该论文中所说,如今每天都有数百万人使用图像编辑。然而,流行的图像编辑工具要么需要相当多的专业知识,使用起来很耗时,要么非常有限,仅提供一组预定义的编辑操作,如特定的过滤器
好在如今基于指令的图像编辑(Instruction-based image editing)试图让用户使用自然语言指令来解决这些限制。例如,用户可以向模型提供图像并指示其「给鸸鹋穿上消防员服装」这样的指令
然而,虽然像 InstructPix2Pix 这类基于指令的图像编辑模型可以用来处理各种给定的指令,但
- 它们通常很难准确地解释和执行指令
顺带说明下,instructable - pix2pix引入了一个可指导的图像编辑模型,他们通过同时利用GPT-3和Prompt-to-Prompt来开发这个模型,以生成一个用于基于指令的图像编辑的大型合成数据集,并利用该数据集来训练一个可遵循指令的图像编辑模型
与使用合成数据集的InstructPix2Pix不同,Mag-icBrush通过要求人类使用在线图像编辑工具,开发了一个人工标注的指令引导的图像编辑数据集,然后在此数据集上微调instructable - pix2pix可以提高图像编辑能力
- 此外,这些模型的泛化能力有限,通常无法完成与训练时略有不同的任务,例如下图,当让小兔子吹彩虹色的小号,其他模型要么把兔子染成彩虹色,要么是直接生成彩虹色的小号
为了解决这些问题,Meta 引入了 Emu Edit,这是首个在多样化的任务上训练而成的图像编辑模型,如前所述,Emu Edit 可以根据指令进行自由形式的编辑,包括本地和全局编辑、删除和添加背景、颜色改变和几何变换、检测和分割等任务。
与当今许多生成式 AI 模型不同,Emu Edit 可以精确遵循指令,确保输入图像中与指令无关的像素保持不变。例如,下图左侧,用户给出指令「将草地上的小狗移除」,移除物体后的图片几乎看不出来有什么变化,再比如下图右侧,移除图片中左下角的文本,再给图片换个背景,Emu Edit 也能处理得很好:
2.1.2 开发一个1000万规模的数据集,涵盖16个不同的任务
考虑到市面上已有的数据规模、多样性、质量都有限,故为了训练这个模型,Meta 开发了一个包含 16个不同的任务 和 1000 万个合成样本的数据集,每个样本都包含一个输入图像、对要执行任务的描述(即文本指令),以及目标输出图像、任务索引「Each example (cI , cT , x, i)in our dataset, contains an input image cI , a text instruction cT , a target image x, and a task index i (out of the sixteen)」,具体而言:
- 任务列表
这16个任务分为三个主要类别:基于区域的编辑、自由形式的编辑、视觉任务
Region-Based Editing Local : Substituting one object for another, altering an object’s attributes (e.g., “make it smile”) Remove: Erasing an object from the image Add: Inserting a new object into the image Texture : Altering an object’s visual characteristics with out affecting its structure (e.g., painting over, filling or covering an object) Background: Changing the scene’s background Free-Form Editing Global : Edit instructions that affect the entire image, or that can not be described using a mask (e.g., “let’s see it in the summer”) Style: Change the style of an image Text Editing : This involves text-related editing tasks such as adding, removing, swapping text, and altering the text’s font and color Vision tasks Detect : Identifying and marking a specific object with in the image with a rectangle bounding box Segment : Isolating and marking an object in the image Color: Color adjustments like sharpening and blurring Image-to-Image Translation : Tasks that involve bi directional image type conversion, such as sketch-to image, depth map-to-image, normal map-to-image,pose to-image,segmentation map-to-image, and so on - 文本指令的生成
为了生成编辑指令,我们利用了对话优化的700亿参数Llama 2的变体,具体来说,我们为LLM提供了一个任务描述,一些特定于任务的范例,和一个真实的图像描述
为了增加多样性,我们对范例进行采样,并随机化它们的顺序。给定这样的输入,我们期望LLM输出:
(1)一个编辑指令
(2)一个理想输出图像的输出标题
(3)哪些对象应该被更新或添加到原始图像中
以下是他们设计的prompt
def get_content_instruction(new_prompt): optional_verbs = choice(["include", "place", "position", "set", "incorporate", "alongside", "give", "put", "insert", "together with", "with", "make", "integrate", "have", "append", "make", "add", "include"]) # system message # system_message = ( f"\n" "You are an assistant that only speaks JSON. Do not write normal text. The assistant answer is " "JSON with the following string fields: 'edit', 'edited object','output'. Here is the latest " "conversation between Assistant and User.\n" "" ) # introduction message # intro_message = ( f"[INST]User: Hi, My job to take a given caption ('input') and to output the following: an " f"instruction for {optional_verbs} an object to the image ('edit'), the object to {optional_verbs} " "('edited object'), and the caption with the object ('output'). Please help me do it. " "I will give you the 'input', and you will help. When you reply, use the following format: " "{\"edit\": '', 'edited object': '', 'output': ''}[/INST]\n" "Assistant: Sure, I'd be happy to help! Please provide the actual input caption you'd like me to " f"read and I'll assist you with writing an instruction to {optional_verbs} an object to the " "image, writing the added object and writing the caption with the object." ) # shuffling # random.seed(torch.randint(1
- 引入时间层来扩展图像架构,且这些时间层仅对视频输入有效,另自动编码器保持固定并独立处理视频中的每一帧
- 在上图左侧的训练过程中,输入的视频x用一个固定的编码器 编码到,并扩散到
上一篇:织梦CMS栏目批量删除操作详解
下一篇:mc服务器怎么搞好?