你或许也想拥有专属于自己的AI模型文件格式-(1)

AI模型各种存储格式文件介绍(pb, onnx, ckpt, tflite, h5) .ckpt模型文件 tensorflow框架下保存的模型,包含以下几个子文件: model.ckpt.meta :保存Tensorflow计算图结构,可以理解为神经网络的网络结构 model.ckpt :保存Tensorflow程序中每一个变量的取值,变量是模型中可训练的部分 checkpoint :保存一个目录下所有模型文件列表 .pb 模型文件 pb是protocolbuffer的缩写。TensorFlow训练模型后存成的pb文件,是一种表示模型(神经网络)结构的二进制文件,不带有源代码,也. 阅读详情

        2021年前后,大量的推理框架和训练框架层出不穷;训练框架有较新的Pytorch、TensorFlow,和老的Caffe、Darknet等;推理框架中有各种国产的、开源的,特别是边缘设备上的框架Ncnn、Tengine等;另外,国产的CANN更是兼顾了训练和推理两方面。

        但是,以上所有的框架基本是拥有一种专属于自己的模型文件。比如caffe由.prototxt和.caffemodel文件组成,darknet由.cfg和.weight文件组成,pytorch由.pt组成,tensorflow lite由.tflite组成。它们按照一定的规则组成了整个模型描述,包括了有向图信息、权重数据、连接关系等一切的一切。

        也许你会问:既然已经存在了这么多种类的模型格式,那我们何必要自定义一种自己的格式呢?如果一定要我胡说八道的话,那就是“有助于构建自己的AI框架;你的代码量将会得到提升....."。hhhhh,其实只是好玩,更是因为有成就感罢了,特别是如果你也拥有专属于自己的AI模型文件格式的话。

        因此,你或许也想拥有专属于自己的AI模型文件格式,你现在就可以想好它的格式名称了,可以是.holly、.love等,随君所爱哈。

一、总体流程

        万事开头难,自定义一个专属的AI模型文件格式(后续为了简化,我将简称“专属于自己的AI模型文件格式”为“专ai模”),需要我们拥有一个整体的规划,好事多磨嘛。以下是本人的本次制作专爱模的整体规划。

总体规划
序号      制作流程
1了解现有的模型文件格式的信息组成以及自己的需求
2制作环境准备、工具安装等事宜
3专ai模的信息组成描述编写
4为专爱模提供对应的操作的API,特别是生成模型、读模型等方面的功能需要编写
5测试,或者是更多的特性开发

        那么我话不多说,直接开干吧。

二、了解一个模型文件应该包含的信息组成

        这里企图得到一份自定义的模型描述文件,在此主要探讨一份关于模型的描述文件应该定义哪些信息呢。如果从通用性来讲,应该怎么定义一个描述文件;从最小描述量来讲,又该如何描述这份文件;等等问题,以待探讨。

        从工作流程上来说,我们想要得到一份自己的模型描述文件,这需要从自身的需求入手。即我们希望自定义的模型应该包含哪些信息。不管是什么模型文件,基本是具备如下所示的信息,如下表所示:

序号

信息

说明

1

模型注解

主要是作为附属信息嵌入到了文件内,对模型推理和训练可有可无。最常见的就是类似于作者信息、模型生成时间、版本号、模型描述版本号等

2

数据类型

这个数据类型不是单纯的像是编程语言中的基本数据类,而是包含了多层次、多属性的数据类型。其包含了最基本的数据类型,比如bool、int4、uint4、uint8、int8、fp16、fp32、量化类型(qint*)等;又包括了描述某层的输入是常量还是运行时Tensor等这类的描述;除上述所述外,还有其他的方面。

3

层描述

主要是用于描述模型中的网络层信息,一般而言:一个网络层在模型文件中拥有输入输出描述、附属描述(用于推理时或者是训练的必不可少的信息,比如卷积层的步长、是否补齐等信息)。特别地,层描述的输入输出决定了模型的有向图描述,当然,也可能是编写Table来描述模型的有向图。

4

张量描述

张量描述,即是构成有向图的边,也包括了比如权重张量等的描述在内。

        从上面这张表格,我们可以看出如果专ai模拥有模型注解、数据类型、层描述以及张量描述,那么使用专ai模可以近乎完美地构建任何一个模型,管他什么语音识别还是目标检测等模型,统统可以变成专ai模的格式。

三、环境和工具搭建

        在进行环境和工具的搭建之前,需要说明一下这一步骤的重要性和必要性。

        如果不了解现有的AI框架的模型文件格式,也许你会选择直接操控二进制来作为自己的专ai模,又或者是直接编写txt文本来描述自己的专ai模。但是我们可以预见:自己完全操控二进制文件将会使得我们难以解析和改变模型,加大了后续的开发难度,同时也难以维护;而编写txt文本确实拥有容易修改和解析的好处,但是要知道模型文件里面可是拥有海量的权重信息的,试想一下在电脑上打开一个拥有10m甚至100m float数据的文本将是什么体验——我只能说毫无体验。

        因此,我在这里推荐两个数据协议编写工具,分别是ProtoBuffers和FlatBuffers。你可任选其中一个作为自己后续的开发工具,你所选择的开发工具将会成为描述你的专ai模的利器。

3.1、ProtoBuffers

3.1.1、说明和介绍

        如果你接触过caffe训练框架或者是接触过服务器-客户端的网络协议的话,或许对这个工具会有所了解甚至已经非常熟悉。不管怎样,我还是说明以下这个ProtoBuffers,我以caffe训练框架作为举例来说明该具体的作用和体现的地方:

        caffe训练框架是如何解析一个caffe模型的呢,.caffemodel和.prototxt组成了一个caffe模型,其中.prototxt是一个文本文件,是可以随意编辑的;而caffemodel是一个权重文件,这个权重文件包含的不仅仅是权重,准确来说是存放了带参的blob信息,这个结论我们可以从caffe.proto的描述看出:

message LayerParameter {
  optional string name = 1; // the layer name
  optional string type = 2; // the layer type
  repeated string bottom = 3; // the name of each bottom blob
  repeated string top = 4; // the name of each top blob

  // The train / test phase for computation.
  optional Phase phase = 10;

  // The amount of weight to assign each top blob in the objective.
  // Each layer assigns a default value, usually of either 0 or 1,
  // to each top blob.
  repeated float loss_weight = 5;

  // Specifies training parameters (multipliers on global learning constants,
  // and the name and other settings used for weight sharing).
  repeated ParamSpec param = 6;

  // The blobs containing the numeric parameters of the layer.
  repeated BlobProto blobs = 7;
//后续的是layer_param信息......

}

        上述的BlobProto就是所有带参的blob,而参数保存在了.caffemodel内,准确来说,caffe中组成一个层需要得到prototxt的一个层的json描述和.caffemodel内对应的带权重的blob信息,举例来说就是如下所示:

# 这是一层卷积层的prototxt内的描述
layer {
  name: "conv_conv1"
  type: "Convolution"
  # bottom表示该层的输入blob的名称
  bottom: "data"
  # 带有权重的blob是保存在了.caffemodel内,
  # 这里无法看出来,保存的时候采用了ProtoBuffers工具保存
  # top表示该层的输出blob的名称
  top: "conv_conv1"
  # *_param表示卷积的其他参数描述
  convolution_param { 
     num_output: 96
     kernel_size: 7
     stride: 2
     pad: 3
  }
}

        caffe就是靠着caffe.proto描述了一个模型格式,接着用ProtoBuffers来解析模型和加载权重的,如果你有兴趣,可以去以下的链接观看caffe.proto的全貌:

Caffe.proto的官方链接icon-default.png?t=LA92https://github.com/BVLC/caffe/blob/master/src/caffe/proto/caffe.proto        同Caffe类似的,我们只需要实现一份专ai模的.proto文件就可以定义自己的模型格式了,后续我们可以使用ProtoBuffers工具来解析和生成专ai模的模型文件了。

3.1.2、安装教程

        该工具因为官网的安装文档比较齐全,所以直接在这里放置官网的安装教程的链接,请点击此处进入ProtoBuffer安装教程界面icon-default.png?t=LA92https://github.com/protocolbuffers/protobuf/blob/master/src/README.md        如果实在有困难安装该工具的,可以在下方评论或者私信我。

3.2、FlatBuffers

3.2.1、说明和介绍

        FlatBuffers和ProtoBuffers的目的是一致的,就是实现数据协议的制定。在FlatBuffers的使用场景中,我们只需要实现一份自己的.fbs,后续就可以用FlatBuffers来解析和生成专ai模的模型文件了。

        目前我了解到的使用了FlatBuffers来作为模型描述工具的有armnn、tensorflow lite、onnx等。后续我选用的是FlatBuffers工具进行过开发,所以建议读者也选用这个工具继续开发,可以减少读者的麻烦。

3.2.2、安装

        因为FlatBuffers官网的安装教程比较少,因此我在这里写下安装教程。

        首先下载好FlatBuffers的源码:

wget -O flatbuffer.zip https://codeload.github.com/google/flatbuffers/zip/refs/heads/master

        然后解压压缩包然后进入对应目录:

unzip flatbuffer.zip
cd flatbuffers-master/

        开始编译:

# 使用cmake 构建工程
cmake -G "Unix Makefiles" -DCMAKE_BUILD_TYPE=Release
# 开始编译
make -j16
# 安装
make install

        测试是否安装成功:

# 如果安装成功,将会显示flatc版本号
flatc --version

介于篇幅太多,我将会拆分出多个文章进行说明,尽请期待。

AI:人工智能中常用的xml、hdf5、dat等不同模型文件后缀文件的简介、使用方法之详细攻略 什么是 XML?XML 指可扩展标记语言(EXtensible Markup Language) XML 是一种标记语言,很类似 HTML XML 的设计宗旨是传输数据,而非显示数据 XML 标签没有被预定义。您需要自行定义标签。XML 被设计为具有自我描述性。XML 是 W3C 的推荐标准。在人脸识别中,Haar特征分类器就是一个XML文件,不同的xml文件,就是不同的分类器,描述人体不同部位的Haar特征值。包括人脸、眼睛、嘴唇等等。1、没有任何行为的 XMLXML 是不作为的。 阅读详情

相关推荐

吴恩达Deep Learning.ai 序列化模型作业及文件

压缩文件太大,这里仅提供云盘下载链接和提取码。文件包含作业代码和所有图片和模型文件,每周习题,所需数据。

AI 模型格式大揭秘

和 HashTable 的区别,假如发⽣了 hash 碰撞,如何设计能让遍历效率⾼?8.volatile的作⽤,为什么会出现变量读取不⼀致的情况,与 synchronized 的区别?13.讲讲 Java 的泛型擦除,泛型主要是为了解决什么问题?如何⽤泛型做 Json 的解析的?14.谈谈 Java 的 Error 和 Exception 的区别联系。重写的规则是怎样的?20.十亿条淘宝购买记录,怎么获取出现最多的前十个?3.讲一下JVM虚拟机内存结构,以及它们的作⽤。15.说一下软引⽤和弱引⽤的区别?

2401_89221867的博客 1531

别再只测电压了!用STM32G474的ADC玩点花的:过采样提升精度与多通道扫描实战

本文深入探讨了STM32G474系列单片机的ADC高级应用,包括硬件过采样技术实现16位精度和多通道扫描结合DMA的自动数据采集方案。通过详细的配置步骤和实战案例,帮助开发者突破传统电压测量局限,提升信号采集精度和系统效率,适用于工业监控、医疗设备等高精度应用场景。

weixin_42647395的博客 238

AI中大模型的文件格式有哪些?

大模型。

本博客,博文仅代表个人操作经验,不能完全解决你的问题,仅供参考,佛系回复。 5357

基于Multisim的智能交通灯控制系统仿真与实现(含动态闪烁功能)

本文详细介绍了基于Multisim的智能交通灯控制系统仿真与实现,重点解析了动态闪烁功能的电路设计。通过555定时器、74LS192计数器和JK触发器等核心模块,实现了主干道与支干道的交替通行及黄灯1Hz闪烁功能,为交通灯控制系统设计提供了完整的仿真方案。

weixin_29174013的博客 425

从混淆到清晰:实战解读LASSO回归图与交叉验证图(R glmnet二分类案例)

本文深入解析LASSO回归在R glmnet中的可视化应用,特别针对二分类问题。通过详细解读系数路径图和交叉验证误差图,帮助读者掌握变量筛选的关键技巧,并指导如何基于业务需求选择最优lambda值,实现从数据可视化到决策的完整流程。

weixin_32678995的博客 424

你或许也想拥有专属于自己的AI模型文件格式(可视化篇)-(4)

可视化篇来了,一起来用netron实现自定义模型格式的可视化吧!

Pengcode的博客 1326

SAP成本控制范围配置全流程:从货币参数到标准层次(附2024最新SPRO路径)

本文详细拆解了SAP成本控制范围(Controlling Area)的完整配置流程,涵盖从货币与估价参数文件定义、参数文件分配到控制范围,再到成本中心标准层次创建等核心步骤。文章提供了2024年最新的SPRO导航路径和实战配置要点,帮助顾问构建稳健、可扩展的管理会计基础架构,并附有常见问题排查指南。

java5的博客 939

你或许也想拥有专属于自己的AI模型文件格式-(2)

紧接着上次的工作,想要回顾或者查看上次内容可以点击以下的链接,链接如下所示: 你或许也想拥有专属于自己的AI模型文件格式-(1)https://blog.youkuaiyun.com/Pengcode/article/details/121754272?spm=1001.2014.3001.5502 这次主要的内容是构建我们的专ai模的灵魂,也就是信息组成描述编写。通俗来说,就是定义一个数据协议,这些数据协议中包含了模型数据结构,这些数据结构是我们搭建整个模型的积木,或者说是包含了整个模...

Pengcode的博客 914

“反激电源”是AC/DC隔离电源还是DC/DC隔离电源?

所以在一些场景,我们的输入电压是一个DC,但是我们仍然需要隔离电源的需求,我们就会只采用图9.2的右半部分。在这个场景下“反激电源”是DC/DC。所以此AC/DC的本质是将AC变成高压的DC之后,用带隔离变压器的反激式开关电源产生一个隔离的、稳定的直流电压。一般在讲述各种电源的拓扑的文章和书籍都是在讲述AC/DC的电源拓扑分类的时候,讲述Flyback。反激式开关电源是指使用反激高频变压器隔离输入输出回路的开关电源,反激式隔离变压器开关电源重点表述的是开关电源包含变压器的拓扑结构。

qq_43416206的博客 1294

AI上推荐 之 AutoRec与Deep Crossing模型(改变神经网络的复杂程度)

1. 前言 随着信息技术和互联网的发展, 我们已经步入了一个信息过载的时代,这个时代,无论是信息消费者还是信息生产者都遇到了很大的挑战: 信息消费者:如何从大量的信息中找到自己感兴趣的信息? 信息生产者:如何让自己生产的信息脱颖而出, 受到广大用户的关注? 为了解决这个矛盾, 推荐系统应时而生, 并飞速前进,在用户和信息之间架起了一道桥梁,一方面帮助用户发现对自己有价值的信息, 一方面让信息能够展现在对它感兴趣的用户前面。 推荐系统近几年有了深度学习的助推发展之势迅猛, 从前深度学习的传统推荐模型(协

Miracle8070 5666

你或许也想拥有专属于自己的AI模型文件格式-(3)

如果读者没有阅读过前两篇,或者想要再次回顾,以下是对应的链接: 你或许也想拥有专属于自己的AI模型文件格式-(1)https://blog.youkuaiyun.com/Pengcode/article/details/121754272你或许也想拥有专属于自己的AI模型文件格式-(2)https://blog.youkuaiyun.com/Pengcode/article/details/121776674 前两篇文章,讲述了制作专属于自己的AI模型文件格式的初衷,写下了我们的需求,同时我们制定了...

Pengcode的博客 874

支付宝域名如何加入白名单(扫码老是弹窗)

支付宝扫码之后,遇到非支付宝官方网页,请确认是否继续访问弹窗,问题解决办法。本章教程提供解决办法,亲测有效。

猿小白的博客 9191

你或许也想拥有专属于自己的AI模型文件格式(推理部署篇)-(7)

距离上次的文章,已经有一个月之久了。要是再不继续推进,那么我17个粉丝又要催更了(纯属本人瞎说,实际情况是没人催更)。 今天就少扯皮了,直接开淦吧! 上次的文章中,说明了如何在C++代码中解析我们的专AI模模型文件格式,大概的思路无非和构建模型的时候是反着进行的。因为这份模型文件格式是完全由flatbuffers进行解析的,因此,解析的过程是一场清晰明了的。 而之所以解析模型文件,主要是这样我们就能够实现专AI模的跨平台传送,构建好的模型能够无差异地在各...

Pengcode的博客 2621

080、多轴运动控制:插补器设计(螺旋线插补)

本文分享了螺旋线插补器设计的实战经验。针对五轴点胶机Z轴抖动问题,作者分析了螺旋线数学本质,提出基于归一化时间参数的速度规划方法,强调各轴严格同步的重要性。文章详细介绍了速度分解、加减速处理、嵌入式优化技巧(查表法、定点化),并总结了起点闭合、速度波动、数值处理等常见问题解决方案。最后给出5条实用建议:注重速度规划而非纯数学推导、预先仿真、保留调试接口、考虑机械谐振、防范编码器丢脉冲。通过优化插补周期、电子齿轮比和S形速度曲线,成功将设备良率从60%提升至95%。

m0_50546716的博客 85

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

你或许也想拥有专属于自己的AI模型文件格式(推理部署篇)-(8)

《你或许也想拥有专属于自己的AI模型文件格式》这个系列,上一次的文章更新是2022-03-05,距今已经4个月之久了。主要是这段时间有其他的事情在忙,期间也在断断续续地在完善该推理框架的。而让我思绪卡死的地方就是整网的推理时事件依赖问题,这个问题主要是因为OpenCL的clEnqueueNDRangeKernel这个核函数推理函数的局限性问题(正文仔细说明)。本次的进展内容:本次文章的主要内容:目前的工程整体结构: 2、有向图重排网络层 2.1、重排的原因和目的 模型的网络层顺序是乱序的:我们自定义的模型

Pengcode的博客 775

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

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

你或许也想拥有专属于自己的AI模型文件格式(推理部署篇)-(6)

如果有新的观众,如有疑惑,请从《专ai模》这个专栏从头开始阅读。特别是想要彻底搞清楚深度学习中模型的起源,以及如何一步一步构建自定义模型格式的观众来说,除了可视化篇,前面的三章必须要仔细阅读。 而为什么我又有雅致来开启《推理部署篇》呢?主要原因是,目前个人野心有点大,想要从零构建一整套关于推理部署的工具链吧。也就是向着推理引擎的方向努力吧。特别是自从上次结束了《可视化篇》,总感觉意犹未尽。 因此,全新的篇章开启了,该篇章的文章数可能会控制在10篇以下吧。不...

Pengcode的博客 1054

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Statistics and Machine Learning Toolbox

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

你或许也想拥有专属于自己的AI模型文件格式(推理部署篇)-(9)

1、前言 本次的进展内容:本次文章的主要内容: 3、InferenceDebugByCpu调试推理接口 3.1、调用流程 具体的调用流程示例如下所示: 3.2、实现细节 具体的调用流程示例如下所示: 4、cpu_run调试推理部分如何从cl核函数转换 4.1、关于opencl的cl核函数说明 cl核函数内部遵循了C99编程语言标准,内部的代码跟C语言一致; cl核函数内部的逻辑只代表一个工作项的所有工作,具体的循环是靠外部调用clEnqueueNDRangeKernel函数时设置的globalWorkSi

Pengcode的博客 606

DeepSeek R1 在 24GB GPU 上:Unsloth AI 对 6710 亿参数模型进行动态量化

原始的 DeepSeek R1 是一个拥有 6710 亿参数的语言模型,由 Unsloth AI 团队采用动态量化技术处理,实现了 80% 的体积缩减 —— 从 720GB 缩小到最低 131GB —— 同时保持了强劲的性能。当加入模型卸载(offloading)后,该模型可以在 24GB 显存的环境下运行,并实现低 token/s 的推理速度。

m0_59164520的博客 2171

面向AI的新文件格式Lance挑战传统Parquet

该格式的背后是She,他是用于数据操作和分析的pandas软件库的原始贡献者之一,现在是LanceDB的首席执行官兼联合创始人,该公司支持并开发该格式。“数据的布局方式不同,访问模式也发生了变化,因此我们保证了比Parquet更快的扫描速度,同时也保证了真正快速的随机访问,” She说。Iceberg也曾处于起步阶段,直到获得了包括某机构在内的供应商的支持,某机构已将这种表格式整合到其某存储桶中,并在包括某公司和另一公司在内的用户中广泛采用。Lance需要等待,看看它的论点是否能够以同样的方式引起共鸣。

codeshare1135的博客 470

马斯克发布首个多模态模型Grok-1.5 Vision;AI程序员Devin遭打假 | AI头条

整理 | 王轶群出品 | AI 科技大本营(ID:rgznai100)一分钟速览新闻点!Meta 正在 Instagram 中测试人工智能驱动的搜索栏Meta在与印度和非洲部分地区的社交软件平台用户测试 Meta AI马斯克麾下的xAI发布首个多模态智能模型Grok-1.5 VisionOpenAI官宣在东京开设首个亚洲办事处,将发布针对日语进行优化的GPT-4模型Anthropic联创兼CEO:...

AI科技大本营 1392

AI+大数据时代:如何从架构到生态重构时序数据库的价值?

在数据爆炸的ZB/YB时代,时序数据库(TSDB)面临四大核心挑战:海量数据写入、毫秒级查询响应、低成本归档存储以及高基数处理能力。Apache IoTDB作为专为工业物联网设计的原生时序数据库,凭借三大优势脱颖而出:1)独创TsFile格式实现92%压缩率,大幅降低存储成本;2)LSM-tree架构深度优化,有效应对工业场景中的乱序写入和高压负载;3)创新性"库内AI"能力,支持SQL直接调用时序预测模型。

攻城狮7号的博客 1万+

ON1 NoNoise AI 2024 for Mac(AI图片降噪工具)

消除图像噪声的质量和速度的新标准。它是最好的摄影降噪软件。使用人工智能驱动的 NoNoise AI 快速消除噪点并获得照片中最清晰的细节。ON1 NoNoise AI 智能消除所有图像噪声,同时智能恢复和增强细节。它通过支持常见的照片编辑器和文件格式(包括保存保持完整色调和颜色范围的 DNG 原始文件)来集成到您的工作流程中。更快地获得绝对最佳结果!ON1 NoNoise 的速度比其他领先的图像噪声消除产品快十倍,结果会让您大吃一惊!基于人工智能的降噪利用。

a1223641638的博客 1085

被AI干死or干AI?教您玩转12款超强国产AI大模型

近两年,一方面经济下行,内卷加速,失业率逐年提升;另一方面,AI技术迅猛发展并得到广泛应用,对于个人而言,掌握AI技术,特别是熟练玩转国产AI大模型,不仅是一个提升自我竞争力的途径,也是适应未来社会发展的重要能力。一下是12款超强国产AI大模型的简要介绍,涵盖了写作、对话、绘画、剪辑等多个领域,帮助您了解并玩转这些前沿技术带来的便利与创新。

2401_85375186的博客 1869

整理了 47 个 Python 人工智能库

Python 是人工智能(机器学习)的首选编程语言,它拥有众多模块,能完成人工智能开发的所有环节,没有任何一种语言使用起来如此顺手。今天就由我带着大家揭开人工智能的神秘面纱。 主页点击领取资料,等你一起来玩奥~ 今天给大家分享的是我用了将近3周的时间整理出来的 Python 人工智能学习的库,主要以核心库、机器学习库、深度学习库、分布式深度学习库、自然语言处理、计算机视觉、生物和化学库,这几个方面进行介绍。 Python 核心库 // 1.Numpy 库 ...

pythonandaiot的博客 1万+
上一篇: 源码编译安装Netron模型可视化工具
下一篇: 你或许也想拥有专属于自己的AI模型文件格式-(2)
慷仔
博客等级 码龄9年 88粉丝 46原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值