深度解析Sora的核心技术

news/发布时间2024/5/15 2:50:05

Sora要解决的核心问题

Sora面临的挑战是将不同类型的视觉信息,如视频、文本、图像和声音等,整合为一种共同的表征形式。这种转换是实现统一训练过程的关键,旨在将各类数据集中到一个训练框架中,以便于进行大规模的统一学习。简而言之,OpenAI的目标是将视频数据和其他多种类型的数据结合起来,在一个统一的训练环境中进行处理和学习。

AI视频思路1:

在视频生成领域,有一种方法是基于单帧图像内容进行扩展,即通过分析当前帧的图像来预测下一帧的内容。这种方法将每一帧视为前一帧的自然延伸,从而创建出连续的视频流。

在制作视频时,为了提高稳定性,通常的步骤是先使用文本描述生成初始的图像,然后再基于这些图像生成视频。然而,这个过程存在一个核心问题:由于AI从文本生成图像本身就具有一定的随机性,这种随机性在基于图像生成视频的过程中被放大,导致最终的视频结果难以预测和控制。

这种方法的局限性在于,生成的帧之间缺乏深层的语义理解和本质联系。由于每帧图像的生成相对独立,这使得在文本到视频或图像到视频的转换过程中难以实现精确的控制和稳定性。以stable diffusion体系下的animediff为例,这种技术常常产生出变幻莫测的效果,不适合用于需要稳定输出的视频生成。

尽管如此,这种方法在视频转视频的应用场景中表现出色。例如,在B站上,许多美女跳舞的视频就是通过逐帧重绘技术制作的。这种方法允许创作者轻松改变视频的风格,从而创造出多样化的视觉效果。

AI视频思路2:

在视频生成领域,另一种更为主流的方法是直接对视频本身进行训练。这种方法认识到,基于单帧推导的视频效果并不理想,因此转而关注于视频内容的整体训练。

这种主流方法的操作步骤是,每次选取一段4秒钟的视频片段,并告诉AI这段视频的内容是什么。通过大规模的训练,AI可以学会生成与训练片段相似风格的4秒钟视频。

选择4秒钟的时长主要是因为视频数据相对于图像来说非常大,而显卡的显存有限。在传统方法中,我们只能将有限的视频数据放入显存中进行训练。最初,AI视频的研究仅限于8帧或16帧的视频片段,随着技术的进步,这个时长逐渐扩展到了大约4秒钟。

在这方面,Runway和Pika这两家公司是该领域的代表,它们都能够完成从文本到视频和从图像到视频的生成任务。对于AI已经学习过的内容,它们在4秒内的表现效果较好。然而,由于每次训练只包含4秒钟的视频片段,AI学习到的是片段化的内容,这导致AI难以生成长视频,且视频的连续性和稳定性较差。

此外,由于AI只获得了片段化的记忆,它很难构建对现实世界的完整理解,其“知识量”非常有限,也没有涌现出新的能力。因此,当输入AI不熟悉的内容时,生成的效果可能会非常差。

为了突破AI视频生成的难题,我们必须解决这些核心问题,包括如何提高AI对视频内容的理解能力,如何增强视频生成的连续性和稳定性,以及如何扩展AI的知识量,使其能够处理更广泛的内容。

高效地训练大体量的视频数据

进一步考虑视频数据的多样性,我们发现视频可以呈现多种形式,包括横屏和竖屏格式,以及从4K高清到低分辨率的64x64像素马赛克图片等多种分辨率。这些视频数据来源多样,具有不同的分辨率、宽高比和属性,给AI训练带来了挑战。

为了应对这些挑战,必须开发一种统一的方法来对这些视频数据进行归一化处理,以便AI可以进行大规模训练。Sora的核心任务就是找到这样一种方法,它能够将不同类型的视觉数据转换为统一的表示形式,并实现集中训练。

Sora的工作重点是将海量的视频数据转换为适合Transformer架构处理的向量形式,以便进行后续的训练。为了实现这一目标,Sora采用了多种技术手段来逐步压缩和提炼视频中的核心内容,从而使得视频数据可以在统一的框架下进行有效的训练和学习。通过这种方式,Sora能够处理不同格式的视频数据,使其能够在AI训练过程中得到有效利用。

第一步:压缩原始视频,提炼视频特征

Sora的训练过程首先将原始视频数据转化为低维度的潜空间特征,这一步骤的目的是为了解决视频和图像数据在原始形式下体积过大的问题。在日常生活中,我们观看的视频和图片通常具有很高的分辨率,包含大量的像素信息。这些高分辨率的视频和图像数据对于计算机来说是非常庞大的,直接处理这样的数据会消耗大量的计算资源,包括内存和处理时间。

通过将视频数据转化为低维度的潜空间特征,Sora可以减少数据的复杂性,同时保留视频内容的关键信息。潜空间特征是一种压缩表示,它通过算法提取出数据中最显著和最重要的特征,并将其映射到一个维度更低的向量空间中。这个过程类似于将高维数据压缩到一个更加紧凑的形式,使得AI模型可以在更高效的计算环境中进行训练和推理。这种转换不仅提高了处理效率,还使得AI模型能够更容易地捕捉到视频内容的基本结构和动态变化,从而在保持数据有用性的同时,减少了存储和处理的需求。

对于AI来说,尤其是那些设计用于处理低维度向量的模型,直接处理这些原始的、像素级的数据是非常困难的,因为它们会消耗大量的计算资源,并且训练时间会非常长。为了解决这个问题,我们需要对原始视频进行“压缩”处理,这实际上是一个特征提取的过程。这个过程涉及将视频中的像素数据转换为一组更紧凑、更易于管理的特征信息。这些特征信息代表了视频内容的关键视觉元素,如边缘、纹理、颜色分布和运动模式等,而不需要保留每个像素的具体信息。通过这种方式,我们可以大大减少数据的大小,同时保留视频内容的核心信息。这种压缩后的特征表示可以有效地输入到AI模型中,使得模型能够更快地进行训练和推理,同时还能保持较高的视频理解和生成能力。

把原图提炼成一个潜空间特征,这样把需要处理的数据量大幅压缩了,只提取里面的浓缩的精华。之后,我们可以针对潜空间的特征信息进行各种操作,并生成新的图片。正是基于这个核心原理,才有了这一轮AI绘图的大爆发。在AI绘图时,先输入了一些关键词(prompt),而这些关键词就会形成一堆潜空间特征,最终AI通过vae编码器生成一大堆类似的AI图。比如Midjourney,一次性可以生成4张都符合你描述的特征,但又略有不同的图片,其实就是这个原理的最经典体现。 

从上面的例子我们可以理解,将原始的图片转化为潜空间特征,再进行处理,可以既保留原始图片的关键特征信息,同时又可以极大压缩数据量和信息量。

Sora很可能对Stable Diffusion体系下的图片VAE(变分自编码器)进行了升级,以支持视频数据的处理。这样,OpenAI就能够将大量的原始视频数据转化为低维度的潜空间特征。

这种转化过程可以类比为提炼视频的核心要点信息,这些信息能够有效地表示视频的关键内容。通过这种方式,视频被压缩至潜空间,而这些潜空间特征随后可以通过解码器还原为视频数据,类似于解压一个压缩文件。

然而,需要注意的是,这种压缩过程是有损的。这意味着将视频压缩至潜空间并再次解压,得到的视频将是原始视频的一个近似版本,而不是完全相同的副本。这种近似保留了视频的主要特征和内容,但可能会丢失一些细节信息。这种有损压缩是许多媒体处理技术中的一个常见权衡,它允许在存储和处理效率之间找到平衡。

第二步:将视频特征进一步拆分成时空图像块(spacetime patches)

在视频训练领域,为了进行大规模的视频处理和学习,我们需要定义视频训练中的基本单元,这类似于大型语言模型中的“token”。在语言模型中,token代表最小的文本单位,它可以是单词、词组或标点符号,是构成语言的基本拼图块。

将这个概念应用到视频领域,我们可以将视频想象成由一系列“patches”(补丁)组成的拼图游戏。每个patch是视频中的一个小块,它代表了视频帧中的一个局部区域,包含了时间上和空间上的信息。这些patches按照时间和空间顺序组合在一起,形成了连续的视频流。

在Sora的视频处理中,patch成为了AI视频训练的基本单元。Sora的主要任务就是预测视频序列中的下一个patch,这类似于GPT模型预测下一个token的工作。通过学习这些patches及其组合方式,Sora能够理解和生成视频内容,捕捉视频中的动态变化和关键特征。

使用patches作为基本单元的原因与语言模型中使用tokens类似,包括灵活性、效率、兼容性和提高理解力等方面:

  • 灵活性:通过将视频分解为patches,模型可以更灵活地处理不同类型的视频内容,无论是静态场景还是动态变化。
  • 效率:处理patches比处理整个视频帧更加高效,因为它允许模型专注于学习视频内容的关键部分。
  • 兼容性:使用patches作为基本单元,模型能够处理不同分辨率和格式的视频,因为patches可以根据视频的特定属性进行调整。
  • 提高理解力:通过学习大量的patches,模型能够把握视频的深层结构和时间上的连续性,从而更好地理解和生成视频内容。

总之,patches作为视频训练的基本单元,是Sora理解和生成视频内容的核心机制。通过这种方式,Sora能够在视频数据的大规模训练中发挥重要作用。

patches是图像块

由于图像通常具有较大的尺寸,直接使用这些图像进行训练并不切实际,尤其是在使用Transformer架构时。这是因为Transformer模型在处理序列数据时,期望输入的序列长度是固定的,而原始图像的像素尺寸往往过大,无法直接作为输入。

在Vision Transformer (ViT)这篇开创性的论文中,作者提出了一种将图像转换为适合Transformer处理的格式的方法。这个思路包括以下几个关键步骤:

  • 图像分割:将原始图像分割成一系列固定大小的图像块(patches)。这些图像块通常是正方形的,面积相同。
  • 线性嵌入:将每个图像块展平并通过一个线性层(即全连接层)转换成一个固定维度的向量。这个步骤将每个图像块映射到一个连续的特征空间中。
  • 位置编码:由于Transformer模型本身不具有处理序列顺序的能力,因此需要将位置信息编码到图像块的向量中。这通常通过添加位置嵌入(position embeddings)来实现,这些位置嵌入是与图像块向量相加的固定数值,表示了每个图像块在原始图像中的位置。
  • 分类嵌入:在处理图像块序列之前,通常会添加一个额外的分类嵌入(class token),这个嵌入的目的是为了在后续的模型训练中,能够区分图像的不同类别或进行其他分类任务。
  • Transformer处理:将经过上述处理的图像块向量序列作为输入,送入Transformer模型进行处理。Transformer模型利用其自注意力机制,能够同时处理这些向量,捕捉图像块之间的关系,并最终理解整个图像的内容。

通过这种方式,Vision Transformer (ViT)成功地将Transformer架构应用于图像识别任务,并且取得了与传统卷积神经网络相媲美甚至更好的性能。ViT的这种设计理念为后续的视觉Transformer模型奠定了基础,并在各种视觉任务中得到了广泛应用和发展。

在处理图像时,特别是在为Transformer架构准备数据时,一个常见的做法是将图像分割成多个面积相同的图像块,这些图像块通常被称为patches。每个图像块都是原始图像的一个局部区域,包含了图像的一部分信息。

这些图像块随后会被序列化,即按照一定的顺序排列成一条线性序列。在序列化的过程中,每个图像块通常会被转换成一个固定长度的向量,这个向量可以简单理解为一串数字,它代表了图像块的特征。这个过程可以通过卷积神经网络(CNN)或其他特征提取方法来实现。

在形成最终的训练向量时,不仅图像块的特征会被包含进去,而且还会记录每个图像块在原始图像中的位置信息。这样,当模型处理这些向量时,它不仅能够了解每个图像块的内容,还能知道这些块在图像中的相对位置,这对于理解图像的整体结构和上下文是非常重要的。

通过这种方式,复杂的图像数据被转换成了Transformer架构能够处理的形式,即一系列的向量。Transformer模型利用其自注意力机制,可以同时处理这些向量,捕捉图像块之间的关系,并最终理解整个图像的内容。这种处理方法使得AI能够有效地学习和生成具有高度复杂性和多样性的图像内容。

spacetime patches是时空图像块

对于视频数据的处理,仅仅将图像分割成静态的图像块是不够的,因为视频包含了时间维度上的连续性。为了更有效地处理视频,Sora采用了时空图像块(spacetime patches)的概念,这是一种专为视频数据设计的处理技术。

时空图像块不仅包含了每个图像块的空间信息,如尺寸、颜色和纹理,还包含了这些图像块随时间的变化信息。这样,每个时空图像块实际上是一个立方体,它在空间维度上是一个小区域,在时间维度上则包含了连续几帧的信息。

通过将视频分割成时空图像块,Sora能够捕捉到视频中的动态变化和事件的发展。这些时空图像块随后被转换成一系列的向量,每个向量不仅携带了图像块的视觉信息,还包括了它们在视频中的时间和空间位置信息。这样做使得模型能够理解每个图像块的内容及其在整个视频中的相对位置和随时间的演变。

将时空图像块作为视频处理的基本单元,使得Sora能够利用Transformer架构的优势,同时处理空间和时间上的信息。这种处理方法为视频理解、生成和转换提供了强有力的工具,使得AI能够在处理视频数据时更加高效和有效。

因此,spacetime patches(时空图像块)的引入是为了同时捕捉视频中的空间信息(即图像的细节)和时间信息(即图像如何随时间变化)。这种技术允许AI模型更全面地理解和处理视频数据。

具体来说,一个spacetime patch是一个立方体,它不仅包含了视频帧中的一小块空间区域,还包含了这一区域在连续几帧中的变化。这样,每个时空图像块就携带了视频在特定时间间隔内的动态信息。通过这种方式,AI模型能够学习到视频中的运动模式、对象行为的连续性以及场景的动态变化。

在处理视频时,将这些时空图像块作为输入,AI模型可以更加深入地分析视频内容,从而在视频理解、分类、分割、生成等任务中取得更好的性能。这种方法对于处理具有复杂时间和空间关系的视频数据尤为重要,因为它能够帮助模型捕捉到视频中的关键特征和事件。

以一个跳动的心形图案视频为例,使用spacetime patches(时空图像块)可以帮助Sora捕捉到心形图案随时间跳动的动态变化。当视频被划分为时空图像块时,每个patch不仅包含了心形图案的空间细节,比如颜色、形状和纹理,还包含了这些细节随时间的变化信息。例如,一个时空图像块可能会捕捉到心形图案从收缩到膨胀再到收缩的过程,从而包含了整个跳动周期的一部分。

通过分析这些时空图像块,Sora能够学习到心形图案的跳动节奏、速度和模式,以及它与背景或其他对象的互动。这样,Sora不仅能够理解视频中的静态图像内容,还能够理解这些内容随时间的变化和动态。利用这种技术,Sora能够生成新的视频内容,其中可以包含具有丰富空间细节和时间动态的跳动心形图案。例如,它可以生成一个视频,展示不同大小、颜色和节奏的跳动心形图案,或者在不同的背景上以不同的速度跳动。

总之,时空图像块技术使Sora能够深入理解和生成视频中的时空动态,从而在视频处理和生成任务中实现更高的灵活性和表现力。

灵活的时空图像块

时空图像块的概念为我们提供了一种灵活的方式来处理视频数据,它允许我们根据需要捕捉不同尺度的时间和空间动态。这种切片可以是局部微小的细节,比如猫咪轻轻飘动的毛发;也可以是广阔的场景,比如航拍长镜头中的大范围运动。Sora利用这种灵活性来生成从连续长镜头到局部细节的各种视频内容。

在实现时空图像块的过程中,Sora可能确实参考了先前的研究和技术,如Vision Transformer(ViT)中固定尺寸图像块的思路。然而,Sora可能也采用了更先进的技术,如Navit中的“Patch n’ Pack”,以处理不同分辨率和宽高比的输入。

“Patch n’ Pack”技术允许在训练过程中灵活处理不同尺寸和比例的图像。这意味着,无论是哪种宽高比或分辨率的内容,都可以被拆分成图像块,并且这些图像块可以根据不同的需求调整大小。此外,这种技术还允许将来自不同图像的图像块打包到同一个序列中,从而使得不同分辨率和宽高比的内容可以灵活组合,形成一个统一的训练数据集。

通过这种方式,Sora能够处理和生成具有不同细节层次的视频内容,同时保持高效和稳定的表现。这种能力使得Sora在视频理解和生成任务中表现出色,能够处理从宏观场景到微观细节的广泛内容。

另外,“spacetime patches”技术在视频处理中扮演着至关重要的角色,它提供了一种高效的方式来处理视频数据,尤其是在训练阶段。由于视频中的帧与帧之间往往存在大量的重复信息,这种技术可以识别并丢弃这些雷同的图像块,从而减少训练所需的计算资源和时间。

“spacetime patches”类似于语言模型中的单词或词组(token),成为构成视频或图像的基本单元。通过将视频或图像分解成多个patch,我们实际上是将连续的视觉信息转换成了一系列可以被模型处理的离散单元。这种方法使得模型能够处理和生成各种分辨率、持续时间和宽高比的视频,因为模型学习的是视频的基本构成单元——时空图像块的表示,而不是整个视频的全貌。

Sora通过一个视频压缩网络将视频数据压缩成一个低维的潜在空间表示,这个过程既减少了视频在时间上的维度(比如减少帧数),也减少了空间上的维度(比如降低分辨率)。然后,这个压缩后的视频被分解成一系列的“时空patch”,这些patch成为了模型学习和生成的基础。

基于patch的表示方法有几个重要的好处:

  • 灵活性:模型可以处理不同分辨率、不同持续时间和不同宽高比的视频和图像,因为无论原始视频或图像的规模如何,都可以通过调整patch的数量和布局来适配。
  • 效率:通过将视频和图像转换成patch,模型可以更高效地学习视觉数据的复杂特征,因为每个patch都包含了局部的信息,这些信息是生成或理解整个视频和图像的关键。
  • 扩展性:类似于语言模型可以通过学习大量文本token来掌握语言的复杂性,基于patch的视觉模型也可以通过学习大量视觉patch来掌握视觉世界的复杂性。

通过这种方式,Sora能够以一种高效和灵活的方式处理视频数据,从而在视频理解和生成任务中实现高性能。

Sora训练过程

通过上述解释,我们现在可以理解Sora是如何将原始视频转换为最终可训练的时空向量的。这个过程可以概括为以下几个步骤:

  • 序列帧提取:首先,原始视频被转换为一系列的帧,这些帧代表了视频在时间上的连续性。
  • 特征压缩与提炼:这些序列帧图片随后通过OpenAI训练的模型进行压缩和提炼,转换成时空潜空间特征(spacetime latent features)。这些特征代表了视频内容的关键视觉元素,是视频的压缩表示。
  • 时空图像块分割:时空潜空间特征进一步被分割成时空图像块(Spacetime patches)。每个时空图像块包含了视频在特定时间间隔内的空间信息及其变化。
  • 向量转化:最后,这些时空图像块被转化为可训练的一维空向量。这些向量代表了视频内容的基本构成单元,可以被Diffusion扩散模型所处理和训练。

通过这种方式,Sora能够将原始视频数据转换为适合Diffusion扩散模型训练的格式。这种基于时空图像块的方法不仅提高了训练的效率,还增强了模型处理不同类型视频内容的能力。最终,这种转换使得Sora能够在视频生成、编辑和其他相关任务中展现出强大的性能。

视频文本描述

OpenAI 在视频理解和生成领域取得了一项重要进展,他们开发了一种新的技术,名为 DALL·E 3,这项技术能够将简短的文本提示转化为对视频内容的详细描述。这类似于 GPT-4V,一个被微调的模型,它能够清晰地按照规范来描述视频中的内容,包括视频的主要内容、角色动作、环境背景、细节以及风格等。这些描述内容比视频原始的标题信息更加详细,为视频的生成和编辑提供了丰富的上下文信息。

此外,这些描述内容可以与前面提到的时空图像块技术相结合,用于视频的训练和生成。在训练阶段,视频数据被转换成时空图像块,这些图像块不仅包含了视频的空间信息,还包含了时间变化信息。这些时空图像块随后被转化为适合 Transformer 架构处理的一维向量,用于模型的训练。在生成阶段,AI 模型利用训练好的时空图像块,结合详细的文本描述,生成高质量的视频内容。

这种结合了文本描述和时空图像块的技术,不仅提高了视频处理的效率,还增强了 AI 模型对视频内容的理解和生成能力。OpenAI 的这一技术为视频内容的创作和编辑提供了新的可能性,有望在视频制作、媒体内容生成等领域发挥重要作用。

Diffusion Transformer训练

视频的文本描述与时空图像块转换成的向量被匹配在一起,用于训练最终的Diffusion模型。在这个过程中,Sora对原始Diffusion模型的Unet结构进行了替换,采用了Transformer架构。这一部分的实现细节基于Dit的架构(参考文献:https://arxiv.org/abs/2212.09748)。

尽管在骨干网络架构上进行了替换,但Sora的基本原理与经典的Diffusion扩散模型仍然非常相似。这种方法在大体量数据训练上表现出色,数据量越大,模型的效果越好。

通过结合文本描述和时空图像块,Sora能够在视频生成、编辑和其他相关任务中展现出强大的性能。这种结合了视觉和文本信息的方法,为视频内容的创作和编辑提供了新的可能性,有望在视频制作、媒体内容生成等领域发挥重要作用。

OpenAI 利用其强大的计算资源,对 Sora 进行了大规模的训练。这一训练过程涉及到大量的视频数据和复杂的模型架构,需要极高的计算能力和内存资源。通过这种大规模的训练,OpenAI 能够使得 Sora 模型在视频理解和生成方面达到更高的准确性和灵活性。

Sora 的训练和优化过程是 OpenAI 团队的重要工作之一。他们通过不断的调整和优化模型架构,以及采用最新的技术和算法,使得 Sora 模型在视频处理和生成方面取得了显著的进展。

OpenAI 的这种训练方式,充分利用了其在计算资源和技术方面的优势,使得 Sora 模型在视频理解和生成领域取得了重要的突破。这种训练方式也为其他研究团队提供了一种新的思路和方法,有望推动整个视频处理和生成领域的发展。

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

如若内容造成侵权/违法违规/事实不符,请联系编程老四网进行投诉反馈email:xxxxxxxx@qq.com,一经查实,立即删除!

相关文章

HTTPS网络通信协议基础

目录 前言: 1.HTTPS协议理论 1.1协议概念 1.2加密 2.两类加密 2.1对称加密 2.2非对称加密 3.引入“证书” 3.1证书概念 3.2数据证书内容 3.3数据签名 4.总结 前言: 了解完HTTP协议后,HTTPS协议是HTTP协议的升级加强版&#xff0c…

二进制方式安装MySQL并备份数据库

一、openEuler二进制方式安装MySQL 8.0.28版本 1.1 获取软件包 [rootopenEuler3 ~]# wget -c https://mirrors.aliyun.com/mysql/MySQL-8.0/mysql-8.0.28-linux-glibc2.12-x86_64.tar.xz 1.2 解压软件包 [rootopenEuler3 ~]# dnf install -y tar xz [rootopenEuler3 ~]# t…

SpringBoot+WebSocket实现即时通讯(二)

前言 紧接着上文《SpringBootWebSocket实现即时通讯(一)》 本博客姊妹篇 SpringBootWebSocket实现即时通讯(一)SpringBootWebSocket实现即时通讯(二)SpringBootWebSocket实现即时通讯(三&…

基于python-socket构建任务服务器(基于socket发送指令创建、停止任务)

在实现ia业务服务器时需要构建一个python-socket客户端,1、要求能与服务器保持心跳连接,每10秒钟发送一次心跳信号;2、要求能根据socket服务器发送的指令创建或终止一个定时任务。 为此以3个类实现该功能,分别为socket通信类&…

【鸿蒙系统学习笔记】TypeScript开发语言

一、背景 HarmonyOS 应用的主要开发语言是 ArkTS,它由 TypeScript(简称TS)扩展而来,在继承TypeScript语法的基础上进行了一系列优化,使开发者能够以更简洁、更自然的方式开发应用。值得注意的是,TypeScrip…

CSS基础属性

【三】基础属性 【1】高度和宽度 (1)参数 width(宽度):用于设置元素的宽度。可以使用具体的数值(如像素值)或百分比来指定宽度。 height(高度):用于设置元…

深信服技术认证“SCCA-C”划重点:深信服超融合HCI

为帮助大家更加系统化地学习云计算知识,高效通过云计算工程师认证,深信服特推出“SCCA-C认证备考秘笈”,共十期内容。“考试重点”内容框架,帮助大家快速get重点知识 划重点来啦 *点击图片放大展示 深信服云计算认证(S…

Android 沉浸式状态栏

过时的API //设置默认隐藏虚拟按键,虚拟按键显示后为半透明protected open fun hideNavigationBarAndFullScreen() {val flags: Int// This work only for android 4.4flags if (Build.VERSION.SDK_INT > Build.VERSION_CODES.KITKAT) {// This work only for a…

用HTML5实现动画

用HTML5实现动画 要在HTML5中实现动画&#xff0c;可以使用以下几种方法&#xff1a;CSS动画、使用<canvas>元素和JavaScript来实现动画、使用JavaScript动画库。重点介绍前两种。 一、CSS动画 CSS3 动画&#xff1a;使用CSS3的动画属性和关键帧&#xff08;keyframes&…

论文阅读_用模型模拟记忆过程

英文名称: A generative model of memory construction and consolidation 中文名称: 记忆构建和巩固的生成模型 文章: https://www.nature.com/articles/s41562-023-01799-z 代码: https://github.com/ellie-as/generative-memory 作者: Eleanor Spens, Neil Burgess&#xff…

算法沉淀——多源 BFS(leetcode真题剖析)

算法沉淀——多源 BFS&#xff08;leetcode真题剖析&#xff09; 01.矩阵02.飞地的数量03.地图中的最高点04.地图分析 多源 BFS 是指从多个源点同时进行广度优先搜索的算法。在传统的 BFS 中&#xff0c;我们通常从一个起始点开始&#xff0c;逐层遍历所有的相邻节点。而在多…

Code Composer Studio (CCS) - 文件比较

Code Composer Studio [CCS] - 文件比较 References 鼠标单击选中一个文件&#xff0c;再同时按住 Ctrl 鼠标左键来选中第二个文件&#xff0c;在其中一个文件上鼠标右击选择 Compare With -> Each Other. References [1] Yongqiang Cheng, https://yongqiang.blog.csdn.n…

遥感影像目标检测:从CNN(Faster-RCNN)到Transformer(DETR)

我国高分辨率对地观测系统重大专项已全面启动&#xff0c;高空间、高光谱、高时间分辨率和宽地面覆盖于一体的全球天空地一体化立体对地观测网逐步形成&#xff0c;将成为保障国家安全的基础性和战略性资源。未来10年全球每天获取的观测数据将超过10PB&#xff0c;遥感大数据时…

Swift Combine 使用调试器调试管道 从入门到精通二十六

Combine 系列 Swift Combine 从入门到精通一Swift Combine 发布者订阅者操作者 从入门到精通二Swift Combine 管道 从入门到精通三Swift Combine 发布者publisher的生命周期 从入门到精通四Swift Combine 操作符operations和Subjects发布者的生命周期 从入门到精通五Swift Com…

linux CentOs 安装docker 推荐生产环境使用

目录 1. 在CentOs上安装docker所需的系统环境 2. 卸载旧版本 2.1 查看是否已安装docker 2.2 卸载已安装的docker 3. 安装方式 3.1 使用rpm存储库安装(推荐使用该方法) 3.2 从包中安装 4. 开始docker 1. 在CentOs上安装docker所需的系统环境 需要以下CentOS版本之一的维…

「Qt Widget中文示例指南」如何实现文档查看器?(一)

Qt 是目前最先进、最完整的跨平台C开发工具。它不仅完全实现了一次编写&#xff0c;所有平台无差别运行&#xff0c;更提供了几乎所有开发过程中需要用到的工具。如今&#xff0c;Qt已被运用于超过70个行业、数千家企业&#xff0c;支持数百万设备及应用。 文档查看器是一个显…

Python 写网络监控

大家好&#xff01;我是爱摸鱼的小鸿&#xff0c;关注我&#xff0c;收看每期的编程干货。 网络监控是保障网络可靠性的一项重要任务。通过实时监控网络性能&#xff0c;我们可以及时发现异常&#xff0c;迅速采取措施&#xff0c;保障网络畅通无阻。本文将以 Python为工具&…

SQL注入:网鼎杯2018-unfinish

目录 使用dirmap扫描 使用dirsearch扫描 使用acunetix扫描 爆破后端过滤的字符 绕过限制获取数据 这次的进行SQL注入的靶机是&#xff1a;BUUCTF在线评测 进入到主页面后发现是可以进行登录的&#xff0c;那么我们作为一个安全人员&#xff0c;那肯定不会按照常规的方式来…

【C++练级之路】【Lv.8】【STL】list类的模拟实现

快乐的流畅&#xff1a;个人主页 个人专栏&#xff1a;《C语言》《数据结构世界》《进击的C》 远方有一堆篝火&#xff0c;在为久候之人燃烧&#xff01; 文章目录 引言一、结点二、迭代器2.1 成员变量与默认成员函数2.2 operator*2.3 operator->2.4 operator2.5 operator- …

Springcloud:LiteFlow

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 目录 一、LiteFlow简介 二、规则编排关键字及语法 1、THEN&#xff1a; 2、WHEN&#xff1a; 3、AND&#xff1a; 4、OR&#xff1a; 5、IF&#xff1a; 6、ELSE&…
推荐文章