mmdetection和mmsegmentation无法加载预训练模型的问题

预训练模型的加载机理pytorch版 在做二维目标检测时,我们会对神经网络的部分地方进行修改,比如增加CBAM,或者修改FPN等等。但是将修改后的网络进行训练时,加载预训练权重过程却不会报错,甚至修改网络后性能不增反降。这里面蕴含的知识点在这篇文章做做一个总结。 pytorch中网络导入预训练权重的代码很简单: net = model() net.to(device) net.load_state_dict(torch.load('params.pth')) 其中: torch.load('params.pth')只是加载了模型参数, 阅读详情

Openmmlab无法加载预训练模型的问题

这两天在调试mmsegmentation和mmdetection,可能是因为自己的原因,预训练模型死活加载不了预训练的模型,无法正常的索引到预训练模型的地址,最后通过降低版本的方式成功地加载了预训练模型并跑了起来,具体的流程如下:

解决过程

  1. 安装pytorch和torchvision

    我是30系列的显卡,所以需要的cuda版本需要是11以上。

    conda install pytorch==1.9.0 torchvision==0.10.0 cudatoolkit=11.1 -c pytorch -c conda-forge
    
  2. 安装mmcv-full

    pip install mmcv-full==1.3.10 -f https://download.openmmlab.com/mmcv/dist/cu111/torch1.9.0/index.html
    
  3. 安装apex

    git clone https://github.com/NVIDIA/apex
    pip install -v --disable-pip-version-check --no-cache-dir --global-option="--cpp_ext" --global-option="--cuda_ext" ./
    
  4. 安装mmdetection,我使用的是SwinTransformer/Swin-Transformer-Object-Detection这个版本的

    git clone https://github.com/SwinTransformer/Swin-Transformer-Object-Detection.git
    pip install -v -e .
    
  5. 安装mmpycocotools

    pip uninstall pycocotools
    pip install mmpycocotools
    

测试的代码如下,当时我主要是想测试一下mmdetection在dota数据集上的表现:

from mmcv import Config
from mmdet.datasets import build_dataset
from mmdet.models import build_detector
from mmdet.apis import train_detector
from mmdet.apis import set_random_seed
import os.path as osp
import mmcv
import numpy as np
from mmdet.datasets.builder import DATASETS
from mmdet.datasets.custom import CustomDataset
import warnings
# warnings.filterwarnings('ignore')
# 目前的解决方案,要不重写一个dataset的类,要不统一都弄成coco的形式。
cfg = Config.fromfile('./configs/fcos/fcos_r50_caffe_fpn_gn-head_mstrain_640-800_2x_coco.py')
# todo 1. 定义数据集
# 目前这个数据有大问题,咱首先得处理coco格式,然后得写个带可视化得api方便查看,奶奶得。
cfg.dataset_type = 'CocoDataset'  # todo 数据集格式
cfg.classes = ('plane', 'baseball-diamond', 'bridge', 'ground-track-field', 'small-vehicle', 'large-vehicle',
                   'ship', 'tennis-court', 'basketball-court', 'storage-tank',
                   'soccer-ball-field', 'roundabout', 'harbor', 'swimming-pool', 'helicopter', 'container-crane',)  # todo 类名
data_images = '/home/lyc/data/scm/remote/dota1.5hbb/PNGImages/images/'  # todo 数据集根路径
cfg.data.train.ann_file = '/home/lyc/data/scm/remote/dota1.5hbb/dota_train.json'  # todo json文件路径
cfg.data.val.ann_file = '/home/lyc/data/scm/remote/dota1.5hbb/dota_val.json'  # todo 验证集json文件路径
cfg.data.test.ann_file = '/home/lyc/data/scm/remote/dota1.5hbb/dota_val.json'  # todo 测试集json文件路径
cfg.data.train.type = cfg.dataset_type
cfg.data.val.type = cfg.dataset_type
cfg.data.test.type = cfg.dataset_type
cfg.data.train.classes = cfg.classes
cfg.data.val.classes = cfg.classes
cfg.data.test.classes = cfg.classes
cfg.data.train.img_prefix = data_images #
cfg.data.val.img_prefix = data_images
cfg.data.test.img_prefix = data_images
cfg.data.samples_per_gpu = 4  # Batch size of a single GPU used in testing 默认是8x2
cfg.data.workers_per_gpu = 1 # Worker to pre-fetch data for each single GPU

# *************** transform **************
train_pipeline = [
    dict(type='LoadImageFromFile'),
    dict(type='LoadAnnotations', with_bbox=True),
    dict(
        type='Resize',
        img_scale=(1024, 1024),
        # multiscale_mode='value',
        keep_ratio=True),
    dict(type='RandomFlip', flip_ratio=0.5),
    dict(
        type='Normalize',
        mean=[102.9801, 115.9465, 122.7717],
        std=[1.0, 1.0, 1.0],
        to_rgb=False),
    dict(type='Pad', size_divisor=32),
    dict(type='DefaultFormatBundle'),
    dict(type='Collect', keys=['img', 'gt_bboxes', 'gt_labels'])
]
test_pipeline = [
    dict(type='LoadImageFromFile'),
    dict(
        type='MultiScaleFlipAug',
        img_scale=(1024, 1024),
        flip=False,
        transforms=[
            dict(type='Resize', keep_ratio=True),
            dict(type='RandomFlip'),
            dict(
                type='Normalize',
                mean=[102.9801, 115.9465, 122.7717],
                std=[1.0, 1.0, 1.0],
                to_rgb=False),
            dict(type='Pad', size_divisor=32),
            dict(type='ImageToTensor', keys=['img']),
            dict(type='Collect', keys=['img'])
        ])
]



cfg.data.train.pipeline = cfg.train_pipeline
cfg.data.val.pipeline = cfg.test_pipeline
cfg.data.test.pipeline = cfg.test_pipeline

# modify num classes of the model in box head
cfg.model.bbox_head.num_classes = len(cfg.classes)
#cfg.load_from = '../checkpoints/resnet50_caffe-788b5fa3.pth'
cfg.work_dir = '../tutorial_exps/2-dota_fcos_1024_backbone'
# The original learning rate (LR) is set for 8-GPU training.
# We divide it by 8 since we only use one GPU.
cfg.optimizer.lr = 0.02 / 8
cfg.lr_config.warmup = None
cfg.log_config.interval = 10
# Change the evaluation metric since we use customized dataset.
# cfg.evaluation.metric = 'mAP'
cfg.evaluation.metric = 'bbox'
cfg.evaluation.save_best = 'bbox_mAP'
# We can set the evaluation interval to reduce the evaluation times
cfg.evaluation.interval = 1
# We can set the checkpoint saving interval to reduce the storage cost
cfg.checkpoint_config.interval = 12
# Set seed thus the results are more reproducible
cfg.seed = 0
set_random_seed(0, deterministic=False)
# cfg.gpu_ids = range(1)
cfg.gpu_ids = (0,)
# We can initialize the logger for training and have a look
# at the final config used for training
print(f'Config:\n{cfg.pretty_text}')
# 保存模型的各种参数(一定要记得嗷)
cfg.dump(F'{cfg.work_dir}/customformat_fcos.py')
# 训练主要进程
# Build dataset
datasets = [build_dataset(cfg.data.train)]
print(cfg.data.train)
print(datasets[0])
print(datasets[0].CLASSES)
# Build the detector
model = build_detector(
    cfg.model, train_cfg=cfg.get('train_cfg'), test_cfg=cfg.get('test_cfg'))
print("数据集加载完毕!")
# Add an attribute for visualization convenience
model.CLASSES = datasets[0].CLASSES
# Create work_dir
mmcv.mkdir_or_exist(osp.abspath(cfg.work_dir))
train_detector(model, datasets, cfg, distributed=False, validate=True)

!!!成功下载权重文件

image-20211008205116481

附上第一轮的结果,好像不会太离谱了

# 改之前
DONE (t=8.48s).
 Average Precision  (AP) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.005
 Average Precision  (AP) @[ IoU=0.50      | area=   all | maxDets=1000 ] = 0.020
 Average Precision  (AP) @[ IoU=0.75      | area=   all | maxDets=1000 ] = 0.001
 Average Precision  (AP) @[ IoU=0.50:0.95 | area= small | maxDets=1000 ] = 0.001
 Average Precision  (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=1000 ] = 0.005
 Average Precision  (AP) @[ IoU=0.50:0.95 | area= large | maxDets=1000 ] = 0.009
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.035
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=300 ] = 0.035
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=1000 ] = 0.035
 Average Recall     (AR) @[ IoU=0.50:0.95 | area= small | maxDets=1000 ] = 0.010
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=1000 ] = 0.030
# 改了之后
Average Precision  (AP) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.076
Average Precision  (AP) @[ IoU=0.50      | area=   all | maxDets=1000 ] = 0.187
Average Precision  (AP) @[ IoU=0.75      | area=   all | maxDets=1000 ] = 0.049
Average Precision  (AP) @[ IoU=0.50:0.95 | area= small | maxDets=1000 ] = 0.008
Average Precision  (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=1000 ] = 0.092
Average Precision  (AP) @[ IoU=0.50:0.95 | area= large | maxDets=1000 ] = 0.101
Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.167
Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=300 ] = 0.167
Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=1000 ] = 0.167
Average Recall     (AR) @[ IoU=0.50:0.95 | area= small | maxDets=1000 ] = 0.032
Average Recall     (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=1000 ] = 0.182
Average Recall     (AR) @[ IoU=0.50:0.95 | area= large | maxDets=1000 ] = 0.246

但是有新的bug,后面在解决,应该是配置文件的问题

image-20211008204902669

附录

swintransformer挺牛的,大家可以自己试试看

microsoft/Swin-Transformer: This is an official implementation for “Swin Transformer: Hierarchical Vision Transformer using Shifted Windows”. (github.com)

最后附上mmdetection和mmsegmnetation的对照表。

image-20211008204156607

image-20211008204306155

mmdetection3d简单安装(官方教程就是坑) 所有的Python包安装不确定对应的版本就是坑,本教程教您少安装mmdetection3d闭坑。 阅读详情

相关推荐

深度学习计算机视觉开源系统OpenMMLab(mmsegmentation、mmdetection、mmpose)环境配置【详细、可运行】

链接:OpenMMLabOpenMMLab基于PyTorch开发了MMEngine提供通用训练和评估引擎,MMCV提供神经网络算子和数据转换,作为整个项目的基础。自2018年10月首次发布以来,OpenMMLab已发布30多个视觉库,实现了300多个算法,并包含2000多个预训练模型。

Lyric的博客 2494

统信UOS V20 安装mysql5.7.42详细教程

到bin/下,执行下面的命令,初始化mysql服务信息,得到数据库的初始密码,实际如果目录不一样记得换成自己的目录。下载后通过远程将安装包上传至服务器,我这里将安装包上传至/usr/local/mysql 下。ps:这时候如果还是不能远程访问的话,可能是防火墙的原因,命令行执行以下命令即可。再次登录,发现缺少 libtinfo.so.5文件,再次建立软连接。登录,发现报错,提示缺少libncurses.so.5文件,使用。创建 /var/lib/ 下mysql目录。登录成功,修改密码,设置远程访问。

为谁伫立在风中 1万+

【mmcls】mmdet中使用mmcls的网络及预训练模型

mmcls现在叫mmpretrain,以前叫mmclassification,这里为了统一称为mmcls。在基于MM框架的下游任务,例如检测(mmdetection)中可以使用mmcls中的backbone进行特征提取,但这就需要知道网络的参数以及输出特征的维度。本文简单介绍了在mmdetection中使用mmcls中backbone的方法。mmdetection中需要配置backbone、模型权重及neck的特征维度等信息。

豆芽菜 2847

基于Arduino UNO的OLED显示器使用方法x2(Arduino系列五)

Arduino使用OLED显示模块可以实现串口数据显示,还可以与其他模块联合使用,实现实时显示开发板实时数据。

LNN0212的博客 4171

直捣黄龙~

这篇文章描述了一个矩阵寻路问题,要求计算从起点到终点的最短路径数量及长度。主要思路是通过BFS算法解决:首先标记哨兵警戒区域为禁区,然后从起点出发进行广度优先搜索,记录每个位置的最短步数和路径条数。当到达终点时,输出路径数和步数;若不可达则返回(0,0)。算法使用队列实现BFS,同时处理路径统计和步数记录,适用于网格寻路类问题。

面试高手的博客 216

离线或在线加载pytorch、mmdetection预训练模型vgg、resnet、alexnet等

pytorch预训练模型包含多个经典网络,比如resnet系列、vgg系列和alexnet等,预训练模型可以提高网络提取特征的能力,提升训练模型的性能。下面介绍一下加载预训练模型的两种方式: 第一种是在线的方法,即在代码中采用在线加载模式, import torch from torchvision import models model = models.vgg16(pretrained=True) 这样当代码运行到model时,就会根据pytorch中模型的定义找到该模型,并通过url加载预训练模型

qq_44442727的博客 5769

TC8:IPv4_HEADER_05-09

所有主机都必须准备好接受最多576个字节的数据报我们知道最大传输单元MTU通常是1500个字节,也就是说一条IP数据报的Header+payload最大1500,那为什么这条测试用例又要求主机准备好接受最多576个字节的IP数据报呢。

jasonj333 512

解决MMsegmentation与MMpretrain中预训练权重中键名不匹配问题

众所周知预训练权重其实就是一些字典,权重参数以键值对的形式存储为pth文件,那么解决问题的思路就很简单,使用pytorch的torch.load()加载权重文件,加载完后是一个字典形式,再使用python中的.items()方法获取字典中所有键值对的迭代器,最后用for循环遍历所有的键并改名即可。

m0_64893992的博客 1229

〔重庆理工大学〕计算机网络实验指导书【实验九 直连路由,静态路由,默认路由配置】

本实验指导书介绍了直连路由、静态路由和默认路由的配置方法。主要内容包括:1)路由器基础知识,包括直连路由、静态路由和动态路由三种路由生成方式;2)路由度量值与匹配顺序,解释了不同路由类型的优先级;3)实验任务分为三个部分:直连路由的查看分析、静态路由的配置以及默认路由的配置,详细说明了配置步骤和命令。实验要求通过模拟器搭建网络环境,完成路由配置使PC间能够互通。实验旨在帮助学生掌握不同路由类型的工作原理和配置方法,适用于简单的网络环境。

Pretty Boy Fox的博客 1057

MATLAB基础应用精讲-【数模应用】信用评分模型(附R语言和python代码实现)

信用评分模型是近年来兴起的一种为了保障银行和其他金融部门的金融安全而设立的一种关于人身金融权限的划定模型。该模型指根据客户的信用历史资料,利用一定的信用评分模型,得到不同等级的信用分数,根据客户的信用分数,来决定客户所可以持有的金额权限,从而保证还款等业务的安全性。而随着在现代社会和公司中,贷款,信用卡的作用日渐突出,信用评分模型的发展前景不可估量。信贷风险是指借款人因偿还贷款或履行合同承诺而破产而产生损失的可能性。传统上,它与贷款人无法偿还所欠利息和本金、影响现金流和增加装配成本所产生的风险有关。

qq_36130719的博客 364

修改mmdetection预训练模型权重的类别数,以Pascal VOC为例

修改mmdetection预训练模型权重的类别数,以Pascal VOC为例

鹏鱼彦的博客 2520

费雪的未来增长评估:预测颠覆性技术的影响

本文旨在提供一个系统性的框架,用于评估和预测颠覆性技术的增长轨迹。我们将重点关注费雪增长模型(Fisher-Pry Model)这一经典技术扩散理论,探讨其在现代技术预测中的应用价值。文章首先介绍费雪增长模型的基本概念,然后深入其数学原理和算法实现。随后展示实际应用案例,讨论工具资源,最后探讨未来发展趋势。每个部分都包含详细的技术实现和理论分析。费雪增长模型(Fisher-Pry Model):一种描述技术替代过程的S型增长模型,用于预测新技术取代旧技术的速率。

欢迎来到我的优快云空间!这里聚焦AI大模型应用实战,分享前沿技术、实战案例与开发经验。 928

搞定视觉分析全流程:mmsegmentation与MMDetection联合实战指南

你是否还在为目标检测与语义分割的割裂而烦恼?想一次性获取物体的精确位置和像素级分类却不得其门而入?本文将带你通过OpenMMLab的两大核心工具——[mmsegmentation](https://link.gitcode.com/i/2cab767810f7859715a887741bf91724)与MMDetection,构建从目标框定位到精细分割的一体化解决方案。读完本文,你将掌握在医疗影像...

gitblog_00115的博客 1236

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

【OpenMMLab】MMSegmentation 代码

第一课:【OpenMMLab】OpenMMLab概述 第二课:【OpenMMLab】人体姿态估计、关键点检测与MMPose 第三课:【openMMLab】MMPose 代码教程 第四课:【OpenMMLab】深度学习预训练与 MMPreTrain 第五课: 【OpenMMLab】MMPretrain 代码教程 第六课:【OpenMMLab】目标检测与MMDetection 第七课:【OpenMMLab】MMDetection 代码 第八课:【OpenMMLab】语义分割与MMSegmentationMMSe

DplusC的博客 411

老版QQ原生表情gif动态

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

在Windows11上安装mmdetection3D

安装 mmsegmentation(我安装后的版本是mmsegmentation-1.2.2)#安装 mmdetection3d(我安装后的版本是mmdet3d-1.4.0)# 安装 mmdetection(我安装后的版本是mmdet-3.3.0)#点击下方链接,安装VS2019构建工具,VS2022版本会有问题。# 安装 mmcv(我的是mmcv-2.0.0)#安装时选择这几个即可,修改安装位置为D盘。#成功,有个警告不知道咋回事,暂时没管。#首先将对应版本的mmcv下载到本地。

weixin_52772811的博客 1307

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

OpenMMLab-AI实战营第二期——4-2.MMDetection代码课

MMDetection 支持了各种不同的检测任务,包括目标检测,实例分割,全景分割,以及半监督目标检测。检测是分割的基础,所以它也包含了很多分割任务,和MMSegmentation的区别是:目前,支持的分割任务为语义分割中支持了实例分割和全景分割。超详细!带你轻松掌握 MMSegmentation 整体构建流程语义分割的应用:①自动驾驶;②遥感图像分析;③医学图像分析。所以可以理解为专门为了这三个垂直方向把语义分割方向的模型单独列出来了这个库主要是面向3D的,感觉重点在点云数据上,

啷个哩个啷 2145

【OpenMMLab】语义分割与MMSegmentation

任务:按照图像中每个像素的语义类别,将图像分割成不同的区域等价于:对图像中的每个像素进行分类。

DplusC的博客 611

别再手动配环境了!用MIM一键搞定OpenMMLab全家桶(MMDetection/MMSegmentation)安装

本文介绍了如何使用MIM工具一键自动化部署OpenMMLab全家桶(如MMDetection/MMSegmentation),解决传统手动配置环境中的版本冲突、CUDA兼容性等痛点。MIM作为智能管家,能自动处理依赖关系,支持跨平台环境,大幅提升计算机视觉项目的开发效率。

weixin_30820077的博客 381

【AI框架】MMDetection3D 目标检测框架的 Docker 环境制作和改良

MMDetection3D 是一个基于 PyTorch 的目标检测开源工具箱, 下一代面向3D检测的平台. ✨本文提供了一套完整的基于Docker的目标检测研究环境搭建思路,对官方教程进行了一定的修改和补充。同时随文提供SSH和Jupyter server实践,均为可用状态,提供了可靠资料给小伙伴们探索。 注:官方docker适合运行框架内的模型,本文的修改的docker适合对模型进行修改和创新,对使用者的要求略高。 全流程 1. 下载需要的资源 1. 下载 Kitti 数据集 2. 下载.

白拾的博客 9402

open-mmlab labelImg mmdetection

open-mmlab的检测项目数据标柱工具介绍labelImg安装(两种方法都适用于linux和mac上的conda虚拟环境下安装)pip包安装从源码安装mmdetection配置环境运行mmsegmentation 数据标柱工具介绍 labelImg git地址: https://github.com/tzutalin/labelImg 安装(两种方法都适用于linux和mac上的conda虚拟环境下安装) 根据git上介绍,有两种安装方法: pip包安装 pip包安装(linux上最简单的安装方法),安

fighting_Kitty的博客 932

OpenMixup下游任务应用:从目标检测到语义分割全流程

OpenMixup是一个专注于视觉表示学习的工具库,支持监督、半监督和自监督学习,尤其擅长通过数据混合技术提升模型性能。本文将详细介绍如何利用OpenMixup在下游任务中实现从目标检测到语义分割的完整流程,帮助开发者快速上手并应用于实际项目。 ## 下游任务概述:从特征提取到实际应用 🚀 OpenMixup预训练的模型能够学习到强大的视觉表征,这些表征可以无缝迁移到各类下游任务中。核心下游

gitblog_00117的博客 758

3小时精通MMSegmentation:从零到实战的完整探索路径

你是否曾想过,一个强大的语义分割工具包如何让计算机像人类一样"看懂"图像中的每一个物体?OpenMMLab的MMSegmentation正是这样一个神奇的工具箱,它不仅集成了最先进的语义分割算法,更提供了一站式的解决方案。想象一下,从简单的图像分割到复杂的场景理解,从学术研究到工业应用,MMSegmentation都能为你提供强大的支持。本文将带你以全新的视角,深入探索这个语义分割领域的瑞士军刀,

gitblog_00079的博客 699

mmdetection 修改预训练模型权重类别数

修改预训练权重类别数 import os import torch import argparse def init_args(): parser = argparse.ArgumentParser() parser.add_argument("--org_path", type=str, help="the path of pretrained model") parse...

weixin_39558227的博客 2718

Datawhale[开源学习](MMsegmentation使用)

图像是自动驾驶中非常重要的数据来源,因为摄像头的成本低于激光雷达,而且相较于点云数据,直观的图像更符合人眼的视觉感受。通过语义分割模型,识别出图像中的特定类别,例如:车道线、车辆和行人,可以辅助自动驾驶系统理解场景,做出决策。目前 MMSegmentation 支持的城市街景数据集 Cityscapes,车道线检测模型 ERFNet,实时语义分割模型 BiSeNet 等都和此相关。目前,MMSegmentation 支持的分割任务为语义分割 ,MMDetection 中支持了实例分割和全景分割。

ZMDwjj13579的博客 385

MMDetection框架入门教程(一):Anaconda3下的安装教程(mmdet+mmdet3d)

MMDetection是MMLab家族的一员,是由香港中文大学和商汤科技共同推出的,以一个统一的架构支撑了15个大方向的研究领域。,因此安装之前需要先安装这两个库。

Adam897的博客 1921
上一篇: Windows下YOLOX的配置
下一篇: Ubuntu20.04远程连接
肆十二
肆十二 优质创作者: 人工智能技术领域 优质创作者: 人工智能技术领域
博客等级 码龄9年 2万+粉丝 241原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

肆十二

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值