IRUNet for medical image segmentation

提出了一种改进的UNet架构IRUNet,用于高效分割显微图像中的炭疽杆菌和免疫细胞。该模型利用多尺度跳跃连接、残差块和初始块,并采用EfficientNetB6作为编码器主干。

IRUNet for medical image segmentation
发表期刊:Expert Systems With Applications
发表时间:2022年
文章为本人学习过程中翻译的相关文献,非本人发表。此外,如有侵权,请联系删除博客。

Abstract

近年来,深度学习被广泛用于分割医学图像,帮助医生更好地诊断和治疗疾病。炭疽病是一种全球分布的严重传染病。诊断这种疾病的最重要方法之一是对含有患者组织样本的载玻片进行显微镜检查。用于幻灯片图像分割的最先进模型基于深度神经网络并具有编码器-解码器架构,例如全卷积网络、UNet 及其变体。跳过连接在此类模型中起着关键作用。然而,在许多这些模型中,跳过连接仅聚合与编码器和解码器部分的相同尺度相关的特征,这会降低分割的质量。我们提出了一种改进的基于 UNet 的架构来分割患者组织样本的显微图像。所提出的模型称为 IRUNet,它利用了跳跃连接中的初始块和残差块,并结合了多尺度特征,以便提取更好的分割特征。此外,为了在编码器部分提取强大的表示,已经使用了几个卷积网络作为主干,并研究了它们对分割结果的影响。实验结果表明,尽管在显微图像分析领域存在图像分辨率高、对比度不同、图像伪影、对象拥挤和重叠等诸多挑战,IRUNet在医学图像分割方面的性能优于state-of-the-art模型。准确率92.8%,查全率93%,Dice分数92.9%,成绩斐然。

Introduction

机器学习技术已广泛应用于医学和生物领域,并且非常成功(Goodfellow et al., 2016)。计算机辅助显微成像在疾病的诊断和预后中发挥着重要作用。显微图像分析可以帮助诊断各种疾病,包括乳腺癌、肺癌、脑肿瘤等。对含有彩色样品的大量载玻片进行目视检查可能是一项乏味的任务。此外,几位专家的此类检查结果很少相同(Grana & Chyzhyk, 2015; Nie et al., 2016; Sommer & Gerlich, 2013)。此外,与 MRI、超声等其他成像技术相比,显微成像具有复杂的独特特征。高分辨率显微图像包含复杂的模式和依赖关系,因此它们与疾病类型或图像标签具有非常复杂的关系。在数字病理学中,图像数据通常使用特定的染色方法生成,该方法具有许多处理挑战,例如复杂的背景、不均匀的强度、细胞/细胞核接触和重叠 (McCann et al., 2014; Xing & Yang, 2016).

深度学习通过解决医学图像处理领域的许多问题,如计算机断层扫描 (CT)、磁共振成像 (MRI)、超声和病理图像的分类、检测和分割,证明了它的强大。它是一种学习方法,通过处理原始数据自动提取适当的特征,与其他方法相比,结果要好得多(LeCun et al., 2015)。它在显微图像分析中引起了很多关注,包括细胞核检测、细胞分割、组织分割、图像分类等(Sirinukunwattana et al., 2016)。

深度学习架构的潜力使其成为医学图像分割的主要选择。语义分割是为所考虑图像中的每个像素分配类标签的过程。卷积神经网络 (CNN) 作为第一个语义分割网络,将其视为在像素级别对图像进行分类的过程,并且可以通过考虑从特定像素周围提取的patch来使用。这种方法的主要缺点是由于相邻块的重叠,相似的卷积要计算多次。然后通过用卷积层替换全连接层提出了全卷积神经网络(FCNN),该卷积层可用于通过端到端训练创建概率图。这种方法极大地提高了图像分割的计算效率(Long et al., 2015)。对 FCNN 进行了各种修改,以进一步提高其性能;例如SegNet (Chen et al., 2017)、UNet (Ronneberger et al., 2015)、不同版本的 DeepLab (Chen et al., 2018)、具有特征级密集连接的级联架构 (Bilinski & Prisacariu, 2018)、 deep ReUNet (Zhang et al., 2018), PSPNet (H. Zhao et al., 2017), UNet++ (Zhou et al., 2018), HRNet (Yuan et al., 2019) 和 R2U-Net (Alom et al. ., 2018)。

UNet 是一种编码器-解码器网络,广泛用于医学图像的语义分割。在该模型中,跳过连接用于将编码器的高级语义特征图与相同比例解码器的低级特征图直接组合。在一些改进的基于 UNet 的模型如 UNet++ 中,已经尝试通过在和解码器的特征图结合特征之前加强与编码器相关的特征图来减少编码器和解码器子网络的特征图之间的语义差异,并提高分割效率。

本文提出的模型相对于 UNet 有四个优点: 1)使用更多的跳跃连接来组合多尺度特征,解决语义不同特征的组合问题; 2)利用编码器和解码器之间跳过连接中的残差块,以及解码器子网络中跳过连接中的初始块来改进特征表示; 3) 评估几种架构作为编码器的主干,并选择实现最佳分割性能的 EfficientNet; 4)通过提出混合加权损失函数来处理数据不平衡并获得更好的Dice分数和IOU,从而提高分割效率。

Materials and methods

The dataset

所提出的模型在两个数据集上进行训练和评估,这些数据集是通过从载玻片的不同区域成像获得的,包括患有炭疽病的患者的组织样本(图 1)。
Fig.1
为了训练和评估本文提出的模型和其他研究模型,我们准备了两个不同的数据集。第一个数据集由 43 张载玻片准备,包括来自炭疽患者的组织样本,其中 196 张图像是通过对载玻片的不同区域进行成像获得的。第二个数据集的图像比第一个数据集包含更多的细菌并且更具挑战性,它是通过从包含患者组织样本的 45 张幻灯片中获取 203 张图像来准备的。与这两个数据集相关的图像示例如图 2 所示。这些幻灯片是与生物化学和血清学实验室的 Esfarayen 医学院副校长合作提供的。

Fig.2
Fig.2 准备好的数据集的一些图像。第一行:来自第一个数据集的样本图像。第二行:来自第二个数据集的样本图像。

与自然图像相比,医学图像尤其是显微图像的分割需要更高的精度来准确诊断和治疗各种疾病的类型和阶段。这些图像具有许多挑战,例如重要微观成分的形状、角度和颜色强度不同,不同区域的重叠;部分图像中一些免疫细胞、染色点和组织细丝的相似性。图 3 显示了在显微图像中检测和分割重要物体(包括细胞和细菌)中的一些挑战。

Fig.3
Fig.3 与准备好的数据集相关的两个显微图像示例。

Detection and segmentation of Bacillus anthracis bacteria and immune cells

检查包含染色样本的大量载玻片是一项无聊的任务,并且取决于专家的先验知识。有时不同的专家可能会以不同的方式解释同一张幻灯片。为了克服这些问题,提出了使用机器视觉和图像处理算法对医学图像进行自动分析(Gurcan et al., 2009)。有效和自动分割显微图像中的细胞核/细胞或细菌,作为计算机辅助诊断的基本前提,是许多医学图像分析的基础,例如疾病诊断和预后、细胞类型和形态的诊断,以及细菌类型的诊断。 (梅杰林,2012)。

除了一些关于炭疽杆菌检测和分割的研究外,该领域还没有其他论文发表。例如,(Y. Zhao et al., 2020)、(Y. Zhao et al., 2019) 和 (Wang et al., 2019) 对炭疽孢子进行了分割(与农作物、水果和蔬菜有关,与人类无关) 在从孢子培养容器制备的显微图像中。同样在我们之前的论文(Hoorali 等人,2020 年)中,研究了类似显微图像中炭疽杆菌的检测和分割。

在本文中,我们提出了一种改进的基于 UNet 的架构,用于在第 2.1 节中提供的两个具有挑战性的数据集上对与炭疽患者相关的组织样本的显微图像中的炭疽杆菌和重要的免疫细胞进行分割。

IRUNet

大多数用于分割的常见深度模型都基于编码器-解码器结构,该结构将来自解码器的空间信息与来自编码器的局部信息相结合。将相同尺度的不同特征组合起来,就像 UNet 中发生的那样,会降低分割的质量。由于我们的目标是对显微图像进行分割,并且鉴于该领域存在许多挑战,因此我们必须对 UNet 的结构进行更改以提高分割效率。我们知道不同尺度的特征图包含不同的信息,将这些特征结合起来是获得更好表示的好主意。此外,我们利用所提出架构中的初始块和残差块来获得更好的性能。所提出的基于 UNet 的模型的图示,称为 IRUNet (Inception-Res-UNet),如图 4 所示。

Fig.4
Fig.4 IRUNet:提出的医学图像分割架构。

所提出的架构利用了不同尺度的初始块、残差块和跳过连接。它还使用 EfficientNet 作为其编码器的主干。事实上,我们没有使用原始 UNet 架构的通用编码器,而是检查了 VGG、ResNet、DenseNet 等各种深度网络,最后,基于分割结果,我们将 EfficientNet (Tan & Le, 2019) 视为新的骨干。实验结果部分给出了不同主干的分割结果。在 EfficientNet 中,系统地检查模型缩放以根据可用的计算资源提高准确性。通过平衡深度、宽度和分辨率,与最先进的网络相比,它能够更准确地对 ImageNet 数据集进行分类,即使参数更少。

在编码器和解码器之间的跳过连接中使用残差块有助于我们以更好的表示提取更有效的特征。此外,解码器部分的跳过连接中的初始块的集成为网络提供了不同尺度和不同内核大小的特征。这些变化将提高分割效率。

我们知道不同尺度的特征图包含不同的信息;即,较大的尺度包含对象的边缘和角落等低级信息,较小的尺度包含高级语义信息并确定对象的位置(Lin et al., 2017; Zhou et al., 2018)。为了保持所有尺度的特征,我们使用编码器和解码器之间的跳跃连接以及解码器子网络中的跳跃连接,使用不同尺度的特征组合(参见图4中的虚线箭头和绿色箭头)。

如图 4 所示,Out1 到 Out4 是所提出架构的编码器骨干在不同尺度上的输出。在 EfficientNetB4 和 B6 架构作为主干的情况下(第 3 节),这些输出分别取自与块 2、3、4 和 6 对应的批量归一化层

在提议的 U 型架构的底部,使用了一个初始块和两个残差块。此外,在不同尺度的编码器和解码器之间的跳跃连接中使用了另一个残差块,并且在解码器部分的跳跃连接中使用了两个初始块。残差块和初始块的结构如图 5 所示。图中指定了每个块中使用的滤波器的数量和大小。

Fig.5
Fig.5 (a) Inception 和 (b) 提议的 IRUNet 模型中使用的Residual blocks。

Implementation

Data Preparation and Pre-Processing

为了准备用于模型训练和评估的数据集,在微生物学家的指导下,通过检测和分割与显微图像中重要对象相关的区域,包括炭疽杆菌和重要的免疫系统细胞(巨噬细胞、淋巴细胞和中性粒细胞)进行数据注释。由于我们的 GPU 内存有限,输入图像被调整为 512×512 像素,然后使用窗口大小为 64×64(所以输入图像大小是64×64?) 和 50% 重叠的滑动窗口技术扫描整个图像进行训练。为了测试网络,使用相同的窗口大小,步长为 8 像素

通过对原始显微图像应用特征归一化来执行预处理阶段。图像归一化 (Pal & Sudeep, 2016) 根据公式 (1) 执行。

Eq.(1)
其中 μ 和 σ 是所有训练数据的平均强度值和标准差。此过程适用于训练和测试图像。这增加了网络的泛化能力并加速了梯度下降算法的收敛(Ruder,2016)。

数据增强(包括 8 个角度的旋转、翻转、缩放和颜色放大)用于提高模型的泛化能力并防止过度拟合。数据增强的另一个重要优势是通过增加数据集的大小而不需要图像注释来提高网络的分割精度。

Loss function

显微图像分割中另一个降低分割效率的重要挑战是不同类别的训练数据不平衡。显微图像的重要对象,包括作为分割目标的炭疽杆菌和免疫细胞,与背景相比,面积非常小。另一方面,Dice score 和 IOU 是评估语义分割的两个主要标准。为了处理数据不平衡并获得更好的 Dice 分数和 IOU,我们提出了一种混合加权损失函数,如方程式(2)所示:
Eq.(2)
这里WCW_CWC 是与每个类别相关的系数。它与每个类相关的数据量成反比。 LossCELoss_{CE}LossCELossDiceLoss_{Dice}LossDiceLossIOULoss_{IOU}LossIOU 分别是分类交叉熵损失、软 dice coefficient 损失和 IOU 损失。 LossDiceLoss_{Dice}LossDiceLossIOULoss_{IOU}LossIOU 定义如下:
Eq.(3)(4)
Dice 和 IOU 是评估分割结果质量的两个重要指标。 α、β 和 γ 是这些损失的权重系数,并通过实验选择(α = 1,β = 3,γ = 3)。

Parameter settings

在本节中,提供了有关所提出架构的参数的更多详细信息。初始学习率为 0.001,每 1000 次迭代降低 10%。批量大小为 8,使用 Adam 作为优化方法。从所有图像中,选择 80% 用于训练,20% 用于测试。此外,为了防止过度拟合,随机将 18% 的训练数据视为验证数据

模型中间部分的下采样是通过 2 × 2 最大池化进行的,步长为 2。解码器子网络中使用的所有卷积和转置卷积滤波器的大小为 3 × 3,步长为 2,除了解码器的最后一层,其中过滤器的大小为 1 × 1。最后一层中的过滤器数量等于所需的类数(包括背景在内的 5 个类)。在所提出模型的解码器部分使用了一些速率为 0.2 的 dropout 层,以进一步提高网络的泛化能力。

为了防止过拟合,epoch 的数量是根据验证数据确定的。这意味着在验证损失减少时继续训练,当验证损失开始增加时,网络训练停止。顺便说一句,已经通过考虑不同的超参数进行了一些实验,并选择了产生最佳分割结果的那些进行训练。

Post-Processing

为了减少本文提出的模型和所有研究模型的预测误差,使用条件随机场(CRF)后处理方法(Dhawan et al., 2019),将其应用于分割结果模型,提高分割效率。该方法可以对相邻像素之间的关系进行建模,应用于分割模型生成的概率图。基于具有相似强度的像素属于特定目标的事实,它修改了像素的标签并改善了分割结果

Experimental results and discussion

为了定量评估 IRUNet 和其他现有模型的语义分割结果,使用了 IOU、Dice、精度和召回标准。

在实验的第一部分,通过考虑不同的卷积网络作为编码器的主干,比较了 UNet 和 UNet++ 的分割结果。在选择了最佳主干后,比较了 UNet 和 UNet++ 模型的性能。下一步研究了使用所提出的加权损失函数与加权交叉熵损失函数相比对分割效率的影响。此外,还研究了使用不同的优化器、初始块和残差块、不同尺度的跳过连接以及后处理对所提出模型的分割结果的影响。

Effect of using different convolution networks as the Encoder’s backbone

如前所述,为了提高分割效率,评估了几种架构作为 UNet 和 UNet++ 的编码器骨干。表 1 给出了从中提取不同尺度特征图的层名称(编码器和解码器之间跳过连接的输入)。

Table1
UNet 和 UNet++ 考虑不同主干的分割结果如表 2 所示。为了在训练过程中更好地收敛,我们使用预训练的 ImageNet 权重初始化所有网络。在第一个实验中,加权分类交叉熵已被用作 UNet 和 UNet++ 的损失函数来更新权重。

Table2
由于免疫细胞彼此之间的高度相似性,细菌与组织细丝的相似性,以及在显微图像中存在类似于重要物体的伪影和染色点,因此可能对它们进行错误分类。因此,精确标准比召回标准差,这意味着与假阴性相比,假阳性更高。

从表 2 中可以看出,在所有实验中,UNet++ 的表现都优于 UNet。通过比较 UNet 和 UNet++ 不同主干的分割性能,可以得出 EfficientNetB4 和 EfficientNetB6 的性能优于其他。此外,通过比较 DenseNet-121 和 DenseNet201 的性能,可以得出结论,使用更深的网络不一定会带来更好的分割结果。

Effect of using the proposed weighted loss function

EfficientNet 是最先进的卷积网络,通过平衡深度、宽度和分辨率,以更少的参数实现更高的分类精度。从 B0 到 B7 的不同版本的 EfficientNet 有不同的规模和不同的参数(从 530 万到 6600 万个参数)。

在接下来的部分实验中,我们对比了加权交叉熵损失函数(LWCEL_{WCE}LWCE),检验了所提出的加权损失函数(LSegL_{Seg}LSeg)的效果。由于使用 EfficientNet 作为编码器的主干,产生了最好的结果,我们只检查了它的两个版本,名为 B4 和 B6。还测试了具有 5 个跳过连接的 EfficientNetB7,但与 B4 和 B6 相比,这种更深的架构并没有改善结果,并且由于参数数量更多和训练时间更长,因此没有进一步使用。两种损失函数的分割结果如表3所示。

Table3

根据表 3 中的分割结果,与LWCEL_{WCE}LWCE 和 EfficientNet6 编码器相比,提出的损失函数 LSegL_{Seg}LSeg 在大多数分割标准中表现更好。 EfficientNetB4 仅在召回标准方面表现更好,可以说使用这个网络作为编码器的主干已经能够在一定程度上降低假阴性率。相比之下,EfficientNetB6 骨干网通过降低误报率显着提高了基于精度标准的分割质量。此外,正如预期的那样,UNet++ 在分割显微图像方面比 UNet 更成功。

根据表2和表3表示的结果,在后续的实验中,选择EfficientNet B6作为编码器的主干,LSeg作为所提出模型的损失函数。

Effect of using different optimizers

为了找到最佳优化器,建议模型的性能通过应用 SGD、Adam、Nadam 和 RMSProp 作为优化器来评估。使用这些优化器的建议模型的分割结果如表 4 所示。如表所示,SGD 在所有优化器中性能最弱,Adam 优化器性能最好,IOU 和 Dice 分别为 86.70% 和 92.9%,分别。 Nadam 的性能与 Adam 接近,但由于 Adam 的优越性,该优化器已被用于所有实验。
Table4

Effect of the added Blocks, additional skip connections and CRF Post-Processing

在本实验中,我们研究了使用初始块和残差块、所提出模型中的附加跳过连接以及 CRF 后处理对提高分割效率的影响。评估了四种不同的模型;一个没有初始块,一个没有残差块,一个没有不同尺度的额外跳过连接,最后一个没有使用 CRF 后处理。该消融研究的结果如表 5 所示。
Fig.5
如表 5 所示,与其他组件相比,在所提出的模型中使用额外的多尺度跳跃连接对提高分割效率的影响最大。在跳过连接之后,Inception 块和 CRF 后处理对提高模型性能的作用最大。最后,Residual块的改进份额最低。

为了更好地理解 CRF 后处理的效果,对于测试集的原始图像patch,在图 6 中给出了带有和不带有后处理的所提出模型的分割结果。如图所示,应用在所提出的架构产生的概率图上的 CRF 可以对相邻像素之间的关系进行建模。事实上,基于具有相似强度的像素属于特定目标这一事实,CRF 修改了像素的标签并减少了错误分类的像素。

Fig.6
Fig.6 应用 CRF 后处理对 IRUNet 分割结果的影响。第一行是ground truth,第二行显示了所提出模型的分割结果,第三行显示了应用CRF后处理后的结果。 a) 原始图像patch,b) 中性粒细胞掩膜,c) 巨噬细胞掩膜,d) 淋巴细胞掩膜,e) 细菌掩膜。

Comparison with other UNet based models

在迄今为止进行的所有实验中,模型的评估结果都报告在第一个数据集上。在本实验中,将所提出模型的性能与 UNet 和 UNet++ 的原始模型以及使用 EfficientNetB6 作为编码器主干的两个修改版本进行了比较。 UNet 和 UNet++ 的参数以及用于更新权重的损失函数是根据他们论文中所述的内容设置的。这些模型在两个数据集上的评估结果分别如表 6 和表 7 所示。
Table6 and Table7
根据表 6 和表 7,可以推断我们对 UNet 编码器和解码器部分的更改提高了分割效率。所提出的模型通过减少假阳性和增加真阳性显着改善了所有评估标准。然而,由于第二个数据集的图像更具挑战性,假阳性率更高,这导致与第一个数据集相比,精度标准变差。

对于定性评估,图 7 给出了所提出的模型、具有 EfficientNetB6 主干的 UNet++ 和具有 EfficientNetB6 主干的 UNet 对测试集的两个原始图像的分割结果。在该图中,淋巴细胞、巨噬细胞、中性粒细胞和 B . 炭疽杆菌分别显示为黄色、紫色、绿色和红色。

Fig.7
Fig.7 所提出模型的分割结果的定性比较,UNet++ 与 EfficientNetB6 主干和 UNet 与 EfficientNetB6 主干。

将分割结果与基本事实进行比较表明,尽管存在挑战,但所提出的架构表现得非常好。可以看出,所提出模型的预测和基本事实看起来非常相似。具有 EfficientNetB6 主干的 UNet++ 也表现良好,尽管与提出的模型相比,它具有更多的误报。具有 EfficientNetB6 主干的 UNet 具有更多的误报,并将第一张图像的不重要区域分类为巨噬细胞(以黑框显示)。

图 8 显示了在包含细菌和主要免疫细胞(包括淋巴细胞、巨噬细胞和中性粒细胞)的两个测试图像上应用 IRUNet 模型的分割结果。如数据准备和预处理部分所述,滑动窗口技术已用于训练模型。为了测试整个原始显微图像,使用步幅为 8 的相同技术从patch重建分割图像。在这两个图像中,所提出的架构成功地检测和分割了重要组件。但是在第一张图像中,没有诊断价值的图像区域被识别为巨噬细胞(显示在几乎在第一张图像中心的黑框内)。
Fig.8
Fig.8 提出的 IRUNet 模型对原始测试图像的分割结果。 a) 原始测试图像,b) 真实图像,c) 分割结果。

Conclusion

提出了一种新的基于 UNet 的模型,用于在显微图像中检测和分割炭疽杆菌和免疫系统的主要细胞。由于疲劳和随着时间的推移视力下降,人类对疾病的微观诊断可能不够准确。此外,这种疾病的显微图像中的炭疽杆菌数量非常少,这使得专家难以诊断。因此,提供一种对这种细菌和免疫系统重要细胞进行自动检测和分割的方法,对于诊断和确定这种疾病的治疗过程非常有帮助。在这方面,我们使用从炭疽患者组织中取出的不同区域的载玻片的显微成像准备了两个数据集。图像是在不同的条件下获得的,分割的挑战很多,包括图像拥挤、对象数量多、不同对象重叠、对象在图像不同部分的各种外观以及不同对象之间的相似性。然后将准备好的图像调整为 512 × 512 像素并归一化以适合以后的处理。数据增强用于增加泛化能力并加速模型在训练过程中的收敛。

为了分割显微图像,我们首先研究了两种流行的架构,UNet 和 UNet++,它们通常在分割医学图像方面是成功的。这些模型在两个准备好的数据集上进行了评估,这些数据集包括 196 个和 203 个显微图像。

我们没有使用原始 UNet 和 UNet++ 架构的通用编码器,而是检查了各种流行的卷积神经网络,并根据分割结果,我们选择了 EfficientNetB6 作为编码器的主干。此外,条件随机场(CRF)后处理用于减少模型的预测误差。

在下一步中,我们提出了一种新的架构,称为 IRUNet,以提高分割性能。所提出的架构利用了不同尺度的初始块、残差块和跳跃连接。它的编码器主干也被 EfficientNetB6 取代。此外,鉴于显微图像分割的一个重要挑战是不同类别的数据不平衡,我们提出了一种混合加权损失函数,它是 LossCE、LossDice 和 LossIOU 的组合。此外,为每个类分配一个权重,该权重与该类中的数据量成反比。将该损失函数与加权交叉熵损失函数进行比较,并通过实验证实了其优越性。此外,模型的不同组件(如优化器、初始块和残差块、新的跳过连接和 CRF 后处理)的影响也分别进行了研究。实验结果表明,新的跳跃连接对模型性能的影响最大。就对模型性能的影响而言,初始块、CRF 后处理和残差块分别位于下一个等级。

还针对所提出的模型检查了具有 EfficientNetB6 编码器主干的 UNet 和 UNet++ 架构的性能。与 UNet 和 UNet++ 相比,所提出的模型通过降低假阳性率和增加真阳性显着提高了所有评估标准。总体而言,根据精度和召回标准,它的表现优于其他两个模型,第一个数据集的值为 0.928 和 0.93,第二个数据集的值为 0.862 和 0.941。

自动炭疽病诊断和确定具有高诊断能力、低成本和高速度的重要图像分量的准确区域是所提出系统的优点。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值