使用 FAISS 和 CLIP 构建图像相似度搜索引擎

CLIP模型实战:如何用Python快速实现图像与文本的跨模态搜索(附代码) 本文详细介绍了如何使用Python和CLIP模型实现图像与文本的跨模态搜索,包括环境准备、模型加载、数据处理、特征提取及相似度计算等关键步骤。通过实战代码示例,帮助开发者快速构建高效的跨模态搜索系统,适用于电商、社交媒体和数字资产管理等多个场景。 阅读详情

原文:towardsdatascience.com/building-an-image-similarity-search-engine-with-faiss-and-clip-2211126d08fa?source=collection_archive---------3-----------------------#2024-08-23

一篇指导性教程,解释如何使用 CLIP 嵌入和 FAISS 索引,通过文本或照片查询搜索图像数据集。

https://medium.com/@lihigurarie?source=post_page---byline--2211126d08fa--------------------------------https://towardsdatascience.com/?source=post_page---byline--2211126d08fa-------------------------------- Lihi Gur Arie, 博士

·发布于 Towards Data Science ·6 分钟阅读·2024 年 8 月 23 日

–

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/6aa0f89a4ae8ff874b4620b8a4ef873b.png

图片由作者在 Flux-Pro 平台上生成

引言

你是否曾经想在你的无尽图像数据集中找到一张图像,却觉得这项任务太繁琐?在本教程中,我们将构建一个图像相似度搜索引擎,通过文本查询或参考图像轻松找到图像。为了方便起见,本教程的完整代码已提供在文章底部,作为一个Colab 笔记本。

如果你没有付费的 Medium 账户,你可以在这里免费阅读。

流程概览

图像的语义意义可以通过一个称为嵌入(embedding)的数值向量表示。通过比较这些低维的嵌入向量,而不是原始图像,可以高效地进行相似度搜索。对于数据集中的每一张图片,我们都会创建一个嵌入向量并将其存储在索引中。当提供文本查询或参考图像时,会生成其嵌入并与索引中的嵌入进行比较,以检索最相似的图像。

这里是简要概览:

  1. 嵌入:图像的嵌入是通过 CLIP 模型提取的。

  2. 索引:嵌入向量被存储为 FAISS 索引。

  3. 检索:使用 FAISS,查询的嵌入与索引中的嵌入进行比较,从而检索最相似的图像。

CLIP 模型

CLIP(对比语言-图像预训练)模型是由 OpenAI 开发的多模态视觉与语言模型,它将图像和文本映射到相同的潜在空间。由于我们将使用图像和文本查询来搜索图像,我们将使用 CLIP 模型来嵌入我们的数据。关于 CLIP 的进一步阅读,您可以查看我之前的文章这里。

FAISS 索引

FAISS(Facebook AI 相似度搜索)是 Meta 开发的开源库。它围绕存储数据库嵌入向量的索引对象构建。FAISS 使得密集向量的高效相似度搜索和聚类成为可能,我们将使用它对我们的数据集进行索引,并检索与查询相似的照片。

代码实现

第 1 步 — 数据集探索

为了创建本教程的图像数据集,我从Pexels收集了 52 张各种主题的图像。为了帮助理解,我们来看一下 10 张随机图像:

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/5783da36e449663c611c2569c8921c43.png

第 2 步 — 从图像数据集中提取 CLIP 嵌入向量

要提取 CLIP 嵌入向量,我们将首先使用 HuggingFace SentenceTransformer 库加载 CLIP 模型:

model = SentenceTransformer('clip-ViT-B-32')

接下来,我们将创建一个函数,使用 glob 遍历我们的数据集目录,通过 PIL Image.open 打开每个图像,并使用 CLIP model.encode 为每个图像生成一个嵌入向量。它将返回一个嵌入向量列表和我们图像数据集路径的列表:

def generate_clip_embeddings(images_path, model):

    image_paths = glob(os.path.join(images_path, '**/*.jpg'), recursive=True)

    embeddings = []
    for img_path in image_paths:
        image = Image.open(img_path)
        embedding = model.encode(image)
        embeddings.append(embedding)

    return embeddings, image_paths

IMAGES_PATH = '/path/to/images/dataset'

embeddings, image_paths = generate_clip_embeddings(IMAGES_PATH, model)

第 3 步 — 生成 FAISS 索引

下一步是从嵌入向量列表创建 FAISS 索引。FAISS 提供了多种距离度量方法来进行相似度搜索,包括内积(IP)和 L2(欧几里得)距离。

FAISS 还提供了多种索引选项。它可以使用近似或压缩技术高效地处理大数据集,同时平衡搜索速度和精度。在本教程中,我们将使用“Flat”索引,它通过将查询向量与数据集中的每个向量进行比较来执行暴力搜索,确保精确结果,但代价是更高的计算复杂度。

def create_faiss_index(embeddings, image_paths, output_path):

    dimension = len(embeddings[0])
    index = faiss.IndexFlatIP(dimension)
    index = faiss.IndexIDMap(index)

    vectors = np.array(embeddings).astype(np.float32)

    # Add vectors to the index with IDs
    index.add_with_ids(vectors, np.array(range(len(embeddings))))

    # Save the index
    faiss.write_index(index, output_path)
    print(f"Index created and saved to {output_path}")

    # Save image paths
    with open(output_path + '.paths', 'w') as f:
        for img_path in image_paths:
            f.write(img_path + '\n')

    return index

OUTPUT_INDEX_PATH = "/content/vector.index"
index = create_faiss_index(embeddings, image_paths, OUTPUT_INDEX_PATH)

faiss.IndexFlatIP 初始化一个用于内积相似度的索引,封装在 faiss.IndexIDMap 中,将每个向量与一个 ID 关联。接下来,index.add_with_ids 将向量添加到索引中,并分配顺序 ID,索引连同图像路径一起保存到磁盘。

索引可以立即使用,也可以保存到磁盘以供将来使用。要加载 FAISS 索引,我们将使用以下函数:

def load_faiss_index(index_path):
    index = faiss.read_index(index_path)
    with open(index_path + '.paths', 'r') as f:
        image_paths = [line.strip() for line in f]
    print(f"Index loaded from {index_path}")
    return index, image_paths

index, image_paths = load_faiss_index(OUTPUT_INDEX_PATH)

第 4 步 — 通过文本查询或参考图像检索图像

在构建好 FAISS 索引后,我们现在可以使用文本查询或参考图像来检索图像。如果查询是图像路径,则通过 PIL Image.open 打开查询。接着,通过 CLIP model.encode 提取查询的嵌入向量。

def retrieve_similar_images(query, model, index, image_paths, top_k=3):

    # query preprocess:
    if query.endswith(('.png', '.jpg', '.jpeg', '.tiff', '.bmp', '.gif')):
        query = Image.open(query)

    query_features = model.encode(query)
    query_features = query_features.astype(np.float32).reshape(1, -1)

    distances, indices = index.search(query_features, top_k)

    retrieved_images = [image_paths[int(idx)] for idx in indices[0]]

    return query, retrieved_images

检索发生在index.search方法中。它实现了 k 近邻(kNN)搜索,用于查找与查询向量最相似的k个向量。我们可以通过更改top_k参数来调整 k 的值。在我们的实现中,kNN 搜索使用的距离度量是余弦相似度。该函数返回查询和一系列获取的图片路径。

使用文本查询进行搜索:

现在我们准备好检查搜索结果了。辅助函数visualize_results展示了这些结果。你可以在关联的 Colab 笔记本中找到它。让我们以文本查询“ball”为例,探索获取的三个最相似的图片:

query = 'ball'
query, retrieved_images = retrieve_similar_images(query, model, index, image_paths, top_k=3)
visualize_results(query, retrieved_images)

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/0982e9cc9e59715d51147782f62d60f5.png

使用查询“a ball”获取的图片

对于查询“animal”,我们得到了:

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/6beffd16ea96ed9928100a9d117bcb0d.png

使用查询“animal”获取的图片

使用参考图片进行搜索:

query ='/content/drive/MyDrive/Colab Notebooks/my_medium_projects/Image_similarity_search/image_dataset/pexels-w-w-299285-889839.jpg'
query, retrieved_images = retrieve_similar_images(query, model, index, image_paths, top_k=3)
visualize_results(query, retrieved_images)

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/015aeddcd340d75270dd41904b56d11d.png

查询和获取的图片

正如我们所见,我们对现成的预训练模型得到了相当不错的结果。当我们用一幅眼睛画作为参考图片进行搜索时,除了找到原始图片外,还找到了一张眼镜和一张不同画作的匹配。这展示了查询图片的语义含义的不同方面。

你可以在提供的 Colab 笔记本中尝试其他查询,查看模型在不同文本和图像输入下的表现。

结语

在本教程中,我们使用 CLIP 和 FAISS 构建了一个基本的图像相似性搜索引擎。获取的图片与查询具有相似的语义含义,表明该方法的有效性。尽管 CLIP 对零样本模型显示出不错的结果,但它可能在分布外数据、细粒度任务中表现较差,并且继承了它所训练数据的自然偏差。为了克服这些限制,你可以尝试使用其他类似 CLIP 的预训练模型,如在OpenClip中,或者在你自己的定制数据集上微调 CLIP。

感谢阅读!

恭喜你一路走到了这里。点击👍表示感谢,提升算法的自尊心🤓

想了解更多?

完整代码作为 Colab 笔记本:

Colab 笔记本链接

faiss搜索代码 最近人脸识别, 使用faiss 搜索代替原来的redis,这个demo是关于faiss库的相关操作 立即下载

相关推荐

第一章、isaacsim 及 isaaclab 安装教程

本专栏所有内容将根据上述资源地址展开,请结合食用~

m0_47719040的博客 4779

深度学习之以图搜图实战(PyTorch + Faiss)

 《深度学习之以图搜图实战(PyTorch + Faiss) 》课程从实战的角度出发,方案来源于工业界实际业务应用(例如:京东、淘宝、拍照搜题、搜索引擎搜索业务等)。通过深度学习工具PyTorch 完成图片特征抽取,结合Facebook AI团队开源的针对聚类和相似性搜索库,完成图片特征索引构建和在线图片检索。    从0到1完成以图搜图的功能实现,针对课程业务分析、数据处理,图片特征索引构建和优化,在线图片检索功能全程实战操作,以最接地气的方式详解每一步流程、解决方案和代码实现。   老师的授课风格: 以实战为主,结合理论,提供免费技术答疑和交流。让大家彻底掌握基于深度学习的图像搜索方案和功能实现。

LABVIEW学习之MODBUS-TCP通讯

LABVIEW学习之MODBUS-TCP通讯 1,MODBUS-TCP通讯介绍: MODBUS通讯是工业上面经常用到的一种通讯协议。该协议的原理及介绍不在此累述,下面直接介绍LABVIEW对此协议的应用。 2,MODBUS通讯所需的函数: 安装了DSC模块之后可以在数据通信内找到相关函数 3 ,主VI 主要思路就是使用状态机来进行连接 读取 写入 断开。使用枚举类型来选择状态: 1,连接 2,写入多个M继电器: 3,写入单个M继电器 4,写入双字节D...

风动9527的博客 2万+

向量检索(一)Faiss 在工业界的应用和常见问题解决

传统的搜索,使用关键做精确的查找,利用倒排索引在索引库中搜索。日常在用的百度,Google都属于关键词搜索。 在 AI 时代我们需要查找一张相似的图片,一个问题的答案,或者根据一段音乐查找对应的歌曲,这些情况下没有准确的关键词用来做检索。 这些图片,问题(文本),语音,不再是简单的一个一维量化的数字,而是包含了大量的属性特征。 因而不合适使用传统的关键字搜索引擎来查找。 对于文本,图片,语音,视频,DNA信息等等,都可用向量来表示,数据被特征化处理后用来表示这条数据的向量称之为 Embedding

千里之行 1万+

一定能解决ROS系统 rosdep update超时问题de简单方法

rosdep update命令使用 1.首先将下面仓库的内容clone到本地 git clone https://github.com/ros/rosdistro.git 记录rosdistro存放地址,例如/home/gec/rosdistro 如果是自己的改成/home/user/rosdistro,其中user表示用户名 2.修改/usr/lib/python2/dist-packages/rosdep2/rep3.py文件 cd /usr/lib/python2/dist-packages/ros

努力是明天快乐的源泉 5万+

QGIS实战:5分钟搞定谷歌地图、高德、天地图等多源地图加载(附最新图源URL)

本文详细介绍了如何在QGIS中快速加载谷歌地图、高德、天地图等多源地图,提供2023年验证可用的最新图源URL和配置步骤。从环境准备到高级技巧,涵盖国内外主流地图服务的完整解决方案,帮助用户提升GIS工作效率。

weixin_29210759的博客 1212

DINOv2:结合FAISS进行图像相似性搜索

早些时候,MetaAI 通过开源 DINOv2 在计算机视觉领域取得了一个重要的里程碑,该模型是在 1.42 亿张图像的庞大数据集上训练的。此版本使 DINOv2 与 OpenAI CLIP直接竞争,初步评估表明它甚至可能在某些任务上超越它。然而,浏览现有文档可能难以利用 DINOv2 的功能。在本文中,我们将探讨图像相似性任务需要采取的步骤,并对其性能进行全面评估。图像相似性的意义在之前的故事...

Warmer_Sweeter 4093

手把手教你学Simulink——基于Simulink的全双工无线通信仿真建模示例

目录手把手教你学Simulink——基于Simulink的全双工无线通信仿真建模示例一、背景介绍二、所需工具和环境三、步骤详解步骤1:创建Simulink模型步骤2:设计输入信号步骤3:添加调制模块步骤4:添加自干扰消除模块步骤5:添加AWGN信道步骤6:添加接收端处理步骤7:添加解调模块步骤8:计算误码率(BER)步骤9:添加显示模块步骤10:设置仿真参数步骤11:运行仿真并分析结果四、总结 全双工(Full-Duplex)无线通信技术允许在同一频段上同时进行数据的发送和接收,这与传统的半双工(Half-

MHD0815的博客 182

向量数据库FAISS之四:向量检索和 FAISS

不同的索引在不同向量数量的查询时间对比。注意,纵轴是对数时间数据集d = a[0]

weixin_46034279的博客 2747

RK3568平台开发系列讲解(UBOOT篇)u-boot启动流程

U-Boot(Universal Bootloader)是一种开源的引导加载程序,广泛用于嵌入式系统中。它的主要功能是初始化硬件设备,加载操作系统内核,并将控制权交给操作系统。U-Boot的启动流程可以分为多个阶段,以下是典型的U-Boot启动流程:

内核笔记 1234

Matlab图像地图上的最短路径计算算法——Dijkstra算法

接下来,我们进入主循环,不断从优先队列中取出距离最小的节点,并更新其邻居节点的距离和路径。Dijkstra算法是一种常用的最短路径算法,本文将介绍如何使用Matlab实现Dijkstra算法来计算图像地图上的最短路径。为了使用上述算法,我们需要将图像地图转换为一个矩阵,并将可通行的区域设置为白色(或其他亮度值),障碍物区域设置为黑色(或其他暗度值)。然后,我们可以指定起始节点和终止节点,并调用。通过上述的代码实现,我们可以在Matlab中使用Dijkstra算法来计算图像地图上的最短路径。

2301_78484069的博客 2044

使用FAISS和CLIP构建图像相似性搜索引擎

点击下方卡片,关注“小白玩转Python”公众号主要工作:阐述如何利用文本或图像查询来检索您的图像数据库,借助CLIP模型的嵌入技术与FAISS索引系统。介绍您是否曾面临在庞大的图像数据库中寻找特定图片的难题?本教程将指导您构建一个图像相似性搜索引擎,使您能够通过文本描述或提供参考图片来快速定位所需图像。为方便操作,本教程的完整代码已在文章末尾以Colab笔记本形式提供。流程概述图像的语义信息可以...

Warmer_Sweeter 2265

scottplot5中使用signalXY图,如何更新数据?

🏆本文收录于《优快云问答解答》专栏,主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!

**My Coding Family** 2439

CLIP ViT-H-14图像编码服务实战:构建自有图像搜索引擎完整指南

本文介绍了如何在星图GPU平台上自动化部署CLIP ViT-H-14图像编码服务,快速构建自有图像搜索引擎。该服务基于多模态预训练模型,可将图像转换为高维特征向量,实现精准的相似图片检索,适用于电商推荐、内容审核等场景。通过RESTful API和Web界面,开发者可轻松集成这一强大功能。

weixin_35671843的博客 28

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

【代码实践】CLIP多模态实战:从零构建图像-文本匹配系统

本文详细介绍了如何从零开始构建基于CLIP模型的图像-文本匹配系统,涵盖环境搭建、模型加载、核心代码解析及高级应用技巧。CLIP作为OpenAI推出的多模态模型,通过对比学习实现图像与文本的语义匹配,适用于电商搜索、智能图库等场景,显著提升搜索准确率。

weixin_29179311的博客 361

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

如何利用OpenAI CLIP ViT-B/16构建智能图像搜索引擎:从零到一的实践指南

想要打造一个能够理解自然语言描述的智能图像搜索引擎吗?🤔 OpenAI CLIP ViT-B/16模型为你提供了完美的解决方案!这个革命性的多模态模型能够将图像和文本映射到同一个向量空间,让你可以用自然语言搜索图像,或者用图像搜索相关文本。在本篇完整指南中,我将带你一步步掌握如何利用CLIP ViT-B/16构建高效的智能图像搜索引擎。 ## 🔥 CLIP模型的核心优势与工作原理 Open

gitblog_00582的博客 360

CLIP ViT-H-14实战教程:构建自有图像搜索引擎——从API到前端集成

本文介绍了如何在星图GPU平台上自动化部署CLIP ViT-H-14图像编码服务,快速构建自有图像搜索引擎。该服务基于强大的ViT-H-14模型,支持图搜图和文搜图功能,可应用于电商产品推荐、个人相册管理等场景,显著提升图像检索效率。

NightshadeStag56的博客 344

多模态AI开发实战:从原理到图片搜索引擎构建

多模态AI作为人工智能领域的重要分支,通过融合文本、图像、语音等不同模态数据,模拟人类多感官认知能力。其核心技术在于利用深度学习模型(如Transformer架构)在向量空间实现跨模态表征对齐,CLIP等模型通过对比学习构建共享嵌入空间。这种技术显著提升了机器理解复杂信息的能力,在智能搜索、内容推荐、人机交互等场景具有广泛应用价值。本文以构建图片搜索引擎为例,详细解析多模态开发中的数据处理、模型选型(如HuggingFace工具链)、性能优化等工程实践,并针对模态不平衡、部署瓶颈等常见问题提供解决方案。随着

weixin_34375251的博客 373

CLIP 实战宝典:从零开始掌握文本与图像编码的奥秘,解锁多模态AI应用

本文是CLIP模型的实战指南,详细介绍了从零开始掌握文本与图像编码的方法。内容涵盖CLIP的核心原理、环境搭建与模型下载加速技巧、文本与图像编码的两种方式及其区别、图文相似度计算与零样本分类实战,以及针对中文场景的Chinese-CLIP使用和高级应用技巧,帮助开发者快速解锁多模态AI应用。

weixin_29091445的博客 355

CLIP模型实战指南:从零构建多模态检索与生成应用

本文提供了一份CLIP模型实战指南,详细介绍了如何从零开始搭建环境,并利用其强大的多模态能力实现零样本图像分类、构建跨模态搜索引擎以及引导AI图像生成。通过具体代码示例和项目实战,帮助开发者快速掌握基于对比学习的多模态应用开发,提升图像与文本的语义理解与检索效率。

tequila的博客 424

Stable Yogi Leather-Dress-Collection 构建多模态时尚搜索引擎原型

本文介绍了如何利用星图GPU平台,自动化部署Stable Yogi Leather-Dress-Collection镜像,快速构建一个多模态时尚搜索引擎原型。该方案基于CLIP等模型,能将皮革服装的设计图与文本描述转化为向量,实现“以图搜图”或“以文搜图”,高效管理AI生成的海量时尚设计资产,助力设计师进行灵感检索与风格匹配。

weixin_35753431的博客 29

CLIP ViT-H-14图像语义搜索实战:构建垂直领域(如服装/家具)图库

本文介绍了如何在星图GPU平台上自动化部署CLIP ViT-H-14图像编码服务,以构建垂直领域的智能图像搜索引擎。该服务能将图片与文本转换为可比对的向量,实现基于语义的精准搜索,典型应用于电商场景,例如用户通过描述“法式复古碎花连衣裙”快速找到风格匹配的服装图片,极大提升图库检索效率。

GarnetFalcon73的博客 1041

基于CLIP与向量数据库的智能视频检索与自动剪辑系统实践

在多媒体内容爆炸式增长的时代,高效管理和利用视频素材成为内容创作者的核心挑战。传统的关键字搜索和手动剪辑方式,难以应对非结构化视频内容的语义检索需求。多模态AI技术的发展为解决这一问题提供了新思路,其核心原理在于通过视觉-语言预训练模型(如CLIP),将图像/视频帧与文本描述映射到统一的语义向量空间,从而实现跨模态的语义相似度匹配。结合专为高维向量优化的向量数据库(如ChromaDB、FAISS),可以构建起海量视频素材的实时语义搜索引擎。这项技术的工程价值在于,它将视频剪辑从繁琐的机械操作,升级为基于自然

weixin_29043895的博客 358

基于CLIP和FAISS的深度学习图像搜索引擎实现

图像检索是计算机视觉领域的核心技术之一,其核心原理是将图像转换为高维特征向量,通过向量相似度计算实现内容匹配。深度学习模型如CLIP通过对比学习在海量图像-文本对上预训练,能够生成具有优秀几何特性的嵌入向量,使相似内容在向量空间中自然聚集。结合FAISS这类高效的向量数据库,可以实现百万级图像的毫秒级检索。这种以图搜图技术在电商视觉搜索、版权图片检索、医学影像分析等场景具有广泛应用价值。本文详细介绍如何利用开源工具链构建企业级图像搜索引擎,涵盖CLIP模型特性分析、FAISS索引优化等关键技术要点。

weixin_30363509的博客 412

基于CLIP模型的图像相似度计算与检索

基于CLIP模型的图像相似度计算与检索

小张学AI 2955

CLIP+FAISS实现语义图像搜索:零样本多模态检索实战

语义图像搜索是一种将文本与图像映射到统一向量空间的跨模态检索技术,其核心在于突破传统关键词匹配与像素比对的局限,实现‘用自然语言描述找图’的能力。它依赖多模态预训练模型(如CLIP)完成图文联合表征,再通过高效近似最近邻算法(如FAISS)支撑海量向量实时检索。该技术具备强零样本泛化能力,无需微调即可理解复杂语义组合,显著提升内容理解深度与检索准确率。典型应用场景包括数字资产库智能检索、文生图提示优化、博物馆藏品语义导航等。本文聚焦CLIP向量归一化、FAISS索引构建及端到端工程落地细节,解决实际部署中的

weixin_34072458的博客 534
上一篇: 构建一个可解释的强化学习框架
下一篇: 为 Llamaindex 工作流构建交互式 UI
绝不原创的飞龙
绝不原创的飞龙 优质创作者: 人工智能、数据科学与机器学习技术领域 优质创作者: 人工智能、数据科学与机器学习技术领域
博客等级 码龄15年 4万+粉丝 2万+原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值