PSPNet《Pyramid Scene Parsing Network》论文阅读及代码实现

【PSPNet】Pyramid Scene Parsing Network 引介 CVPR 2017,所属领域为Semantic Segmentation. Abstract 场景解析对于无限制的开放词汇和不同场景来说是具有挑战性的.本文使用文中的pyramid pooling module实现基于不同区域的上下文集成,提出了PSPNet,实现利用上下文信息的能力进行场景解析. Motivation 作者认为,FCN存在的主要问题是没有采取合适的策略来用... 阅读详情

论文原文

https://arxiv.org/abs/1612.01105

摘要

\quad 本文提出的金字塔池化模块( pyramid pooling module)能够聚合不同区域的上下文信息,从而提高获取全局信息的能力。实验表明这样的先验表示(即指代PSP这个结构)是有效的,在多个数据集上展现了优良的效果。

介绍

\quad 场景解析(Scene Parsing)的难度与场景的标签密切相关。先大多数先进的场景解析框架大多数基于FCN,但FCN存在的几个问题:

  • Mismatched Relationship:上下文关系匹配对理解复杂场景很重要,例如在上图第一行,在水面上的大很可能是“boat”,而不是“car”。虽然“boat和“car”很像。FCN缺乏依据上下文推断的能力。
  • Confusion Categories: 许多标签之间存在关联,可以通过标签之间的关系弥补。上图第二行,把摩天大厦的一部分识别为建筑物,这应该只是其中一个,而不是二者。这可以通过类别之间的关系弥补。
  • Inconspicuous Classes:模型可能会忽略小的东西,而大的东西可能会超过FCN接收范围,从而导致不连续的预测。如上图第三行,枕头与被子材质一致,被识别成到一起了。为了提高不显眼东西的分割效果,应该注重小面积物体。
    \quad 总的来说,FCN不能有效的处理场景之间的信息和全局信息,为了对FCN的这些缺点加以克服,提出了PSPNet。可以融合合适的全局特征,将局部和全局信息融合到一起,并提出了一个适度监督损失的优化策略,在多个数据集state of art。
    \quad 论文的主要贡献为:
  • 提出了一个金字塔场景解析网络,能够将难解析的场景信息特征嵌入基于FCN预测框架中
  • 在基于深度监督损失ResNet上制定有效的优化策略
  • 构建了一个实用的系统,用于场景解析和语义分割,并包含了实施细节

相关工作

\quad 受到深度神经网络的驱动,场景解析和语义分割获得了极大的进展。例如FCN,ENet等工作。许多深度卷积神经网络为了扩大高层feature的感受野,常用空洞卷积,coarse-to-fine结构等方法。本文基于先前的工作,使用了带dilated卷积的FCN。
\quad 大多数语义分割模型的工作基于2个方面:

  • 具有多尺度的特征融合,高层特征具有强的语义信息,底层特征包含更多的细节。
  • 基于结构预测。例如使用CRF(条件随机场)做后端细化分割结果。
    \quad 为了充分的利用全局特征层次先验知识来进行不同场景理解,本文提出的PSP模块能够聚合不同区域的上下文从而达到获取全局上下文的目的。

PSP网络

3.1 一些观察

这个在上面已经讲了,就是FCN的缺点。

3.2 PSP 模块

\quad 在CNN中感受野可以粗略的被认为是使用上下文信息的大小,论文指出在许多网络中没有充分的获取全局信息,所以效果不好。要解决这一问题,常用方法是:

  • 用全局平均池化处理:但这在某些数据上上可能会失去空间关系导致模糊。
  • 由金字塔池化产生不同层次的特征最后被平滑的连接层一个FC层做分类。这样可以去除CNN固定大小的图像分类约束,减少不同区域之间的信息损失。
    论文提出了一个具有层次全局优先级,包含不同子区域之间的不同尺度信息,称之为pyramid pooling module。
    在这里插入图片描述 \quad 该模块融合了4种不同金字塔尺度的特征,第一行红色是最粗糙的特征–全局池化生成单个bin输出,后面三行是不同尺度的池化特征。为了保证全局特征的权重,如果金字塔共有N个级别,则在每个级别后使用1×11×1的卷积将对于级别通道降为原本的1/N。再通过双线性插值获得未池化前的大小,最终concat到一起。
    \quad 金字塔等级的池化核大小是可以设定的,这与送到金字塔的输入有关,论文中使用的4个等级,核大小分别为 1 × 1 1\times1 1×1, 2 × 2 2\times2 2×2, 3 × 3 3\times3 3×3, 6 × 6 6\times6 6×6。还需要注意一点的是,基础层经过预训练的模型(ResNet101)和空洞卷积策略提取feature map,提取后的feature map是输入的1/8大小。feature map经过Pyramid Pooling Module得到融合的带有整体信息的feature,再上采样并和池化前的feature map相concat。最后过一个卷积层得到最终输出。PSPNet本身提供了一个全局上下文的先验(即指代Pyramid Pooling Module这个结构),后面的实验会验证这一结构的有效性。

基于ResNet的深度监督网络

在这里插入图片描述PSPNet的基础网络层是在ResNet101的基础上做了改进,除了使用后面的softmax分类做loss,额外的在第四阶段添加了一个辅助的loss,两个loss一起传播,使用不同的权重,共同优化参数。后续的实验证明这样做有利于快速收敛。

实验

训练超参数和训练细节为,学习率设置为"poly"衰减策略,即 l r = l r b a s e ∗ ( 1 − i t e r m a x i t e r ) p o w e r lr=lr_{base}*(1-\frac{iter}{max_{iter}})^{power} lr=lrbase​∗(1−maxiter​iter​)power,设置 l r b a s e lr_{base} lrbase​等于0.01, p o w e r power power等于0.9,衰减动量设置为0.9,。在ImageNet上设置迭代次数为150K,PASCAL VOC设置迭代次数为30K,Cityscapes设置为90K。数据增强做了随机反转,尺寸在0.5-2之间的缩放,角度在-10到10之间旋转,随机的高斯滤波。batchsize设为16,辅助损失的权重为0.4,使用caffe训练。

  • 测试不同配置下的ResNet的性能,找到比较好的预训练模型:
    在这里插入图片描述可以看到做平均池化的都比最大池化效果要好,最后将多个操作结合得到最终最好的效果。
  • 测试辅助Loss的影响

在这里插入图片描述实验都是以ResNet50-Baseline为基准,最后以α=0.4α=0.4为最佳。

  • 测试预训练模型的深度:
    在这里插入图片描述可以看到在测试的{50,101,152,269}这四个层次的网络中,网络越深,效果越好。
  • 多种技巧融合:
    -在这里插入图片描述在ImageNet上的表现:
    在这里插入图片描述在PascalVOC上的表现:
    在这里插入图片描述
    在Cityscapes上的表现
    在这里插入图片描述

结论

论文在结构上提供了一个pyramid pooling module,在不同层次上融合feature,达到语义和细节的融合。

代码实现

#coding=utf-8
from keras.models import *
from keras.layers import *
import keras.backend as K

def resize_image(inp, s):
    return Lambda(lambda  x: K.resize_images(x, height_factor=s[0], width_factor=s[1], data_format='channels_last',
                                             interpolation='bilinear'))(inp)

def pool_block(inp, pool_factor):
    h = K.int_shape(inp)[1]
    w = K.int_shape(inp)[2]
    pool_size = strides = [int(np.round( float(h) / pool_factor)), int(np.round( float(w )/ pool_factor))]
    x = AveragePooling2D(pool_size, strides=strides, padding='same')(inp)
    x = Conv2D(512, (1, 1), padding='same', use_bias=False)(x)
    x = BatchNormalization()(x)
    x = Activation('relu')(x)
    #print(strides)
    x = resize_image(x, strides)
    return x

def PSPNet(nClasses, optimizer=None, input_width=384, input_height=576):

    assert input_height%192 == 0
    assert input_width%192 == 0
    
    input_size = (input_height, input_width, 3)
    inputs = Input(input_size)
    kernel = 3
    filter_size = 64
    pad = 1
    pool_size = 2
    x = inputs
    x = (ZeroPadding2D((pad, pad)))(x)
    x = (Conv2D(filter_size, (kernel, kernel), padding='valid'))(x)
    x = (BatchNormalization())(x)
    x = (Activation('relu'))(x)
    x = (MaxPooling2D((pool_size, pool_size)))(x)
    f1 = x

    x = (ZeroPadding2D((pad, pad)))(x)
    x = (Conv2D(128, (kernel, kernel), padding='valid'))(x)
    x = (BatchNormalization())(x)
    x = (Activation('relu'))(x)
    x = (MaxPooling2D((pool_size, pool_size)))(x)
    f2 = x

    x = (ZeroPadding2D((pad, pad)))(x)
    x = (Conv2D(256, (kernel, kernel), padding='valid'))(x)
    x = (BatchNormalization())(x)
    x = (Activation('relu'))(x)
    x = (MaxPooling2D((pool_size, pool_size)))(x)
    f3 = x

    # x = (ZeroPadding2D((pad, pad)))(x)
    # x = (Conv2D(256, (kernel, kernel), padding='valid'))(x)
    # x = (BatchNormalization())(x)
    # x = (Activation('relu'))(x)
    # x = (MaxPooling2D((pool_size, pool_size)))(x)
    # f4 = x

    # x = (ZeroPadding2D((pad, pad)))(x)
    # x = (Conv2D(256, (kernel, kernel), padding='valid'))(x)
    # x = (BatchNormalization())(x)
    # x = (Activation('relu'))(x)
    # x = (MaxPooling2D((pool_size, pool_size)))(x)
    # f5 = x

    o = f3
    pool_factors = [1, 2, 3, 6]
    pool_outs = [o]
    for p in pool_factors:
        pooled = pool_block(o, p)
        pool_outs.append(pooled)
    o = Concatenate(axis=3)(pool_outs)
    o = Conv2D(512, (1, 1), use_bias=False)(o)
    o = BatchNormalization()(o)
    o = Activation('relu')(o)

    o = Conv2D(nClasses, (3, 3), padding='same')(o)
    o = resize_image(o, (8, 8))
    o_shape = Model(inputs, o).output_shape
    outputHeight = o_shape[1]
    outputWidth = o_shape[2]

    o = Reshape((nClasses, input_height * input_width))(o)
    o = Permute((2, 1))(o)
    model = Model(inputs, o)
    model.outputWidth = outputWidth
    model.outputHeight = outputHeight

    return model
PSPnet:Pyramid Scene Parsing Network 首先声明,文末彩蛋,不是笔者提问的1 一句话总结作者认为现有模型由于没有引入足够的上下文信息及不同感受野下的全局信息而存在分割出现错误的情景,于是,提出了使用global-scence-level的信息的pspnet,另外本文提出了引入辅助loss的ResNet优化方法。2 网络结构本文提出的网络结构简单来说就是将DeepLab(不完全一样)aspp之前的feature map pooling了四种 阅读详情

相关推荐

【PSPnet】Pyramid Scene Parsing Network

CVPR 2017,目前在google上显示已经被引用了744,相当厉害。 文章目录概述细节ResultsConclusion 概述 要解决的问题 Scene parsing 解决:当前基于FCN的模型缺乏将全局场景类别线索利用起来的策略。比如在论文的fig2中,将水中的船识别为汽车,这是一个由于目标的外型相似造成的error,但是根据周围场景(诸如在水里之类的),可以得出这不是车而更可能...

OneCoder的博客 792

【论文笔记】PSPNet:Pyramid Scene Parsing Network

论文地址:https://arxiv.org/pdf/1612.01105.pdf 论文主页:https://hszhao.github.io/projects/pspnet/代码: Caffe:https://github.com/hszhao/PSPNet Keras:https://github.com/Vladkryvoruchko/PSPNet-Keras-tensorflow Tensorflow:https://github.com/hellochick/PSPNet-tensorflow P

学习 & 分享 ~ 1389

image-segmentation-keras:在Keras中实现Segnet,FCN,UNet,PSPNet和其他模型

图像分割Keras:在Keras中实现Segnet,FCN,UNet,PSPNet和其他模型。 在Keras中实现各种深度图像分割模型。 链接到包含教程的完整博客文章: : 有效的Google Colab示例: Python介面: : CLI界面: : 我们的其他仓库 Keras模型中的阶梯网络仅使用100个带标签的示例即可在MNIST上实现98%的测试准确性 杰出贡献者 Divam Gupta 鲁纳克(Rounaq Jhunjhunu)瓦拉 马里乌斯·贾斯顿 JaledMC 楷模 支持以下模型: 型号名称 基本型号 细分模型 fcn_8 香草CNN FCN8 fcn_32 香草CNN FCN8 fcn_8_vgg VGG 16 FCN8 fcn_32_vgg VGG 16 FCN32 fcn_8_resnet50 Resnet-50 F

Semantic Segmentation--Pyramid Scene Parsing Network(PSPNet)论文解读

PSPNet Pyramid Scene Parsing Network 收录:CVPR 2017 (IEEE Conference on Computer Vision and Pattern Recognition) 原文地址: PSPNet 代码: pspnet-github Keras tensorflow 效果图: Abstract 本文提出的金字塔池化模

DFan的NoteBook 4万+

集成电路模拟版图入门-版图基础学习笔记(一)

集成电路设计模拟版图入门笔记,了解版图的定义、意义、工具、设计流程。认识版图及版图组成的两大部件,版图编辑器有哪些,电路图编辑器,了解工艺厂商等。

weixin_52955333的博客 2万+

Vmware 17保姆级教程:从零部署华为enspPro模拟器(附镜像下载+配置优化)

本文提供了一份详尽的Vmware 17部署华为eNSP Pro模拟器的保姆级教程。内容涵盖从镜像下载、虚拟机导入、网络配置到深度性能调优的全过程,并针对常见启动失败、设备卡顿等故障提供了实用的排查方案,旨在帮助网络工程师和华为认证备考者快速搭建稳定高效的实验环境。

arduino9maker的博客 637

【论文阅读】PSPNet(Pyramid Scene Parsing Network)

用于语义分割的金字塔场景识别网络 摘要 该论文通过金字塔池化模块以及金字塔场景解析网络(PSPNet),通过基于不同区域的上下文信息聚合来利用全局上下文信息的能力。全局先验表示在场景解析任务中产生了高质量的结果,而PSPNet为像素级预测提供了更好的框架。本论文提出的方法在各种数据集上实现了最先进的性能。它在ImageNet 2016场景解析挑战中,在PASCAL VOC2012上获得了mIOU准...

kyy1997的博客 2214

Qt5.14.2+VS2017开发环境搭建全流程(含插件配置与项目测试)

本文详细介绍了Qt5.14.2与VS2017开发环境的完整搭建流程,包括软件安装、插件配置、环境变量设置以及项目测试。特别针对实际开发中常见的配置问题提供解决方案,帮助C++开发者快速搭建高效的Qt开发环境。

weixin_28419039的博客 217

PSPNet: Pyramid Scene Parsing Network

paper:Pyramid Scene Parsing Network code:GitHub - hszhao/semseg: Semantic Segmentation in Pytorch mmsegmentation/psp_head.py at v0.17.0 · open-mmlab/mmsegmentation · GitHub Important Observations 作者首先观察分析了将FCN方法应用于场景解析(Scene Parsing)时的几种代表性失败的情况,具体有.

00000cj的博客 1429

【AI编程】用AI开发STM32软件(1):环境配置+AI编写LED闪烁

现在AI编程这么火,不拿来开发嵌软也太可惜了。笔者最近刚好有个2学分的实践课,要自己做项目,这不,机会就来了。笔者特意记录下来其过程,以供大家学习和参考。使用:VSCode+Copilot+EIDE+STM32CubeMX,单片机用最经典的stm32f103c8t6+STLink。

qq_23220445的博客 4573

CryoEM - 冷冻电镜 基于深度学习的 从头重构(Ab-initio Reconstruction) 开源项目 教程

冷冻电镜(CryoEM) 是一种成像方式,为蛋白质和其他生命基本组成部分的动态,提供独特的观察方式。从数百万噪声和随机取向的二维投影中,以计算效率高的方式,联合估计生物大分子的姿态、三维结构和构象异质性。

AGI 1557

论文阅读: 1611.PSPNet

论文阅读: 1611.PSPNet

JNing 400

作物生长模型Oryza V3实战9:控制文件参数详解

control.dat是ORYZA水稻模型的核心配置文件,主要包含三部分:1)基础参数设置与模拟时间定义;2)关键文件路径配置,包括土壤参数文件(soil.sol)、作物参数文件(cultivar.crp)、田间管理文件(manage.exp)及气象数据目录,同时指定输出结果文件(res.dat)和运行日志(model.log);3)可选参数和输出控制选项。该文件通过关联各类输入数据(气象、土壤、品种特性等)和输出结果,实现模型运行的全流程控制,支持参数调整后继续模拟和中断恢复功能。

221

PSPNet——Pyramid Scene Parsing Network

什么是PSPNet模型? PSPNet模型最主要的特点是采用了PSP模块。 该模型提出的金字塔池化模块(Pyramid Pooling Module)能够聚合不同区域的上下文信息,从而提高获取全局信息的能力。实验表明这样的先验表示(即指代PSP这个结构)是有效的,在多个数据集上展现了优良的效果。 PSP结构的功能是将获取到的特征层划分成不同大小的网格,每个网格内部各自进行平均池化。实现聚合不同区域的上下文信息,从而提高获取全局信息的能力。 在PSPNet中,PSP结构典型情况下,会将输入进来的特征层

乐亦亦乐的博客 2593

【原创教程】汇川H5U入门教案第二课

定时器指令IN输入能流从OFF变为ON时,定时器启动计时,输出Q为ON,IN输入能流从ON变为OFF时,在IN保持为OFF期间,定时器的运行时间是PT参数指定的时间,定时器定时时间达到PT参数指定的时间后,Q变为OFF。IN输入能流为ON时,ET输出值为0,IN从ON变为OFF时,在定时器计时运行期间,ET输出当前的计时时间,定时器计时时间到达PT参数指定的时间后,ET值保持。IN输入能流为ON时,在定时器计时运行期间,ET输出当前的计时时间,定时器计时时间到达PT参数指定的时间后,ET值保持;

Qinmingyue13的博客 2481

YOLO26 vs YOLOv12 vs YOLOv10:工业场景性能实测,速度/精度/部署难度全对比(附完整测试代码)

YOLO26:工业场景全能型选手,无NMS+无DFL设计让部署和推理都省心,小目标精度优势明显,CPU推理速度提升43%,适合大多数生产线场景YOLOv12:中大型目标检测专家,Area Attention在复杂背景下表现出色,适合汽车、家电等大型零部件检测YOLOv10:速度狂魔,GPU上性能领先,轻量化版本适合边缘部署,但小目标精度略逊,适合对实时性要求极高的分拣线场景。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 624

论文阅读理解 - Pyramid Scene Parsing Network

# Pyramid Scene Parsing Network [Project] [Code-Caffe] [Paper] [Slides] PSPNet 特点: * 场景标注 Scene parsing * 全局内容信息 global context information * different-regionbased context aggregation * p...

长风破浪会有时,直挂云帆济沧海 1万+

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

【语义分割】Pyramid Scene Parsing Network(PSNET)

https://arxiv.org/pdf/1612.01105.pdf Abstract 本文通过所提出的: 金字塔场景分析网络(pyramid scene parsing network PSPNet), 对不同区域的语境进行聚合, 使模型拥有了理解全局语境信息的能力。 我们的全局信息可以有效地在场景分析任务中产生高质量的结果, PSPNet则为像素级预测提供了一个优越的框架。 性能 在2016年ImageNet场景分析挑战赛、Pascal VOC 2012数据集和Cityscapes数据集中排名

AbiUni(YY熊) 4148

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

PSPNet:Pyramid Scene Parsing Network——金字塔场景解析网络

PSPNet:Pyramid Scene Parsing Network——金字塔场景解析网络

Together_CZ的博客 2336

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

【阅读笔记】《Pyramid Scene Parsing Network》(PSPNet)

本文记录了博主阅读论文《Pyramid Scene Parsing Network》的笔记,代码。更新于2019.04.22。 文章目录AbstractIntroductionRelated WorkPyramid Scene Parsing NetworkImportant ObservationsPyramid Pooling ModuleNetwork ArchitectureDeep Su...

ShuqiaoS的博客 831

Pyramid Scene Parsing Network【PSPNet】论文阅读

论文:https://arxiv.org/pdf/1612.01105.pdf Code: Abstract 场景解析对于不受限制的开放词汇和多样的场景来说是一项挑战。在本文中,我们通过我们的金字塔池化模块和提出的金字塔场景解析网络(PSPNet),通过基于不同区域的上下文聚合来探索利用全局上下文信息的能力。我们的全局先验表示可以有效地在场景解析任务中产生高质量的结果,而PSPNet为像素级预测提供了一个优越的框架。所提出的方法在各种数据集上实现了最先进的性能。它在2016 ImageNet场景解析挑战赛、

m0_46378271的博客 1019

图像分割 - PSPNet (Pyramid Scene Parsing Network)论文解读

PSPNet 是一篇非常扎实的工程化论文。它没有极其复杂的数学推导,而是基于对“感受野”和“上下文”的深刻理解,设计了一个优雅的模块。给 AI 从业者的 Takeaway:在做视觉任务时,永远不要忽视全局信息。局部特征决定细节,全局特征决定“它是什么”。金字塔结构(Pyramid)是处理多尺度物体的通用解法,不仅在分割中有效,在检测(如 FPN)中同样适用。论文中对 BatchSize 的调整、数据增强(随机旋转、缩放)以及“Poly”学习率策略的坚持,是其达到 SOTA 的重要保障。

weixin_40264313的博客 976

【PSPnet2017】Pyramid Scene Parsing Network

场景解析对于不受限制的开放词汇和多样化的场景来说是一个挑战。在本文中,我们通过我们的金字塔集合模块和提议的金字塔场景解析网络(PSPNet),利用基于不同区域的全局上下文信息的能力。我们的全局先验表示能够有效地在场景解析任务中产生高质量的结果,而PSPNet则为像素级预测提供了一个卓越的框架。所提出的方法在各种数据集上取得了最先进的性能。它在2016年ImageNet场景解析挑战赛、PASCAL VOC 2012基准测试和Cityscapes基准测试中名列第一。

我的博客 1350

《PSPNet:Pyramid Scene Parsing Network》论文笔记

代码地址:PSPNet 1. 概述 导读:这篇文章使用不同的金字塔池化模块从利用特征全局分类的角度在FCN网络的基础上提出了金字塔分割网络(Pyramid Scene Parsing Network, PSPNet),该网络能够使用全局与局部的信息用于产生最后较高质量的分割。此外,文章还提出了deeply supervised loss来更好优化分割网络(主干网络上的辅助损失函数)。文章提出的P...

m_buddy的博客 1932

Pyramid Scene Parsing Network

论文地址:https://arxiv.org/pdf/1612.01105.pdf 源码地址:https://github.com/hszhao/PSPNet 来自:Semantic Segmentation–Pyramid Scene Parsing Network(PSPNet)论文解读 《Pyramid Scene Parsing Network》论文笔记 What:PsPNet主要是通过金...

qq_26499769的博客 2845

PSPNet(Pyramid Scene Parsing Network):金字塔场景解析网络

PSPNet(金字塔场景解析网络)是一种先进的语义分割模型,通过金字塔池化模块(PPM)实现多尺度上下文信息融合,显著提升了复杂场景的解析精度。该模型由Hengshuang Zhao等人在2016年提出,采用ResNet骨干网络和PPM模块的架构,能够有效处理不同大小物体的分割问题。PSPNet在自动驾驶、遥感图像等领域有广泛应用,其创新性在于多尺度特征聚合机制,既保持了较高的准确率又具备较好的计算效率。虽然后续出现了更先进的模型,但PSPNet凭借其简单实用的特点,至今仍是语义分割领域的重要基准模型之一。

彬彬侠的博客 1805
上一篇: 《Fully Convolutional Networks for Semantic Segmentation》阅读及代码实现
下一篇: Focal Loss理解[转载]
just_sort
博客等级 码龄11年 2357粉丝 1667原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值