SAFL-Net: Semantic-Agnostic Feature Learning Network with Auxiliary Plugins for Image Manipulation D

paper: https://openaccess.thecvf.com/content/ICCV2023/papers/Sun_SAFL-Net_Semantic-Agnostic_Feature_Learning_Network_with_Auxiliary_Plugins_for_Image_ICCV_2023_paper.pdf

code: 

Abstract

由于现实场景中的图像编辑方法无法用尽,因此泛化是图像处理检测的核心挑战,而语义相关特征可能会严重削弱泛化的能力。在本文中,我们提出了SAFL-Net,它通过设计具有相应辅助任务的特定模块来约束特征提取器来学习语义不可知的特征。将约束直接应用于编码器提取的特征,可以帮助编码器学习与语义无关的操作痕迹特征,从而防止在有限的训练数据中与语义信息相关的偏差,提高泛化能力。通过特征转换结构保证了辅助边界预测任务与原始区域预测任务的一致性。在各种公共数据集上的实验和多维度的比较表明,SAFL-Net对图像处理检测是有效的。

1. Introduction

新的图像编辑技术的激增极大地丰富了我们的视觉世界。然而,这些技术也给图形媒体内容的真实性和安全性带来了重大挑战。为了解决这些问题,已经提出了图像处理检测方法来识别已被修改的特定区域。这些技术对于使我们能够区分丰富多媒体内容的虚拟和真实部分至关重要。

大多数篡改操作发生在与语义属性表现出强烈相关性的区域。然而,可用训练数据的有限性和偏差性意味着这种相关性不足以准确地表示现实世界场景的分布。例如,篡改区域集中在人区域的数据集可能会导致检测模型显示重要的语义关联,从而导致错误的预测,如图1中用绿色框标记的区域所示。因此,这种语义相关性可能会影响篡改痕迹特征的学习,尽管它可能会提高模型对训练数据的拟合。当检测未见场景中的篡改时,识别篡改证据是至关重要的,而不是依赖于约束训练数据中固有的概率语义分布。因此,泛化的关键问题是学习与语义无关的特征。

为了增强语义不可知篡改痕迹特征的泛化能力,现有方法主要是利用手工制作的特征提取模块来限制输入的语义信息[14,26,25,10,13],或者通过任务转换和改变分割网络的结构来去除语义掩码的引导[19,28,2,22]。通过对特定特征的有效提取,可以将包含丰富语义内容的RGB空间转换为与语义无关的底层噪声空间或高频空间。然而,绝对噪声和高频信息很容易被后处理操作(如压缩和模糊)删除或改变,并且许多可用的知识也被删除。重新设计网络结构和转换任务可以打破语义分割监督。然而,当辅助任务与原始任务发生冲突时,平衡这两个任务就成为一个难题。

相反,我们提出了一种以通用特征提取网络为骨干,不做任何修改,通过模块化辅助任务来约束特征提取器学习语义不可知特征的方法。我们借助基准语义表示直接约束特征中的语义信息。此外,我们利用边界监督来识别篡改边界周围特征的不一致性,并设计特征转换结构以确保辅助任务和主任务的一致性。我们在CASIA[5]、Columbia[20]、Coverage[24]、NIST16[7]、IMD20[18]这几个被广泛使用的图像篡改数据集上进行了实验。我们的研究结果表明,SAFL-Net优于现有的最先进的篡改检测和定位方法。我们在以下几个关键方面作出贡献:

•我们提出了SAFL-Net,这是一个带有两个辅助插件的网络,用于图像处理检测和定位,如图2所示。

•引入即插即用的语义抑制模块和边界引导模块,直接约束特征提取器学习语义不可知特征。

•我们在各种基准上进行了广泛的实验,证明SAFL-Net实现了最先进的篡改检测性能。

2. Related Work

在现实场景中,获取具有可靠痕迹证据的特征是一项至关重要但具有挑战性的任务,这种结果可能会受到训练数据中篡改与特定语义之间相关性的过拟合问题的严重阻碍。在下一节中,我们将简要总结最近的深度学习方法。随后,我们将根据这些进展介绍我们的新贡献。

各种方法提出了手工特征提取模块,将包含丰富语义内容的RGB空间的输入转换为与语义无关的底层噪声空间或高频空间。这将从根隔离语义信息。例如,Li和Huang[14]提出用可训练的高通滤波器来补充网络的前沿。Yang等人使用BayarConv作为他们模型的第一层卷积层。最近的方法提出了更复杂的双流网络,以融合来自多个视图的特征,充分利用原始RGB空间中的知识。然而,这种方法有重新引入语义信息的风险。Wu et al[25]和Hu et al[10]同时使用BayarConv和SRM作为噪声提取器。Chen等人使用RGB图像及BayarConv生成的对应的噪声作为输入。Wang等[22]从图像中提取高频特征,并与RGB特征结合作为多模态patch embedding。为了充分利用原始图像中的所有可用知识,同时抑制有限训练数据中不可靠的语义分布,我们使用原始RGB图像作为唯一输入,并引入两个即插即用的辅助模块。这些模块直接限制语义相关的特征,并帮助编码器挖掘更高质量的痕迹特征以获得更好的性能。

由于图像编辑操作和相邻局部区域的特征不一致而产生的伪影经常在篡改区域的边界上表现出来。利用这些伪影可以帮助模型提取细微的痕迹特征,从而获得更好的性能。例如,saloum等人[19]提出了一种多任务全卷积网络,可以预测篡改区域及其边界。Zhou等人[28]提供了边缘识别分支,并在多个层次上细化特征。Chen等人[2]设计了一种边缘监督分支,通过Sobel层和边缘残差块增强边缘信息的学习。Wang等人[22]使用边界敏感的上下文不相关建模模块来检测像素级不一致性,并提高预测篡改掩码的清晰度。我们建议使用边界监督来引导模型关注边界附近真实区域和篡改区域之间的细微特征差异,而不是直接学习边界上的像素级伪影。特征转换模块将特征转换成特征之间的差异,分别对应区域预测和边界预测。这种方法保证了两个任务的统一。

3. Methods

我们将输入记为X∈H×W ×3,将X的篡改区域像素级标注记为g∈{0,1}H×W,图像级标签表示图像是否被篡改,记为y∈{0,1}(真实/篡改),其中H、W、C分别为图像的高度、宽度和通道。编码器在基线中从不同块提取的篡改痕迹特征为(Ftri), Ftri∈Hsi×Wsi×Csi,其中i∈{1,2,3,4}表示特征的级别,Hsi、Wsi、Csi分别为特征的高度、宽度和通道。设Seg为Unet架构解码器和分割头,用于输出每个像素被篡改的概率。Cls为分类头,用于估计图像被篡改的概率。

在本节中,我们介绍了SAFL-Net,它由语义抑制模块(第3.1节)和边界引导模块(第3.2节)组成,实现了基于基线模型的语义不可知特征学习。图2给出了该框架的概述。值得注意的是,所提出的方法被设计为即插即用的方法,它只对特征(Ftri)进行操作,不需要对编码器和解码器进行任何修改。

3.1. Semantic Suppression Module   语义抑制模块

图像处理和语义信息之间的强烈关联可以通过有限的数据轻松学习,但在现实场景中变得不可靠,甚至可能误导对篡改区域的预测。以前的研究已经承认了这个问题,但只是试图通过间接的方法来限制语义信息的学习,例如提取高频或噪声特征。为了解决这个问题,我们提出了一个语义抑制模块,如图3所示,直接限制与语义相关的特性。

由于浅层特征不太可能携带语义信息,而编码器学习到的深层特征往往捕获更丰富的语义信息,因此语义抑制模块专门应用于深层特征Ftr4,在本节中称为Ftr。

3.1.1 Benchmark Semantic Representation  基准语义表示

在实现语义抑制模块之前,需要建立一个具体的语义表示。鉴于语义分割任务的重要性,我们提出将语义分割模型衍生的特征定义为基准语义表示,作为限制语义信息的参考。

具体来说,从语义分割任务下预训练的骨干编码器E1中提取输入的语义特征,并通过ConvBlock得到基准语义表示,表示为Fse = ConvBlock(E1(X))∈Hs×Ws×Cs,其维度与篡改痕迹特征Ftr相同。然后通过投影头Proj将基准语义表示Fse映射到低维向量zse = Proj (Fse),以进行接下来的操作,这在以往的工作中已被证明是有效的。

此外,为了尽量减少预训练数据集和编码器结构的影响,并在Fse中尽可能地保持语义信息,我们设计了一个对称的框架来预训练ConvBlock和Proj,如图4所示。在不同于E1的数据集上进行预训练的另一个骨干编码器E2,连同其对应的ConvBlock和Proj集成,得到相同输入x的另一个基准语义表示z2se。通过对损失函数的优化,期望两个基准语义表示z1se和z2se高度一致:

其中Sim表示余弦相似度。最终通过预训练E1和训练好的ConvBlock, Proj(图4中蓝色)得到基准语义表示Fse和向量Zse。预训练E1, E2的参数一直处于冻结状态。

3.1.2 Image-level Constraint  图像级约束

基于特征Ftr,通过Proj可以得到与前面介绍的结构相同的向量Ztr,具有全局接受域。目的是确保该痕迹特征向量准确地反映与篡改痕迹有关的信息,同时保持独立于图像内容中存在的任何异常语义信息。

如图3中蓝色所示,我们计算ztr和zse之间的相似度,并将相似度最小化:

这个图像级约束从全局角度对篡改特征施加语义限制。

3.1.3 Patch-level Contrast  补丁级对比

我们还在语义抑制模块中引入了对比学习[8,11,23],以降低对篡改区域语义信息在像素级的敏感性。Ftr= {tij}, Fse = {sij}, i = 1 , · · · , Hs,  j = 1 , · · · , Ws。卷积运算会不断扩大特征的接受野,因此精确实现对比学习的像素级向量tij和sij对应于原始输入图像中的特定patch。为了区分向量tij所对应的图像patch是否位于篡改区域,我们定义了一个子集T = {tk}∧Ftr, k = 1,···,|T|,该子集由其对应的图像patch位于篡改区域的向量组成。具体来说,在实验中,如果图像patch中95%以上的像素被篡改,则将该图像patch视为篡改区域。

随机选择一个锚点tk∈T,对比损失需要一个正集P (tk)和一个负集N(tk):

其中·表示两个L2归一化向量之间的余弦相似度的内积,τ > 0是温度超参数。

正集。我们期望篡改区域的篡改痕迹特征只与局部像素相关,而与图像内容的语义信息无关,这意味着tk, tp∈T应该被拉到一起。因此选取篡改区域内的其他向量作为正集P (tk) = T \{tk}。

负集。同样,未篡改区域的篡改痕迹特征也只与局部像素相关,而与图像内容的语义信息无关。进一步,假设一个被篡改的向量tp∈T和一个未被篡改的向量tij∈Ftr\T,如果它们对应的基准语义特征sp和sij具有显著的相似度,即它们可能具有相似的语义信息。然而,篡改向量tp和未篡改向量tij之间的高相似性并不是我们想要的,相反,这两个向量需要被推开以抑制语义信息。具体来说,与T中的向量相对应的基准语义向量集合记为Ts,对于每一个正向量tp∈P (tk),我们选择一个负向量tn 通过:

然后获得N (tk) = {tn}, N = 1 , · · · , | P (tk) |。

结合以上两部分,训练目标为:

其中α为LSSM中用于平衡两部分的权重因子。默认情况下,我们设置α = 0.5。

3.2. Boundary Guidance Module   边界引导模块

篡改区域的边界通常会留下可检测的痕迹,这使得隐藏篡改变得很困难。以前的工作试图通过将边界预测作为辅助任务来引导模型对这些边界痕迹的关注。然而,这两个任务在特征学习中服务于不同的目标。前者侧重于在边界上的伪影和操作痕迹,而后者有助于探索篡改和真实区域之间的对比差异。这使得模型很难独立地转换和统一它们[2]。因此,作为一项辅助任务,前者不能保证为后者提供收益。为了更好地利用边界信息,我们有两个目标:1)合理地转换和统一这两个任务;2)不仅要挖掘边界上的痕迹,还要引导模型关注边界内外相对较大区域的细微特征差异。

3.2.1 Differential Block  差分块

我们设计了一个差分块来实现区域预测和边界预测任务之间的合理转换。我们通过图5说明了我们的转换思想。ftr表示关注语义上不相关的篡改痕迹的特征映射。理想情况下,篡改区域和真实区域之间应该有明显的特征差异。fbd表示用于边界预测的特征,其中边界中存在显著的特征。ftr与fbd之间的转换可以使用如图5所示的卷积核来实现,即fbd = Conv (ftr)。这样就解决了两个任务之间的冲突,并且学习边界篡改特征不会对篡改特征的学习产生负面影响,因为边界监督被差分块转化为引导编码器去挖掘边界内外区域的细微差异。

在实际情况下,特征映射并不像上面所示的那样直观有序,不能合理有效地设计起差分作用的固定参数卷积核。这启发我们使用可训练但受约束的BayarConv[1]作为转换模块的核心组件。目的是学习当前卷积操作窗口的中心位置及其周围环境的特征之间的差异,而BayarConv的可训练参数允许模块的性能具有更大的灵活性。

如图6所示,与原始版本的BayarConv不同的是,我们对不同级别的Ftri使用扩展卷积并设置扩展尺度scalei,然后匹配相应尺度的Conv scalei,形成差分块DBi。我们可以通过Fbdi = DBi(Ftri)在两个不同任务的特征映射之间进行合理的转换。不同的尺度设置使得差分块在不同尺度的特征图上具有不同的感知范围。这是为了在更大的范围内最大限度地发挥边界监督的影响。BayarConv的约束条件是:

其中空间索引(0,0)为卷积滤波器的中心值。由于我们通过边界监督引导编码器关注局部区域的细微特征差异,在一定程度上限制了高级特征的接受域,进一步完成了语义无关特征的学习。

3.2.2 Soft Boundary Supervision   软边界监督

先前的方法[19,28,2]利用边缘检测方法提取的绝对边界GT Gabs。相比之下,我们采用滑动窗口W来测量每个像素到绝对边界的距离,而不是用二值标记来表示像素是否为边界,从而得到软边界真值G:

其中Wij表示以(i, j)为中心的窗口,gm,n表示像素级操作注释中(m, n)处的值。如图7所示的软边界监督与差分块更兼容,因为它提供了更合理的边界概念表达,并且显著增加了正像素级样本的数量,有利于分割任务。

常用的二值交叉熵(binary cross-entropy, BCE)损失函数无法提供软监督,且不能考虑不同像素的显著性变化,因此我们采用像素加权BCE损失和L1损失组合进行边界预测,记为

式中S = Segbd(X)∈RH×W。为了获得G中每个像素Gi,j的逐像素权重,我们对边界映射G进行二值化,然后在得到的二值映射中添加一个小常数γ,以获得一个软标签wi,j = Gi,j + γ。

3.3. Learning Objective   学习目标

在我们的方法的基线中,我们使用BCE损失函数进行操作定位和检测,分别称为Lseg和Lcls。通过组合各部分,我们得到了给出的总体学习目标:

其中λ1,λ2,λ3是用来平衡不同模块的权重因子。在我们的实验中,我们将λ1、λ2和λ3的默认值分别设置为0.2、0.5和0.5。值得注意的是,真实图像仅用于计算检测损失lcls。

4. Experiments

我们综合了最新的最先进的方法ObjectFormer[22]所使用的实验设置和评估指标,以便全面评估和公平比较。此外,我们对提出的插件相关的设置进行了详细的消融实验,并提供了必要的可视化,以更直观地说明每个模块的作用。

4.1. Experimental Setup

合成数据集。我们修改了现有的公共数据集,创建了一个由四种操作类型和三个子集组成的丰富数据集:1)ProDEFACTO,通过对原始DEFACTO[17]进行后处理得到,其中包含大量的数据,包括拼接(spli.)、复制移动(cpmv.)和擦除(inpa.),基于MS COCO[15]构建。2) PSBattles[9],收集自一个庞大的图像处理爱好者社区,提供了一种更精细的操作形式(ps.),在真实场景中更有价值,更难以检测。3)真实图像,从MS COCO和PSBattles中收集,对应所有选定的篡改图像。数据集中语义相关篡改操作的存在确保了预训练数据更符合现实场景。此外,数据集的这一特征证明了我们的方法能够学习与语义无关的特征。

我们将合成数据集划分为训练集和测试集。训练集用于模型的预训练,测试集用于消融实验。表1提供了关于该数据集的详细统计信息。

公共数据集。我们选择了五个公共数据集来评估我们模型的性能。表2给出了真实图像和篡改图像的数量,以及每个数据集中不同篡改类型的样本数量。为了确保与以前的工作[10,16,22]进行公平的比较,我们使用相同的训练/测试分割来微调模型。

评价指标。为了评估图像处理检测和定位,我们采用了像素级和图像级的度量。为了定位伪造区域,我们利用像素级指标,如曲线下面积(AUC)和F1分数,这是精度和召回分数的调和平均值。对于检测,我们报告了图像级AUC,灵敏度,特异性和F1评分来衡量误检率和虚警率。为了计算F1分数,我们在消融实验中使用了二值化的预测掩码和固定阈值为0.5的标签。为了确保与最先进的方法进行公平的比较,我们采用[22]中介绍的某种策略来选择最佳阈值。

实现。我们使用PyTorch实现SAFL-Net,并使用NVIDIA A100 GPU对其进行训练。输入大小设置为512×512,我们使用预训练的Efficientnet-b7[21]作为主干,使用ImageNet[3]进行预训练。使用AdamW进行优化,学习率为0.0002。在预训练阶段,我们训练了25个epoch的完整模型,批大小为16,学习率每5个epoch衰减2倍。我们只在训练中使用翻转作为数据增强技术。

4.2. Ablation Study

为了评估每个模块在增强泛化方面的有效性,我们对模型在训练期间未遇到的公共数据集进行了消融研究。消融研究的设置列于表3。

分类头的作用。本研究中比较的几种方法[25,10,27]不包括用于图像级预测的特定分类头。对于这些模型,图像级监督只能通过采用诸如平均像素级输出来计算图像级预测分数(cls# 0)的策略来执行。然而,这种方法可能导致模型过于保守,偏向于负面预测,从而导致更高的特异性和异常敏感性。为了解决这个问题并确保图像级检测任务的性能,我们引入了一个专用的分类头(cls# 1),它有效地平衡了特异性和灵敏度,从而显著提高了像素级性能。我们将此配置作为baseline (Setup#1)。

BGM的效果。以前的工作,如MFCN[19]和GSR-Net[28]使用篡改边界预测作为辅助任务(bdSup#0)。然而,由于区域分割和边缘检测本质上是不同的任务,因此很难在它们之间找到一个合适的平衡[4]。setup#2中的结果证明了这种差异的存在及其可能产生的负面影响。

我们提出了边界指导模块(BGM#1),其中包括差分块,以建立两个任务之间的转换桥梁。这种转换结构引导模型不仅关注沿边界的篡改伪影,而且通过边界引导发现边界内外细微的特征差异。setup#3的实验结果证明了该模块的有效性。此外,我们开发了一个针对所提出的软边界监督(BGM#2)的损失函数LBGM,该函数用于setup#4。

SSM的作用。SSM模块通过利用基准语义特征对核心篡改特征提取器施加直接约束。从全局特征的角度来看,该模块通过图像约束损失Lcons (SSM#1)约束从特征映射中提取的信息偏离其自然语义信息。此外,该模块通过对比学习损失Lcont (SSM#2)增强局部特征学习,该Lcont通过正负样本选择策略进一步强调语义不可知学习。

比较setup#6和setup#5,可以证明Lcont在像素级定位任务中的有效性。总体而言,SSM模块对ps.篡改类型的改进最为显著,表明该模块有效地抑制了语义相关的特征学习以提取篡改伪影特征。

4.3. Comparison with the State-of-the-art

我们将我们的方法与其他最先进的方法在两种设置下进行比较:1)在集成数据集上进行预训练,并在其他测试数据集上进行评估。2)在测试数据集的训练分割上对预训练模型进行微调,并对其测试分割进行评估。

方法比较。我们将我们的方法与以下描述的各种模型进行比较:Mantra-Net[25],它使用SRM和BayarConv提取痕迹特征,并使用异常检测网络对伪造进行定位。RGB- n[29],它利用RGB流和噪声流来独立识别图像中的篡改特征和噪声不一致。SPAN[10],采用Mantra-Net的特征提取器,引入金字塔空间注意力架构。MVSS-Net[2]和MVSSNet++[4]分别由边界监督分支和噪声敏感分支组成,并采用双注意[6]进行特征融合。CL-Net[27],提出了一种基于对比学习的表征学习方法。PSCC-Net[16],它引入了一个具有密集交叉连接的网络,以利用不同尺度的特征。ObjectFormer[22],结合RGB特征和高频特征作为patch embeddings,采用transformer架构。我们采用一致的实验设置,并利用各自论文中报告的结果。

Pretrained模型。预训练模型的像素级定位性能如表4所示。SAFL-Net在大多数数据集上实现了最先进的性能,特别是在真实数据集IMD20上,它达到了96.5,比ObjectFormer高出14.4。在Columbia数据集上,我们分别超过CL-Net和ObjectFormer 2.4和1.4,但落后于PSCC-Net 1.3。我们假设这可能是因为PSCC-Net使用的综合训练数据与Columbia数据集[22]的分布非常相似。在其他数据集上的结果进一步验证了这一点,表明SAFL-Net优于PSCC-Net。值得注意的是,与MVSS-Net之外的其他方法相比,我们使用较少的预训练数据获得了很好的结果。

我们还在[10]引入的CASIA-D上对我们的模型进行了评估,以展示图像级检测性能,结果如表5所示。我们的AUC指标落后于ObjectFormer 0.22,但我们的F1指标超过ObjectFormer 1.03,实现了最先进的性能。这突出了BGM和SSM在捕获操作伪影方面的有效性。

微调模型。按照[22]中的方法,我们对特定数据集上的预训练模型进行了微调,结果如表6所示。AUC和F1分数的显著提高表明SAFL-Net能够在不受语义信息影响的情况下学习篡改特征。

4.4. Visualization

通过各种方法和SAFL-Net预测的输出可视化如图1所示。为了进行分析,我们选择了三张高质量的经过处理的图像,它们与现实世界的场景非常相似,这些图像分别来自PSBattles、IMD20和NIST16。具有显著语义关联的像素级虚警被识别并用绿框标记。对于更复杂、更接近真实场景的操纵图像,依赖于手工制作特征(如Mantra-Net和SPAN)的传统方法无法表现良好,而具有先进和复杂结构(如MVSS-Net)的模型则会遭受严重的语义相关假警报。SAFL-Net学习语义不可知的特征,使其能够准确地定位篡改区域,并在没有伪造的情况下减少区域的假警报。

为了更好地发挥BGM的作用,我们专门设计了一个软边界监督G和相应的损失函数LBGM。为了突出与使用绝对边界掩码Gabs和BCE损失Lbce相比,使用这种方法获得的性能增益,我们将各种设置下的输出可视化,如图8所示。

4.5. Robustness Evaluation

由于图像在传播过程中不可避免地要进行各种后处理操作,因此鲁棒性也具有至关重要的意义。我们按照[22]中的方法,对NIST16数据集的原始图像应用不同的图像失真方法来评估我们模型的鲁棒性。将我们的预训练模型和其他方法在这些损坏数据上的操作定位性能(AUC分数)进行比较,结果如表7所示。与其他方法相比,我们的SAFL-Net对各种失真技术具有更好的鲁棒性。

4.6. Statistics of Semantic Correlation

为了量化模型预测与篡改区域内特定语义之间的相关性,我们使用TCAV[12]进行统计分析。TCAV作为一种解释工具,可以量化用户定义的概念和特定预测之间的关联程度。我们选择了图像篡改数据集中经常遇到的几个语义作为概念进行分析。这些概念包括人物、动物、艺术品、建筑和植物。在本研究中,使用来自CASIA的示例输入图像集定义高级概念。这种选择的动机是与所选语义类别相对应的大量篡改区域集合。

图9中的消融研究以及与其他研究的比较表明了语义不可知特征学习的能力。现有的研究和没有额外约束的基线模型在预测篡改方面都表现出很强的相关性,而我们在SSM模块中的设计始终显示出有效的语义不可知特征学习能力。

5. Conclusion

我们介绍了SAFL-Net,这是一个带有两个辅助插件的网络,用于图像处理检测和定位。为了限制特征的语义,提高模型的泛化性能,语义抑制模块(SSM)直接根据基准语义表示来限制语义信息。边界引导模块(BGM)通过特征转换结构实现了辅助边界预测任务与原始区域预测任务的统一。此外,还探讨了篡改区域边界两侧的细微差异。在不同基准上的大量实验证明了所提出的模块和我们的框架的有效性。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值