OpenAI视频生成模型Sora的全面解析:从扩散Transformer到ViViT、DiT、NaViT、VideoPoet

news2025/1/20 23:59:25

前言

真没想到,距离视频生成上一轮的集中爆发(详见《视频生成发展史:从Gen2、Emu Video到PixelDance、SVD、Pika 1.0、W.A.L.T》)才过去三个月,没想OpenAI一出手,该领域又直接变天了

  1. 自打2.16日OpenAI发布sora以来,不但把同时段Google发布的Gemmi Pro 1.5干没了声音,而且网上各个渠道,大量新闻媒体、自媒体(含公号、微博、博客、视频)做了大量的解读,也引发了圈内外的大量关注
    很多人因此认为,视频生成领域自此进入了大规模应用前夕,好比NLP领域中GPT3的发布
  2. 一开始,我还自以为视频生成这玩意对于有场景的人,是重大利好,比如在影视行业的
    对于没场景的人,只能当热闹看看,而且我司去年年底还考虑过是否做视频生成的应用,但当时想了好久,没找到场景,做别的应用去了

可当我接连扒出sora相关的10多篇论文之后,觉得sora和此前发布的视频生成模型有了质的飞跃(不只是一个60s),而是再次印证了大力出奇迹,大模型似乎确实可以在力大砖飞的情况下开始建模整个物理世界了,使得我司大模型项目组也愿意重新考虑开发视频生成的相关应用

本文主要分为三个部分

  • 第一部分,侧重sora的核心技术解读
    方便大家把握重点,且会比一切新闻稿都更准确,此外
    如果之前没有了解过DPPM、ViT的,建议先阅读下此文《从VAE、扩散模型DDPM、DETR到ViT、Swin transformer》
    如果之前没有了解过图像生成的,建议先阅读下此文《从CLIP到DALLE1/2、DALLE 3、Stable Diffusion、SDXL Turbo、LCM》
  • 第二部分,侧重背后技术的发展演变
    把sora涉及到的关键技术在本文中全部全面、深入、细致的阐述清楚,毕竟如果人云亦云就不用我来写了
  • 第三部分,根据sora的32个reference以窥探其背后的更多细节
    由于sora实在了太火了,除了专业的解读外,还有大量解读显得真假难辨(有的看上去一本正经,其实在胡说八道),为方便大家辨别什么样的解读是不对的,特把一些更深入的细节也介绍下

第一部分 Sora的核心技术解读

1.1 Sora的处理思路:把视觉数据转为Patches

1.1.1 ViT:把整个图片切分成一个个图片块,让块与块之间做注意力交互

简单讲,OpenAI把对NLP中token的处理思路迁移到了对视频生成中patch的处理

  1. 预测token时,根据当前已有的tokens,预测下一个token
  2. 预测视频运动时,可以根据当前已有的视频运动(一帧帧静态图像组成)去预测接下来的视频运动,相当于根据已有的一帧帧静态图像去预测之后的一帧帧图像
  3. 但一张图像和一个token不一样,因为像素的关系,一张图像有着比较大的维度(比如250 x 250),故为降低处理的复杂度,ViT把一张图像划分为九宫格(如下图的左下角),如此,处理9个图像块总比一次性处理250 x 250个像素维度 要好不少吧

类似的,OpenAI 训练了一个降低视频数据维度的网络(关于视频压缩网络,Sora可能采用的就是VAE架构,区别就是经过原始视频数据训练,而VAE一般是一个ConvNet)

  1. 具体而言,给定一个原始视频,视觉压缩网络将视频压缩到较低维的潜在空间(潜在空间这个概念在stable diffusion中用的可谓炉火纯青了,详见此文的第三部分),然后把视频分解为在时间和空间上压缩的潜在表示,即所谓的一系列时空Patches
    当然,这里的patch数量就不止上面提到的九宫格那般大小了,比如上图的横切面已是16 x 9个格了
  2. Sora 在这个压缩的潜在空间中接受训练
  3. OpenAI 还训练了相应的解码器模型,将生成的潜在表示映射回像素空间,从而生成视频

1.1.2 如何理解时空编码SpaceTime latent patch

当我们理解了一张静态图像的patch表示之后(比如是九宫格,还是16 x 9个格),再来理解所谓的时空Patches就简单多了,无非就是在纵向上加上时间的维度,比如t1 t2 t3 t4 t5 t6,其实际处理时,可以每三个时间点聚合下,当然 也可以每五个时间点聚合下,如下图所示

那我们的任务就变成了:对于视频的左上角而言,便是已知当前“时轮碎块” :推测下一个“时轮碎块”,组合视频画面中各个位置的推测结果,便得到了整个视频画面的持续运动

而这种 “时空patch” 最大的好处, 是可以兼容所有的数据素材:一个静态图像不过是时间=0的一系列时空patch,不同的像素尺寸、不同的时间长短,都可以通过组合一系列 “时空patch” 得到

总之,OpenAI 基于 patches 的表示,使 Sora 能够对不同分辨率、持续时间和长宽比的视频和图像进行训练。在推理时,OpenAI 可以通过在适当大小的网格中排列随机初始化的 patches 来控制生成视频的大小

而过去的图像和视频生成方法通常需要调整大小、进行裁剪或者是将视频剪切到标准尺寸,例如 4 秒的视频分辨率为 256x256。相反,该研究发现在原始大小的数据上进行训练,最终提供以下好处:

  1. 首先是采样的灵活性:Sora 可以采样宽屏视频 1920x1080p,垂直视频 1920x1080p 以及两者之间的视频。这使 Sora 可以直接以其天然纵横比为不同设备创建内容。Sora 还允许在生成全分辨率的内容之前,以较小的尺寸快速创建内容原型 —— 所有内容都使用相同的模型

    图片

  2. 其次是改进帧和内容组成:研究者通过实证发现,使用视频的原始长宽比进行训练可以提升内容组成和帧的质量。将 Sora 在与其他模型的比较中,后者将所有训练视频裁剪成正方形,这是训练生成模型时的常见做法。经过正方形裁剪训练的模型生成的视频(如下图左侧),其中的视频主题只是部分可见。相比之下,Sora 生成的视频具有改进的帧内容(如下图右侧)

    图片

1.1.3 用于视频生成的扩散型Transformer

有的新闻稿说,Sora 是个扩散模型,原因在于它类似扩散模型那一套流程,给定输入噪声 patches(以及文本提示等调节信息),训练出的模型来预测原始的「干净」patches

也有的新闻稿会说,Sora 是一个扩散 Transformer,原因在于它把图像打散成块后,计算块与块之间的注意力,从而基于已有的「块」去预测接下来的「块」,而这套计算模式便是transformer的流程

图片

总之,总的来说,Sora是一个在不同时长、分辨率和宽高比的视频及图像上训练而成的扩散模型,同时采用了Transformer架构,是一种扩散型Transformer

至于想更好的理解这个扩散Transformer,请看下文第二部分

1.2 DALLE 3的重字幕技术:为文本-视频数据集打上详细字幕

训练文本到视频生成系统需要大量带有相应文本字幕的视频,研究团队将 DALL・E 3 中的重字幕(re-captioning)技术应用于视频

  1. 具体来说,研究团队首先训练一个高度描述性的字幕生成器模型,然后使用它为训练集中所有视频生成文本字幕
  2. 与DALLE 3类似,研究团队还利用 GPT 将简短的用户 prompt 转换为较长的详细字幕,然后发送到视频模型,这使得 Sora 能够生成准确遵循用户 prompt 的高质量视频

关于DALLE 3的重字幕技术更具体的细节请见此文2.3节《AI绘画与多模态原理解析:从CLIP到DALLE1/2、DALLE 3、Stable Diffusion、SDXL Turbo、LCM》

2.3 DALLE 3:Improving Image Generation with Better Captions

2.3.1 为提高文本图像配对数据集的质量:基于谷歌的CoCa​微调出图像字幕生成器

2.3.1.1 什么是谷歌的CoCa

2.1.1.2 分别通过短caption、长caption微调预训练好的image captioner

2.1.1.3 为提高合成caption对文生图模型的性能:采用描述详细的长caption,训练的混合比例高达95%
..

第二部分 Sora相关技术的发展史:ViViT、DiT、MAGVIT v2、VideoPoet

2.1 ViT在视频上的应用:ViViT

Transformer在NLP领域大获成功,ViT(Vision Transformer)将Transformer架构应用到视觉领域,它将图片按给定大小分为不重叠的patches,再将每个patch线性映射为一个token,随位置编码和cls token(可选)一起输入到Transformer的编码器中

而Google于2021年提出的「ViViT: A Video Vision Transformer」便要尝试在视频中使用ViT模型,探究Video Vision Transformer的优化方式

视频作为输入会产生大量的时空token,处理时必须考虑这些长范围token序列的上下文关系,同时要兼顾模型效率问题,作者在空间和时间维度上分别对Transformer编码器各组件进行分解,在ViT模型的基础上提出了三种用于视频分类的纯Transformer模型(ViViT)

// 待更

2.2 DiT:将 U-Net 架构逐渐转换成 transformer

对于基于 transformer 的工作,不管是 latent diffusion 还是 language model,它们之间的区别很小,都是 token-based,最大的区别在于基于 diffusion 的生成是连续的 token,language model 处理的是离散的 token

2022年年底,William Peebles(加州伯克利)、Saining Xie(纽约大学)的两人通过论文《Scalable Diffusion Models with Transformers》提出了一种叫 DiT 的神经网络结构

其结合了视觉 transformer 和 diffusion 模型的优点,即DiT = VAE encoder + ViT + DDPM + VAE decoder

​对于 DiT 在 Sora 中的应用,DiT 作者之一 Saining Xie 在推文中提到:

  • 由 batch size 大小相关的计算推导,Sora 可能有大约 30 亿个参数。 “训练 Sora 模型可能不需要像人们预期的那样多的 GPU;我预计未来会有非常快的迭代。”
  • Sora“可能还使用了谷歌的 Patch n’ Pack (NaViT) 论文成果,使其能够适应可变的分辨率/持续时间/长宽比。”

// 待更

2.3 NaViT:多个patches打包成一个单一序列以实现可变分辨率

2023年7月,Google DeepMind通过此篇论文《Patch n' Pack: NaViT, a Vision Transformer for any Aspect Ratio and Resolution》提出了NaViT(Native Resolution ViT)

  • 该模型在训练过程中采用序列封装的方式处理任意分辨率和纵横比的输入(uses sequence packing during training to process inputs of arbitrary resolutions and aspect ratios)
  • 除了具备灵活性的模型应用外,还展示了通过大规模监督和对比图像-文本预训练来提高训练效率

具体而言

  • 视觉Transformer(ViT)输入图像会被调整为固定的平方纵横比,并分割成固定数量的patch(input images are resized to a fixed square aspect ratio and then split into a fixed number of patches)
    这是通过在每个训练步骤中对patch大小进行随机采样和调整算法来实现的,以支持多种初始卷积嵌入尺寸(This is achieved via random sampling of a patch size at each training step and a resizing algorithm to allow the initial convolutional embedding to support multiple patch sizes)
  • Pix2Struct引入了一种替代方法来保留纵横比(introduced an alternative patching approach which preserves the aspect ratio),在图表和文档理解等任务中尤其有用

Google从而提出了一种替代方法NaViT,将来自不同图像的多个patches打包成一个单一序列——称为Patch n’ Pack——从而实现可变分辨率并保持长宽比(Multiple patches from different images are packed in a single sequence— termed Patch n’ Pack—which enables variable resolution while preserving the aspect ratio)

2.4 MAGVIT v2:用好tokenizer可以超越diffusion

Google和CMU于2023年10月份联合发布的MAGVIT v2(这是其论文Language Model Beats Diffusion -- Tokenizer is Key to Visual Generation),首次证明了LLM不仅擅长文本方面的任务,而且在视觉任务上也能取得比扩散模型更好的效果

而其中的关键在于一个好的 tokenizer 接入到语言模型后,能够立即可以获得比当时最好的 diffusion 还要好的效果

2.5 Google VideoPoet:基于MAGVIT V2和Transformer而来

2023年年底,Google推出了VideoPoet(这是其论文:VideoPoet: A Large Language Model for Zero-Shot Video Generation),包含两个阶段:预训练和微调(pretraining and task-specific adaptation)

与通常使用外部交叉注意力网络或潜在混合进行风格化基于扩散的方法相比(In contrast to the diffusion-based approaches that usually use external cross-attention networks or latent blending for styliza-tion),Google的这个方法更加类似于利用大型语言模型进行机器翻译,因为只需将结构和文本作为语言模型的前缀

2.5.1 通过自然语言随心所欲的编辑视频,且其zero-shot能力强悍

如下图所示,其可以将输入图像动画化以生成一段视频,并且可以编辑视频或扩展视频

在风格化方面,该模型接收表征深度和光流的视频,以文本指导的风格绘制内容

2.5.2 视频生成器:借鉴LLM离散化token的处理思路

LLM在过去一年已经取得了巨大成功,那可否用于视频生成领域呢

  1. 然而,LLM 是在离散 token 上运行的,好在一些「视频和音频 tokenizer(比如用于视频和图像的 MAGVIT V2 和用于音频的 SoundStream)」,可以将视频和音频剪辑编码为离散 token 序列,并且也可以转换回原始表征形式
  2. 如此,通过使用多个 tokenizer,VideoPoet 便可以训练自回归语言模型来学习跨视频、图像、音频和文本的多个模态
    一旦模型生成以某些上下文为条件的 token,就可以使用 tokenizer 解码器将它们转换回可视化的表征形式

如下图所示,VideoPoet将所有模态编码映射到离散的标记空间中,以便能够直接利用大型语言模型架构进行视频生成,特定标记使用<>表示,其中

  • 深红色代表模态不可知部分
    蓝色代表文本相关组件,即text tokens (embeddings): the pre-extracted T5 embed-dings for any text.
    黄色代表视觉相关组件,即visual tokens: the MAGVIT-v2 tokens representing the images, video subsection, or COMMIT encoded video-to-video task.
    绿色代表音频相关组件,即audio tokens: the SoundStream tokens representing au-dio
  • 上图左侧的浅黄色区域表示双向前缀输入
    而上午右侧的深红色区域则表示带有因果注意机制的自回归生成输出

2.5.3 Tokenization:图像视频标记MAGVIT-v2与音频标记SoundStream

图像和视频分词器(Image and video tokenizer)是生成高质量视频内容的关键

具体而言,它将图像和视频编码为一串整数,并通过解码器将其映射回像素空间,作为标记和像素空间之间的桥梁

  • 视觉分词器的性能决定了视频生成质量的上限。同时,为了实现有效且高效的任务设置,压缩比决定了LLM序列长度
  • MAGVIT-v2对8 fps采样率下17帧、2.125秒、128×128分辨率的视频进行分词,产生(5, 16, 16)形状,并扁平化为1280个标记,词汇表大小为2-18
    MAGVIT-v2tokenizes17-frame2.125-second128×128 resolution videos sampled at 8 fps to pro-duce a latent shape of (5, 16, 16), which is then flattenedinto 1280 tokens, with a vocabulary size of 2-18
  • 此外,在移动端生成短形式内容时,我们还将视频按纵横比分割成128×224分辨率,并产生(5, 28, 16)形状或2240个标记。在评估协议中使用16帧时,我们会舍弃最后一帧以制作16帧视频

第三部分 根据sora的32个reference以窥其背后更多技术细节

3.1 早期对视频的研究——使用LSTM的视频表示的无监督学习

sora的第一个reference为这篇论文《Unsupervised learning of video representations using lstms》,该论文考虑了目标序列的不同选择

  1. 一种选择是预测与输入相同的序列,动机类似于自动编码器(比如VAE)——我们希望捕获所有重现输入所需的信息,同时克服模型施加的归纳偏差
    The motivation is similar to that of auto encoders –we wish to capture all that is needed to reproducethe input but at the same time go through the inductive bi-ases imposed by the model

  2. 另一种选择是预测未来的帧。这里的动机是学习一种表示,提取所有需要推断的运动和外观,而非仅限于观察到的内容

这两种自然而合理地选择也可以结合起来。在这种情况下,有两个解码器LSTM——一个将表示解码为输入序列,另一个则利用相同表示进行解码以预测未来

在模型输入方面,理论上可以采用任何表示单个视频帧的方式。然而,为了本文目的的考虑,我们将限制注意力在两种输入上

  1. 第一种是图像块,即image patches
  2. 第二种是通过应用在ImageNet上训练过的卷积网络提取出来的高级“感知”。这些感知指代卷积神经网络模型中最后一层和/或倒数第二层校正线性隐状态所得到的结果

3.2 早期对世界的模拟和对环境的学习

3.2.1 把RNN用于对环境的模拟:预测时确保时空上的一致性

在sora的第二个reference中,引入了循环神经网络来提升以前的高维像素观测环境模拟器。这些网络能够对未来数百个时间步进行时间和空间上的一致预测,从而使智能体能够有效地计划和行动

为了解决计算效率低下的问题,我们采用了一个不需要在每个时间步生成高维图像的模型。通过这个方法,可以改善探索并适应多种不同环境,包括10个雅达利游戏、3D赛车环境和复杂的3D迷宫

3.2.2 世界模型World Models

在sora的第三个reference中,研究了构建流行的强化学习环境生成神经网络模型的方法

世界模型可以通过无监督方式快速训练,以学习环境的时空压缩表示(to learn acompressed spatial and temporal representation of the environment)

通过将从世界模型中提取的特征作为Agent的输入,我们能够训练出一种非常紧凑和简洁的策略来解决所需任务。甚至可以完全在由世界模型生成的幻觉梦中(hallucinated dream generated by its world model)对Agent进行训练,并将该策略迁移到实际环境中

3.2.3 Generating Videos with Scene Dynamics

在sora的第四个reference中,利用大量未标记的视频,以学习场景动态模型,应用于视频识别任务(如动作分类)和视频生成任务(如未来预测)

  1. 其提出了一种具备时空卷积架构的视频生成对抗网络,该架构能够将场景中的前景与背景分离
  2. 实验证明,该模型能够以全帧率生成长达一秒的小视频,并且相较于简单基线方法表现更优,在预测静态图像方面也展示出可信度
  3. 此外,实验和可视化结果显示,该模型在最小监督下内部学习到了有益特征来识别动作,证明了场景动态是良好表示学习信号

3.2.4 Generating Long Videos of Dynamic Scenes

在sora的第7个reference中,提出了一个视频生成模型,可以精确地再现物体运动、摄像机视角的变化以及随时间推移而出现的新内容

  • 在它之前,已有的视频生成方法通常无法作为时间函数产生新内容,并同时保持真实环境中所期望的一致性,如可信的动态和对象持久性。一个常见失败案例是过度依赖归纳偏差来提供时间一致性,例如指定整个视频内容的单个潜在代码,导致内容永远不会改变
  • 另一种极端情况下,如果没有长期一致性,则生成的视频可能会在不同场景之间失去真实感并发生形变

为了解决这些限制,我们优先考虑时间轴,并通过重新设计时间潜在表示以及通过在更长视频上进行训练来学习长期一致性

为此,我们采用两阶段训练策略,在低分辨率下使用更长视频进行训练,在高分辨率下使用更短视频进行训练。为了评估模型能力,我们引入了两个新的基准数据集,明确关注长期时间动态

// 待更

参考文献与推荐阅读

  1. OpenAI sora的技术报告:Video generation models as world simulators
  2. 我在模拟世界!OpenAI刚刚公布Sora技术细节:是数据驱动物理引擎
  3. 爆火Sora参数规模仅30亿?谢赛宁等大佬技术分析来了
  4. 请教英伟达小哥哥,解读 Sora 真正的技术突破
  5. Sora 的一些个人思考
  6. ViViT论文阅读
  7. 专访 VideoPoet 作者:视频模型技术会收敛,LLM 将取代diffusion带来真正的视觉智能
  8. sora的32个reference

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1455093.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

IO进程线程day1作业

1、使用fgets统计给定文件行数 代码&#xff1a; #include<stdio.h> #include<string.h> #include<stdlib.h> int main(int argc, const char *argv[]) {if(argc ! 2){printf("inputs file error\n");printf("usage:./a.out filename\n&quo…

ruoyi低版本shiro反序列化解决

解决方式如下&#xff1a; 方案一.升级shiro至最新版本方案二.保持shiro版本不变,修改rememberMe默认密钥,改为自定义密钥获取 com.msunsoft.framework.config.ShiroConfig: 将其改为以下内容: // 设置cipherKey密钥Value("${shiro.cookie.cipherKey}")private Str…

有关光猫、路由器、交换机、网关的理解

前提 在了解计算机网络的过程中&#xff0c;出现了这四个名词&#xff1a;光猫、路由器、交换机、网络。有点模糊&#xff0c;查阅互联网相关资料&#xff0c;进行整理。如有错误&#xff0c;欢迎大家批评指正。 光猫 首先光猫是物理存在的&#xff0c;大家在家里应该都可以…

『 C++ 』海量数据处理

文章目录 &#x1f996; 快速找出海量数据中是否存在该整型数据&#x1f996; 有限内存情况下两个文件(海量query)中找出交集&#x1f996; 海量数据中找出只出现1次的数据&#x1f996; 有限内存情况下两个文件(整型)找出交集&#x1f996; 海量数据中找出出现次数不超过2次的…

CleanMyMac X好不好用?如何下载2024最新版本

CleanMyMac X是一款好用的系统优化软件&#xff0c;具有简洁的界面和多样的功能&#xff0c;能够支持系统垃圾、图片、邮件、iTunes清理&#xff0c;移除恶意软件&#xff0c;优化系统和释放多余空间等。 CleanMyMac X全新版下载如下: https://wm.makeding.com/iclk/?zoneid4…

Python算法题集_随机链表的复制

Python算法题集_随机链表的复制 题138&#xff1a;随机链表的复制1. 示例说明2. 题目解析- 题意分解- 优化思路- 测量工具 3. 代码展开1) 标准求解【双层循环】2) 改进版一【字典哈希】3) 改进版二【单层哈希】4) 改进版三【递归大法】 4. 最优算法 本文为Python算法题集之一的…

Open CASCADE学习|TopoDS_Vertex与gp_Pnt相互转化

目录 gp_Pnt TopoDS_Vertex 关系和转换 使用场景 在Open CASCADE Technology (OCCT)中&#xff0c;TopoDS_Vertex和gp_Pnt是两种不同的数据类型&#xff0c;用于表示三维空间中的点。它们有不同的用途和特性&#xff1a; gp_Pnt gp_Pnt是OCCT几何库&#xff08;Geom&…

使用RegNet替换YOLOX中原始的Backbone

使用mmdetection 中的RegNet bcakbones替换YOLOX中原始的Backbone 将mmdet/models/backbones/regnet.py中相关的代码复制到YOLOX中&#xff0c;并进行适配 注意通道数要适配 in_channels [64, 160, 384] &#xff0c;可以通过调试后&#xff0c;先运行到后后端输出结果出&a…

算法练习-01背包问题【含递推公式推导】(思路+流程图+代码)

难度参考 难度&#xff1a;困难 分类&#xff1a;动态规划 难度与分类由我所参与的培训课程提供&#xff0c;但需 要注意的是&#xff0c;难度与分类仅供参考。且所在课程未提供测试平台&#xff0c;故实现代码主要为自行测试的那种&#xff0c;以下内容均为个人笔记&#xff0…

阿里云香港轻量应用服务器网络线路cn2?

阿里云香港轻量应用服务器是什么线路&#xff1f;不是cn2。 阿里云香港轻量服务器是cn2吗&#xff1f;香港轻量服务器不是cn2。阿腾云atengyun.com正好有一台阿里云轻量应用服务器&#xff0c;通过mtr traceroute测试了一下&#xff0c;最后一跳是202.97开头的ip&#xff0c;1…

RK3399平台开发系列讲解(USB篇)U盘等存储类设备

🚀返回专栏总目录 文章目录 一、什么是U盘等存储类设备二、U盘设备传输数据结构三、U盘识别需要打开的宏沉淀、分享、成长,让自己和他人都能有所收获!😄 📢介绍U盘等存储类设备。 一、什么是U盘等存储类设备 USB Mass Storage Device Class(USB MSC/UMS) USB大容量存…

如何在Linux系统中配置并优化硬盘的RAID

在Linux系统中配置和优化硬盘的RAID技术可以帮助提高数据存储性能和安全性。RAID&#xff08;Redundant Array of Independent Disks&#xff09;技术通过将多个硬盘组合起来&#xff0c;以增加性能、容量或冗余度&#xff0c;提高数据的可靠性和可用性。本文将介绍如何在Linux…

嵌入式学习-C++-Day6

思维导图 作业 以下是一个简单的比喻&#xff0c;将多态概念与生活中的实际情况相联系&#xff1a; 比喻&#xff1a;动物园的讲解员和动物表演 想象一下你去了一家动物园&#xff0c;看到了许多不同种类的动物&#xff0c;如狮子、大象、猴子等。现在&#xff0c;动物园里有一…

【机构vip教程】Unittest(1):unittest单元测试框架简介

unittest单元测试框架简介 unittest是python内置的单元测试框架&#xff0c;具备编写用例、组 织用例、执行用例、功能&#xff0c;可以结合selenium进行UI自动化测 试&#xff0c;也可以结合appium、requests等模块做其它自动化测试 官方文档&#xff1a;https://docs.pytho…

【计算机网络】P2P应用

将会在两个例子中得出结果 1&#xff0c;对等文件分发 &#xff1b;2&#xff0c;大型对等方社区中的服务器 P2P文件分发 自拓展性 直接成因是&#xff1a;对等方除了是比特的消费者外还是它们的重新分发者BitTorrent 一个用于文件分发的P2P协议洪流 torrent 参与一个特定文件…

day34打卡

day34打卡 860. 柠檬水找零 解法&#xff0c;贪心&#xff1a;局部最优&#xff1a;遇到账单20&#xff0c;优先消耗美元10&#xff0c;完成本次找零 -》全局最优&#xff1a;完成全部账单的找零。 遇到5&#xff0c;直接收下遇到10&#xff0c;找一个5元遇到20&#xff0c;…

CS50x 2024 - Lecture 6 - Python

00:00:00 - Introduction 00:01:01 - Python print("hello world")与c的显著差异 1.不必显式包含标准库 2.不再需要定义main函数 00:07:24 - Speller 00:13:41 - Filter from PIL import Image, ImageFilterbefore Image.open("bridge.jpg") after…

山西电力市场日前价格预测【2024-02-15】

日前价格预测 预测说明&#xff1a; 如上图所示&#xff0c;预测明日&#xff08;2024-02-15&#xff09;山西电力市场全天平均日前电价为168.98元/MWh。其中&#xff0c;最高日前电价为366.42元/MWh&#xff0c;预计出现在18:30。最低日前电价为0.00元/MWh&#xff0c;预计出…

黑马程序员-瑞吉外卖day9

菜品分类下拉列表 CategoryController里面写 /*** 根据条件查询分类数据** param category* return*/GetMapping("/list")ApiOperation("菜品分类目录")public R<List<Category>> list(Category category) {List<Category> list cate…

洛夫克拉夫特“克苏鲁神话”艺术风格探索(一)

克苏鲁神话引入中国时间不长&#xff0c;研究的规模也不如国外大&#xff0c;但克苏鲁神话作为神话史、奇幻小说史上的重要节点&#xff0c;有很大的影响力与非常重要的研究意义。为了促进中文语境下克苏鲁神话元素的使用和创作、更好地设计克苏鲁的呼唤游戏模组&#xff08;剧…