paddleclas 入门
2021/4/28 10:28:37
本文主要是介绍paddleclas 入门,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
文章目录
- 前言
- 一、解压数据集
- 二、划分训练集和测试集
- 三、选PaddleClas模型并训练
- 1.配置yaml文件
- 2.PaddleClas普通训练
- 3.采取预训练模型进行训练
- 4.断点训练模型
- 三、选PaddleClas模型并训练
- 1.模型评估
- 2. 用预训练模型进行模型预测
- 3. 转换模型
- 4.使用inference模型进行模型推理
- 5.对单张图片就行推理操作
前言
简要记录paddleclass入门教程,便于以后使用
一、解压数据集
!unzip -q data/data68810/螺栓质量检测-训练集.zip -d ~/work/data
二、划分训练集和测试集
在研究过程中发现可用jikuai来代替一系列繁琐的工程代码
!pip install jikuai -q # 想把数据集列表放在哪里,就在哪个目录下执行下面的命令。这里我们生成数据集列表文件在用户根目录:~/目录 。 %cd ~/ from jikuai.dataset import Dataset dataset = Dataset("work/data/螺栓质量检测-训练集") # 参数为数据集所在的位置,是分类目录的上一级目录 dataset.paddleclastxt(0.8) # 生成训练集和测试集列表,参数为两者划分的比例值。 !ls
三、选PaddleClas模型并训练
1.配置yaml文件
paddleclas可以通过配置的yaml文件来进行训练
我们可以在work路径中创建model文件夹,创建yaml文件,下面我以ResNet50_vd为例,标注配置文件中的重要参数
mode: 'train' ARCHITECTURE: name: 'ResNet50_vd' checkpoints: "" #断点模型路径,用于恢复训练 last_epoch:-1 #上一次训练结束时已经训练的epoch数量,与checkpoints一起使用 pretrained_model: "" #预训练模型路径 model_save_dir: "./output/" classes_num: 2 total_images: 320 save_interval: 1 #每隔多少个epoch保存模型 validate: True valid_interval: 1 epochs: 20 #训练总epoch数 topk: 2 #评估指标K值大小 image_shape: [3, 224, 224] LEARNING_RATE: function: 'Cosine' params: lr: 0.0125 OPTIMIZER: function: 'Momentum' params: momentum: 0.9 regularizer: function: 'L2' factor: 0.00001 TRAIN:# 训练配置 batch_size: 32 # 训练的batch size num_workers: 0 # 每个trainer(1块GPU上可以视为1个trainer)的进程数量 file_list: "../train.txt" # 训练集标签文件,每一行由"image_name label"组成 data_dir: "../" # 训练集的图像数据路径 shuffle_seed: 0 # 数据打散的种子 transforms: # 训练图像的数据预处理 - DecodeImage: # 解码 to_rgb: True to_np: False channel_first: False - RandCropImage: # 随机裁剪 size: 224 - RandFlipImage: # 随机水平翻转 flip_code: 1 - NormalizeImage: # 归一化 scale: 1./255. mean: [0.485, 0.456, 0.406] std: [0.229, 0.224, 0.225] order: '' - ToCHWImage: # 通道转换 VALID: batch_size: 20 num_workers: 0 file_list: "../eval.txt" data_dir: "../" shuffle_seed: 0 transforms: - DecodeImage: to_rgb: True to_np: False channel_first: False - ResizeImage: resize_short: 256 - CropImage: size: 224 - NormalizeImage: scale: 1.0/255.0 mean: [0.485, 0.456, 0.406] std: [0.229, 0.224, 0.225] order: '' - ToCHWImage: # confit.txt vdl_dir: "../log/resnet50" #log输出,后续可用于可视化与恢复训练
2.PaddleClas普通训练
安装paddleclas
!git clone https://gitee.com/paddlepaddle/PaddleClas %cd ~/PaddleClas/
# 切换到develop版本,这个版本才支持visualdl !git checkout develop
!python3 tools/train.py -c ~/work/luomu/ResNet50_vd.yaml
3.采取预训练模型进行训练
#下载预训练模型 !mkdir pretrained !cd pretrained && wget https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/ResNet50_vd_pretrained.pdparams
事实上,我们可以利用这串代码,修改其中的模型名称来获取预训练模型
!cd pretrained && wget https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/ResNet50_vd_pretrained.pdparams
下面这个网址为预训练模型的名称
https://gitee.com/paddlepaddle/PaddleClas#resnet%E5%8F%8A%E5%85%B6vd%E7%B3%BB%E5%88%97
下载预训练模型后,可以重新创建一个配置文件,加上参数 pretrained_model
pretrained_model: "./pretrained/ResNet50_vd_pretrained" #预训练模型路径
!python3 tools/train.py -c ~/work/luomu/ResNet50_vd_finetune.yaml
4.断点训练模型
在实际训练过程,经常发生gpu配额不足的情况,我们可以进行断点训练来应对
例如,在epoch10时发生了断点,我们可以通过以下代码进行恢复训练
python tools/train.py \ -c ./configs/quick_start/ResNet50_vd.yaml \ -o checkpoints="./output/ResNet50_vd/10/ppcls" \ -o last_epoch=10 \ -o use_gpu=True
可以 VisualDL可视化看下效果
三、选PaddleClas模型并训练
1.模型评估
在训练的过程中,PaddleClas就可以进行边训练边评估,并根据评估的精度值将最优模型参数存储在output/xxx/best_model目录中。 在训练结束后,可以再单独使用eval.py文件进行评估操作。
!python tools/eval.py \ -c ~/work/luomu/ResNet50_vd_finetune.yaml \ -o pretrained_model="./output/ResNet50_vd/best_model/ppcls"\ -o load_static_weights=False
2. 用预训练模型进行模型预测
模型训练完成之后,可以加载训练得到的预训练模型(就是存盘文件),进行模型预测。
!python tools/infer/infer.py \ -i ~/work/test \ --model ResNet50_vd \ --pretrained_model "output/ResNet50_vd/19/ppcls" \ --load_static_weights False \ --class_num=2
3. 转换模型
在训练的过程中,PaddleClas已经将模型存储起来。但是这时候存储的模型适合继续训练的时候调用,相当于打游戏的存盘文件。在真实应用中,一般会转换成专用的推理模型格式,这个格式在推理的时候速度会远远快于存盘的模型。
转换模型只需要用下面的命令就行了,注意不要忽略–class_dim=2参数,如果忽略,系统会按照默认1000分类来转换模型。
!python tools/export_model.py \ --model "ResNet50_vd" \ --pretrained_model=output/ResNet50_vd/best_model/ppcls \ --output_path=output/resnet50vdmodel \ --class_dim=2
4.使用inference模型进行模型推理
转换完成后,使用python predict.py进行模型推理。注意推理模型会有两个文件,后缀分别为pdmodel和pdiparams ,因为有pdmodel文件,所以在推理的时候就不需要像预测里面需要–model参数,而是需要告知模型文件–model_file。
!python tools/infer/predict.py \ --image_file ~/work/test \ --model_file "./output/resnet50vdmodel/inference.pdmodel" \ --params_file "./output/resnet50vdmodel/inference.pdiparams" \ --use_tensorrt=False
5.对单张图片就行推理操作
# 也可以使用-i 参数对单张图片就行推理操作 !python tools/infer/predict.py \ -i=../work/test/neg_1.png \ --model_file "./output/resnet50vdmodel/inference.pdmodel" \ --params_file "./output/resnet50vdmodel/inference.pdiparams" \ # --use_tensorrt=True
未完待续
这篇关于paddleclas 入门的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23增量更新怎么做?-icode9专业技术文章分享
- 2024-11-23压缩包加密方案有哪些?-icode9专业技术文章分享
- 2024-11-23用shell怎么写一个开机时自动同步远程仓库的代码?-icode9专业技术文章分享
- 2024-11-23webman可以同步自己的仓库吗?-icode9专业技术文章分享
- 2024-11-23在 Webman 中怎么判断是否有某命令进程正在运行?-icode9专业技术文章分享
- 2024-11-23如何重置new Swiper?-icode9专业技术文章分享
- 2024-11-23oss直传有什么好处?-icode9专业技术文章分享
- 2024-11-23如何将oss直传封装成一个组件在其他页面调用时都可以使用?-icode9专业技术文章分享
- 2024-11-23怎么使用laravel 11在代码里获取路由列表?-icode9专业技术文章分享
- 2024-11-22怎么实现ansible playbook 备份代码中命名包含时间戳功能?-icode9专业技术文章分享