顶刊TPAMI 2023 | Temporal Perceiver:通用时序边界检测方法

6955065154d5488efbfb713d0c2c4aea.gif

©作者 | 王利民

单位 | 南京大学

本文介绍一下今年我们组被 T-PAMI 2023 收录的时序边界检测工作 Temporal Perceiver: A General Architecture for Arbitrary Boundary Detection。

4850064e78ae11de646babac6cfb480d.png

论文题目:

Temporal Perceiver: A General Architecture for Arbitrary Boundary Detection

论文地址:

https://ieeexplore.ieee.org/abstract/document/10144649

代码地址:

https://github.com/MCG-NJU/TemporalPerceiver

TL;DR 我们提出一种对视频中一类因为语义不连贯而自然产生的时序边界 (Generic Boundary) 的通用检测方法,基于 Transformer Decoder 建立了一个编码器-解码器结构。

在编码阶段,我们利用一组可学习的隐查询量 (Latent Queries) 来压缩冗余的输入时序特征为边界特征 (Boundary Queries) 和上下文特征 (Context Queries),在线性复杂度内有效完成特征压缩。

在解码阶段,我们采用另一组可学习查询量 (Proposal Queries) 从压缩特征中解码时序边界的位置和置信度。我们在镜头级别、事件级别和电影场景级别的自然时序边界数据集上进行测试,均取得了领先前沿的性能。

为了进一步推进通用时序检测,我们联合不同语义粒度的时序边界数据集训练了语义层级无关的 Temporal Perceiver 模型,并取得了和单语义级别 TP 相比更强的泛化检测能力和接近的检测精度。

关键词:长视频理解、自然时序边界检测、基于查询量的检测框架、特征压缩、时序建模、通用感知模型、隐特征查询量

4dcee8839c886291ab63b50fdc0c9caf.png

任务背景

主流的视频理解任务,包括视频动作识别、动作检测、视频检测等等,通常关注对于较短视频的理解。长时视频,包括监控录像、电影、体育比赛录像等等,在其长达数小时的内容中包含着丰富的语义信息,具有很大的研究价值。

然而,由于 GPU 内存的限制和有效的多层次语义分割方法的缺失,这些长时视频还未在过往视频理解工作中得到彻底的研究与挖掘。因此,我们希望能够提出一种将长视频分割为一系列更短的有意义的视频片段的方法,作为长视频理解的基础预处理模块。

我们着手研究对视频中不同层次的自然时序边界检测(Generic Boundary Detection, GBD),旨在定位长视频中自然产生的时序边界。该任务的核心概念是自然时序边界,该概念描述了一类因为视频语义不连贯而自然形成的时序边界。

和过去研究较多的动作检测边界不同,自然时序边界没有任何预先定义的语义类别,可以不受语义/类别偏向影响的体现视频的时序结构。这个 generic boundary 的概念首先在 Mike Shou 老师组的 GEBD 工作 [1] 中被探索。我们将 generic boundary 的概念扩展到了多种不同的语义层次,如下图,包括足球比赛中的镜头切换边界和电影中的场景切换边界。对于这样语义层次差异较大的几种边界的检测,需要结合不同语义层次的信息来捕捉视频的时序结构和上下文。

18f80e06cedffbe2bc5d18cc3bc28e17.png

▲ 图1. 不同语义层次下的自然时序边界,包括镜头级别边界、事件级别边界和场景级别边界。


目前自然时序边界检测仍然是局限于在不同语义层次各自的任务中进行研究。镜头边界检测方法通过局部 RGB 变化来检测镜头边界;事件边界检测基于局部窗口的 CNN 捕捉动作语义进行看事件边界检测;场景边界检测利用 LSTM 建模长时序上下文,依赖于整体场景理解定位场景切换边界。
此外,这些方法也常常采用复杂的后处理去重。这几种方法的模型设计和后处理方法和具体的边界类型紧密相关,难以在不同类型的自然时序边界检测中获得较好的泛化能力。

0233863036c72dbf132b634d5c0da556.png

研究动机

我们认为,不同语义层次的自然时序边界检测任务有着类似的视频语义结构和相似的需求。那么自然而然,我们会有这样的问题:我们能否在一个通用的检测框架中解决不同语义层次的自然时序边界检测? 因此,我们提出 Temporal Perceiver (TP),一个基于 Transformer Decoder 结构的通用模型,希望解决对任意自然时序边界的检测问题。

自注意力模块是一种较为灵活的基础模块,但其复杂度是输入长度的平方。我们观察到输入视频存在时序冗余性,直接对输入视频特征做自注意力会带来很多不必要的计算,因此提出了在自注意力模块前压缩输入视频特征的编码器结构。我们的核心贡献在于提出了一组可学习的 latent queries自适应地学习特征、压缩较长的视频到一个固定的时序长度,以降低复杂度到线性

为了更好的利用视频语义结构的先验,我们进一步将 latent queries 分为两类:boundary queries 和 context queries。边界查询量的目标是在视频中提取边界及其邻域的特征,上下文查询量将视频中语义连续的片段聚合为一系列语义中心来抑制视频冗余。

除此之外,我们还提出一个新的对齐损失函数在编码器交叉注意力图上,鼓励边界查询量一对一的学习边界特征,提高了模型的收敛速度和检测性能。我们的贡献如下:

1. 我们提出 Temporal Perceiver,一个通用的自然时序边界检测模型来解决长时视频中的自然时序边界检测问题,提供了一种基于 Transformer 的任意边界检测通用模型;

2. 为解决长视频中的时序冗余问题、降低模型复杂度,我们提出 latent query 集合来通过交叉注意力模块进行特征压缩;为提高隐藏查询量的压缩效率,我们根据视频语义结构进行具体模型结构和训练策略设计,划分了边界-上下文查询量并提出基于编码交叉注意力的对齐损失函数;

3. 实验展示了我们的方法只用 RGB 特征在镜头级别、事件级别和场景级别自然时序边界基准数据集上超越了过往前沿方法,并体现了模型在自然时序边界检测问题里对不同语义层次的边界检测的泛化性。

91ff079946e94a62935656a0e85db47e.png

方法

形式化的来说, 对于给定的视频 X, Temporal Perceiver 预测一个自然边界集合 来定位视频中的边界真值 ,其中 为预测边界的数量, 为视频中 gt 边界的数量。

f00e1e295bc47434aa05f2dced332a35.png

▲ 图2. Temporal Perceiver模型结构图

图 2 展示了 TP 的模型结构。我们采用 backbone 网络从原始视频中抽取逐帧的 RGB 特征 和连贯性打分(coherence scores) ,N 为视频帧数量、C 为通道数量。连贯性打分是一个度量当前时序位置是否为边界的分数,我们基于每帧的连贯性打分对当前视频帧特征 F 进行分数从大到小的重排序。连贯性分数越高的帧越大概率为时序边界, 排列在序列的前部。

此外,我们也为每个时序位置构造了基于 函数的位置编码,和 RGB 特征一起被重新排序后送入网络。

网络主体由一个基于 Transformer 交叉注意力模块的编码器 和一个 Transformer 解码器 组成。编码器 通过可学习的特征查询量 / 隐藏单元 (feature queries / latent units) 将输入序列压缩到隐特征空间 。这里 是隐藏单元的数量, 远小于输入序列长度 。

每个隐藏单元都可以看作是一个 anchor 来从全局聚合时序信息。得到压缩特征 后,解码器 采用可学习的 proposal queries 来直接解码边界的位置,得到 个边界位置特征。最后采用线性层 FFN 作为定位头和分类头来从边界位置特征中解码出预测边界的位置和置信度。我们的 TP 采用了简单的端到端时序检测框架,无须后处理、不对边界的类别作假设,可以完成对任意 generic boundary 的泛化检测。

特征编码与连贯性打分

55b013554c13a006b7057c07a9dbf252.png

▲ 图3. backbone网络可视化。backbone网络在数据集上用密集边界监督训练。视频特征在每个snippet的max-pooling层后提取,连贯性打分为最终线性层的结果。

Backbone 网络的结构由图 3 可见。我们通常采用在 ImageNet 上预训练的 ResNet50 网络来抽取 RGB 特征 和连贯性打分 。我们首先密集地在视频上采样 snippets,每个 snippet 包括 帧视频帧,采样步长为 。对每个 snippet,我们用 backbone 抽取得到 个特征,在特征拼合之后进入下一个由时序卷积-最大池化-线性投影组成的时序建模模块,得到 个分类分数 。

网络在每个数据集上都用二分类的密集边界 groundtruth 训练,因此 代表着中心帧 是一个 generic boundary 的概率。将当前视频每帧的分类分数 组合成序列就是TP的连贯性打分。此外,我们从时序建模模块的最大池化层后抽取每帧的特征 , 组合后就是 TP 的输入视频特征 F。

Temporal Perceiver

TP 是采用基于 Transformer 模块的编码器-解码器结构。编码器实际是一个 层的 Transformer 解码器, 用来编码输入特征到隐空间。解码器就是原本的 Transformer 解码器, 包含 层。在编码过程中,长度为 的输入特征通过交叉注意力模块被压缩到固定长度 。目前和原本的 Transformer 编码器相比,可以将复杂度从 降低到 。

编码器:通过隐藏单元进行时序压缩

我们可以将视频从时序的角度划分为两类不同的片段,分别是边界片段和上下文片段。边界片段是指一些包含着逐渐发生的时序转换的视频片段,具体来说就是在 generic boundary 时序前后的视频片段;上下文片段则指在边界划分出的语义连续的视频片段中更加中心的片段。

为了达到更好的定位效果,我们主要关注边界片段,而上下文片段因为表达的是一个连贯的语义片段,因此直觉地可以被压缩成更短的语义单元来去除冗余。因此,我们设计了两种类别的 feature queries,分别是 boundary queries 和 context queries,来分别处理语义不连续的边界片段和语义连续的上下文片段。

那么如何在一个具体的视频片段中区分边界片段和上下文片段呢?还记得 backbone 网络逐帧的预测了一个连贯性打分,该打分是对于当前时序位置是否为边界的置信度分数,因此我们利用连贯性打分来进行片段类型的划分。我们将输入特征按照对应的连贯性打分进行降序排序,得到一个 permutation 。连贯性打分在前K高的时序位置被标记为边界片段,有:

其余部分则为上下文片段 。为了分别处理边界片段和上下文片段,我们将 个 feature queries 分为 个 boundary queries 和 个 context queries , 。feature queries 由随机初始化, 和其他网络权重一起在训练中进行优化。

在编码器做特征压缩的过程中,每一层的自注意力模块都对 feature queries 之间做 pair-wise 依赖建模;交叉注意力模块中, 个 boundary queries 对边界区域的特征进行一对一的提取处理, 个context queries 灵活地将上下文区域的特征聚类为一些语义中心。整个编码过程可以表达为如下公式,其中,  是压缩后的特征,之后送入解码器。

12b18ce0394de9d8964890d7fe70f56e.png

交叉注意力的对齐约束:为了引导 boundary query 准确的对齐边界区域特征,我们在编码器的交叉注意力模块上引入了一个对齐约束。由于我们已经将输入特征根据连贯性打分重新排序,在输入序列中边界特征的位置都在前部,因此我们可以简单的引入一个基于单位矩阵的对齐损失函数,加在最后一层编码交叉注意权重图上。

这样一来,通过控制单位矩阵的大小,我们可以保证每个 boundary query 都被约束到只能和一个时序位置进行交互,且该时序位置对应的连贯性分数属于视频序列中前 K 高。对齐损失函数的公式如下:

其中, 为编码器最后一层的交叉注意权重图。边界特征的数量和 boundary query 的数量都为 ,并在对齐损失函数的约束下一一对应地由每个边界查询量结合对应边界特征。

解码器:基于提案查询量的稀疏检测

我们 follow DETR [2] 和 RTD [3] 工作的直接出框范式,利用 Transformer 解码器和一个可学习的 proposal queries 集合来生成边界预测。在解码器堆叠的自注意力和交叉注意力模块中,自注意力模块建模每个边界预测的 pair-wise 关系以达到去重;交叉注意力模块处理压缩后的特征进行边界预测。整个解码器的稀疏检测范式可以表达如下:

dc471ae40b83b43d6ee3f593b9c51e9f.png

其中, 为解码后边界预测的特征。最终结果由两分支的头结构进行解码。定位头结构采用三层感知机来预测边界的位置,分类头结构采用一个全连接层和 sigmoid 激活来预测边界置信度。

与Perceiver和Perceiver IO的比较

我们的 TP 在思想上和 Perceiver [4] 及 Perceiver IO [5] 类似,都采用了 latent queries 进行输入压缩,但我们的方法在以下几个方面区别于 Perceiver 的方法。

基本的处理策略和管线不同。Perceiver 和 Perceiver IO 采用的都是“read-process-write”策略,解耦了压缩结构和处理结构,采用的是一个单独的交叉注意力模块做压缩、多个自注意力模块做特征处理的不对称结构。

而我们的 TP 采用的是一个耦合渐进的“compress-process”策略进行编码,每个编码层都包括堆叠的自注意力模块和交叉注意力模块。TP 目标在将原始的视频特征序列逐步渐进压缩到隐特征空间。因此,我们的自注意力和交叉注意力模块数量是相同的。我们认为这种耦合渐进的压缩-处理策略可以提高压缩效率,同时允许在更深网络层加入监督来引导压缩过程。

训练策略和损失函数不同。Perceiver 与 Perceiver IO 均不能采用显式的损失函数直接引导 latent units 的训练,仅依赖于最终结果的分类/预测损失函数。这样的训练过程可能会导致对 latent unit 的利用不充分、得到较差的性能。

相比之下,我们仔细考虑了视频数据的特殊性质,结合 GBD 任务的特点,提出了定制的 latent queries(边界、上下文)来处理输入视频数据的时序冗余。同时,我们还提出了一个新的对齐损失函数,在交叉注意力权重图上约束 boundary queries 的训练,而 Perceiver 和 Perceiver IO 没有采用额外的监督。消融实验也表明该对齐损失函数可以加快模型收敛,同时提高模型性能。

目标问题和领域不同。Perceiver 和 Perceiver IO 解决的都是经典分类问题和空间上的密集预测。这些任务常常需要一个分类头结构来生成分类标签,或者利用一个密集预测头结构来生成像素级标签。与之不同,我们的 TP 解决的是视频中的时序检测问题。我们需要将 TP 和稀疏检测头结合来直接回归得到 generic boundary 的位置。

总体来说,由于检测目标之间存在很大的差异性,因此相对来说检测任务要比分类和密集预测任务难一点。因此,直接将 Perceiver 结构运用在解决检测问题上是无法得到很好的效果的,而我们 TP 针对视频数据和模型结构的创新模型都能在 GBD 任务上提高模型性能。

f775d8dde7a271f01731442d968f4840.png

实验

我们分别在镜头级别 (shot-level)、事件级别 (event-level) 和场景级别 (scene-level) 的 generic boundary benchmark 上进行了测试,并与过往工作进行性能对比。

镜头级别

对于镜头切换检测,我们选择了基于足球赛事的 SoccerNet-v2 [6] 数据集上的  camera segmentation benchmark 进行测试。表 1 展示了镜头级别比较结果,过往工作往往侧重于对某一类镜头转换的检测,可以看到 TP 在所有 transition 类别上综合性能优于过往工作。

同时,我们也可以看到 TP 的性能并非依赖于 coherence score 的粗检测结果,相比 coherence score 检测结果有着很大的提高。实验结果也显示,光流信息(*)的引入并不能对性能有进一步的提升,这可能是因为 RGB 信息已经足以在当前任务获得很高的检测性能。

8774bd778bb896003b46fd3ccc473407.jpeg

▲ 表1. 在SoccerNet-v2上与camera segmentation的过往工作进行mAP(%)性能对比,最好结果加粗表示,次好结果下划线表示。

事件级别

对于事件转换检测,我们在基于日常行为视频的 Kinetics-GEBD [1] 数据集和基于奥林匹克体育赛事的 TAPOS [7] 数据集上进行测试。表 2 给出了我们方法在两个数据集上和过往工作的对比。

37770df4c62b1f4ca0800d906b472cc7.png

▲ 表2. 在Kinetics-GEBD和TAPOS数据集上与之前工作的F1 score@relative distance (f1@rel.dis.)性能对比,其中预测边界与边界真值之间的距离在relative distance规定的范围内算为正确预测。

可以看出,TP 在两个数据集上都能取得 state-of-the-art 的结果,尤其在 rel.dis. 较小的情况下我们的结果与之前工作的差距更大,体现出 TP 边界定位的准确性。除了 ResNet50 网络之外,我们也采用了 IG-65M [8] 预训练的 CSN 网络 [9] 作为 backbone,其结果也接近 CVPR‘22 该任务的 challenge winner 结果。

场景级别

对于场景切换检测,我们选择了 MovieNet [10] 数据集的 scene boundary detection 任务进行测试,其指标为 AP 和 Miou,其中 Miou 是边界预测划分的场景和场景真值的 IoU 加权和。表 3 展示了场景切换检测结果。可以看出,我们的方法在 AP 和 Miou 上都取得了超越过往有监督工作的性能,同时也展现出 TP 在不同语义粒度的自然边界检测问题上的泛化性。

e4755fb1e2484094d67b977c7606c2e2.jpeg

▲ 表3. 在MovieScenes和MovieNet上与之前工作基于AP和Miou的场景切换性能对比,其中MovieScenes是MovieNet的子集,也属于场景切换经典benchmark。


此外,我们联合多个时序边界数据集训练了一个语义层级无关的 Temporal Perceiver 模型,尝试进一步推进通用时序检测模型。我们对不同任务和数据集采用了同一个共享的模型:编码器和解码器均为任务共享;只有数据预处理步骤、编码器和解码器所使用的查询量(latent queries 和 proposal queries)因为不同数据集的数据分布、压缩度和解码先验不同而分别设计。

我们没有在 MovieNet 上做泛化训练,是因为其视频帧并不连续(每个镜头只提供三帧关键帧图片),难以和其他时序连续的数据集一同训练,因此我们只在 MovieNet 上测试模型的 unseen 泛化性能。

Unseen 测试时,我们遵循 locked tuning protocol [11],冻住编码器和解码器层,只 finetune latent queries 和 feature queries 来得到泛化性能。该实验的结果在表 8 中汇报,我们在所有的数据集上都取得了和单语义级别 TP 检测器相比更强的泛化检测能力和接近的检测精度。

3422a28dbfc7a6784c9a96f2fa667d7a.jpeg

类别无关 TP 和类别相关 TP 在 Kinetics-GEBD, TAPOS 和 SoccerNet-v2 上的比较,及其在 MovieNet 上的泛化性能。

由于篇幅限制,更多的消融实验、efficiency 比较和结果可视化在此略过,欢迎查阅论文!

817e9547b5c966760bc21a5417fe20e6.png

总结

在这篇工作中,我们为不同语义粒度的自然边界检测提出了一个通用检测框架 Temporal Perceiver (TP)。TP 基于 Transformer Decoder 结构提出了一个有效的边界检测管线,为任意自然边界的检测提供了统一的网络结构。我们的核心贡献在于使用交叉注意力模块和一个 latent query 集合来将冗余的视频输入压缩到一个固定大小的隐空间里,以降低复杂度到线性。

除此之外,我们还利用了视频的时序结构,将 latent query 分为 boundary query 和 context query 来分别压缩视频的边界特征和其余语义连贯的上下文特征。为了帮助收敛,我们在编码器交叉注意力层上提出了一个对齐约束,将边界特征和边界查询量对齐提取特征。得到压缩特征后,我们采用 Transformer Decoder 作为解码器完成对边界的稀疏检测。

实验表明,TP 可以在不同语义层级的数据集上取得 SOTA,体现了模型的检测性能和对不同粒度边界的泛化性能。我们在不同语义层次数据集的联合训练后也发现了对 unseen 粒度边界的更强泛化性能。如何进一步提高不同粒度边界的联合训练性能,以实现更强大的通用检测框架,也是我们未来探索的方向。

outside_default.png

参考文献

outside_default.png

[1] Shou, Mike Zheng, Stan Weixian Lei, Weiyao Wang, Deepti Ghadiyaram, and Matt Feiszli. "Generic event boundary detection: A benchmark for event segmentation." In ICCV, pp. 8075-8084. 2021.

[2] Carion, Nicolas, Francisco Massa, Gabriel Synnaeve, Nicolas Usunier, Alexander Kirillov, and Sergey Zagoruyko. "End-to-end object detection with transformers." In ECCV, pp. 213-229. Cham: Springer International Publishing, 2020.

[3] Tan, Jing, Jiaqi Tang, Limin Wang, and Gangshan Wu. "Relaxed transformer decoders for direct action proposal generation." In ICCV, pp. 13526-13535. 2021.

[4] Jaegle, Andrew, Felix Gimeno, Andy Brock, Oriol Vinyals, Andrew Zisserman, and Joao Carreira. "Perceiver: General perception with iterative attention." In ICML, pp. 4651-4664. PMLR, 2021.

[5] Jaegle, Andrew, Sebastian Borgeaud, Jean-Baptiste Alayrac, Carl Doersch, Catalin Ionescu, David Ding, Skanda Koppula et al. "Perceiver io: A general architecture for structured inputs & outputs." arXiv preprint arXiv:2107.14795 (2021).

[6] Deliege, Adrien, Anthony Cioppa, Silvio Giancola, Meisam J. Seikavandi, Jacob V. Dueholm, Kamal Nasrollahi, Bernard Ghanem, Thomas B. Moeslund, and Marc Van Droogenbroeck. "Soccernet-v2: A dataset and benchmarks for holistic understanding of broadcast soccer videos." In CVPR, pp. 4508-4519. 2021.

[7] Shao, Dian, Yue Zhao, Bo Dai, and Dahua Lin. "Intra-and inter-action understanding via temporal action parsing." In CVPR, pp. 730-739. 2020. [10] Huang, Qingqiu, Yu Xiong, Anyi Rao, Jiaze Wang, and Dahua Lin.

[8] Ghadiyaram, Deepti, Du Tran, and Dhruv Mahajan. "Large-scale weakly-supervised pre-training for video action recognition." In CVPR, pp. 12046-12055. 2019.

[9] Tran, Du, Heng Wang, Lorenzo Torresani, and Matt Feiszli. "Video classification with channel-separated convolutional networks." In ICCV, pp. 5552-5561. 2019.

[10] Huang, Qingqiu, Yu Xiong, Anyi Rao, Jiaze Wang, and Dahua Lin. "Movienet: A holistic dataset for movie understanding." In ECCV, pp. 709-727. 2020.

[11] Zhai, Xiaohua, Xiao Wang, Basil Mustafa, Andreas Steiner, Daniel Keysers, Alexander Kolesnikov, and Lucas Beyer. "Lit: Zero-shot transfer with locked-image text tuning." In CVPR, pp. 18123-18133. 2022.

更多阅读

2b54a4dc0bba93017ea3d78862a67112.png

691160eb5a91746b3e96ec4ff5afba59.png

f4f5d6b58f05f32bfbabdf3eb7bd1616.png

4c1843aa16cd02dd6c5e9e8e4fb1822f.gif

#投 稿 通 道#

 让你的文字被更多人看到 

如何才能让更多的优质内容以更短路径到达读者群体,缩短读者寻找优质内容的成本呢?答案就是:你不认识的人。

总有一些你不认识的人,知道你想知道的东西。PaperWeekly 或许可以成为一座桥梁,促使不同背景、不同方向的学者和学术灵感相互碰撞,迸发出更多的可能性。 

PaperWeekly 鼓励高校实验室或个人,在我们的平台上分享各类优质内容,可以是最新论文解读,也可以是学术热点剖析科研心得竞赛经验讲解等。我们的目的只有一个,让知识真正流动起来。

📝 稿件基本要求:

• 文章确系个人原创作品,未曾在公开渠道发表,如为其他平台已发表或待发表的文章,请明确标注 

• 稿件建议以 markdown 格式撰写,文中配图以附件形式发送,要求图片清晰,无版权问题

• PaperWeekly 尊重原作者署名权,并将为每篇被采纳的原创首发稿件,提供业内具有竞争力稿酬,具体依据文章阅读量和文章质量阶梯制结算

📬 投稿通道:

• 投稿邮箱:hr@paperweekly.site 

• 来稿请备注即时联系方式(微信),以便我们在稿件选用的第一时间联系作者

• 您也可以直接添加小编微信(pwbot02)快速投稿,备注:姓名-投稿

d3d62ea852d719d3eb6cf6be6222956a.png

△长按添加PaperWeekly小编

🔍

现在,在「知乎」也能找到我们了

进入知乎首页搜索「PaperWeekly」

点击「关注」订阅我们的专栏吧

·

·

·

8028b5ab77ed2952ccc2c53c130040e5.jpeg

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值