HITNet: Hierarchical Iterative Tile Refinement Network for Real-time Stereo Matching

HITNet

论文:https://arxiv.org/pdf/2007.12140.pdf

代码:  google-research/hitnet at master · google-research/google-research · GitHub

https://github.com/ibaiGorordo/HITNET-Stereo-Depth-estimation

注: 本文一个核心概念是tile ,英文原意为 n. 瓦片,瓷砖;空心砖;麻将牌。 可以理解为一个小矩形薄板,厚度可以忽略,表面理想平面的东西。  本文将tile翻译为贴片。

 实时立体匹配的分层迭代贴片细化网络:HITNet

Abstract

        本文提出了一种用于实时立体匹配的新型神经网络结构:HITNet。与最近的许多神经网络方法通过完全的代价立方体并依赖三维卷积相反,我们的方法没有明确地构建(代价)立方体,而是依赖于一种快速多分辨率初始化步骤,可微的二维几何传播和变形机制来推断视差假设。为了达到高精度水平,我们的网络不仅从几何上推理视差,还推断出假设的倾斜平面,允许更准确地执行几何变形和上采样操作。我们的体系结构本质上是多分辨率的,允许在不同级别上传播信息。多个实验证明所提出的方法是有效的,而只需要最先进的方法计算量的一小部分。写作的时候,HITNet在ETH3D网站上双视图立体所有发表指标排名中位列第1~第3,在Middlebury-v3所有端到端学习方法中大多数指标排名第一,在流行KITTI 2012和2015基准中已发表的方法中速度超过100ms的排名第一。

1. Introduction

        近年来对立体匹配深度的研究主要集中在开发精确但计算成本高的深度学习方法上。大型卷积神经网络(CNNs)通常需要使用一秒甚至更多的时间来处理一对图像对,推断出视差图像。对于主动操作端如移动机器人或自动驾驶汽车等,如此高的延迟是无法接受的,需要能够在毫秒内完成图像对处理的方法。尽管如此,在KITTI2012排行榜上发布的前100个方法中,耗时少于100ms的只有4个。

        基于端到端学习的计算型立体(匹配)方法中,一种常见的模式是利用一个CNN,它在很大程度上注意不到立体匹配问题的几何特性。事实上,最初的端到端网络是基于一个通用的U-Net架构[38]。随后的工作指出,包含显式的编码每个像素对应视差代价的匹配代价立方体,结合三维卷积在精度方面提供了显著的改进,但代价是显著增加计算量[24]。后续工作[25]表明,降采样代价立方体可以在速度和准确性之间提供合理的折中。然而,对成本量的降采样是以牺牲准确性为代价的。

        最近的多种立体匹配方法 [52,12,28] 在保持高精度的同时,提高了主动立体视差估计的效率。这些方法主要建立在三种直觉上:首先,利用紧凑/稀疏特征进行快速高分辨率匹配代价计算;其次,非常有效的视差优化方案;第三,利用倾斜平面迭代图像变形,通过最小化图像差异来实现较高的精度。所有这些设计选择都没有明确地使用一个完整的3D代价立方体。通过这样做,这些方法实现了非常快速和准确的主动立体结果,但由于缺乏使用强大的机器学习系统,它们并没有直接推广到被动立体。因此,这提出了一个问题,这些机制是否可以集成到基于神经网络的立体匹配系统中,以实现高效和准确的结果,开启在延迟性关键应用中使用基于被动立体深度感知的可能性。

        我们提出了HITNet,一种基于神经网络的深度估计框架,通过在网络构架中继承图像变形、空间传播和快速高分辨率初始化步骤,克服了在3D立方体上操作的计算型缺点,同时通过允许特性通过网络来流动,来保持学习表示的灵活性。我们的方法的主要思想是将图像 tiles (贴片)表示为平面小块,它包含一个学习紧凑的特征描述符。我们的方法的基本原理是利用空间传播来融合来自高分辨率初始化和当前假设的信息。空间传播通过一个卷积神经网络模块来实现,该模块更新了平面小块及其关联特征的估计。为了使网络迭代地提高视差预测的精度,我们利用网络内图像变形,给网络提供了平面小块周围小范围(±1视差)的局部代价立方体,使网络可以把图像差异最小化。为了重建细节,同时也捕获大的无纹理区域,我们从低分辨率开始,并分层上样本预测到更高的分辨率。我们的体系结构的一个关键特性是,在每个分辨率下,都提供了来自初始化模块的匹配,以方便恢复低分辨率无法表示的薄细结构。图1展示了 我们方法的示例输出,我们的网络是如何恢复非常精确的边界、细节和薄细结构的。

综上所述,我们的主要贡献是:

       \bullet  一种快速的多分辨率初始化步骤,使用学习到的特征计算高分辨率匹配。

       \bullet  一种利用具有学习描述符的倾斜支持窗口的有效2D视差传播。

       \bullet  与流行基准最先进的方法相比,只使用很少一部分计算量。

2. Related Work

        立体匹配是几十年来一直是一个活跃的研究领域[37,44,19]。传统的方法利用人工设计的体系寻找局部对应[57,22,4,21],和空间信息的全局优化[14,26,27]。这些方法的运行时效率大多与视差空间的大小相关,从而不利于实时的应用。有效的算法[31,35,5,3] 使用patchmatch [1]和超像素[31] 避免了搜索全部视差空间。一系列基于机器学习的方法,使用随机森林和决策树,能够快速建立对应关系[10,11,12,13]。然而,这些方法要么需要相机特定的学习或后处理。最近,深度学习为立体匹配带来了巨大的改进。早期的工作训练 Siamese Network(孪生网络) 提取逐patch-wise特征或预测匹配代价[36,60,58,59]。端到端网络已被提出联合学习所有步骤,得到更准确的结果[47,38,41,48]。

        现代体系结构中的一个关键组件是 cost volume(代价立方体)层[24](或相关层[23]),允许网络运行每像素的特征匹配。为了加快计算速度,提出了级联模型[40,7,33,16,54,61]来在视差空间中进行从粗到细的搜索。特别是,[40]使用多个残差块来改进当前的视差估计。最近的工作[54]依赖于一个分层的代价立方体,使方法可以在高分辨率图像上进行训练,并根据需要对不同分辨率生成。所有这些方法都依赖于使用3D卷积[54]或多个细化层[40]这些耗时的代价-立方体滤波操作,这妨碍了实时性能。快速方法[25,62]对空间和视差空间的代价立方体进行下采样,并试图通过边缘感知的上采样层来恢复细节。这些方法展示出实时性能,但牺牲了精度,特别是对于薄结构和边缘,因为它们缺少在低分辨率的初始化。

        我们的方法的灵感来自于目的是传播良好的稀疏匹配 [12,13,52] 的经典的立体匹配方法。特别是,Tankovich等人,[52]提出了一种分层算法,利用倾斜支持窗口摊销贴片内的匹配代价计算。受这项工作的启发,我们提出了一种端到端学习方法,克服了手工制作算法的问题,同时保持计算效率。

        PWC-Net[50],虽然是为光流估计而设计的,但与我们的方法有关。该方法采用低分辨率代价立方体,通过图像扭曲和局部匹配代价计算进行多个细化阶段。因此,遵循经典的金字塔匹配方法,低分辨率的结果通过用使用前一级别的结果始化当前级别来进行分层地上采样和细化。相比之下,我们提出了一种快速、多尺度、高分辨率的初始化方法,它能够恢复那些不能在低分辨率下表示的细节。最后,我们的细化步骤产生局部倾斜平面近似,用于预测最终的视差值,而不是[50]中使用的标准双线性变换和插值。

3. Method

        HITNet的设计,遵循传统立体匹配方法[44].的原则。特别是,我们看到近来有效的方法依赖于以下三个步骤:1)紧凑特征表示的提取[12, 13];2)一个利用这些特征检索可行假设的高分辨率视差初始化步骤;3)一个使用倾斜支持窗口改进估计的有效传播步骤。基于这些观察结果,我们将视差图表示为不同分辨率的平面贴片,并在每个贴片假设上附加一个可学习的特征向量。这允许我们的网络学习与结果进一步改进相关的、关于视差图的一小部分那些信息。这可以解释为已被证明是有益的可学习3D代价体积方法的高效和稀疏的版本。

        总体方法如图2所示。我们的特征提取模块依赖于一个非常小的U-Net[42],这里解码器的多分辨率特征被其它环节使用。这些特征编码了图像的多尺度细节,类似于[7] (3.2节).。一旦特征被提取出来,我们将视差图初始化为多分辨率的正面平行贴图。为此,匹配器对多个假设进行评估,并选择左右视图特征之间L_{1}距离最小的一个假设。此外,使用一个小的网络计算每个紧凑的贴片描述符 (3.3节。然后,将初始化的输出传递到一个传播阶段,其作用类似于[12,52]中使用的近似条件随机场解。这个阶段以一种迭代方式分层地改进了贴片假设 (3.4节).

 图2:提出框架的概述。(上)U-Net用于从左右图像中提取多尺度特征。初始化步骤在提取的特征的每个尺度上运行。这一步操作于4个×4特征区域的贴片,并评估多个视差假设。选择了最小代价的差异。(底部)在传播阶段使用初始化的输出,使用倾斜的支持窗口来细化预测的差异假设。

3.1. Tile Hypothesis 贴片假设

        我们将贴片假设定义为一个具有可学习特征的平面块。具体地说,它由描述一个倾斜平面的几何部分组成,包括视差 d 和视差在 x 和 y 方向上梯度 (d_{x},d_{y}) ,以及一个我们称之为特征描述符的可学习部分p组成。因此,该假设描述成一个编码了 3D 倾斜平面的向量。

         贴片特征描述符是贴片的一种学习描述,它允许网络向贴片附加额外信息。例如,可能是匹配的质量或如几何图形实际上的平面程度的局部表面性质。我们不限制这些信息,而是从数据中端到端地学习它。

3.2. Feature Extractor

        特征提取器提供了一组多尺度的特征图\varepsilon = \left \{ {e_{0},...e_{M}} \right \},用于初始化匹配和传播阶段的变形。我们将分辨率 l\in 0,...,M 的特征图表示为e_{l},将 x,y 位置的嵌入向量表示为e_{l,x,y}。0为原始图像分辨率,M表示2^{M} \times 2^{M}的降采样分辨率。单个嵌入向量 e_{l,x,y} 包括多个特征通道。我们特征提取器 \varepsilon =f(I;\Theta _{f}) 的实现使用一个类似于 U-Net 的架构[42, 34],,即一种有跳过连接、具有可学习参数 \Theta _{f} 的编解码器。该网络由跨步卷积和反卷积组成,并用leaky ReLUs作为非线性。我们在网络的其余部分使用的特征图集 \varepsilon 是U-Net在所有分辨率下的上采样部分的输出。这意味着,即使是高分辨率的特征,也确实包含了一定数量的空间信息。更详细地说,U-Net 的一个下采样块有一个3×3卷积,然后是一个步长2的2×2卷积。一个上采样块用步长2的2×2的反卷积得到更粗糙U-Net分辨率的上采样结果。特征通过跳跃连接连接起来,用1×1卷积随后3×3卷积来合并当前分辨率下跳接的特征和上采样的特征。每个上采样块生成一个特征图e_{l},然后将其用于下游任务,也在 U-Net 中进一步上采样以生成更高分辨率的特征图。我们在左右图像上运行特征提取器,得到了两个多尺度表示\varepsilon ^{L}\varepsilon ^{R}

3.3. Initialization 

        初始化的目标是在不同的分辨率下为每个贴片提取一个初始视差 d^{init} 和一个特征向量 p^{init}。贴片假设的初始化输出形式为正面平行。 h^{init}=[d^{init},0,0,p^{init}] 。

Tile Disparity. 为了保持高水平的初始视差分辨率,我们在右边(次要)图像中沿着x方向,即宽度,使用重叠的贴片,但我们仍然在左侧(参考)图像中使用不重叠的贴片来进行有效匹配。为了提取贴片特征,我们在每个提取到特征图 e^{l} 上运行4×4卷积。为了方便上述提到的重叠贴片, 左侧(参考)图像和右侧(次要)图像采取不同的步长,对于左侧图像,我们使用4×4步长,而对于右侧图像,我们使用4×1步长,这对于保持全视差分辨率以最大化精度是至关重要的。这个卷积之后是一个leaky ReLU和一个MLP(多层感知机)。

        这一步的输出将是一组新的包含每个贴片特征 \tilde{e}_{l,x,y} 的特性图集 \tilde{\varepsilon }=\left \{ \tilde{e}_{0},..., \tilde{e}_{M}\right \} 。注意这里 \tilde{\varepsilon }^L 和 \tilde{\varepsilon }^R 的特征图的宽度已经不同了。每个贴片特征沿着扫描行显式匹配。我们将位置(x,y),分辨率 l, 视差 d 处的匹配代价\varrho 定义为:        

        然后初始差异计算通过式:

        对每个位置(x、y) ,分辨率 l ,其中D是所考虑的最大视差。注意,尽管初始化阶段具体地计算了所有视差的4个匹配,但并不需要存储整个代价立方体。在测试时,只需要提取最佳匹配的位置,这可以非常有效地利用快速内存来完成,例如。gpu上的共享内存以及一个Op中的融合实现。因此,没有必要存储、处理一个3D的代价立方体。

Tile Feature Descriptor. 初始化阶段还为每个位置(x、y),分辨率 l 预测了的特征描述 p_{l,x,y}^{init} :

         这些特征基于参考图像的嵌入向量 \tilde{e}_{l,x,y}^L 和最佳匹配视差 d_{init} 的代价 \varrho 。我们利用一个感知器D,它具有可学习的权值\theta _{D},并通过一个1×1的卷积和一个leaky ReLU来实现的。对贴片的特征描述符的输入包含匹配代价 \varrho (.),这使得网络获得匹配置信度的感知。

3.4. Propagation

        传播步骤以贴片假设作为输入,基于信息空间传播和信息融合,输出细化后的贴片假设。从特征提取阶段右侧图像(次要)到左侧图像(参考),都在内部使特征变形, 以达成对输入贴片偏移的高精度预测。另外预测了一个置信度,以允许来自前面传播层和初始化阶段假设间有效融合。

 Warping: 变形阶段计算 贴片对应的特征分辨率 l 下 特征图 e_{l}^{L} 和 e_{l}^{R} 之间的匹配成本。此步骤用来围绕当前的假设构建一个局部代价立方体。最初覆盖了特征图每个贴片假设被转换成一个大小为4×4的平面小块。我们将对应的4×4局部视差图 d{}' 表示为

         对于小块坐标 i,j∈{0,···,3}。然后,通过沿着扫描行使用线性插值,使用局部视差将右侧(次要)图像的特征 e_{l}^{R} 变换到左侧(参考)图像。这导致了一个变形的特征表示 e_{l}^{R{}'} ,如果局部视差图 {d}' 是准确,它应该与左(参考)图像 e^{L}的对应特征非常相似。比较 此处(x,y) 贴片与变形的另外贴片的特征,我们将代价向量 \phi (e_{l},d{}') \in \mathbb{R}^{16} 定义为:

        这里  

 (1阶范数  非零元素绝对值之和)

Tile Update Prediction。这一步以n个贴片假设作为输入,然后给每个贴片假设预测 deltas 加上一个标量值w,指示贴片是正确的可能性有多大,即一个置信度度量。该机制通过一个CNN模块U实现,卷积结构允许网络在一个空间邻域中看到贴片假设,因此能够在空间上传播信息。这一步的一个关键部分是,我们用变形步骤的匹配代价φ来扩大贴片假设。 通过对视差空间中的一个小邻域这样做,我们建立了一个局部代价立方体,它使网络能有效地细化贴片假设。具体地说,我们用正方向和负方向上的一个视差的恒定偏移量 一个视差1 来替换贴片中的所有视差,并计算出代价三次。这样假设a为输入贴图映射 h 的增强贴片假设映射:

         对于一个位置(x,y),分辨率 l ,CNN模块 U_{l} 给n个贴片假设中每一个都预测更新,和代表贴片假设的置信度w^i\in\mathbb{R}: 

         U的体系结构是用残余块[20]实现的,但并没有batch normalization。效仿[25]我们使用dilated convolutions(空洞卷积)来增加感受野。在运行一系列具有不同膨胀因子的残差块之前,我们运行一个1×1的卷积随后一个 leaky ReLU 以减少特征通道的数量。更新模块使用分层迭代的方式(见图2)。从初始化阶段开始,在最低分辨率的 l=M下,我们每个位置只有1个贴片假设。此时n = 1。通过将输入的贴片假设与增量相加,以及贴片每个方向上2倍的上采样,我们来更新贴片。因此,使用贴片的平面方程对视差d进行上采样,对贴片假设dx、dy和p的其余部分使用最近邻抽样进行上采样。下一个分辨率M−1时,现在我们有两个假设:一个初始化阶段的假设和从较低分辨率的上采样的假设,因此 n=2。我们利用 w^i 对每个位置选择具有高置信度的来更新贴片假设。我们迭代这个过程,直到达到分辨率0,在我们所有的实验中,这时对应的是贴片大小4×4和全视差分辨率。为了进一步细化视差图,我们使用了4×4贴片的优胜假设,并应用了传播模块3次:4×4,2×2,1×1分辨率,使用n=1。贴片大小为1×1的输出是我们的最终预测。关于网络体系结构的更多细节在补充材料中提供。

4. Loss Functions

        我们使用真实标注的视差 d^{gt} ,和本节其余部分描述的损失,将网络训练为端到端的。最终的损失是所有尺度和像素上的损失之和:

 4.1. Initialization Loss 

        真实标注视差为亚像素精度,但初始化匹配为整数视差。因此,我们利用线性插值法计算亚像素视差的匹配代价。亚像素视差的代价为:       

         为了清晰起见,我们去掉了 l,x,y,的下标。为了在多个分辨率下计算它们,我们使用 maxpool 将真实标注视差图降采样到所需的分辨率。我们的目标是训练特征 \varepsilon ,使匹配代价 \psi 在真实标注视差处最小,在其它地方大。为了实现这一点,我们施加了一个 L_{1} 对比损失[18]

        其中β>0是一个边界,d^{gt} 为特定位置的真实标注视差,而

         对于同一位置匹配不上的最低代价视差。这个代价将真实标注代价推向0,并将最低代价推向一定的边际。在我们所有的实验中,我们将边距设置为β=1。在早期基于深度学习的立体匹配[60,36]方法中,类似的对比损失已被用于学习匹配分数。但是,它们要么使用一个随机的非匹配位置作为负样本,要么分别使用所有的非匹配位置作为负样本。

4.2. Propagation Loss

         在传播过程中,我们对贴片几何形状 d,d_{x},d_y 和贴片置信度 w施加损失。我们使用真实标注视差 d^{gt} 和真实标注视差梯度 d_{x}^{gt} 和 d_{y}^{gt} ,视差梯度我们通过在以像素为中心的9×9窗口中稳健地拟合一个平面到 d^{gt} 来计算它。为了将损失应用于贴片的几何图形上,我们首先使用平面方程 (d,d_{x},d_y),将贴片扩展到一个全分辨率视差  \hat{d} ,类似于式5。在倾斜损失使用之前,倾斜部分也使用最近邻方法上采样到全分辨率。我们使用了[2]中的一般鲁棒损失函数 ρ(·),它类似于平滑的 L1损失,即 Huber 损失。此外,我们使用阈值 A 对损失做了一个截断。        

         其中 d^{diff}=d_x^{gt}-\hat{d}

        进一步,我们对表面倾斜施加损失:

        其中,χ是一个指示器函数,当满足条件时,其求值为1,否则为0。为了监督置信度w,我们施加一个损失,如果预测假设比自真实标注值处的阈值C1更近,则增加信心,如果预测假设超过一个远离真实标注的阈值C2,则降低置信度。

         对于我们所有的实验,A=B=C_1=1C_2=1.5。在最后几个级别中,当只有一个假设可用时,损失将应用于所有像素(a=∞)。

5. Experiments

        我们在流行的基准上评估提出的方法,显示与其它方法相比,在计算时间的一小部分时间内有竞争力的结果。我们考虑以下数据集:SceneFlow[38],KITTI2012[15],KITTI2015[39],ETH3D[45],Middlebury数据集V3[43]。根据标准的评估设置,我们考虑了以下两个流行的指标:端点错误(EPE),即预测输出与真实之间视差空间的绝对距离;x-像素误差,即视差误差大于x的像素的百分比。对于场景流上的EPE计算,我们采用了与PSMNet[7]相同的方法,将评估中排除了所有真实标注视差大于192的像素。除非另有说明,我们使用具有5个级别的HITNet,即M=4。

        在本节中,我们将重点讨论与流行基准上的最新技术的比较,详细的消融研究、运行时分解、跨领域泛化和附加评估,将在补充材料中提供。用于提交给基准测试和评估脚本的训练模型可以在https://github.com/google-research/googleresearch/tree/master/hitnet上找到。

 5.1.Comparisons with State-of-the-art 

SceneFlow.     在合成数据集SceneFlow “final pass” 上,我们实现了显著的0.36的终点误差(EPE),在写作时比最先进的好2倍(L和XL版本的详细信息见补充材料)。有代表性的竞争算法在表1中报告。PSMNet算法[7]执行多尺度的特征提取,类似于我们的方法,但相比之下,它们使用了一个更复杂的池化层。在这里我们展示了我们的架构更有效

        与GA-Net[61]相比,我们不需要复杂的消息传递步骤,如SGM。我们得到的结果表明,我们的策略也实现了一个非常相似的推理。最后,考虑了一种具有代表性的快速方法,StereoNet[25],我们始终优于它。结果表明,我们的方法在保持实时性能的同时,达到了最低的EPE。定性结果见图3。

 图3:SceneFlow和KITTI2012的定性结果。注意该模型如何能够恢复细节,无纹理区域和清晰的边缘。

Middlebury Stereo Dataset v3. 我们在Middlebury立体数据集v3上用多种最先进的方法评估了我们的方法,详见表4和官方基准测试网站。我们可以观察到,我们在大多数指标上优于所有其它基于端到端学习的方法,当考虑手工制作的方法时,我们排名前10名,特别是我们在坏0.5和A50中排名第一,在坏1和avgerr中排名第二。此外,我们注意到我们的平均误差受到特定图像DjembL的影响,这是因为我们没有明确处理输入对之间苛刻的恶劣光照变化。关于Middlebury数据集的视觉结果和关于训练过程的细节,我们请读者参考补充材料。

 ETH3D two view stereo. 我们在ETH3D数据集上使用多种最先进的方法来评估我们的方法,参见表2。在提交到基准测试时,HITNet在网站上发布的所有指标中排名第一到第四。特别是,我们的方法在以下指标上排名第一:坏0.5,坏4,平均误差,均方根误差,50%分位数,90%分位数:这表明HITNet对所选择的特定测量具有弹性,而竞争方法在选择不同的指标时表现出显著的差异。详情请参见提交网站。3

 KITTI 2012 and 2015. 在撰写本文时,在发布的超过100ms的方法中,HITNet在KITTI2012和2015年的基准测试中排名第一。与其它最先进的立体匹配器相比(见表3)。我们的方法优于GC-Net[24]、[40]和许多其它方法。最近的方法,如GA-Net[61]和HSM[54],都获得了稍微更好的指标,尽管它们分别需要1.8秒和0.15秒。还要注意的是,HSM[54]已经接受了额外的外部高分辨率数据的训练。类似地,GA-Net[61]在SceneFlow上进行预先训练,并在KITTI基准上进行微调,而我们的方法是在KITTI上可用的小数据上完全训练的。与StereoNet[25]和RTSNet[29]等快速方法相比,我们的方法始终大大优于它们,这表明它可以在延迟关键场景中使用,而不牺牲准确性。

6. Conclusion

        针对准确的立体匹配,我们提出了HITNet,一个实时的端到端架构。我们提出了一个快速的初始化步骤,它能够非常有效地用学习到的特征计算高分辨率的匹配。然后使用传播和融合步骤将这些贴片初始化进行融合。使用带学习描述符的支撑倾斜窗提供了额外的准确性。我们在多个常用的基准测试上展示了最先进的准确性。我们的算法的一个限制是,它需要在一个具有真实标注深度的数据集上进行训练。为了在未来解决这个问题,我们计划研究自监督方法和自蒸馏方法,以进一步提高准确性和减少所需的训练数据量。我们的实验的一个局限性是,不同的数据集是单独训练的,并使用略微不同的模型架构。为了在未来解决这个问题,需要一个符合稳健视觉挑战要求的单一实验。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蜡笔小心点

你的鼓励是我创造的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值