Probabilistic Embeddings for Cross-Modal Retrieval 论文阅读

文章信息:

在这里插入图片描述

发表于:2021 CVPR

原文链接:https://openaccess.thecvf.com/content/CVPR2021/html/Chun_Probabilistic_Embeddings_for_Cross-Modal_Retrieval_CVPR_2021_paper.html

源码:https://github.com/naver-ai/pcme

Abstract

跨模态检索方法通过为来自多个模态的样本构建一个公共表示空间,通常涉及视觉和语言领域。对于图像及其对应的文字说明,由于其对应关系的多样性,这项任务尤其具有挑战性。给定一个图像(或文字说明),可能有多个文字说明(或图像)同样合理。在本文中,我们认为确定性函数不足以捕捉这种一对多的对应关系。相反,我们提出使用概率跨模态嵌入(PCME),在这种方法中,来自不同模态的样本被表示为公共嵌入空间中的概率分布。由于诸如COCO这样的常用基准在跨模态匹配的标注上并不完全,我们建议进一步在CUB数据集上进行检索评估,该数据集虽然较小但标注完整,涵盖了所有可能的图像-文字配对。我们对PCME进行了广泛的消融实验,证明它不仅提高了检索性能,相比其确定性对照组,还提供了不确定性估计,使嵌入更加可解释。

1. Introduction

在这里插入图片描述

图1.我们提出使用概率嵌入来表示图像和它们的字幕在一个适合于跨模态检索的公共嵌入空间中的概率分布。这些分布很好地模拟了视觉场景中出现的概念的多样性所导致的不确定性,并且隐含地执行了这些概念之间的多对多匹配。

给定来自不同模态的查询和数据库,跨模态检索的任务是检索与查询最相关的数据库项。大多数关于该主题的研究都集中在图像和文本模态上 [5, 9, 25, 51, 58]。通常,方法通过估计嵌入函数,将视觉和文本输入映射到一个公共嵌入空间中,这样跨模态检索任务就简化为熟悉的欧几里得空间中的最近邻检索任务 [9, 51]。

为多个模态构建一个公共表示空间是一个具有挑战性的任务。考虑一张图像,展示了一群人在站台上准备上火车(图1)。对此图像可能有多个合适的文字说明。“人们在站台上等候上火车”和“地铁进站停在一个大站台”是COCO [5] 标注者给出的两个选项。因此,公共表示必须处理图像可能对应多个不同的文字说明这一事实。反过来,给定一个文字说明,可能存在该说明在视觉形式上的多种体现。图像-文本配对中这种多对多的对应关系部分源于模态之间的不同性质。视觉场景的所有不同组成部分都在一张照片中被全面且被动地捕捉,而语言描述则是基于对场景中关键相关概念的有意识选择。因此,图像和文本模态的公共表示空间需要能够建模双向的一对多映射。

依赖普通函数的标准方法无法满足这一必要条件:它们只能量化一对一的关系 [9, 51]。已经有一些方法尝试引入多义性。例如,Song 和 Soleymani [45] 通过让嵌入函数为给定输入提出K个候选表示,提出了多义性视觉语义嵌入(PVSE)。PVSE已被证明在匹配任务中成功捕捉了多义性,并在构建于一对一函数的基线上取得了改进。其他人 [25] 则通过预训练的对象检测器获得区域嵌入,建立了多个区域-词汇的匹配。这一策略在显著提升性能的同时,也带来了显著的计算成本增加。

在这项工作中,我们提出了概率跨模态嵌入(PCME)。我们认为,概率映射是一种有效的表示工具,它不需要像基于检测的方法那样明确表示多对多关系,并且还提供了许多优势。首先,PCME生成的不确定性估计能够带来一些有用的应用,如估计查询的难度或失败的可能性。其次,概率表示能够构建一个更丰富的嵌入空间,在其中集合代数有意义,而确定性方法只能表示相似性关系。第三,PCME可以与确定性检索系统互补。虽然一对一对应的假设对于该方法有害,但同样的假设也在评估基准中引入了混乱。例如,MS-COCO [5] 在跨模态匹配的标注上并不全面。最好的解决方案是明确并人工标注所有的图像-文字配对以进行评估。然而,这一过程难以扩展,尤其是对于像COCO这样的大规模数据集。相反,我们提出使用CUB [55] 构建一个较小但更干净的跨模态检索基准,并提供更合理的评估指标。

我们的贡献如下:

(1) 我们提出了概率跨模态嵌入(PCME),以在跨模态检索中正确表示联合嵌入空间中的一对多关系。

(2) 我们识别了现有跨模态检索基准的缺陷,并提出了替代解决方案。

(3) 我们利用PCME提供的不确定性估计对联合嵌入空间进行了分析,并展示了如何产生直观的属性。

2. Related work

Cross-modal retrieval.在这项工作中,我们关注图像与文本的跨模态检索。大量研究致力于学习度量空间,以共同嵌入图像和句子 [8, 9, 10, 18, 25, 45, 47]。早期的研究 [11, 23] 依赖于典型相关分析(CCA)[13] 来构建联合嵌入空间。Frome 等人 [10] 使用基于两种模态构建的三元组的铰链排序损失。Wang 等人 [51] 扩展了这一想法,通过对单模态的三元组进行训练,以保持每种模态在联合空间中固有的结构。Faghri 等人 [9] 提出使用三元组损失来学习这种空间,并仅针对查询-正样本对采样最难的负样本。

依赖单一全局表示的一个缺点是,它无法表示图像或文字说明中存在的语义概念的多样性。先前的研究 [16, 54] 观察到视觉语义嵌入空间中存在一对一和多对多匹配的差异,这些空间通过为每个图像或文字说明使用一个或多个嵌入表示来表征。Song 和 Soleymani [45] 通过对局部描述符应用多头自注意力机制,为每个图像或句子构建了多个全局表示。其他方法使用区域级和词汇级描述符,通过多对多匹配构建全局图像-文本相似性。Li 等人 [25] 采用图卷积网络 [22] 对从 Faster-RCNN [40] 检测器获得的区域建议进行语义推理。Veit 等人 [49] 提出了条件嵌入方法来解决多个标签的多样性问题,但它不依赖于联合嵌入空间,因此无法直接应用于跨模态检索。

最近,解决多对多图像-句子匹配最成功的方法是通过在独立的区域级编码器之上附加联合视觉和文本推理模块 [24, 28, 30, 31, 34, 53, 54, 60]。此类方法大多涉及跨模态注意力网络,并在跨模态检索任务中报告了最新的成果。然而,这也导致了测试时计算成本的大幅增加:查询和每个数据库条目形成的配对都需要经过推理模块。为了提高可扩展性,我们选择基于直接利用联合嵌入空间且兼容大规模索引的方法。

最后,与我们的工作同时进行的Wray等人 [56] 研究了跨模态视频检索,并讨论了评估中一对一对应假设的类似局限性。他们建议使用基于字幕计算的语义相似代理,以便在标准视频检索数据集上进行更可靠的评估。

Probabilistic embedding.数据的概率表示在机器学习中有着悠久的历史 [32]。2014年,概率表示被引入到词嵌入中 [50],因为它能够优雅地处理语言中的固有层次结构。自那时以来,一系列研究探索了不同的分布家族来表示词汇 [26, 35, 36]。最近,概率嵌入被引入视觉任务中。Oh等人 [37] 提出了对冲实例嵌入(HIB),以处理度量学习中的一对多对应关系,而其他工作则将概率嵌入应用于人脸理解 [43, 3]、二维到三维姿势估计 [46]、说话人分离 [44] 和原型嵌入 [42]。我们的工作将HIB扩展到图像和文字说明之间的联合嵌入,以表示两个领域中不同的细粒度层次,并隐式捕捉由此产生的一对多关联。最近,Schönfeld等人 [41] 利用变分自编码器 [20] 进行零样本识别。他们的潜在空间在概念上与我们相似,但学习和使用方式完全不同:他们使用2-Wasserstein距离作为分布对齐损失,并在上面学习分类器,而PCME使用概率对比损失,使我们能够直接使用潜在特征进行检索。据我们所知,PCME是首个将概率嵌入用于多模态检索的工作。

3. Method

在这里插入图片描述

图2。方法概述。展示了概率跨模态嵌入(PCME)的视觉和文本编码器。每种模态输出在 R D \mathbb{R}^D RD 中的均值和方差向量,这些向量表示 R D \mathbb{R}^D RD 中的正态分布。

在本节中,我们将介绍我们的概率交叉模态嵌入(PCME)框架,并讨论其概念工作和优势。

我们首先定义跨模态检索任务。设 D = ( C , I ) \mathcal{D}=(\mathcal{C},\mathcal{I}) D=(C,I) 表示视觉和语言数据集,其中 I \mathcal{I} I 是图像集, C \mathcal{C} C 是文字说明集。两个集合通过真实匹配连接在一起。对于文字说明 c ∈ C c\in\mathcal{C} cC (分别地,对于图像 i ∈ I i\in\mathcal{I} iI),对应的图像集合(分别地,文字说明集合)由 τ ( c ) ⊆ I \tau(c)\subseteq\mathcal{I} τ(c)I (分别地 τ ( i ) ⊆ C \tau(i)\subseteq\mathcal{C} τ(i)C)给出。请注意,对于每个查询 q q q,可能存在多个跨模态匹配 ( ∣ τ ( q ) ∣ > 1 ) (|\tau(q)| > 1) (τ(q)>1)。处理这种多样性将是我们研究的核心重点。

跨模态检索方法通常学习一个嵌入空间 R D \mathbb{R}^D RD,以便将“相似性”的主观概念量化为两个向量之间的距离。为此,学习了两个嵌入函数 f V f_{\mathcal{V}} fV f T f_{\mathcal{T}} fT,用于将图像和文本样本映射到公共空间 R D \mathbb{R}^D RD 中。

3.1. Building blocks for PCME

我们为PCME引入了两个关键要素:联合视觉-文本嵌入和概率嵌入。

3.1.1 Joint visual-textual embeddings

我们描述了如何学习视觉和文本编码器。随后,我们介绍了此前解决跨模态关联多样性的尝试。

Visual encoder f V . f_{\mathcal{V}}. fV. 我们使用 ResNet 图像编码器 [14]。设 z v = g V ( i ) : I → R h × w × d v z_v=g_{\mathcal{V}}(i):\mathcal{I}\to\mathbb{R}^{h\times w\times d_v} zv=gV(i):IRh×w×dv 表示全局平均池化 (GAP) 层之前的输出。视觉嵌入通过 v = h ν ( z v ) ∈ R D v=h_\nu(z_v)\in\mathbb{R}^D v=hν(zv)RD 计算,在最简单的情况下, h ν h_\nu hν 是 GAP 后接一个线性层。我们修改了 h V h_{\mathcal{V}} hV,使其预测的是分布,而不是一个点。

Textual encoder f T . f_{\mathcal{T}}. fT. 给定一个文字说明 c c c,我们构建词汇级描述符的数组 z t = g T ( c ) ∈ R L ( c ) × d t z_t=g_{\mathcal{T}}(c)\in\mathbb{R}^{L(c)\times d_t} zt=gT(c)RL(c)×dt,其中 L ( c ) L(c) L(c) c c c 中的词数。我们使用预训练的 GloVe [38]。句子级特征 t t t 由双向 GRU [6] 生成: t = h T ( z t ) t=h_\mathcal{T}(z_t) t=hT(zt),它位于 GloVe 特征之上。

Losses used in prior work. 联合嵌入通常通过对比损失或三元组损失学习 [9,10]。

Polysemous visual-semantic embeddings (PVSE) [45] 旨在为跨模态检索建模一对多匹配关系。PVSE 在视觉和文本特征之上采用多头注意力模块,以对每个模态编码 K K K 个可能的嵌入。对于视觉情况,每个视觉嵌入 v k ∈ R D v^k\in\mathbb{R}^D vkRD,其中 k ∈ { 1 , … , K } k\in\{1,\ldots,K\} k{1,,K},其计算公式为:
v k = LN ( h V ( z v ) + s ( w 1 att V k ( z v ) z v ) ) v^k=\text{LN}\left(h_\mathcal{V}(z_v)+s(w^1\text{att}_\mathcal{V}^k(z_v)z_v)\right) vk=LN(hV(zv)+s(w1attVk(zv)zv))
其中, w 1 ∈ R d v × D w^1\in\mathbb{R}^{d_v\times D} w1Rdv×D 是全连接层的权重, s s s 是 Sigmoid 函数,LN 是层归一化 (LayerNorm) [1],att V k _{\mathcal{V}}^{k} Vk 表示视觉自注意力 att ν _{\nu} ν 的第 k k k 个注意力头。文本嵌入 t k t^k tk 对于 k ∈ { 1 , … , K } k\in\{1,\ldots,K\} k{1,,K} 通过多头注意力对称地给出:
t k = LN ( h T ( z t ) + s ( w 2 att C k ( z t ) z t ) ) t^k=\text{LN}\left(h_{\mathcal{T}}(z_{t})+s(w^{2}\text{att}_{\mathcal{C}}^{k}(z_{t})z_{t})\right) tk=LN(hT(zt)+s(w2attCk(zt)zt))
PVSE 通过多实例学习 (MIL) 目标来学习视觉和文本编码器,其中仅监督 K 2 K^{2} K2 个可能视觉-文本嵌入对中最优的那个配对。

3.1.2 Probabilistic embeddings for a single modality

我们的PCME将每个样本建模为一个分布,基于Hedged Instance Embeddings (HIB) [37]进行扩展,这是一种用于表示实例为分布的单模态方法。HIB 是对比损失 [12] 的概率类比。HIB 训练一个概率映射 p θ ( z ∣ x ) p_\theta(z|x) pθ(zx),它不仅保留了成对语义相似性,还代表了数据中的内在不确定性。我们在此描述HIB的关键组成部分。

Soft contrastive loss.为了训练 p θ ( z ∣ x ) p_\theta(z|x) pθ(zx) 捕捉成对相似性,HIB 提出了对比损失 [12] 的软版本,该损失广泛用于训练深度度量嵌入。对于一对样本 ( x α , x β ) (x_\alpha, x_\beta) (xα,xβ),损失定义为:
在这里插入图片描述
其中 p θ ( m ∣ x α , x β ) p_\theta(m|x_\alpha,x_\beta) pθ(mxα,xβ)是匹配概率。

Factorizing match probability.[37] 将 p θ ( m ∣ x α , x β ) p_\theta(m|x_\alpha, x_\beta) pθ(mxα,xβ) 分解为基于嵌入的匹配概率 p ( m ∣ z α , z β ) p(m|z_\alpha, z_\beta) p(mzα,zβ) 和编码器 p θ ( z ∣ x ) p_\theta(z|x) pθ(zx)。这是通过蒙特卡罗估计实现的:

在这里插入图片描述

其中 z j z^j zj 是从嵌入分布 p θ ( z ∣ x ) p_\theta(z|x) pθ(zx) 中采样的。为了使梯度能够流动,嵌入分布应当是适合重参数化技巧 [21] 的。

Match probability from Euclidean distances.我们计算样本匹配概率如下:

在这里插入图片描述

其中 ( a , b ) (a, b) (a,b) 是可学习的标量, s ( ⋅ ) s(\cdot) s() 是 Sigmoid 函数。

3.2. Probabilistic cross-modal embedding (PCME)

我们描述了如何学习一个联合嵌入空间,以便使用 PCME 实现概率表示。

3.2.1 Model architecture

在这里插入图片描述

图3。头模块。视觉和文本头 ( h ν , h τ ) (h_\nu, h_\tau) (hν,hτ) 具有相同的结构,除了特定于模态的模块(a)。均值(b)和方差(c)的计算有所不同:方差模块不涉及 sigmoid 函数 s ( ⋅ ) s(\cdot) s()、LayerNorm (LN) 和 L2 投影。

PCME 的概述如图 2 所示。PCME 将图像 i i i 和文字说明 c c c 表示为在相同嵌入空间 R D \mathbb{R}^D RD 上的正态分布,分别为 p ( v ∣ i ) p(v|i) p(vi) p ( t ∣ c ) p(t|c) p(tc)。我们用均值向量和对角协方差矩阵在 R D \mathbb{R}^D RD 中来参数化正态分布。

在这里插入图片描述

其中 z v = g V ( i ) z_v = g_\mathcal{V}(i) zv=gV(i) 是特征图, z t = g T ( c ) z_t = g_\mathcal{T}(c) zt=gT(c) 是特征序列 ( § 3.1.1 ) (\S\color{red}3.1.1) (§3.1.1)。对于每种模态,两个头模块 h μ h^\mu hμ h σ h^\sigma hσ 分别计算均值向量和方差向量。接下来将描述这两个模块。

Local attention branch.受到 PVSE 架构的启发 ( § 3.1.1 ) (\S\color{red}3.1.1) (§3.1.1),我们考虑在图像和文本编码器的头模块 ( h μ , h σ ) (h^\mu, h^\sigma) (hμ,hσ) 中追加一个局部注意力分支。具体细节见图 3。局部注意力分支包括对空间特征的自注意力聚合,然后是一个带有 Sigmoid 激活函数的线性层。我们将通过消融实验展示,这个额外的分支有助于更有效地聚合空间特征,从而提高性能。

Module for µ versus σ.。图 3 展示了头模块 h μ h^\mu hμ h σ h^\sigma hσ。对于 h V μ h_\mathcal{V}^\mu hVμ h T μ h_\mathcal{T}^\mu hTμ,我们在局部注意力分支中应用 Sigmoid,并添加残差输出。随后应用 LayerNorm (LN) [1] 和 L2 投影操作 [45,48]。对于 h V σ h_\mathrm{\mathcal{V}}^\sigma hVσ h T σ h_\mathrm{\mathcal{T}}^\sigma hTσ,我们发现 Sigmoid 和 LN 操作过度限制了表示,导致不良的 uncertainty 估计(在 §D 中讨论)。因此,我们不对 uncertainty 模块使用 Sigmoid、LN 和 L2 投影。

Soft cross-modal contrastive loss.学习联合概率嵌入的目标是学习映射 p ( v ∣ i ) = p θ v ( v ∣ i ) p(v|i) = p_{\theta_v}(v|i) p(vi)=pθv(vi) p ( t ∣ c ) = p θ t ( t ∣ c ) p(t|c) = p_{\theta_t}(t|c) p(tc)=pθt(tc) 的参数。我们采用公式 ( 1 ) (\color{red}1) (1) 中的概率嵌入损失,其中匹配概率现在基于交叉模态对 ( i , c ) (i, c) (i,c) L e m b ( θ v , θ t ; i , c ) {\mathcal{L}}_{\mathrm{emb}}(\theta_v, \theta_t; i, c) Lemb(θv,θt;i,c),其中 θ = ( θ v , θ t ) \theta = (\theta_v, \theta_t) θ=(θv,θt) 是视觉和文本编码器的参数。匹配概率现在定义为视觉和文本特征的函数: p θ ( m ∣ i , c ) ≈ 1 J 2 ∑ j = 1 J ∑ j ′ = 1 J s ( − a ∥ v j − t j ′ ∥ 2 + b ) p_\theta(m|i, c) \approx \frac{1}{J^2} \sum_{j=1}^J \sum_{j'=1}^J s(-a \|v^j - t^{j'}\|_2 + b) pθ(mi,c)J21j=1Jj=1Js(avjtj2+b),其中 v j v^j vj t j ′ t^{j'} tj 遵循公式 (4) 中的分布。

Additional regularization techniques.我们考虑两种额外的损失函数来正则化学习到的不确定性。参考文献 [37],我们通过引入学习到的分布与标准正态分布 N ( 0 , I ) \mathcal{N}(0,I) N(0,I) 之间的 KL 散度损失,来防止学习到的方差趋近于零。我们还使用了最近在文献 [52] 中引入的均匀性损失,该损失是在小批量中的所有嵌入之间计算的。更多细节请参见 §A.1。

Sampling SGD mini-batch.我们首先从 G \mathcal{G} G 中采样 B B B 个真实图像-标题匹配对 ( i , c ) (i, c) (i,c)。在采样的子集中,我们考虑每一个由真实匹配决定的正负对。这将导致在我们的小批量中有 B B B 个匹配对和 B ( B − 1 ) B(B-1) B(B1) 个不匹配对。

Measuring instance-wise uncertainty.为每个输入预测的协方差矩阵表示数据的固有不确定性。对于标量不确定性度量,我们取协方差矩阵的行列式,或等效地取 σ \sigma σ 的几何均值。直观上,这测量了分布的体积。

3.2.2 How does our loss handle multiplicity, really?

我们进行梯度分析,以研究我们在方程 (1) 中的损失函数如何处理交叉模态匹配中的多重性以及学习数据中的不确定性。在 §A.2 中,我们进一步将其与 PVSE (§3.1.1, [45]) 使用的多实例学习(MIL)损失进行关联。
我们首先定义距离对数值: l j j ′ : = − a ∥ v j − t j ′ ∥ 2 + b l_{jj^{\prime }} := - a\| v^j - t^{j^{\prime }}\| _2 + b ljj:=avjtj2+b,并比较不同 ( j , j ′ ) (j, j^{\prime}) (j,j) 值下的监督量。为此,取 l j j ′ l_{jj^{\prime }} ljj 的梯度。

在这里插入图片描述

w j j ′ : = e ± l j j ′ ∑ α α ′ e ± l α α ′ w_{jj'} := \frac{e^{\pm l_{jj'}}}{\sum_{\alpha \alpha'} e^{\pm l_{\alpha \alpha'}}} wjj:=ααe±lααe±ljj,其中 ± \pm ± 表示匹配的正负性。

我们首先观察到,如果 w j j ′ = 1 w_{jj^{\prime}}=1 wjj=1,那么公式 (5) 就完全是来自软对比损失(公式 (1))的监督。因此,正是 w j j ′ w_{jj^{\prime}} wjj 这一项使得模型能够学习多重性并表示相关的不确定性。

为了研究 w j j ′ w_{jj^{\prime}} wjj 的行为,首先假设 ( v , t ) (v, t) (v,t) 是一个正对。此时, w j j ′ w_{jj^{\prime}} wjj 是 pairwise logits 的 softmax。因此,距离较小的对 ∥ v j − t j ′ ∥ 2 \|v^j - t^{j^{\prime}}\|_2 vjtj2 会比距离较大的对具有更大的权重 w j j ′ w_{jj^\prime} wjj。类似地,如果 ( v , t ) (v, t) (v,t) 是一个负对,则 w j j ′ w_{jj^{\prime}} wjj 会在距离较远的对上分配更大的权重,而在距离较近的对上分配较小的权重。换句话说, w j j ′ w_{jj^{\prime}} wjj 对那些在嵌入空间中正确预测距离关系的对赋予更多权重。这种奖励结构使得错误的相似度预测不会受到显著惩罚,只要至少有一个正确的相似度预测即可。这种奖励机制鼓励嵌入生成更多的多样样本,并通过非零的 σ \sigma σ 预测来对结果进行保留。

3.2.3 Test-time variants

与使用交叉模态推理模块的方法不同(如 [24,28,30,31,34,53,54,60]),PCME 在测试时计算匹配概率的过程简化为计算成对的欧几里得距离。这意味着,PCME 的概率嵌入可以以多种方式用于计算测试时的匹配概率,不同的变体具有不同的计算复杂性。这些选项分为两组:

  1. 基于采样的变体。类似于训练阶段,可以使用 Monte-Carlo 采样(见公式(2))来近似匹配概率。假设有 J J J 个样本,这需要对每个匹配进行 O ( J 2 ) O(J^2) O(J2) 次距离计算,以及为每个数据库条目分配 O ( J 2 ) O(J^2) O(J2) 的空间。这意味着 J J J 在测试时复杂性中扮演了重要角色。

  2. 非采样变体。可以直接使用基于 μ \mu μ 的距离来近似匹配概率。在这种情况下,时间和空间复杂度变为 O ( 1 ) O(1) O(1)。我们在实验中对这种变体(“仅 μ \mu μ”)进行了消融,因为它与确定性方法直接可比。我们还可以使用任何具有闭式表达式的分布距离度量来处理高斯分布。例如,2-Wasserstein 距离、Jensen-Shannon (JS) 散度和预期似然核 (ELK)。我们也对这些进行了消融。每种概率距离的详细信息可以在 §B 中找到。

4. Experiments

在这里插入图片描述

在这里插入图片描述

5. Conclusion

我们提出了概率跨模态嵌入(Probabilistic Cross-Modal Embedding,PCME),该方法在嵌入空间中学习多模态数据的概率表示。该概率框架为建模图像和描述对之间广泛存在的一对多关联提供了一种强大的工具。据我们所知,这是首个在多模态任务中使用概率嵌入的方法。我们对PCME进行了广泛的消融实验,结果表明它不仅在检索性能上优于其确定性对应方法,还提供了不确定性估计,使得嵌入更加具有可解释性。

  • 7
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值