阅读笔记(ICCV 2023)Parallax-Tolerant Unsupervised Deep Image Stitching

视差容忍的无监督深度图像拼接

Nie, L., Lin, C., Liao, K., Liu, S., & Zhao, Y. (2023). Parallax-tolerant unsupervised deep image stitching. In Proceedings of the IEEE/CVF International Conference on Computer Vision (pp. 7399-7408).

0. 摘要

传统的图像拼接方法倾向于利用日益复杂的几何特征(例如, 点、线、边等) 以获得更好的性能。 然而,这些人工特征只适用于具有足够几何结构的特定自然场景。 相比之下,深度拼接方案通过自适应地学习鲁棒的语义特征来克服不利条件,但是它们不能处理大视差的情况。为此,提出了一种具有视差容忍性的无监督深度图像拼接算法(UDIS++)。

首先,我们提出一种稳健且具弹性的变形模型,将整体单应性的图像配准模型转换为局部的薄板样条运动。 它通过对对齐和变形进行联合优化,为重叠区域提供精确对齐,为非重叠区域提供形状保持。 为了提高算法的泛化能力,本文设计了一种简单有效的迭代策略,以增强算法在跨数据集和跨分辨率应用中的自适应能力。 最后,为了进一步消除视差伪影,提出了一种基于无监督学习的接缝驱动合成模板无缝合成拼接图像的方法。 与现有方法相比,该方法具有视差容忍能力,且无需为特定场景设计复杂的几何特征. 大量的实验结果表明,该方法在定性和定量上均优于SOTA方法。该代码可在https://github.com/nie-lang/UDIS2上获得。

1. 引言

图像拼接是一种实用的技术,其目的是将不同的有限视场的图像拼接成具有宽视场(FoV)的场景。 它在自动驾驶、医学成像、监控视频、虚拟现实等广泛的领域都很有用。

在过去的几十年里,传统的拼接方法往往采用越来越复杂的几何特征来实现更好的内容对齐和形状保持。一开始,SIFT [38]被广泛地用于各种图像拼接算法[4,13,50,5,34,25]中,以提取有区别的关键点并计算自适应变形。 然后,线段被证明是另一个独特的特征,以实现更好的拼接质量并保持线性结构[31,49,32,19]。 最近,在[10]中还引入了大尺度边缘以保持轮廓结构。除此之外,还有许多其他的几何特征可以用来提高拼接质量,例如深度图[33]、语义平面区域[26]等。

在计算变形之后,通常使用接缝切割来消除视差伪影。 为了探索不可见的接缝,使用颜色[22]、边缘[35,8]、显著图[30]、深度[6]等来设计各种能量函数。

从几何特征的广泛应用中,我们发现了一个明显的发展趋势:利用越来越复杂的特征。 我们要问:这些复杂的设计在真实的应用中实用吗? 我们试图从两个角度来回答这个问题。 1)这些具有复杂几何特征的精细算法很难适应没有足够几何结构的场景,例如医学图像、工业图像以及其他低纹理(图9b)、低光照或低分辨率的自然图像。2)当存在丰富的几何结构时,运行速度不允许(详见表2、3)。这样的趋势似乎违背了“务实”的初衷。

近年来,基于卷积神经网络的深度拼接技术引起了社会各界的广泛关注。 它们放弃了几何特征,而转向高级语义特征,这些特征可以在数据驱动模式中以有监督[24,40,44,47,23]、弱监督[46]或无监督[41]的方式自适应地学习。 尽管它们对各种自然或非自然条件具有鲁棒性,但它们不能处理大视差,并且在跨数据集和跨分辨率条件下表现出不令人满意的泛化。 图9a示出了大视差情况,其中树在参考图像中位于汽车的中间,而在目标图像中位于汽车的左边。 为了处理视差,UDIS [41]重建从特征到像素的拼接图像。 然而,视差是如此之大,以致于作为副作用产生不希望的模糊。

在这篇文章中,我们提出了一种视差容忍的无监督深度图像拼接技术,同时解决了传统拼接的鲁棒性问题和深度拼接中的大视差问题。实际上,由于有效的语义特征提取,所提出的基于深度学习的解决方案对于各种场景都是自然鲁棒的。 然后,通过变形和合成两个阶段克服视差过大的问题。 在第一阶段,我们提出一种稳健且具弹性的变形模型来模拟图像配准。 特别地,我们将单应性变换和薄板样条(TPS)变换同时参数化为一个紧凑的统一表示。 前者提供了全局线性变换,而后者产生局部非线性变形,允许我们的变形图像与视差图像对齐。 此外,这种变形通过组合优化对齐和失真,同时有助于内容对齐和形状保存。 在第二阶段,现有的基于重建的方法[41]将伪影消除视为从特征到像素的重建过程,导致视差区域周围不可避免的模糊。 为了克服这一缺陷,我们将接缝切割的动机融入到深度合成中,通过无监督学习隐式地发现接缝驱动的合成模板中的“拼缝” 。为此,我们设计边界和平滑度约束来限制“接缝”的端点和路径,从而无缝地合成拼接后的图像。 除了这两个阶段,我们还设计了一个简单的迭代策略来增强泛化能力,快速提高了我们的变形在不同数据集和分辨率下的配准性能。此外,我们还针对翘曲和成分进行了大量实验,证明了我们优于其他SOTA解决方案。贡献集中在:
·我们通过将单应性和薄板样条参数化为统一表示,提出了一种鲁棒且灵活的变形,实现了各种场景中的无监督内容对齐和形状保持。
·提出了一种新的合成方法,通过对合成掩模的无监督学习来生成无缝拼接图像。 与重建[41]相比,我们的合成消除了视差伪影,而不会引入不希望的模糊。
·我们设计了一个简单的迭代策略来增强。

2. 相关工作

2.1 传统图像拼接

自适应变形。 AutoStitch [4]利用SIFT [38]提取有区别的关键点,以构建全局单应性变换。 此后,SIFT成为计算各种柔性变形的必不可少的特征,例如DHW [13]、SVA [36]、APAP [50]、ELA [28]、TFA [27],以实现更好的对齐; SPHP [5]、AANAP [34]、GSP [7],以实现更好的形状保持。 然后,DFW [13]采用LSD [48]提取的线段和关键点一起来丰富人工环境中的结构信息。 此外,通过优化各种线保持项的能量函数[32,19]来设计线引导网格变形[49]。 为了保持非线性结构,在GES-GSP [10]中使用了边缘特征,以实现局部对准和结构保持之间的平滑过渡。 除了这些基本的几何特征(点、线和边)之外,深度图和语义平面也被用于使用额外的深度一致性[33]和平面一致性[26]来辅助特征匹配。

接缝切割。 拼接图像的拼接后处理通常采用接缝切割,这就引入了沿着接缝的标签分配优化问题。 为了获得似乎合理的拼接结果,通过惩罚光度差异来定义广泛范围的能量项,所述光度差异例如欧几里德度量色差[22]、梯度差异[1,8]、运动和曝光感知差异[11]、显著性差异[30]等。然后通过图切割优化[22]最小化这些能量函数。 除此之外,接缝切割也被应用于图像对齐,以找到具有最小接缝成本的最佳对齐变形[14,51,35,29]。

这些复杂的几何特征在具有适当几何结构的自然场景中是有益的。 然而,该方法存在两个缺陷:1)由于缺乏足够的几何结构,对特征的严格要求会导致拼接质量差,甚至失败。 2)在几何结构过多的情况下,计算成本急剧上升。

2.2 深度图像拼接

相比之下,深度拼接方案不受几何特征的无尽设计的限制。 它们学习以监督[24,40,44,47,23],弱监督[46]或无监督[41]的方式自动从大量数据中捕获高级语义特征,使它们对各种具有挑战性的场景具有鲁棒性。 其中,由于无法获得真实的拼接标签,无监督标签[41]更受欢迎。 然而,由于单应性配准模型的限制,它不能处理大视差。 随后的重建将在视差区域周围带来不期望的模糊。

3. 方法

我们的方法的概述如图2所示,其中所提出的框架由两个阶段组成:变形和合成。

在第一阶段中,我们的方法将参考图像(I_r)和目标图像(I_t)与重叠区域作为输入,并回归一个强大的和灵活的变形。 然后,变形图像(I_{wr},I_{wt})被输入到第二级以预测合成掩模(M_{cr},M_{ct})。 拼接图像(S)可以无缝合成,如下:

S=M_{cr}\times I_{wr}+M_{ct}\times I_{wt},\quad (1)

3.1 无监督变换构建

3.1.1 变换参数化

单应性变换是一种可逆映射,从一个图像到另一个图像,具有8个自由度:平移、旋转、缩放和无穷线各两个。为了确保回归网络中的非奇异性 [39],它通常被参数化为四个顶点的运动 [9],使用DLT [15] 解决为3×3矩阵。

然而,如果一个非平面的场景是由具有不同的拍摄中心的相机捕获,单应性无法实现准确的对齐。 为了解决这个问题,基于网格的多单应性方案[50]通常用于传统的拼接算法。 但是它不能被有效地并行加速,这意味着它不能用于深度学习框架[43,42]。 具体分析请参见补充资料第2.3节。 为了克服这个问题,我们建议利用TPS变换[3,18]来实现有效的局部变形。

TPS变换是一种非线性的、柔性的变换,通常用于使用薄板来近似非刚性物体的变形。 它由两组控制点确定,平面图像和变形图像之间具有一一对应关系。 将平面图像上的N个控制点表示为P=[p_1,p_2,\cdots,p_N]和变形图像上的对应点记为P'=[p'_1,p'_2,\cdots,p'_N],(p_i,p'_i\in \mathbb{R}^{2\times 1}) 。通过最小化由数据项和失真项组成的能量函数[20](更多细节参见补充材料的第2.1节),TPS变换可以参数化为公式(2):

p'=\mathcal{J}(p)=C+Mp+\sum_{i=1}^{N}{w_iO(\left \| p-p_i \right \|_2)},\quad (2)

其中,p是平面图像上的任意点,p'是变形图像上对应的点。C\in \mathbb{R}^{2\times 1},M\in \mathbb{R}^{2\times 2},w_i\in \mathbb{R}^{2\times 1}是变换参数。O(r)=r^2logr^2是一个径向基函数,表示每个控制点对p的影响。为了解决这些参数,我们根据公式(2)使用N对控制点定义N个数据约束,并施加额外的维度约束 [20],如公式(3)所示:

\sum_{i=1}^N{w_i=0},\sum_{i=1}^{N}p_iw_i^T=0,\quad (3)

然后,这些约束可以重写为矩阵计算的形式,参数可以如下解决:

\begin{bmatrix} C\\ M\\ W\\ \end{bmatrix}=\begin{bmatrix} \mathbb{I} & P & K\\ 0&0 &\mathbb{I} \\ 0&0 &P^T \end{bmatrix}^{-1}\begin{bmatrix} P'\\ 0\\ 0 \end{bmatrix},\quad (4)

其中,\mathbb{I}是一个N\times 1的全一矩阵。K\in \mathbb{R}^{N\times N}中的每个元素k_{ij}O(\left \| p-p_i \right \|_2)确定,并且W=[w_i,\cdots,w_N]^T

类似于单应性的4点参数化,TPS变换也可以参数化为控制点的运动。在这项工作中,我们定义了(U+1)\times(V+1)个控制点均匀分布在目标图像上,然后预测每个控制点的运动。 为了将全局单应性变形与局部TPS变形连接起来,我们首先回归单应性变换以提供控制点的初始运动。 然后,我们可以预测进一步的灵活变形的残差运动。

3.1.2 变换流程

如图2所示,给定I_r,I_t,我们采用具有预训练参数的ResNet50 [17]作为我们的主干来首先提取语义特征。它将3通道图像映射到高维语义特征,分辨率缩放为原始分辨率的1/16。然后,这些特征图(F_r^{1/16},F_t^{1/16})之间的相关性可以使用上下文相关层[43]聚合到2-通道特征流中。随后,使用回归网络来估计单应性变换的4点参数化。这个全局变换还生成了控制点的初始运动。接下来,我们将具有更高分辨率的特征图(F_t^{1/8})进行变换,以将单应性先验嵌入到后续工作流程中。经过另一个上下文相关层和回归网络,预测控制点的残差运动,从而实现强大的灵活TPS变换。

3.1.3 变换优化

为了同时实现内容对齐和形状保持,我们设计了关于两个方面的目标函数\mathcal{L}^w:对齐和失真。

\mathcal{L}^w=\mathcal{L}_{alignment}^w+\mathcal{L}_{distortion}^w,\quad(5)

对于对齐,我们使重叠区域在像素级别保持一致。记\varphi (\cdot,\cdot)为变换操作,\mathbb{I}为与I_r具有相同分辨率的全1矩阵,对齐损失可以定义如下:

\mathcal{L}_{alignment}^w=\lambda\left \| I_r\cdot\varphi (\mathbb{I},\mathcal{H}) -\varphi (I_t,\mathcal{H})\right \|_1\\+\lambda\left \| I_r\cdot\varphi (\mathbb{I},\mathcal{H}^{-1}) -\varphi (I_t,\mathcal{H}^{-1})\right \|_1+\\ \left \| I_r\cdot\varphi (\mathbb{I},\mathcal{TPS}) -\varphi (I_t,\mathcal{TPS})\right \|_1,\quad (6)

其中\mathcal{H},\mathcal{TPS}是变换参数,\lambda是用于平衡不同变换影响的超参数。

对于失真,我们在变形目标图像中连接相邻控制点形成网格,并引入一个网格间约束l_{inter}和一个网格内约束l_{intra}。前者保留了非重叠区域的几何结构,而后者减少了投影失真。 首先,我们对非重叠区域中的每个网格用DLT近似一个类似的变换,并将4点投影误差作为损失。 但是传统方法中常用的这种约束[16,37]在深度学习方案中不起作用。 相反,我们从一个更直观的角度重新探索约束-网格边缘。

类似于[42],我们惩罚网格边缘的大小超过阈值。 记\vec{e}_{hor},\vec{e}_{ver}分别是水平和垂直边缘的集合,我们将网格内约束描述如下:

l_{intra}=\frac{1}{(U+1)\times V}\sum_{\vec{e}_{hor}}\sigma (<\vec{e},\vec{i}>-\frac{2W}{V})+\\ \frac{1}{U\times {(V+1)}}\sum_{\vec{e}_{ver}}\sigma (<\vec{e},\vec{i}>-\frac{2H}{U}),\quad (7)

其中\vec{i}/\vec{j}是水平/垂直的单位向量,\sigma (\cdot)RELU函数,防止网格形状急剧缩放来减少投影失真。

通过鼓励边缘对(水平或垂直方向上的连续边缘,表示为\vec{e}_{s1},\vec{e}_{s2})共线,我们将网格间约束公式化为:

l_{inter}=\frac{1}{Q}\sum_{\{\vec{e}_{s1},\vec{e}_{s2}\}}\cdot(1-\frac{<\vec{e}_{s1},\vec{e}_{s2}>}{\left \| \vec{e}_{s1} \right \|\cdot \left \| \vec{e}_{s2} \right \|}),\quad (8)

其中Q是边缘对的数量,S_{\{s1,s2\}}是一个0-1标签,如果这个边缘对位于非重叠区域,则设置为1。我们只在非重叠区域保持结构,防止对对齐产生不利影响。


3.2 无监督无缝合成

3.2.1 动机

UDIS [41] 通过无监督重建从特征到像素合成拼接图像,但它无法处理大视差。传统的接缝切割通过动态规划[2]或图割优化[22]消除伪影,但它过分依赖于光度差异。一个直观的想法是将接缝切割的动机融入到学习框架中。然而,如何使我们的无监督深度拼接方法与接缝切割合作并有效是一个主要困难。例如,动态规划不是可微的;图割优化为标签分配绝对整数,这在反向传播中截断了梯度。在这个阶段,我们提出将硬标签放宽为具有浮点数的软掩模,创新地通过两个具有特殊设计的约束的平衡效应监督生成接缝启发式掩模。

3.2.2 合成流程

首先,我们将变换后的图像连接作为输入,并利用UNet-like网络[45]作为我们的合成网络。但这种模式粗略地混合了不同图像的特征。这样的网络很难感知变形图像之间的语义差异。

为了克服这一点,我们使用网络的编码器分别提取I_{wr}I_{wt}的语义特征,并共享权重。对于跳跃连接,我们用从I_{wr}的特征中减去I_{wt}的特征,并在每个分辨率将残差传递给解码器来替换它们。我们将最后一层的滤波器数量和激活函数设置为1sigmoid,以预测变形参考图像的M_{cr}。变形目标图像的另一个掩模M_{ct}可以通过简单的后处理轻松获得。

3.2.3 合成优化

我们无监督合成的优化目标包括边界项和平滑性项,如下所示:

\mathcal{L}^c=\alpha \mathcal{L}_{boundary}^c+\beta \mathcal{L}_{smoothness}^c,\quad (9)

前者表示“接缝”的起点和终点,而后者限制了路径。

我们希望端点是变形图像重叠区域边界的交点。为了实现这一点,我们利用0-1边界掩模M_{br},M_{bt}来表示“接缝”两侧重叠区域的边界位置。更多细节可在补充材料第3.1节中找到。然后,我们如下定义边界损失:

\mathcal{L}_{boundary}^c=\left \| (S-I_{wr})\cdot M_{br} \right \|_1+\left \| (S-I_{wt})\cdot M_{wt} \right \|_1,\quad (10)

这个损失约束了S中重叠区域的边界像素,要么来自I_{wr}要么来自I_{wt}。然而,M_{br},M_{bt}有共同的交点,这为交点的归属产生了二义性。但是,正是这种二义性将“接缝”的端点固定在了交点上。为了衡量接缝的平滑性,传统的接缝切割方法定义了各种能量函数,使用不同的光度差异。在这项工作中,我们采用最简单的光度差异作为D=(I_{wr}-I_{wt})^2来展示我们的效果。然后我们如下定义差异图上的平滑性:

l_D=\sum_{i,j}\left | M_{cr}^{i,j}-M_{cr}^{i+1,j} \right |(D^{i,j}+D^{i+1,j})+\\ \sum_{i,j}\left | M_{cr}^{i,j}-M_{cr}^{i,j+1} \right |(D^{i,j}+D^{i,j+1}),\quad (11)

其中i,j是笛卡尔坐标。为了在“接缝”两侧产生平滑的过渡,我们同样如下定义拼接图像的平滑性:

l_S=\sum_{i,j}\left | M_{cr}^{i,j}-M_{cr}^{i+1,j} \right |(S^{i,j}+S^{i+1,j})+\\ \sum_{i,j}\left | M_{cr}^{i,j}-M_{cr}^{i,j+1} \right |(S^{i,j}+S^{i,j+1}),\quad (12)

通过添加l_D,l_S,我们制定了完整的平滑性项\mathcal{L}_{smoothness}^c注意,我们的网络被训练以提高提取语义差异的能力。在推理过程中,所提出的方法不再依赖于光度差异。

3.3 迭代变换适应

为了将预训练的模型转移到其他数据集(跨场景和跨分辨率),最常见的方法是在新数据集上进行微调。然而,这通常需要标签来协助适应过程。在这项工作中,我们通过设置一个无监督优化目标来解决这个限制,如下所示:

\mathcal{L}_{adaption}^w=\left \| I_r\cdot \varphi (\mathbb{I},\mathcal{TPS}) -\varphi (I_t,\mathcal{TPS})\right \|_1,\quad (13)

与公式5相比,我们去除了单应性对齐损失和失真损失。因为这些约束已经被预训练模型很好地学习了,我们所做的是在不同数据上调整局部对齐。此外,我们考虑了一个特殊情况,即新数据集只包含一个样本。实验表明,我们的模型也可以在迭代方式下稳定地优化,以适应只有一个样本的情况。特别是,我们设置了一个阈值\tau和一个最大迭代次数T。当迭代次数达到T或连续优化误差(公式(13))低于\tau时,适应过程停止。我们在图3中展示了一个迭代适应的例子,其中随着迭代次数的增加,伪影显著减少。每次迭代大约需要0.1秒。

4. 实验

4.1 数据集和实施细节

数据集:为了与深度拼接方法进行直观和公平的比较,我们也在UDISD [41]数据集上训练了我们的模型。评估在UDIS-D数据集和其他传统数据集 [50, 13, 34, 28, 35] 上进行。

细节:我们使用Adam [21]以初始值为10^{-4}的指数衰减学习率训练我们的变换和合成网络100和50个epochs。对于变换阶段,w,\lambda被设置为10和3,我们采用(12+1)×(12+1)个控制点来提供灵活的TPS变换。对于第二阶段,我们将\alpha ,\beta分别设置为10,000和1,000。至于变换适应,\tau ,T被分配为10^{-4}和50。所有实现都基于PyTorch,使用单个GPU和NVIDIA RTX 3090 Ti。

4.2. 比较实验

为了全面展示我们的有效性,我们在变换、合成和完整的拼接框架上进行了广泛的实验。

4.2.1 变换比较

我们将我们的变换与SIFT [38]+RANSAC [12](AutoStitch [4]的流程)、APAP [50]、ELA [28]、SPW [32]、LPC [19]和UDIS的变换[41]进行了比较。我们自己实现了SIFT+RANSAC,而其他方法则采用官方代码和默认参数,如网格分辨率。所有方法,包括我们的,都使用平均融合作为后处理操作。因为这种简单的融合速度快,可以更好地突出对齐错误。

定量比较:我们首先使用与UDIS [41]相同的指标在UDISD数据集 [41] 上进行了定量比较,该数据集有1,106个样本用于评估。结果显示在表1中,其中I_{3\times 3}将恒等矩阵作为“无变换”变换的参考。结果根据性能分为三部分[41, 43]。传统方法的程序可能会在一些具有挑战性的样本中崩溃,因为缺乏几何特征。当这种情况发生时,我们使用I_{3\times 3}作为替代变换进行评估。

定性比较:定性结果如图4所示,我们放大了两个不同深度表面的区域,以突出视差伪影。从这个图可以看出,我们的变换在UDIS-D数据集 [41] 上的表现远远超过其他解决方案。

跨数据集比较:我们使用预训练的模型在其他数据集上评估我们的性能,如图5所示。迭代适应策略用于进一步提高对齐性能。

速度比较:为了客观评估速度,我们在三个传统公共数据集 [50, 34, 13] 上进行了测试,分辨率不同。如表2所示,我们的变换在GPU加速下的速度远远超过其他方法,而传统变换无法通过GPU加速。对于传统的基于网格的变换,运行时间与分辨率不呈线性变化,并且在具有丰富几何特征的场景中(例如,“railTrack”),速度变得非常慢。

4.2.2 合成比较

我们将我们的合成与基于感知的接缝切割方法[30]和基于重建的方法[41]进行了比较。为了更直观地展示视差伪影,我们使用SIFT+RANSAC对输入图像进行变换,并给出平均融合的结果作为参考。

定性比较:传统的接缝切割方法通过动态规划[2]或图割优化[22]找到接缝。传统掩模中的值是整数,而我们的掩模中的值是浮点数。因此,我们无法使用传统指标对我们的合成进行定量评估。相反,我们在图6中展示了定性结果。此外,我们承诺将发布所有主观结果,包括UDIS-D中的1,106张图像和传统数据集中的其他图像。

速度比较:在这里,我们首先使用所提出的变换对输入进行变换。然后这些变换后的图像用于评估不同合成方法的速度。如表3所示,我们的合成在GPU加速下显示出显著的速度优势。

4.2.3 更多比较

在这里,我们评估了我们的完整拼接框架与其他最先进方法的性能。结果如图9所示,LPC [19]和UDIS [41]采用基于感知的接缝切割[30]和重建[41]作为后处理操作。为了清晰起见,更多的实验结果,包括定性比较、用户研究、具有挑战性的案例和跨数据集评估,都绘制在补充材料中。

4.3. 消融研究

我们首先对不同的变换约束进行了消融研究。如图7(顶部)所示,网格间约束保持了结构,而网格内约束减少了投影失真。此外,这些约束对对齐的影响很小。定量结果报告在补充材料中。然后我们研究了合成中平滑性项的影响。结果如图7(底部)所示,我们通过矩形框突出了不连续区域。通过在差异图和拼接图像上的平滑性约束,不连续性得到了显著改善。

 5. 结论

本文提出了一种具有视差容忍的无监督深度拼接方法。 首先,自适应地学习鲁棒的灵活变形,以用于内容对齐和形状保持。 我们还提出了接缝合成想法,以进一步减少伪影。 此外,还设计了一种简单的迭代变形自适应策略,有效地提高了在跨数据集和跨分辨率情况下的泛化能力。 与已有的方法相比,该方法既能解决复杂场景的匹配问题,又能解决大视差的匹配问题。随着GPU的日益普及,我们的解决方案展现出令人难以置信的效率。

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值