[Caffe]:关于编写specific layer

视觉特征-提取器:FPN:Feature Pyramid Net(特征金字塔) 【用于检测不同尺度的目标】【高分辨率特征图⬌低层次⬌语义弱】【用于替代“特征化图像金字塔”】【2016-12】 特征金字塔是识别系统中的基本组成部分,用于检测不同尺度的对象。但近年来的深度学习对象检测器避免使用金字塔表示,部分原因是其计算和内存开销较大。本文利用深度卷积网络固有的多尺度金字塔层级结构,以极少的额外成本构建特征金字塔。我们开发了一种具有横向连接的自顶向下架构,用于在所有尺度上构建高层语义特征图。该架构称为特征金字塔网络(Feature Pyramid Network,FPN),作为通用特征提取器,在多个应用中表现出显著改进。 阅读详情

实现 specific layer

  1. 根据标准编写specific_layer.hpp(存放在include/caffe/layers/目录下)
  2. 按照caffe标准模板编写specific_layer.cpp(存放在src/caffe/layers/目录下)
  3. 实现cuda版本,即specific_layer.cu(同上)
  4. 编写test文件

修改caffe.proto

如果specific_layer需要传参数进来,需要定义specific_layer_param.

// caffe.proto
// NOTE
// Update the next available ID when you add a new LayerParameter field.
//
// LayerParameter next available layer-specific ID: 147 (last added: recurent_param)
message LayerParameter {
...
...
+ optional SpecificParameter specific_param= 147//ID:147是下一个可用的编号
...
}

message SpecificParameter {
    /* define your specific parameters in this field */
}

这样,自己写的特殊网络层就被加入到caffe中了,可以去编译看看。

——————————————————————————————

后续将用实例介绍如何实现特殊层。

[Caffe]:关于caffe新手入门 Caffe的几个重要文件用了这么久Caffe都没好好写过一篇新手入门的博客,最近应实验室小师妹要求,打算写一篇简单、快熟入门的科普文。 利用Caffe进行深度神经网络训练第一步需要搞懂几个重要文件: solver.prototxt train_val.prototxt train.sh 接下来我们按顺序一个个说明。solver.prototxtsolver这个文件主要存放模型训练所用到的一些超参数 阅读详情

相关推荐

[Caffe]: 关于debug_info详解

debug_info在我们使用caffe训练网络的时候发现loss值输出不正常,第一反应就是想输出各层的中间结果进行检查。 caffe提供了一个debug_info参数作为是否输出调试信息的标志。但是,当加了这个参数,发现输出的内容让你一脸懵逼。。。像下面这张图: d第一眼,我们可以看懂,目前计算的是向前传播阶段([Foward]),紧跟着好像是网络层名称,然后就是数据,至于是什么数据,无穷

cham_3 6505

caffe框架训练完成之后编写代码测试

deploy.prototxt文件与训练的文件的数据层不一样,没有数据源。 利用deploy.prototxt文件和caffemodel去做分类或者回归任务。 编写test_model.py进行测试模型,如下 #!/usr/bin/env python #coding=utf-8 #因为需要sudo权限,只能作如下处理,自己添加caffe的位置,编译之后,然后用sudo权限运行该.py程序 imp...

weixin_44003563的博客 394

caffe源码(2015年8月15日)

git clone https://github.com/bvlc/caffe.git 如果无法访问github,可以从这里下载。

caffe随记(二) --- 数据结构简介

caffe随记(二) --- 数据结构简介 1、Blob Blob其实从代码的角度看,它是一个模板类。Blob封装了运行时的数据信息(存储、交换和处理网络中正反向传播时的数据和导数信息),并且在CPU和GPU之间具有同步处理的能力。   对于图像处理来说,Blob是一个四维数组,(N, C, H ,W), 其中N表示图片的数量,C表示图片的通道数,H表示图片的高度, W表示图片

朝花&夕拾 1831

【比较器仿真】

比较器tran noise、pnoise仿真、噪声仿真、MC失调仿真

pickweb的博客 1万+

23.501中英对照(46):5QI到Qos特征的映射

注4:对于UPF终止N6与5G-AN之间的延迟,CN PDB的静态值为1毫秒,应从给定的PDB中减去该值以得出适用于无线接口的分组延迟预算。注5:对于UPF终止N6与5G-AN之间的延迟,CN PDB的静态值为2毫秒,应从给定的PDB中减去该值以得出适用于无线接口的分组延迟预算。注6:对于UPF终止N6与5G-AN之间的延迟,CN PDB的静态值为5毫秒,应从给定的PDB中减去该值以得出适用于无线接口的分组延迟预算。注:建议为任何新的非GBR资源类型的标准化5QI分配小于64的值。

51学通信的博客 1294

caffe 的layer的参数说明

最近在学习caffe做实验 今天就记录一下layer的参数及这些常用的参数的解释吧主要还是参考官方网站 http://caffe.berkeleyvision.org/tutorial/layers.html下面就介绍一下常用的layer的配置 以caffe中根目录下的models 中caffenet 其中主要有三个文件 deploy.prototxt solver.protot

Losteng的博客 1万+

保姆级避坑指南:在Ubuntu 18.04上搞定速腾Helios雷达驱动与fast-LIO2的完整配置流程

本文提供了一份详细的速腾Helios雷达与fast-LIO2在Ubuntu 18.04上的配置避坑指南,涵盖驱动安装、数据格式转换到建图全流程。特别针对常见编译错误和数据转换问题提供了解决方案,帮助开发者高效完成环境搭建与建图任务。

weixin_27252001的博客 113

CT-LIBRARY error:ct_connect(): protocol specific layer: internal Client Library error: There is a td

CT-LIBRARY error:ct_connect(): protocol specific layer: internal Client Library error: There is a td

wengyupeng 蜗牛一步一步向前。。。 6446

电力电子新手必看:COT控制模式的工作原理与典型应用场景解析

本文深入解析了COT控制模式的工作原理及其在电力电子领域的典型应用。COT控制(恒定导通时间控制)通过固定导通时间机制,解决了传统滞环控制的问题,特别适用于需要快速瞬态响应和高效率的应用场景,如CPU/GPU供电和便携设备电源管理。文章详细介绍了COT控制的核心流程、技术特点及设计实践中的关键考量,帮助电力电子新手快速掌握这一技术。

weixin_30745553的博客 521

2.6 SST的核心性能指标体系

本文构建了固态变压器(SST)的核心性能指标体系,涵盖电气性能、可靠性、经济性和环境适配性四大类指标。电气性能指标包括运行效率(≥97%)、功率密度(≥900kVA/m³)、谐波畸变率(≤3%)等关键参数;可靠性指标设定MTBF≥43800h、年均故障率≤1.2次/年等标准;经济性指标对比分析了初始购置成本(45-55万元)和全生命周期成本(48-55万元);环境适配性指标则明确了温度、海拔等工况要求。该体系采用量化公式和国标限值,为SST的性能测试、选型和优化提供了统一标准。

技术工作者 597

利用神经网络内部表征可视化class-specific image regions区域

转自:https://blog.youkuaiyun.com/m0_37477175/article/details/78625534 本篇博客是对MIT周博磊论文《earning Deep Features for Discriminative Localization.》的学习笔记。具体论文《Learning Deep Features for Discriminative Localization...

houxiaogang05 543

Coze实战:解锁多Bot协同与条件分支工作流的奥秘

本文详细介绍了在字节跳动Coze平台实现多Bot协同与条件分支工作流的方法。首先阐述了Coze平台的功能优势,包括丰富的插件、知识库和工作流功能。随后分步骤讲解了多Bot协同的实现:从准备工作、创建Bot到协同配置,并提供了电商客服的实例演示。在条件分支工作流部分,详细说明了条件节点的作用类型、条件设定方法以及具体配置操作,强调测试优化的重要性。最后通过电商平台综合案例,展示了多Bot协同与条件分支的实际应用效果,并针对常见问题提供解决方案。文章为开发者在Coze平台上构建智能应用提供了实用指导,有助于提升

远程部署调试 运行安装 项目调试 二次开发 项目技术新 持续迭代 部分源码免费分享 450

AutoAssign 可微标签分配实战指南:MMDetection 中基于 Center 与 Confidence 双重加权的无锚框检测器

AutoAssign(arXiv:2007.03496)是 OpenMMLab MMDetection 中实现的端到端可微标签分配算法,它通过 Center Weighting 与 Confidence Weighting 两个可学习模块,在不依赖人工先验采样策略的前提下,让每个位置自适应地获得正/负样本权重。本文以 [configs/autoassign/README.md](https://l

gitblog_00960的博客 1006

ATECC508A芯片开发笔记(四):自定义配置508功能,规划DataZone数据存储

ATECC508A芯片开发笔记(四):自定义配置508功能,规划DataZone数据存储 508A内部存储区介绍 Data Zone Config Zone 508A Config Zone配置(自定义) - ATECC508A芯片在使用之前,需要自定义配置ConfigZone与DataZone,并同Lock命令将两个区域锁住,否则无法正常使用功能。而一旦锁上就是永久性的,配置区不能够进行解锁

HowieXue 薛永浩的博客 2万+

GEE APP:基于Sentinel-1 SAR数据的洪水检测与制图系统:利用GEE平台实现洪涝区域提取、面积统计及矢量栅格化导出

本文介绍了一个基于Google Earth Engine平台的Sentinel-1 SAR洪水监测应用,通过自动化流程实现洪水淹没区域的精准检测与分析。系统采用Refined Lee滤波降噪和Otsu自适应阈值算法,结合SRTM地形数据消除干扰,可自动计算淹没面积并生成可视化结果。该工具提供用户友好的交互界面,支持多格式数据导出,适用于灾害应急响应、环境监测和城市规划等领域,具有云平台处理、算法鲁棒性强和操作简便等技术优势。

此星光明博客 327

Fast R-CNN

本文提出了一种用于目标检测的 Fast Region-based Convolutional Network 方法(Fast R-CNN)。Fast R-CNN 在先前工作的基础上,利用深度卷积网络高效地对候选区域进行分类。与先前工作相比,Fast R-CNN采用了多项创新,在提高训练和测试速度的同时,也提升了检测准确率。Fast R-CNN 对非常深的 VGG16 网络的训练速度比 R-CNN 快 9×,测试时快 213×,并且在 PASCAL VOC 2012 上取得了更高的 mAP。

u013250861的博客 159

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

CANN/ge架构设计与实现

GE (Graph Engine) is a high-performance graph mode implementation for Ascend series chips in the CANN ecosystem, composed of frontend adaptation layer, offline compilation toolchain, graph compiler, a

gitblog_00846的博客 1185

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

Context Encoders: Feature Learning by Inpainting 上下文编码器:通过图像修复进行特征学习

加州大学伯克利分校Abstract摘要我们提出了一种由基于上下文的像素预测驱动的无监督视觉特征学习算法。类比于自动编码器,我们提出了 Context Encoders——一种卷积神经网络,其训练目标是根据任意图像区域周围的环境生成该区域的内容。为了成功完成这一任务,context encoders 不仅需要理解整幅图像的内容,还需要为缺失部分生成一个合理的假设。在训练 context encoders 时,我们同时尝试了标准的逐像素重建损失,以及重建损失加对抗损失。

u013250861的博客 135

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

Faster R-CNN核心原理:从RPN到ROI Align的端到端目标检测演进

目标检测是计算机视觉中的基础任务,旨在定位并识别图像中的物体。其核心原理通常分为两阶段:首先生成候选区域,再对这些区域进行分类和位置精修。传统方法依赖外部算法生成候选框,计算效率低且无法端到端优化。Faster R-CNN通过引入区域提议网络(RPN),将候选框生成整合到神经网络内部,实现了特征共享和端到端训练,显著提升了检测速度与精度。RPN利用锚框机制在特征图上密集预测物体位置,再通过ROI Pooling或更精确的ROI Align将不同尺寸的候选区域特征统一,最后送入检测头完成分类与回归。这一架构革

weixin_34214500的博客 536

论文阅读笔记:AM-Softmax: Additive Margin Softmax for Face Verification

论文阅读笔记:AM-Softmax: Additive Margin Softmax for Face Verification Tags:Deep_Learning_基础论文 本文主要包含如下内容:   论文地址   代码地址   参考博客 论文阅读笔记:AM-Softmax: Additive Margin Softmax for Face Verification 主...

ProYH 4239

Caffe 代码阅读

Caffe代码阅读—卷积部分Caffe卷积部分首先是将图像转换成一个列矩阵,然后把相应的卷积操作转换成了矩阵乘法。 CNN操作分为两步份,一部分是Forward操作,另一个是BP过程,要看懂BP首先得了解一下普通neural network的求导过程,还有在看一下《Notes on convolution networks 》看一下对于卷积网络的求导过程。首先看一下forward过程。 卷积网络

Hard Working 2797

Python编写caffe代码

有时候,我们需要将网络使用caffe代码实现,人工手写容易出问题。可以使用Python完成网络编写。卷积层:def generate_conv_layer_no_bias(name, bottom, top, weight, num_output, kernel_h, kernel_w, pad_h, pad_w, std=0.01): conv_layer_str = '''layer ...

ziyouyi111的博客 758

[Caffe]:关于 Error parsing text-format Caffe.NetParameter: xxx.xx : Expected interger or identifier.

错误描述 这是protobuf提示的一个错误。它的意思是在用户的prototxt中第xxx行,第xx 列缺少一个整型数或者标识符。解决方法检查对应的prototxt文件,在第xxx行,第xx 列是否缺漏了相应的信息。

cham_3 1万+

[Caffe]:关于*** Aborted at 1479432790 (unix time) try "date -d @1479432790" 错误的另一种原因

这两天在caffe跑网络,原本的lr_policy:"step",后面更改了策略,使用lr_policy:"step"。但是却出现了如下错误:*** Aborted at 1479432790 (unix time) try "date -d @1479432790" if you are using GNU date *** PC: @ 0x7fe47645db63 caffe::SGDS

cham_3 7423

[Caffe]:关于Check failed: shape[i] >= 0 (-2 vs. 0)错误

错误发现及分析当使用caffe训练网络的时候,出现如题错误,我们可以分析下日志,日志如下: 我们可以看出,在错误发生前生成的Top shape:64 2048 4 4 。也就是feature size是4 × 4的。然后再看看pool5对应的pooling layer的设置: 发现pooling的核大小被设置成7,这就是问题的所在了。解决方案 改变输入图像的大小,可以使feature m

cham_3 6997
上一篇: [Caffe]:关于SPP Layer
下一篇: PAT 1040 Longest Symmetric String
chamsu
博客等级 码龄14年 78粉丝 32原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值