视频生成模型Sora的全面解析:从AI绘画、ViT到ViViT、DiT、VDT、NaViT、VideoPoet

【论文笔记】Video Vision Transformer(ViViT) ViViT是一个视频分类模型,基于ViT模型进行了一些改进。ViT只用于2D图像的分类识别,视频与图像的区别是,视频引入了时间维度,因此ViViT模型在识别视频的时候也引入了时间维度,提出了tublet embedding来划分patches;3D滤波器的另一种生成方式;引入了时间维度的4种变体Attention模型,在各个数据集上的精确度都表现优秀:改进点:1.提出了一种"Tubelet embedding "方法划分patches。 阅读详情

cover

视频生成模型Sora的全面解析:从AI绘画、ViT到ViViT、DiT、VDT、NaViT、VideoPoet

真没想到,举例视频生成上一轮的集中爆发才过去三个月,没想OpenAI一出手,该领域又直接变天了自打2.16日OpenAI发布sora以来,不但把同时段Google发布的Gemmi Pro 1.5干没了声音,而且网上各个渠道,大量新闻媒体、自媒体(含公号、微博、博客、视频)做了大量的解读,也引发了圈内外的大量关注,很多人因此认为,视频生成领域自此进入了大规模应用前夕,好比NLP领域中GPT3的发布一

​编辑 v_JULY_v  ·  2024-02-18 22:49:27 发布

前言

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

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

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

本文主要分为三个部分(初步理解只看第一部分即可,深入理解看第二部分,更多细节则看第三部分)

  • 第一部分,侧重sora的核心技术解读
    方便大家把握重点,且会比一切新闻稿都更准确,此外
    \rightarrow  如果之前没有了解过DDPM、ViT的,建议先阅读下此文《从VAE、扩散模型DDPM、DETR到ViT、Swin transformer》
    \rightarrow  如果之前没有了解过图像生成的,建议先阅读下此文《从CLIP、BLIP到DALLE、DALLE 2、DALLE 3、Stable Diffusion》
    当然,如果个别朋友实在不想点开看上面的两篇文章,我也尽可能在本文中把相关重点交代清楚
  • 第二部分,侧重sora相近技术的发展演变
    把sora涉及到的关键技术在本文中全部全面、深入、细致的阐述清楚,毕竟如果人云亦云就不用我来写了
    且看完这部分你会发现,从来没有任何一个火爆全球的产品是一蹴而就的,且基本都是各种创新技术的集大成者(Google很多工作把transformer等各路技术发扬光大,但OpenAI则把各路技术 整合到极致了..)
  • 第三部分,根据sora的32个reference以窥探其背后的更多细节
    由于sora实在是太火了,网上各种解读非常多,有的很专业,有的看上去一本正经 实则是胡说八道(即便他的title看起来有一定的水平),为方便大家辨别什么样的解读是不对的,特把一些更深入的细节也介绍下

总之,看本文之前,如果你人云亦云的来一句:sora就是DiT架构,我表示理解。但看完全文后你会发现

  • 如果只允许用10个字定义sora的模型结构,则可以是:潜在扩散架构下的Video Transformer
  • 如果允许25个字以内,则是:带文本条件融合且时空注意力并行计算的Video Diffusion Transformer

推荐内容

第一部分 OpenAI Sora的关键技术点

1.1 Sora的三大Transformer组件
1.1.1 从前置工作DALLE 2到sora的三大组件

为方便大家更好的理解sora背后的原理,我们先来快速回顾下AI绘画的原理(理解了AI绘画,也就理解了sora一半)

以DALLE 2为例,如下图所示(以下内容来自此文:从CLIP、BLIP到DALLE、DALLE 2、DALLE 3、Stable Diffusion)

  1. CLIP训练过程:学习文字与图片的对应关系
    如上图所示,CLIP的输入是一对对配对好的的图片-文本对(根据对应文本一条狗,去匹配一条狗的图片),这些文本和图片分别通过Text Encoder和Image Encoder输出对应的特征,然后在这些输出的文字特征和图片特征上进行对比学习
  2. DALL·E2:prior + decoder
    上面的CLIP训练好之后,就将其冻住了,不再参与任何训练和微调,DALL·E2训练时,输入也是文本-图像对,下面就是DALL·E2的两阶段训练:
    \rightarrow  阶段一 prior的训练:根据文本特征(即CLIP text encoder编码后得到的文本特征),预测图像特征(CLIP image encoder编码后得到的图片特征)
    换言之,prior模型的输入就是上面CLIP编码的文本特征,然后利用文本特征预测图片特征(说明白点,即图中右侧下半部分预测的图片特征的ground truth,就是图中右侧上半部分经过CLIP编码的图片特征),就完成了prior的训练
    推理时,文本还是通过CLIP text encoder得到文本特征,然后根据训练好的prior得到类似CLIP生成的图片特征,此时图片特征应该训练的非常好,不仅可以用来生成图像,而且和文本联系的非常紧(包含丰富的语义信息)

    \rightarrow  阶段二 decoder生成图:常规的扩散模型解码器,解码生成图像
    这里的decoder就是升级版的GLIDE(GLIDE基于扩散模型),所以说DALL·E2 = CLIP + GLIDE

所以对于DALLE 2来说,正因为经过了大量上面这种训练,所以便可以根据人类给定的prompt画出人类预期的画作,说白了,可以根据text预测画作长什么样

最终,sora由三大Transformer组件组成(如果你还不了解transformer或注意力机制,请读此文):Visual Encoder(即Video transformer,类似下文将介绍的ViViT)、Diffusion Transformer、Transformer Decoder,具体而言

  1. 训练中,给定一个原始视频X
    \rightarrow  Visual Encoder将视频压缩到较低维的潜在空间(潜在空间这个概念在stable diffusion中用的可谓炉火纯青了,详见此文的第三部分)
    \rightarrow  然后把视频分解为在时间和空间上压缩的潜在表示(不重叠的3D patches),即所谓的一系列时空Patches
    \rightarrow  再将这些patches拉平成一个token序列,这个token序列其实就是原始视频的表征:visual token序列
  2. Sora 在这个压缩的潜在空间中接受训练,还是类似扩散模型那一套,先加噪、再去噪
    这里,有两点必须注意的是
    \rightarrow  1 扩散过程中所用的噪声估计器U-net被替换成了transformer结构的DiT(加之视觉元素转换成token之后,transformer擅长长距离建模,下文详述DiT)
    \rightarrow  2 视频中这一系列帧在上个过程中是同时被编码的,去噪也是一系列帧并行去噪的(每一帧逐步去噪、多帧并行去噪)
    此外,去噪过程中,可以加入去噪的条件(即text condition),这个去噪条件一开始可以是原始视频X的描述,后续还可以是基于原视频进行二次创作的prompt
    比如可以将visual tokens视为query,将text tokens作为key和value,然后类似SD那样做cross attention
  3. OpenAI 还训练了相应的Transformer解码器模型,将生成的潜在表示映射回像素空间,从而生成视频X'

你会发现,上述整个过程,其实和SD的原理是有较大的相似性(SD原理详见此文《从CLIP、BLIP到DALLE、DALLE 2、DALLE 3、Stable Diffusion》的3.2节),当然,不同之处也有很多,比如视频需要一次性还原多帧、图像只需要还原一帧

网上也有不少人画出了sora的架构图,比如来自魔搭社区的

1.1.2 如何理解所谓的时空编码(含其好处)

首先,一个视频无非就是沿着时间轴分布的图像序列而已

但其中有个问题是,因为像素的关系,一张图像有着比较大的维度(比如250 x 250),即一张图片上可能有着5万多个元素,如果根据上一张图片的5万多元素去逐一交互下一张图片的5万多个元素,未免工程过于浩大(而且,即便是同一张图片上的5万多个像素点之间两两做self-attention,你都会发现计算复杂度超级高)

  1. 故为降低处理的复杂度,可以类似ViT把一张图像划分为九宫格(如下图的左下角),如此,处理9个图像块总比一次性处理250 x 250个像素维度 要好不少吧(ViT的出现直接挑战了此前CNN在视觉领域长达近10年的绝对统治地位,其原理细节详见本文开头提到的此文第4部分)

  2. 当我们理解了一张静态图像的patch表示之后(不管是九宫格,还是16 x 9个格),再来理解所谓的时空Patches就简单多了,无非就是在纵向上加上时间的维度,比如t1 t2 t3 t4 t5 t6
    而一个时空patch可能跨3个时间维度,当然,也可能跨5个时间维度

    如此,同时间段内不同位置的立方块可以做横向注意力交互——空间编码
    不同时间段内相同位置的立方块则可以做纵向注意力交互——时间编码
    (如果依然还没有特别理解,没关系,可以再看下下文第二部分中对ViViT的介绍)

可能有同学问,这么做有什么好处呢?好处太多了

  • 一方面,时空建模之下,不仅提高单帧的流畅、更提高帧与帧之间的流畅,毕竟有Transformer的注意力机制,那无论哪一帧图像,各个像素块都不再是孤立的存在,都与周围的元素紧密联系
  • 二方面,可以兼容所有的数据素材:一个静态图像不过是时间=0的一系列时空patch,不同的像素尺寸、不同的时间长短,都可以通过组合一系列 “时空patch” 得到

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

DiT 作者之一 Saining Xie 在推文中提到:Sora“可能还使用了谷歌的 Patch n’ Pack (NaViT) 论文成果,使其能够适应可变的分辨率/持续时间/长宽比”


当然,ViT本身也能够处理任意分辨率(不同分辨率相当于不同长度的图片块序列),但NaViT提供了一种高效训练的方法,关于NaViT的更多细节详见下文的介绍

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

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

    图片

  2. 其次使用视频的原始长宽比进行训练可以提升内容组成和帧的质量
    其他模型一般将所有训练视频裁剪成正方形,而经过正方形裁剪训练的模型生成的视频(如下图左侧),其中的视频主题只是部分可见;相比之下,Sora 生成的视频具有改进的帧内容(如下图右侧)

    图片

1.1.3 Diffusion Transformer(DiT):扩散过程中以Transformer为骨干网络

sora不是第一个把扩散模型和transformer结合起来用的模型,但是第一个取得巨大成功的,为何说它是结合体呢

  1. 一方面,它类似扩散模型那一套流程,给定输入噪声patches(以及文本提示等调节信息),训练出的模型来预测原始的不带噪声的patches「Sora is a diffusion model, given input noisy patches (and conditioning information like text prompts), it’s trained to predict the original “clean” patches」
    类似把视频中的一帧帧画面打上各种马赛克,然后训练一个模型,让它学会去除各种马赛克,且一开始各种失败没关系,反正有原画面作为ground truth,不断缩小与原画面之间的差异即可
    而当把一帧帧图片打上全部马赛克之后,可以根据”文本-视频数据集”中对视频的描述/prompt(注,该描述/prompt不仅仅只是通过CLIP去与视频对齐,还经过类似DALLE 3所用的重字幕技术加强 + GPT4对字幕的进一步丰富,下节详述),而有条件的去噪
  2. 二方面,它把DPPM中的噪声估计器所用的卷积架构U-Net换成了Transformer架构

图片

总之,总的来说,Sora是一个在不同时长、分辨率和宽高比的视频及图像上训练而成的扩散模型,同时采用了Transformer架构,如sora官博所说,Sora is a diffusion transformer,简称DiT

关于DiT的更多细节详见下文第二部分介绍的DiT

1.2 基于DALLE 3的重字幕技术:提升文本-视频数据质量
1.2.1 DALLE 3的重字幕技术:为文本-视频数据集打上字幕且用GPT把字幕详细化

首先,训练文本到视频生成系统需要大量带有相应文本字幕的视频,而通过CLIP技术给视频对齐的文本描述,有时质量较差,故为进一步提高文本-视频数据集的质量,研究团队将 DALL・E 3 中的重字幕(re-captioning)技术应用于视频

  1. 具体来说,研究团队首先训练一个高度描述性的字幕生成器模型,然后使用它为训练集中所有视频生成文本字幕
  2. 与DALLE 3类似,研究团队还利用 GPT 将用户简短的prompt 转换为较长的详细字幕,然后发送给视频模型(Similar to DALL·E 3, we also leverage GPT to turn short user prompts into longer detailed captions that are sent to the video model),这使得 Sora 能够生成准确遵循详细字幕或详细prompt 的高质量视频

关于DALLE 3的重字幕技术更具体的细节请见此文2.3节《AI绘画原理解析:从CLIP、BLIP到DALLE、DALLE 2、DALLE 3、Stable Diffusion》

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%..

1.2.2 类似VDT或Google的W.A.L.T工作:引入auto regressive进行视频预测或扩展

其次,如之前所述,为了保证视频的一致性,模型层不是通过多个stage方式来进行预测,而是整体预测了整个视频的latent(即去噪时非先去噪几帧,再去掉几帧,而是一次性去掉全部帧的噪声)

但在视频内容的扩展上,比如从一段已有的视频向后拓展出新视频的训练过程中可能引入了auto regressive的task,以帮助模型更好的进行视频特征和帧间关系的学习

更多可以参考下文Google的W.A.L.T工作,或下文“2.3.2 VDT的视频预测方案:把视频前几帧作为条件帧自回归预测下一帧”

1.3 对真实物理世界的模拟能力
1.3.1 sora学习了大量关于3D几何的知识

OpenAI 发现,视频模型在经过大规模训练后,会表现出许多有趣的新能力。这些能力使 Sora 能够模拟物理世界中的人、动物和环境的某些方面。这些特性的出现没有任何明确的三维、物体等归纳偏差 — 它们纯粹是规模现象

  1. 三维一致性(下图左侧)
    Sora 可以生成动态摄像机运动的视频。随着摄像机的移动和旋转,人物和场景元素在三维空间中的移动是一致的
    针对这点,sora一作Tim Brooks说道,sora学习了大量关于3D几何的知识,但是我们并没有事先设定这些,它完全是从大量数据中学习到的
    图片图片
    长序列连贯性和目标持久性(上图右侧)
    视频生成系统面临的一个重大挑战是在对长视频进行采样时保持时间一致性
    例如,即使人、动物和物体被遮挡或离开画面,Sora 模型也能保持它们的存在。同样,它还能在单个样本中生成同一角色的多个镜头,并在整个视频中保持其外观
  2. 与世界互动(下图左侧)
    Sora 有时可以模拟以简单方式影响世界状态的动作。例如,画家可以在画布上留下新的笔触,这些笔触会随着时间的推移而持续,而视频中一个人咬一口面包 则面包上会有一个被咬的缺口

    图片

Sora核心之一:可变时长、分辨率、尺寸(着重探讨NaViT) Sora关于可变分辨率尺寸的代表性参考文献NaViT详细解读,Patch n’ Pack: NaViT, a Vision Transformer for any Aspect Ratio and Resolution 阅读详情

相关推荐

NaViT:适用于任意分辨率的视觉Transformer

本文介绍了NaViT(Native Resolution Vision Transformer),这是一种改进ViT模型的方法,旨在处理任意尺寸图像而无需调整原始比例。传统ViT需要固定输入尺寸,导致图像特征失真,影响OCR等任务效果。NaViT通过"Patch n’Pack"技术,将不同分辨率图像分割成patch序列并打包处理,同时使用分解位置嵌入和注意力掩码确保图像间独立性。该方法还引入连续token丢弃和分辨率采样策略优化训练效率。实验表明NaViT在保持原始宽高比的同时提升了模型

让算法融入生活,改变生活! 220

51-44 Generating Long Videos of Dynamic Scenes,生成动态场景长视频

NVIDIA, UC Berkeley联合提出了一个视频生成模型,可以准确地再现物体运动、摄像机视角变化以及随着时间的推移出现的新内容。该论文也是Sora技术报告中提及的32篇之一。

AIgraphX 1331

navit:适用于许多操作系统的开源(GPL v2)逐行导航软件

Android平板电脑上的Navit: 基于Linux的Carputer上的Navit: 纳维特 Navit是带有路由引擎的开源(GPL)汽车导航系统。 它的模块化设计能够使用各种格式的矢量地图来路由和渲染显示的地图。 甚至可以一次使用多个地图。 GTK +或SDL用户界面旨在与触摸屏显示器配合使用。 各种格式的兴趣点都显示在地图上。 当前车辆位置可以从gpsd读取,也可以直接从NMEA GPS传感器读取。 路由引擎不仅可以计算出到达目的地的最佳路线,还可以生成路线甚至与您对话。 Navit目前讲70多种语言! 您可以通过我们基于网络的翻译页面来帮助翻译: : 有关帮助或更多信息,请参阅Wiki: : 如果您不知道从哪里开始,我们建议您阅读Interactive Help: : 地图 没有地图,最好的导航系统是没有用的。 已知这三个地图可以工作: OpenStreetMap:显示,路由,但街道名称搜索未完成(请参见 ) Grosser Reiseplaner和兼容的地图:全面支持(请参阅 ) Garmin地图:正在显示,路由,搜索(请参阅 ) GPS

Android14 RK3576开发板有线网卡静态IP配置全攻略(附数据库修改详解)

本文详细介绍了在Android 14 RK3576开发板上实现有线网卡出厂默认静态IP配置的完整方案。通过深入修改系统源码和SettingsProvider数据库,扩展全局设置字段并注入默认值,确保设备首次启动即自动应用预设的IP地址、子网掩码、网关和DNS,适用于工业控制、数字标牌等批量部署场景,有效提升生产效率。

weixin_29253711的博客 596

FIFO Generate IP核使用——FIFO写操作详解及Status Flags页配置

本文介绍了FIFO的写操作及Status Flags页的配置信息。

u011565038的博客 2274

腾讯滑块验证码collect参数逆向与JSVMP对抗实战

本文深入解析腾讯滑块验证码collect参数的逆向过程与JSVMP虚拟机对抗技术。通过详细的环境搭建、抓包分析和JSVMP逆向技巧,揭示collect参数的生成逻辑与加密流程,并提供完整的模拟实现方案和常见问题排查方法,助力开发者突破腾讯天御验证码的防护机制。

weixin_29009501的博客 1564

游戏开发实战:用UE4 Marschner模型打造次世代头发渲染(附Shader代码解析)

本文详细解析了如何在UE4中使用Marschner模型实现次世代头发渲染,包括Shader代码逐行解读与参数调优。通过对比传统Kajiya-Kay模型,展示了Marschner模型在物理精确性和视觉效果上的优势,并提供了性能优化与实战技巧,帮助技术美术师提升游戏角色渲染品质。

weixin_28223453的博客 229

别急着做AI:FDE教你识别真需求,让AI真正落地

人工智能项目在落地过程中,经常出现业务方高喊“我们要做AI”,却说不清具体应用场景的现象。判断一个需求是否值得用AI实现,不能只看技术流行度,而要从问题出现频率、当前替代方案以及可量化业务价值三个维度展开验证。同时需要冷静比较规则引擎与大模型的边界:不是所有语义任务都要靠生成式模型,稳定、可解释且低成本的传统方案往往更具工程性价比。数据闭环也至关重要,缺乏历史样本与反馈回流路径的项目,很难在真实环境中持续优化。针对智能客服、合同审查或企业知识库等典型场景,可借助人机协同与最小代价的用户验证,逐步筛除伪需求,

weixin_42624889的博客 335

SAP销售订单POD实操:从VL01N创建到VLPOD差异处理,保姆级避坑指南

本文详细解析SAP销售订单POD全流程,从VL01N创建到VLPOD差异处理,提供保姆级避坑指南。涵盖核心业务逻辑、前置配置、销售订单创建、交货单处理及差异解决方案,帮助用户高效管理供应链执行环节,确保财务与物流的准确对接。

weixin_27219587的博客 602

ASPICE(Automotive SPICE)流程落地,研发管理工具自研,如何从量化数据体现研发效率提升的

摘要: ASPICE流程显著提升研发效率,主要体现在质量、成本和时间三个维度。关键量化指标包括:缺陷率降低30%-60%,维护工作量减少28%,研发周期缩短10%-20%,需求变更率降低58%,代码评审效率提升300%。初期开发成本虽增加9%,但长期回报率高。核心方法包括缺陷预防前移、需求精准管理和流程标准化与自动化。建立量化度量体系需覆盖缺陷密度、需求稳定性、进度偏差等指标,并依托工具链支持数据收集。实施ASPICE是短期投入换取长期质量提升和成本优化的高效投资。

汽车软件开发 176

uniapp - 微信授权登录报错 errMsg“:“login:fail send“ | “code“:-100 | “innerCode“:-6,解决uni-app调用微信登录时没有响应且返回错误

uni-app,微信登录,微信登录报错,微信小程序,支付宝小程序,安卓app,苹果ios,nvue,H5网页网站,uniapp苹果安卓app,微信授权登录,uniAppAPP端微信登录报错,微信确认登录界面后点击登录报错,"errMsg":"login:failsend","errCode":-100,"code":-100,"innerCode":-6,都配置好了还是报错怎么办,uniapp微信授权登录报错,UniApph5对接微信登录出现错误,appid,应用签名,微信登陆,code:-100

🏆 前端领域优质创作者 1万+

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

上一篇: 微软37页论文逆向工程Sora,得到了哪些结论?
下一篇: 扩散模型DDPM:先前向加噪后反向去噪从而建立噪声估计模型
AI周红伟
博客等级 码龄25年 3197粉丝 1580原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AI周红伟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值