PaddleClas——训练自定义数据集的分类模型并部署在Windows端

因为在做机器学习的结课大作业,在分别尝试了Keras、pytorch等框架后,因为本地训练真的巨慢,而且前两个API真的对刚接触新框架的同学不友好,同时,百度的分类模型中方便地提供了超参数的配置文件,同时提供了超大规模的分类预训练模型,可以极大地提高模型的拟合效果,所以最终采用了Paddle来做本次作业。

在AI studio端训练模型

配置环境

拉取PaddlePaddle-Classification
!git clone https://github.com/yeyupiaoling/PaddlePaddle-Classification.git
#安装环境
!pip install ujson opencv-python pillow tqdm PyYAML visualdl -i https://mirrors.aliyun.com/pypi/simple/
!pip install paddleslim==1.1.1 -i https://pypi.tuna.tsinghua.edu.cn/simple
!pip install PaddlePaddle-Classification/utils/ppcls-0.0.3-py3-none-any.whl

数据集准备

#解压数据集
!unzip -d /home/aistudio/ data/data66734/dataset.zip

数据集只需要进行按类别放到不同的文件夹里即可。(需要自行看一下creat_list.py文件中对于数据集文件格式的要求)

#生成txt
!python PaddlePaddle-Classification/create_list.py

配置模型超参数

#下载预训练模型
!wget https://paddle-imagenet-models-name.bj.bcebos.com/MobileNetV1_pretrained.tar
!tar -xf /home/aistudio/MobileNetV1_pretrained.tar
  • 通过修改yaml文件修改模型具体的超参数
  • 通过更改yaml文件更换模型进行训练测试
# 每次换模型训练前必须删除logs/文件夹,否则使用visualDL会出现前一次训练结果依然存在的情况
!CUDA_VISIBLE_DEVICES=0 
!rm -rf logs/

训练模型

!python PaddlePaddle-Classification/train.py --config PaddlePaddle-Classification/configs/MobileNetV1.yaml

生成可预测的模型文件

!python PaddlePaddle-Classification/export_model.py

模型评估

!python PaddlePaddle-Classification/eval.py

在这里插入图片描述

预测

!python PaddlePaddle-Classification/infer.py --image_path="dataset/images/metal/metal102.jpg"

Windows端部署

环境准备

拉取PaddlePaddle-Classification
!git clone https://github.com/yeyupiaoling/PaddlePaddle-Classification.git
#安装环境
!pip install ujson opencv-python pillow tqdm PyYAML visualdl -i https://mirrors.aliyun.com/pypi/simple/
!pip install paddlelite
!pip install paddleslim==1.1.1 -i https://pypi.tuna.tsinghua.edu.cn/simple
!pip install PaddlePaddle-Classification/utils/ppcls-0.0.3-py3-none-any.whl

缺什么pip安装一下就行。

预测

直接运行infer.py文件即可,可以对infer.py自行进行魔改,但是输入图像一定要经过归一化处理!!! 否则预测结果你就会吃到没有归一化的苦。
如果要将infer.py文件单独放在路径下,一定记得将utils文件夹一并带走,和infer.py放在一起,这样才能正常运行预测程序。
在这里插入图片描述

预测效果

在这里插入图片描述

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
当然可以,以下是一个简单的PaddleClas模型训练代码示例: ```python import paddle import paddle.nn as nn from paddle.vision.models import resnet50 from paddle.optimizer.lr import CosineAnnealingDecay from paddle.vision.transforms import Compose, Resize, RandomHorizontalFlip, Normalize # 定义数据增强 transform_train = Compose([ Resize((224, 224)), RandomHorizontalFlip(), Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]) ]) # 加载训练数据集和测试数据集 train_dataset = paddle.vision.datasets.ImageNet(mode='train', transform=transform_train) test_dataset = paddle.vision.datasets.ImageNet(mode='test', transform=transform_train) # 定义模型 model = resnet50(pretrained=True, num_classes=1000) # 定义优化器和学习率衰减策略 optimizer = paddle.optimizer.Adam(learning_rate=0.001, parameters=model.parameters()) lr_scheduler = CosineAnnealingDecay(learning_rate=0.001, T_max=10) # 定义损失函数 criterion = nn.CrossEntropyLoss() # 开始训练 for epoch in range(10): model.train() for i, (inputs, labels) in enumerate(train_dataset): outputs = model(inputs) loss = criterion(outputs, labels) loss.backward() optimizer.step() optimizer.clear_grad() lr_scheduler.step() if i % 100 == 0: print('epoch: {}, step: {}, loss: {}'.format(epoch, i, loss.numpy())) # 在测试集上测试准确率 model.eval() accs = [] for inputs, labels in test_dataset: outputs = model(inputs) preds = paddle.argmax(outputs) acc = paddle.metric.accuracy(preds, labels) accs.append(acc.numpy()) print('epoch: {}, test accuracy: {}'.format(epoch, sum(accs) / len(accs))) ``` 请注意,这只是一个简单的示例代码,实际训练中还需要进行一些调试和优化,如设置多GPU训练、增加数据增强策略、使用更复杂的模型等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值