DeepSaliency论文翻译学习-Deep Multi-Task Deep Neural Network Model for Salient Object Detection

作者论文地址
项目地址
数据集
模型

1. abstract

显著性目标检测的一个关键问题就是如何使用数据驱动的方式对显著目标的语义属性进行有效的建模。本文提出了一个基于全局输入输出的全卷积网络的多任务深度显著性模型。原则上,本文提出的模型使用数据驱动的策略对潜在的显著性鲜艳信息进行编码。同时为了发现显著性检测和语义分析之间的内在联系,提出了一个多任务的学习策略。通过对这两个相关任务的协同特征学习,共享的全卷积层产生了有效的对象感知特征。此外,它能够使用全卷积层捕获不同层次上的显著对象的语义信息,从而在极大减少特征冗余度的情况下研究显著对象检测的特征共享特性。最后我们为了显著性细化提出了一个图拉普拉斯的正则化非线性回归模型。

2. introduction

作为计算机视觉中一个重要而具有挑战性的问题,显著目标检测[1]–[8]旨在自动发现和定位与人类感知一致的视觉感兴趣区域。它具有广泛的应用,如目标跟踪和识别,图像压缩,图像和视频检索,图像拼接,视频事件检测等。显著对象检测的关键是设计各种计算模型以得到有用于图像分割的显著性信息。

从人类感知的角度来看,图像的语义属性通常由同一场景中的对象及其上下文来表征。原则上,每个对象可以在三个不同的层次上表示(即,低级别、中级和高级)。低级视觉特征〔9〕,〔10〕涉及原始图像特征,如颜色、边缘和纹理。中级特征〔11〕、〔12〕通常对应于轮廓、形状和空间上下文的对象信息。相比之下,高级信息与对象识别、分割以及对象与背景之间的内在语义相互作用相关联[13 ] -〔16〕。从本质上讲,实现显著目标检测任务是需要这三个层次同时进行。因此,如何在一个统一的学习框架中高效地对上述因素进行建模,是显著目标检测中亟待解决的关键问题。大多数现有方法使用各种先验知识来检测显著对象,例如背景先验[17]–[19]、中心先验[20]和对比先验[21]。然而,必须仔细地调整这些模型,以适应具有多种对象及其上下文交互的不同类型的图像数据,因而这些因素使它们不太广泛适用于实践中的问题。例如,当显著对象经常出现在图像边界处(远离图像中心),中心先验信息便不太有用。此外,由于显著对象的部分可能与一些背景区域相似,因此仅基于对比度信息很难检测它们。

基于这些观察,我们构造了一个自适应模型,在纯数据驱动的框架中,有效地捕获了显著对象的内在语义特性及其与背景的本质差异。同时,模型能够对不同级别(从低级到高级)的显著性信息进行编码,如图1所示。为了解决这些问题,许多深度学习方法[22]–[25]已经成为数据驱动的多尺度图像理解的强大工具。因此,如何设计一种有效的显著性检测的深度学习模型是本文研究的重点。图1
本文提出了一种基于全卷积神经网络(FCNN)的全局输入(全原始图像)和全局输出(全显著图)的多任务深度显著性模型。原则上,深度显著性模型采用数据驱动的学习流水线来获取潜在的显著性先验知识,然后建立多任务学习方案来探索显著性检测任务和语义图像分割任务之间的内在关联,在FCNN的学习过程中共享完全卷积层。通过对这两个相关任务的协同特征学习,提取出区分特征,对目标感知信息进行有效编码。此外,深度显著性模型还具有使用模糊神经网络(FCNN)捕获不同层次上显著对象的语义信息的能力,从而探索了显著对象的特征共享特性。此外,我们进一步改进了图拉普拉斯正则化非线性回归方案用于显著性细化,以产生精细化的边界保持显著性映射。
本文的主要贡献如下:

  1. 本文提出了一种基于多任务FCNN的方法,以完全数据驱动的方式对显著对象的内在语义属性进行建模。该方法对两个相关任务(显著性检测和语义图像分割)进行协同特征学习,通常能够提高目标感知中显著性检测的性能。此外,利用全卷积层有效地提高了显著目标检测的特征共享能力,显著降低了特征冗余度。
  2. 基于图拉普拉斯正则化非线性回归,提出了一种细粒度超像素驱动显著性细化模型。该模型采用闭式解,能够精确地保留目标边界信息进行显著性检测。

2. related work

  1. 显著性检测方法
    显著性模型是针对视觉注意力建模(9)、[26 ] -(28)和显著目标检测[17 ]、[29 ]、[30 ]建立的。前一个任务旨在预测人类在一幅图像中比较关注的位置,同时所提出的方法是为了计算用于捕获显著目标区域的像素级显著性值。关于显著性模型的更详细的研究可以在〔31〕中找到。
    该领域的早期方法通常将显著目标检测描述为以中心环境或对象-背景方式进行图像对比度分析的问题。这些方法通过计算局部中心环绕差异[9 ]、[21 ]、[32 ]或评估场景中的区域唯一性和稀有性[33 ] -[35 ]来检测显著对象。此外,许多方法在显著性检测过程中启发式地使用一些预定义的先验,例如图像中心先验、大尺寸封闭区域[20]和语义对象先验[13]。此外,这些方法[12]、[17]–[19]试图利用背景先验信息来在空间结构图中执行标签传播过程。相比较人工预先假设这些先验,本文以完全数据驱动的方式自动学习先验知识。
  2. 深度显著性网络
    目前,深度神经网络已被应用于检测显著目标[14 ],[30 ],[36 ]。这些数据驱动的显著性模型,包括[37],旨在从具有逐像素显著性标注的训练数据集中使用监督学习来直接捕获显著对象的语义属性。通过独立地为所有局部图像块建模(作为分类或回归的训练样本处理),这些方法通常不能有效地捕获显著对象的特征共享特性,导致高特征冗余以及昂贵的计算成本。此外,它们主要集中于学习显著性预测函数来建模对象之间的相对信息,而不管它们是什么,因此缺乏有效建模显著性检测的对象感知特性(即客观性)的能力。在实践中,这样的对象感知特性对于发现显著对象是非常有用的。
  3. 多任务神经网络
    为联合任务设计深层体系是流行和有效的,它已经被用于以下几个视觉任务[38 ] - [ 41 ]。在[38 ]中的网络分别训练用于深度预测、表面法向估计和语义标记任务。这三个网络的结构是相似的,但所学的参数是完全不同的。[39 ] -(41)中的所有方法都解决了一个共同的问题两个客观术语,例如用分段和得分生成对象分割建议[39 ]。相反,我们使用两个网络通过共享特征来执行分割和显著性检测任务,从而形成树结构的网络体系结构。据我们所知,将语义分割任务引入到深度网络中来学习更好的显著性模型是一种新颖的方法。

3.proposed approach

A. Overview

该方法主要由两个部分组成:1)多任务全卷积神经网络(FCNN),2)用于显著性细化的非线性回归。对于1),我们实现学习FCNN显著性模型的任务与逐像素对象类分割的任务。这两个任务共享一组用于在多个层次上提取给定图像的特征的完全卷积层,同时具有不同的反卷积层,这些反卷积层针对不同的应用而定制,包括显著性检测和对象类分割。这样的多任务学习方案使得显著性检测具有更好的对象感知能力。对于2),基于FCNN的输出显著性结果,利用图拉普拉斯正则化非线性回归进一步细化显著性映射,从而生成细粒度的边界保持显著性结果。
给定图像,我们首先使用FCNN计算粗粒度显著图作为前景信息。同时,将图像的边界超像素作为背景种子样本[12]、[17]–[19],然后通过基于非线性回归的传播来计算另一粗粒度显著图。然后,基于图拉普拉斯正则化非线性回归,对粗粒度前景和背景显著性图进行组合并最终进行细化。图2显示了所提出的显著目标检测方法的主要步骤。我们将在下面的小节中详细描述多任务FCNN、拉普拉斯正则化回归和推理过程。
在这里插入图片描述

B. Multi-Task FCNN
  1. 网络结构:如图3所示,我们的FCNN方案结合对象类分割任务执行显著性检测任务。更具体地,我们的FCNN在对象分割和显著性检测任务之间的卷积层被共享。共享卷积部分旨在在不同的语义层次上提取输入图像的特征集合。该部分通过跨越15个卷积层的一系列卷积操作来处理输入RGB图像,每个卷积层都后接ReLU[42]。此外,一些层使用max pooling操作,如图3所示。在实践中,前13层是从VGG网络[23]初始化的(在mageNet数据集[43]上预先训练),使得我们共享的卷积部分对语义对象分类的区分能力。为了进一步对整个图像的空间相关性进行建模,我们只使用完全卷积学习架构(没有任何全连接层)。这是因为完全卷积运算具有在整个图像上共享卷积特征的能力,从而减少了特征冗余。因此,全卷积学习结构具有全局输入和全局输出的简单高效。

  2. 目标分割任务:在分割任务中,将从共享卷积部分提取的特征输入到语义分割任务中,寻找图像的内在目标语义信息。首先采用一个1×1大小的卷积层计算分割得分图。为了使输出映射具有与输入图像相同的大小,我们需要一个反卷积层,它也用于FCN网[25]。在训练期间更新反褶积层中的参数以学习上采样函数。然后将上采样输出裁剪到输入图像的相同大小。因此,网络以整个图像为输入,产生具有相同大小的对应像素密集预测结果,从而保持图像的全局信息。分割任务最终输出C类对象(包括背景)的C概率图,并且可以针对地面真值分割图使用像素级的软最大损失进行训练。

  3. 显著性检测任务:在显著性任务中,我们的网络旨在从图像中找到感兴趣的对象。具体地,我们使用一个卷积层和一个反卷积层来生成显著性映射(通过sigmoid函数归一化为[0,1])。最后,显著性网络得到一个用于显著性回归的平方欧几里德损失层,它从数据中学习显著性属性。
    在这里插入图片描述

  4. 多任务学习:将显著性检测任务和分割任务结合起来进行FCNN学习。 χ = { X i } i = 1 N 1 \chi =\left \{ X_{i} \right \}_{i=1}^{N_{1}} χ={Xi}i=1N1表示训练图像的集合(图像宽高分别为P和Q), { Y i j k ∣ Y i j k ∈ { 1 , 2 , . . . C } } N 1 × P × Q \left \{ Y_{ijk}|Y_{ijk}\in \left \{ 1,2,...C \right \} \right \}_{N_{1}\times P\times Q} {YijkYijk{1,2,...C}}N1×P×Q表示它们对应的逐像素地面实况分割图;同时 Z = { Z i } i = 1 N 2 \mathbb{Z}=\left \{ Z_{i} \right \}_{i=1}^{N_{2}} Z={Zi}i=1N2 表示一组训练图像,具有对应的显著性物体的ground truth二值图 { M i } i = 1 N 2 \left \{ M_{i} \right \}_{i=1}^{N_{2}} {Mi}i=1N2。此外,我们将共享卷积部分中的所有参数表示为 θ s \theta _{s} θs;分割任务中的参数表示为 θ h \theta _{h} θh;在显著性任务中作为 θ f \theta _{f} θf。我们的FCNN通过最小化以下损失函数来训练:在这里插入图片描述
    其中1是指示函数,h是返回C概率分割图的语义分割函数, h c j k h_{cjk} hcjk是第c概率分割图的(j,k)元素,f是显著图输出函数。显然,第一种与用于分割任务的交叉熵损失项相关联,而第二种代价函数对应于显著性任务的平方欧氏损失项。
    随后,我们利用随机梯度下降法(SGD)对网络进行训练,将所有训练样本的正则化成本函数降到最小。在实践中,我们以交替的方式执行分割任务和显著任务。即,首先学习分割任务的参数 θ s \theta _{s} θs θ h \theta _{h} θh,然后学习参数 θ f \theta _{f} θf,并更新显著性任务的参数 θ s \theta _{s} θs。当训练进行时,重复上述过程。
    我们提出了一些直观的例子证明我们的网络能够捕捉底层显著性特性。如图4所示,图4(a)中的红色花的显著性值高于黄色花,这与人类的感知一致(更加注意具有红色亮色的物体[13],[44])。给定仅具有背景的图像(例如,图4(b)所示的草坪),人们通常将他们的眼睛放在图像的中心[33]。如图4©所示,我们的网络能够检测与环境具有高对比度的对象 [21] (即突出的橙子的横切面在形状和纹理上与周围不同)。在语义分割学习任务的帮助下,我们的网络能够检测场景中的语义对象,如图4(d)所示。
    在这里插入图片描述

C. Regularized Regression for Refinement

如图4所示,从全卷积神经网络生成的显著性图通常具有模糊对象边界。为了更好地保持显著性映射的对象边界,我们使用内部齐次和保持边界的超像素(使用SLIC[45]通过过度分割获得的)作为基本表示单元,然后构造超像素级邻接图来对拓扑进行建模。超像素在空间和特征维度上的几何关系。具体的操作是,首先将给定的图像分割成一组超像素 { x i } i = 1 N \left \{ x_{i} \right \}_{i=1}^{N} {xi}i=1N,每一个都由LAB颜色矢量表示(通过在超像素内平均像素颜色特征而获得)。因此,具有关联矩阵 W = ( ω i j ) N × N W=\left ( \omega _{ij} \right )_{N\times N} W=(ωij)N×N的超像素级图构造如下:

ω i j = { K ( x i , x j )   i f   x i   a n d   x j   a r e   s p a t i a l l y   a d j a c e n t 0   o t h e r w i s e \omega _{ij}=\left\{\begin{matrix} K\left ( x_{i},x_{j} \right )\ if\ x_{i}\ and\ x_{j}\ are\ spatially\ adjacent\\ 0\ otherwise \end{matrix}\right. ωij={K(xi,xj) if xi and xj are spatially adjacent0 otherwise
这里 K ( x i , x j ) K\left ( x_{i},x_{j} \right ) K(xi,xj)表示评价特征相似性的RBF(径向基函数) kernel,

K ( x i , x j ) = e x p ( − 1 ρ ∥ x i − x j ∥ 2 2 ) K\left ( x_{i},x_{j} \right )=exp\left ( -\frac{1}{\rho }\left \| x_{i}-x_{j} \right \|\tfrac{2}{2} \right ) K(xi,xj)=exp(ρ1xixj22)

.令 y = ( y 1 , . . . y N ) T y=\left ( y_{1},...y_{N} \right )^{T} y=(y1,...yN)T表示对应于超像素的预先指定的显著性评分向量(范围从[-1,1])。在基于图的半监督回归中,一些超像素被看作具有预先指定的显著性分数(例如边界超像素)的种子样本,并且剩余的超像素的显著性状态被暂时地不确定(初始化为0),直到它们被pr达到为止。在不损失一般性的情况下,我们假设前L个超像素具有初始显著性信息,而后u个超像素为空(这样N=L+u)。因此,我们的任务是在以下优化框架内学习用于给定超像素x( g ( x ) = ∑ j = 1 N a j K ( x , x j ) g\left ( x \right )=\sum _{j=1}^{N}a_{j}K\left ( x,x_{j} \right ) g(x)=j=1NajK(x,xj))上的显著性预测的非线性回归函数:

m i n g 1 l ∑ i = 1 l ( y i − g ( x i ) ) 2 + γ A ∥ g ∥ K 2 + γ I ( l + u ) 2 g T L g min_{g}\frac{1}{l}\sum _{i=1}^{l}\left ( y_{i}-g\left ( x_{i} \right ) \right )^{2}+\gamma _{A}\left \| g \right \|_{K}^{2}+\frac{\gamma _{I}}{\left (l+u \right )^{2}}g^{T}Lg mingl1i=1l(yig(xi))2+γAgK2+(l+u)2γIgTLg

这里 ∥ g ∥ K \left \| g \right \|_{K} gK表示核函数K诱导的RKHS[46]中g的范数。 g = ( g ( x 1 , . . . g ( x n ) ) ) T g=(g(x_{1},...g(x_{n})))^{T} g=(g(x1,...g(xn)))T。L表示相似矩阵的W图拉普拉斯矩阵。γA和γI是两个权衡控制因素(实验中 γ A = 1 0 − 6 \gamma _{A}=10^{-6} γA=106 γ I = 1 \gamma _{I}=1 γI=1)。显然,上述优化问题中的第一项对应于平方回归损失,而第三项保证了最终显著图的空间平滑性。

上述优化问题可以等价地转化为:

m i n g 1 l ∥ y − J K α ∥ 2 2 + γ A α T K α + γ I ( l + u ) 2 α T K L K α min_{g}\frac{1}{l}\left \| y-JK\alpha \right \|_{2}^{2}+\gamma _{A}\alpha^{T}K\alpha+\frac{\gamma _{I}}{\left (l+u \right )^{2}}\alpha ^{T}KLK\alpha mingl1yJKα22+γAαTKα+(l+u)2γIαTKLKα

J是对角矩阵, α \alpha α是对应于非线性回归系数向量 ( α i ) i = 1 N (\alpha _{i})_{i=1}^{N} (αi)i=1N K = ( K ( x i , x j ) ) N × N K=(K(x_{i},x_{j}))_{N\times N} K=(K(xi,xj))N×N是核Gram矩阵。将上述优化问题的最优解表述为:

α ∗ = ( J K + γ A l I + γ I l ( l + u ) 2 ) − 1 y \alpha ^{*}=(JK+\gamma _{A}lI+\frac{\gamma _{I}l}{(l+u)^{2}})^{-1}y α=(JK+γAlI+(l+u)2γIl)1y

其中A是单位矩阵。因此,我们得到了非线性回归函数 g ( x ) = ∑ i = 1 N α i ∗ K ( x , x i ) g(x)=\sum _{i=1}^{N}\alpha_{i} ^{*}K(x,x_{i}) g(x)=i=1NαiK(x,xi),其中 α i ∗ \alpha_{i} ^{*} αi α ∗ \alpha^{*} α的第i个元素。基于g(X),我们可以计算出图像中任意一个超像素x的显着性分数。

D. Generating Saliency Map

给定一幅图像,分四个阶段计算显着性图:1)通过fcn感知对象;2)图像边界信息在超像素图中的传播;3)粗粒度显着性信息融合;4)基于非线性回归传播的细粒度显着性图生成,如图5所示。
在这里插入图片描述
对于1),使用经过训练的FCNN自适应地捕获对象感知的语义结构信息,从而得到一个像素级的客观概率图(从0到1),我们称之为深度图(DeepMap)。这一阶段的重点是从前景发现的角度使用FCNN对底层对象属性进行建模。

相比之下,阶段2)旨在从背景传播的观点探讨图像边界信息在显著性检测中的影响。也就是说,我们使用基于拉普拉斯图的学习回归函数(在等式4中定义)来估计超像素级的显著性值,其中图像边界上的显著性值被初始化为-1,而其它值被初始化为0。在传播过程之后,我们有一个表示为.aryMap的显著性映射(规范化为[0,1])。

在第三阶段,我们执行DeepMap和边界映射的显着性融合,以生成粗粒度显着性映射(称为cgmap)。

C g M a p = D e e p M a p 1 − β ⋅ B o u n d a r y M a p β CgMap = DeepMap^{1-\beta } \cdot BoundaryMap^{\beta } CgMap=DeepMap1βBoundaryMapβ

其中,β是折衷控制因子,◦是基元乘积算子。

在阶段4中,将归一化的CgMap(s.t.[1,1])馈入等式4,以便对超像素图进行显著性细化,从而得到最终的细粒度显著性映射。如图5所示,基于图拉普拉斯正则化非线性回归,我们的显著性检测方法能够得到更精确的具有细粒度对象边界的显著性检测结果。

4. EXPERIMENTAL RESULTS

A. Experimental Setup

1)数据集:为了评估所提方法的性能,我们对八个基准数据集进行了定性和定量实验,其中包括ASD[29]、DUT-OMRON[17]、ECSSD[20]、Pascal-S[47]、THUR[48],因此[35],SED 2[49]和SOD[50]数据集。具体来说,前六个数据集是由分布在相对简单场景中的以对象为中心的图像组成的(例如,高的对象对比度和干净的背景)。相反,后两个数据集更具有挑战性,因为图像中有多个突出的对象和背景杂乱。为了便于描述,表1显示了这八个数据集的基本信息。
在这里插入图片描述

更具体地说,ASD是突出对象检测中常用的数据集。对于ASD中的每一幅图像,通常都有一个具有简单背景的显性突出对象。与ASD相比,具有更大的数据集大小,涵盖更多的突出案例。需要注意的是,ASD是这样的子集。此外,THUR是由Flick爬行生成的,由5个对象类组成,包括“蝴蝶”、“咖啡杯”、“狗”、“长颈鹿”和“平面”。在这些图像中,有6232幅图像具有用于显着性检测的像素级显着性注解图.为了克服ASD的缺点(即有限的目标和简单的背景),从14万多幅自然图像中手工选择DUT-OMRON,每个图像都有一个或多个突出目标和相对复杂的背景。作为复杂场景显着性数据集(CSSD)[20]的扩展,ECSSD是从两个可公开获取的数据集(即BSD[51]和Pascal VOC[52])和因特网中聚合出来的。PASCAL-S是从PascalVOC数据集[52]生成的,有20个对象类别和复杂的场景。SED 2是一个多显着性对象数据集,通常包含每个图像中的两个突出对象.SOD由具有一个或多个目标和复杂背景的图像(基于BSD数据集[51])组成。SOD中的一些图像也是ECSSD的一部分。

2)实现细节:在实验中,我们的算法在带有Intel E5-2609 CPU(2.4GHz)和8GBRAM的台式机上用MATLAB实现。在显着性回归过程中,以超像素数N为200的SLIC方法[45]进行超像素过分割。径向基函数核中的缩放因子ρ设置为0.1。

全卷积神经网络(FCNN)是在Caffe[53]工具箱的基础上实现的。更具体地说,我们用预先训练的VGG 16层网[23]初始化FCNN的前13个卷积层,并通过微调[54]将学习到的表示转移到语义分割任务和显着性检测任务中,通过重采样构造反卷积层,其参数初始化为简单的双线性插值参数,并在训练过程中迭代更新。我们将所有图像和地面真实图调整为500×500个像素进行训练,选择动量参数为0.99,学习速率设为10−10,权重衰减为0.0005。使用NVIDIA Tesla K40C GPU设备加速SGD学习过程,并在80000次迭代中花费大约3天的时间。

在实验中,FCNN中的分割任务和显着性检测任务都是交替优化的,因为现有的数据集都不包含分割和显着性注释。我们将证明,我们的方法可以将分割知识转化为显着性检测,以学习更好的特征表示,而不需要回忆所需的训练数据。请注意,我们的方法是灵活的,如果这些数据集可用,可以联合进行培训。在训练过程中,两个任务相关的网络共享卷积部分的参数θ。也就是说,我们首先使用对象类分割数据集(即PASCALVOC 2007,对象类数为C=21)执行分割任务,以获得θs和与分割相关的网络参数θh。更具体地说,详细的培训过程如下:

  • 使用预先训练的VGG 16层网络初始化共享全卷积部分的参数 θ s 0 \theta _{s}^{0} θs0
  • 从正态分布中随机初始化参数 θ h 0 \theta _{h}^{0} θh0(用于分段任务)和 θ f 0 \theta _{f}^{0} θf0(用于显着性任务)。
  • θ s 0 \theta _{s}^{0} θs0 θ h 0 \theta _{h}^{0} θh0的基础上,利用θ训练与分割相关的网络更新这两个参数,得到 θ s 1 \theta _{s}^{1} θs1 θ h 1 \theta _{h}^{1} θh1
  • 使用 θ s 1 \theta _{s}^{1} θs1 θ f 0 \theta _{f}^{0} θf0对显着性相关网络进行训练,以更新显着性相关参数,生成 θ s 2 \theta _{s}^{2} θs2 θ f 1 \theta _{f}^{1} θf1
  • θ s 2 \theta _{s}^{2} θs2 θ h 1 \theta _{h}^{1} θh1的基础上,利用SGD对分割相关网络进行训练,得到 θ s 3 \theta _{s}^{3} θs3 θ h 2 \theta _{h}^{2} θh2
  • 利用 θ s 3 \theta _{s}^{3} θs3 θ f 1 \theta _{f}^{1} θf1对显着性相关网络进行训练,得到 θ s 4 \theta _{s}^{4} θs4 θ f 2 \theta _{f}^{2} θf2
  • 重复上述步骤(3)-(6),直到获得最终参数 θ s \theta _{s} θs θ h \theta _{h} θh θ f \theta _{f} θf为止。在实践中,交替训练过程在实验中重复三次,往往导致相对稳定的性能。

在实验中,我们使用了四个指标进行定量性能评估,包括精度和召回(PR)曲线、F-度量、平均绝对误差(MAE)、ROC曲线和ROC曲线下面积(AUC)。

…实验结果部分看原文

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值