论文学习笔记:Page4:HPNet: Dynamic Trajectory Forecasting with Historical Prediction Attention

论文学习笔记:Page4:HPNet: Dynamic Trajectory Forecasting with Historical Prediction Attention(HPNet:具有历史预测注意力的动态轨迹预测)

—2024 CVPR

组会问题:

  1. 预测是在云端还是在车端?如果是在车端,车是预测自己还是预测别人?

    1. 文章的方法预测应该是在云端,因为文章的方法是说预测n辆车,那么车端肯定是实现不了
  2. 如果是在车端,那么车端的可见范围是有限的?遮挡问题怎么解决?

  3. 初始的预测嵌入是根据固定历史窗口大小预测的吗?那和可见范围有啥关系?

    1. 根据固定历史窗口大小预测的。
  4. 如果是云端?那为什么还要编码相对位置?直接编码绝对位置不就行了?

    1. 绝对位置编码直接给每个位置一个固定的编码,而相对位置编码则关注于元素之间的相对距离。这有助于模型理解序列中不同部分之间的依赖关系,而不仅仅是它们的绝对位置。
    2. 总的来说,相对时空位置编码通过提供额外的上下文信息,帮助模型更好地理解和处理序列数据,从而提高其在各种任务上的性能。
  5. 可学习模式查询到底是个什么?是干什么的?

    1. 每个query都可以看成graph中的一个node;每个时刻每个模式每个agent都有一个这样的query node;这个node能看到I1时刻内的历史位置node(也就是有边相连);当然每个车道段也会分配一个node。
    2. 查询是一组向量,它们代表了模型在解码过程中的焦点,它们可以被视为模型当前关注或聚焦的点。在解码过程中,模型需要从编码的场景信息中提取出有用的信息,以预测每个智能体的未来轨迹。查询向量帮助模型确定应该关注场景编码中的哪些部分
    3. 对于t时刻的a模式的查询它的含义就是:这个车辆在t时刻如果要生成a模式的轨迹,那么就需要根据t时刻a模式的查询去关于与之相关的一些特征信息。

一、背景

  • 对于轨迹预测来说,最近的主流方法遵循静态范式,它通过使用固定时间的历史框架预测未来的轨迹。这些方法就算在相邻的时间步长上也能独立地进行预测,而没有考虑到预测内在的相关性,从而导致潜在的不稳定性和时间不一致性。如图1所示

  • 由于连续的时间步长具有大量重叠的历史框架,因此它们的预测应该具有内在的相关性,例如重叠的预测轨迹应该是一致的,或者根据道路情况不同但具有相同的运动目标,更重要的是,当智能体通过拥挤的多路交叉口时,连续的预测可能会有很大的不同,但仍然具有相同的运动目标,如图4 (b)所示。

  • 基于此,本文提出了一种新的动态轨迹预测方法HPNet为了稳定和准确的轨迹预测,文章的方法不仅利用了历史框架,包括地图和智能体状态,还利用了历史预测。在Argoverse和INTERACTION数据集上的实验表明,HPNet达到了最先进的性能,并生成了准确而稳定的未来轨迹。

二、方法

a.简介

  • 文章提出了一种新的动态轨迹预测方法HPNet。它将连续预测之间的动态关系建模为历史预测注意过程。文章在预测过程中不仅仅使用了历史轨迹等信息,建立了连续预测之间的一般关系利用了历史预测,来进行未来轨迹的预测,以提高稳定性和准确性。

b.主要贡献

  • 首先,文章的模型建立了连续预测之间的一般关系,使用历史预测作为参考,以提高稳定性和准确性。

  • 其次,在在线推理中,由于数据集大小或计算资源有限,现有的基于静态注意力的方法限制在固定的可见历史范围内。相反,文章的方法可以在不增加计算开销的情况下实现更大的可见范围(即更长的注意力),这有利于在实际应用中获得更好的精度。

c.框架

1.组成部分
  • 时空上下文编码(Spatio-Temporal Context Encoding)

    • 时空关注(Spatio-Temporal Attention)
  • 三重因子注意(Triple Factorized Attention)

    • 智能体注意(Agent Attention)
    • 历史预测注意(Historical Prediction Attention)🌟🌟🌟
    • 模式注意(Mode Attention)
  • 多模态输出(Multimodal Output)

2.处理流程
  1. 首先,将智能体和车道的时空特征可学习模式查询聚合,生成预测嵌入初步预测未来轨迹
  2. 然后,进行智能体注意历史预测注意模式注意的三因子注意来细化预测嵌入。其中,智能体注意建模智能体之间的交互,模式注意建模不同模式(即不同预测路径)之间的交互,而历史预测注意是文章提出的一个新的模块,用于动态建模当前和历史预测之间的内在相关性
  3. 最后,利用MLP对预测嵌入进行解码,得到预测轨迹,再将预测轨迹馈送到整个管道中,以提高预测精度。
3.具体实现
3.1 时空上下文编码(Spatio-Temporal Context Encoding)

HPNet基于图神经网络(Graph Neural Networks, gnn),采用相对时空位置编码。将智能体和地图的位置无关特征编码节点嵌入,将相对时空位置编码为边缘嵌入

3.1.1 编码智能体特征

智能体特征包括每个智能体每个时间步空间位置运动状态语义属性

每个时间步长每个智能体作为图中的一个节点,并表示其特征

a t n = { p x t , n , p y t , n , θ t , n , v x t , n , v y t , n , c a t , n } a_{t}^{n}=\{p_{x}^{t,n},p_{y}^{t,n},\theta^{t,n},v_{x}^{t,n},v_{y}^{t,n},c_{a}^{t,n}\} atn={pxt,n,pyt,n,θt,n,vxt,n,vyt,n,cat,n}

​ **注:**其中 ( p x t , n , p y t , n ) (p_x^{t,n},p_y^{t,n}) (pxt,n,pyt,n)是位置, θ t , n \theta^{t,n} θt,n是方向, ( v x t , n , v y t , n ) (v_x^{t,n},v_y^{t,n}) (vxt,n,vyt,n)是速度, c a t , n c_a^{t,n} cat,n是属性。

对于每个智能体在每个时间步长,文章将其位置作为局部极坐标系统的原点,将其方向作为正方向。在这个参考系中,速度 ( v x t , n , v y t , n ) (v_x^{t,n},v_y^{t,n}) (vxt,n,vyt,n)表示为 ( v t , n , φ t , n ) (v^{t,n},\varphi^{t,n}) (vt,n,φt,n)其中, v t , n v^{t,n} vt,n是速度的大小, φ t , n \varphi^{t,n} φt,n是速度的方向。采用双层MLP位置无关特征编码为**智能体嵌入 **

E a t , n = M L P ( v t , n , φ t , n , c a t , n ) E_{a}^{t,n}=\mathrm{MLP}(v^{t,n},\varphi^{t,n},c_{a}^{t,n}) Eat,n=MLP(vt,n,φt,n,cat,n)

​ **注:**其中 E a t , n ∈ R D E_a^{t,n}\in\mathbb{R}^D Eat,nRD, D为编码维数。

3.1.2 编码地图特征

地图特征包括每个车道段空间位置长度语义属性

车道段作为图中的节点,每个节点由一组中心线和一些属性组成。中心线中点的位置和方向用来表示每个车道段的位置和方向。车道段的长度 l m l_{m} lm及其属性 c m c_{m} cm作为节点特征,通过双层MLP编码为地图嵌入

E m = M L P ( l m , c m ) E_m = \mathrm{MLP}(l_m,{c_m}) Em=MLP(lm,cm),其中 E m ∈ R M × D E_m \in \mathbb{R}^{M\times D} EmRM×D

3.1.3 编码相对时空位置

节点之间的相对时空位置被用作边缘的特征

图中的所有节点都使用其局部极坐标中的特征进行编码,因此边表示不同局部极坐标之间的转换关系。边缘特征可以表示为

{ d e , ϕ e , ψ e , δ e } \{d_e,\phi_e,\psi_e,\delta_e\} {de,ϕe,ψe,δe}

​ **注:**其中 d e d_e de表示源节点到目标节点的距离, ϕ e \phi_e ϕe表示边缘在目标节点参考系中的方向, ψ e \psi_e ψe表示源节点与目标节点之间的相对方向, δ e \delta_e δe表示它们之间的时间差。

同样,采用双层MLP将这些特征编码边缘嵌入

E e = M L P ( d e , ϕ e , ψ e , δ e ) E_e = \mathrm{MLP}(d_e,\phi_e,\psi_e,\delta_e) Ee=MLP(de,ϕe,ψe,δe),其中 E e ∈ R Y × D E_{e}\in\mathbb{R}^{Y\times D} EeRY×D, Y为边的个数。

3.1.4 时空关注

时空注意包括两个平行的交叉注意模块时间注意聚合智能体的历史嵌入,而空间注意建模智能体-车道交互。文章在每个时间步为每个智能体分配相同的可学习模式查询,记为 { q t , n , k } t ∈ [ 1 − T , 0 ] , n ∈ [ 1 , N ] , k ∈ [ 1 , K ] \{q_{t,n,k}\}_{t\in[1-T,0],n\in[1,N],k\in[1,K]} {qt,n,k}t[1T,0],n[1,N],k[1,K]

每个模式查询,作为图中的一个节点,其时空位置与对应的智能体相同。对于每个模式查询节点,分别在一定的空间半径 R 1 R_1 R1内进行车道节点的空间注意,在指定的时间跨度 I 1 I_1 I1内进行智能体节点的时间注意。边通过与源节点的连接参与这一过程:

q t , n , k S = M H A ( q t , n , k , [ E m , E e ] , [ E m , E e ] ) , ( 3 ) q t , n , k T = M H A ( q t , n , k , [ E a t − I 1 ∼ t , n , E e ] , [ E a t − I 1 ∼ t , n , E e ] ) , (4) q_{t,n,k}^{S}=\mathrm{MHA}(q_{t,n,k},[E_{m},E_{e}], [E_{m},E_{e}]),\quad(3)\\q_{t,n,k}^{T}=\mathrm{MHA}(q_{t,n,k},[E_{a}^{t-I_{1}\sim t,n},E_{e}],[E_{a}^{t-I_{1}\sim t,n},E_{e}]),\text{(4)} qt,n,kS=MHA(qt,n,k,[Em,Ee],[Em,Ee]),(3)qt,n,kT=MHA(qt,n,k,[EatI1t,n,Ee],[EatI1t,n,Ee]),(4)

式中 M H A ( a , b , c ) \mathrm{MHA}(a,b,c) MHA(a,b,c)表示以a为查询,b为键,c为值的多头关注。然后将两个交叉注意模块的结果相加生成预测嵌入:

P t , n , k = q t , n , k T + q t , n , k S . ( 5 ) P_{t,n,k}=q_{t,n,k}^T+q_{t,n,k}^S.\quad(5) Pt,n,k=qt,n,kT+qt,n,kS.(5)

随后,由Eq.(5)生成的预测嵌入通过Triple Factorized Attention传递。

三因子注意包括智能体注意、历史预测注意和模式注意,允许每个预测嵌入直接或间接地与不同智能体、不同时间步长和不同模式的嵌入“对话”。

3.2 三重因子注意(Triple Factorized Attention)
3.2.1 智能体注意(Agent Attention)

在智能体注意模块中,在这些预测嵌入的每个模式和每个时间步上,跨智能体完成自注意:

P t , n , k A = M H A ( P t , n , k , [ P t , n ′ , k , E e ] , [ P t , n ′ , k , E e ] ) , ( 6 ) P_{t,n,k}^A=\mathrm{MHA}(P_{t,n,k},[P_{t,n',k},E_e],[P_{t,n',k},E_e]),\quad(6) Pt,n,kA=MHA(Pt,n,k,[Pt,n,k,Ee],[Pt,n,k,Ee]),(6)

其中, n ′ n^{\prime} n表示在相同模式和时间步长下第n个智能体的一定半径 R 2 R_2 R2内的所有智能体。一方面,智能体注意对智能体在各自时空背景下的相互作用进行建模。另一方面,它也可以被理解为不同智能体的未来轨迹之间的相互作用,从而减少潜在的碰撞。

3.2.2 历史预测注意(Historical Prediction Attention)

在汇总了历史智能体状态、智能体-车道交互和智能体-智能体交互之后,以前的方法通常开始预测未来的轨迹。然而,文章观察到当前和历史预测通常是相关的,而大多数现有方法忽略了这一点。例如,当智能体在一条直线上稳定移动时,连续预测的重叠部分应该几乎相同或变化最小。当智能体穿越繁忙的多车道十字路口时,连续的预测可能会有很大的不同,但仍然具有相同的运动目标,如图4 (b)所示。文章的实验表明,连续预测之间的这种相关性不仅对预测的稳定性至关重要,而且对准确性也至关重要。

因此,为了进一步提高轨迹预测的稳定性和准确性,文章设计了这种新颖的历史预测注意。它将历史预测结合到当前预测中,通过注意机制连续预测之间的动态相关性进行建模。具体来说,每个预测嵌入在时间跨度 I 2 I_{2} I2内对每个智能体和每个模式进行历史预测嵌入的自关注:

P t , n , k H P = M H A ( P t , n , k A , [ P t − I 2 ∼ t , n , k A , E e ] , [ P t − I 2 ∼ t , n , k A , E e ] ) . ( 7 ) P_{t,n,k}^{HP}=\mathrm{MHA}(P_{t,n,k}^{A},[P_{t-I_{2}\sim t,n,k}^{A},E_{e}],[P_{t-I_{2}\sim t,n,k}^{A},E_{e}]).\quad(7) Pt,n,kHP=MHA(Pt,n,kA,[PtI2t,n,kA,Ee],[PtI2t,n,kA,Ee]).(7)

在这里,文章使用预测嵌入而不是最终的历史预测轨迹来建模动态关系,因为后者会将训练过程从并行执行改为串行执行,从而大大增加了训练所需的时间。

除了提高预测的准确性和稳定性外,Eq.(7)中的这种关注还可以吸收当前可见窗口之外更长的历史信息,即扩展了关注范围。具体来说,在没有历史预测注意的情况下, P t H P P_{t}^{HP} PtHP的观测窗口被限制在区间 [ t − I 1 , t ] [t-I_1,t] [tI1,t],因为它只使用了之前的 I 1 I_1 I1帧,被限制在时间跨度 I 1 I_1 I1。而 I 2 = I 1 I_2 = I_1 I2=I1时,历史预测注意的观测窗口是前者的两倍,即 [ t − I 1 − I 1 , t ] [t-I_1-I_1,t] [tI1I1,t]。其中,当前预测使用历史 I 1 I_1 I1预测嵌入,因此观测窗口为 [ t − I 1 , t ] [t-I_1,t] [tI1,t] w.r.t.预测嵌入。然而,在最远时间步长 t − I 1 t-I_1 tI1处的预测嵌入实际上已经吸收了先前 [ t − I 1 − I 1 , t − I 1 ] [t-I_1-I_1,t-I_1] [tI1I1,tI1]帧的注意力信息。因此,历史预测注意的实际观测窗口是两个区间的和,即 [ t − I 1 − I 1 , t ] [t-I_1-I_1,t] [tI1I1,t]。一般情况下, I 2 ! = I 1 I_2 != I_1 I2!=I1,历史预测注意的实际观测窗口为 [ t − I 2 − I 1 , t ] [t-I_2-I_1,t] [tI2I1,t],也比大多数现有方法的观测窗口 [ t − I 1 , t ] [t-I_1,t] [tI1,t]​​​​更长。历史预测注意的关注范围较长,可以在不增加计算成本的情况下,为更好的轨迹预测提供更多有益信息。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
在这里插入图片描述

3.2.3 模式注意(Mode Attention)

在历史预测注意之后,将自注意应用于每个智能体每个时间步不同模式的预测嵌入,建模不同未来轨迹之间的模型相互作用,以增强多模态输出:

P t , n , k M = M H A ( P t , n , k H P , [ P t , n , 1 ∼ K H P , E e ] , [ P t , n , 1 ∼ K H P , E e ] ) . ( 8 ) P_{t,n,k}^M=\mathrm{MHA}(P_{t,n,k}^{HP},[P_{t,n,1\sim K}^{HP},E_e],[P_{t,n,1\sim K}^{HP},E_e]). (8) Pt,n,kM=MHA(Pt,n,kHP,[Pt,n,1KHP,Ee],[Pt,n,1KHP,Ee]).(8)

在Eq.(8)之后,完成三重注意力分解,诱导增强的预测嵌入。三因子注意重复 N a t t n = 2 N_{attn}=2 Nattn=2次,使所有预测嵌入能够充分相互作用,以获得更准确的预测。

3.3 多模态输出(Multimodal Output)

最后,通过两层MLP对所有预测嵌入进行解码,得到多个未来位置:

L t , n , k 1 = MLP ( P t , n , k M ) , ( 9 ) L_{t,n,k}^1=\text{MLP}(P_{t,n,k}^M),\quad(9) Lt,n,k1=MLP(Pt,n,kM),(9)

其中 L t , n , k 1 ∈ R F × 2 L_{t,n,k}^1\in\mathbb{R}^{F\times2} Lt,n,k1RF×2为了进一步增强输出轨迹,将 L t , n , k 1 L_{t,n,k}^1 Lt,n,k1作为整个管道的输入进一步细化预测轨迹。其中, L t , n , k 1 L_{t,n,k}^1 Lt,n,k1作为轨迹建议,由另一个两层MLP编码为模式查询。这些编码模式查询取代可学习模式查询作为时空注意的输入,重新聚合时空上下文并再次执行三因数注意。这个细化过程产生轨迹细化 Δ L t , n , k \Delta L_{t,n,k} ΔLt,n,k概率分数 π ^ t , n , k \hat{\pi}_{t,n,k} π^t,n,k

然后,将轨迹建议和轨迹精化求和,得到最终的预测轨迹:

L t , n , k 2 = L t , n , k 1 + Δ L t , n , k . ( 10 ) L_{t,n,k}^2=L_{t,n,k}^1+\Delta L_{t,n,k}.\quad(10) Lt,n,k2=Lt,n,k1+ΔLt,n,k.(10)

三、实验

数据集:

文章在ArgoverseINTERACTION数据集上进行了实验。两者都基于真实的驾驶场景,提供高清地图详细的运动信息,采样频率为10Hz。在Argoverse数据集上,文章评估了HPNet的边际轨迹预测能力。相反,在以复杂的驾驶场景和详细的多智能体交互而闻名的INTERACTION数据集上,文章检验了HPNet在联合预测中的有效性

指标:

为了进行评估,文章采用了官方的轨迹预测指标,包括最小平均位移误差(minADE)最小最终位移误差(minFDE)脱靶率(MR)Argoverse的最小最终位移误差(b-minFDE)。MinADE测量预测和实际轨迹点之间的平均l2范数距离,而minFDE检查轨迹端点的l2范数距离。

MR评估预测偏离实际端点超过2.0米的实例,衡量模型的可靠性。最后,brier-minFDE通过纳入概率部分(1−π°)2扩展了minFDE,从而深入了解模型对其最佳预测的置信度。对于INTERACTION数据集,文章使用minJointADE和minJointFDE指标来评估关节轨迹预测性能。MinJointADE评估所有智能体的预测和实际轨迹的平均2-范数距离,而minJointFDE侧重于所有智能体在最后时间步的2-范数距离。为了探索模型捕获多模态输出的能力,文章将边际预测和联合预测的K均设置为6。

实现细节:
1.与最先进的轨迹预测方法比较
Argoverse的结果

Argoverse的边际轨迹预测结果如表1所示。在所有单一模型中,文章的HPNet在所有指标上都取得了最好的结果。与排名第二的GANet相比,b-minFDE的改进幅度高达0.052,minFDE的改进幅度为0.062,minADE的改进幅度为0.045。此外,HPNet在模型集成的情况下进行了进一步的比较。可以看到,文章的HPNet在官方排名指标中也表现最好。**与单一模型相比,集成的HPNet仅使minFDE降低0.013。这主要是因为HPNet的预测更加稳定,因此集成的改进比其他方法要小。**总的来说,文章的HPNet达到了最先进的性能,验证了文章HPNet的优越性。

在这里插入图片描述

INTERACTION的结果

表2显示了文章的方法在INTERACTION多智能体轨道上的结果。文章在这个基准测试中取得了最先进的性能,与排名第二的FJMP相比取得了显著的进步,minJointFDE和minJointADE分别提高了0.099和0.020。这表明文章的HPNet可以简单有效地用于关节轨迹预测。

2.消融实验

文章首先对三因子注意进行消融研究,分析智能体注意、历史预测注意和模式注意在文章提出的HPNet中的重要性。然后探讨了历史预测注意力对预测精度和稳定性的影响。

最后,研究了历史预测注意对反应时效性的影响。

三重因子注意的成分研究

如表3所示,包含所有组件的模型的b-minFDE达到了1.506,这是验证集上的最佳结果。如果去除Triple Factorized Attention,则b-minFDE的性能下降0.326,这意味着Triple Factorized Attention模块在整个模型体系结构中的重要性。如果去掉Agent Attention、history Prediction Attention和Mode Attention, b-minFDE的性能分别下降0.205、0.021和0.025。这表明三个注意模块都是有效的,其中Agent与周围Agent之间的Agent attention影响最大,对于预测是不可或缺的。此外,文章提出的历史预测注意力也发挥了重要作用,在四个指标上都有明显的改进,这清楚地说明了考虑连续预测之间关系的必要性。

历史预测注意对准确性和稳定性的影响

文章提出的历史预测注意可以通过考虑当前和历史预测之间的关系来提高轨迹预测的准确性和稳定性。**为了研究这一期望是否实现,文章在两个模型上进行了比较实验:HPNet和没有历史预测注意的基线模型。**预测跨越10个时间步,范围从20到30,每个预测利用20个时间步的可见历史火焰窗口和相同长度的历史预测窗口。通过使用b-minFDE度量来量化预测的准确性。通过对匹配轨迹对的重叠段在当前和之前的时间步长的ADE求和来评估稳定性,其中匹配轨迹对通过匈牙利匹配算法获得。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

如图3 (a)所示,对于所有预测的时间步长,HPNet在b-minFDE方面的性能都优于基线。这种优越的性能表明历史预测注意确实提高了轨迹预测的精度。此外,文章还观察到,文章的HPNet和基线的准确性沿着时间轴下降,这主要是因为在后面的时间步中出现了新的代理,而这些代理在前20帧中不存在即便如此,随着时间的推移,文章的HPNet相对于基线(即橙色虚线)的改进变得越来越大

当时间步长变长时,一个很大的区别是,文章的HPNet的实际可见历史窗口超过了3.3节所分析的20个时间步长,而基线的可见历史窗口始终固定在20个时间步长。因此,随着时间的推移,这种显著的相对改善清楚地验证了历史预测注意的较长注意窗口的好处。

如图3 (b)所示,对于所有预测时间步长,HPNet在连续时间步长之间的ADE之和约为2.25,而基线的ADE之和约为2.90,后者要大得多。这表明历史预测注意确实使预测轨迹更加稳定为了更直观地进行比较,文章在图4中给出了一个例子。如图所示,智能体选择在十字路口左转。然而,基线可能是由于代理在中间时刻暂停,交替预测一个运动目标(即左转)和两个运动目标(即左转和直行)。**相比之下,HPNet一致且可靠地预测了相同的运动目标(即向左转弯)。**与此同时,与DCMS[40]不同,HPNet的连续预测只在复杂道路条件下共享相同的运动目标,没有强制重叠的路点。这些稳定的预测结果使后续模块能够产生稳定且时间一致的安全驾驶决策。更多的定性结果可在补充材料中找到。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

历史预测注意对反应时效性的影响

虽然历史预测注意通过利用历史预测来提高预测的稳定性,但它是否损害了反应及时性?文章的答案是否定的。这主要得益于注意机制。**当发生突变(例如图5中的突然右转)时,当前和历史预测嵌入之间的相似性降低,导致历史预测的权重降低。因此,过去预测对当前时刻的影响会动态地减弱。**图5示出了一个定性示例,其中在三个连续时刻观察十字路口的智能体。当agent没有表现出特定的意图时,HPNet稳定而准确地预测了左转或右转的可能性,优于基线。在突然右转时(在最后时刻),HPNet迅速调整到只预测右转,与基线相比没有延迟。

在这里插入图片描述

四、总结

本文提出了一种新的动态轨迹预测方法——HPNet。设计了历史预测注意模块对连续预测之间的动态关系进行建模它采用历史预测嵌入来指导当前预测,使预测轨迹更加准确和稳定。在Argoverse和INTERACTION数据集上的实验表明,文章提出的HPNet达到了最先进的性能,也证明了历史预测注意可以有效地提高准确性和稳定性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值