一、演示多分类效果
二、PaddleClas介绍
PaddleClas主要构件:
- PP-ShiTu: 图像识别(包含图像检测与图像搜索)
- PULC:超轻量图像分类
PaddleClas是飞桨(PaddlePaddle)深度学习平台提供的一个开源项目,用于图像分类任务。它基于飞桨框架开发,致力于为用户提供一个简单、高效、灵活的图像分类工具。PaddleClas集成了许多常用的图像分类模型和数据增强方法,使得用户可以轻松地进行图像分类任务的训练和推理。
PaddleClas提供了丰富的图像分类模型,包括经典的卷积神经网络(CNN)架构,如ResNet、VGG和MobileNet等,以及最新的一些优化模型,如GhostNet、EfficientNet和RegNet等。用户可以选择适合自己任务需求的模型进行训练和推理。
此外,PaddleClas还提供了一些常用的数据增强方法,如随机裁剪、随机旋转和随机亮度调整等,可以有效提升模型的泛化能力和鲁棒性。
总之,飞桨图像识别套件PaddleClas是飞桨为工业界和学术界所准备的一个图像识别和图像分类任务的工具集,助力使用者训练出更好的视觉模型和应用落地。
三、代码获取
https://gitee.com/paddlepaddle/PaddleClas
PaddleClas 主要代码和目录结构如下
- benchmark: 文件夹下存放了一些 shell 脚本,主要是为了测试 PaddleClas 中不同模型的速度指标,如单卡训练速度指标、多卡训练速度指标等。
- dataset:文件夹下存放数据集和用于处理数据集的脚本。脚本负责将数据集处理为适合 Dataloader 处理的格式。
- deploy:部署核心代码,文件夹存放的是部署工具,支持 python/cpp inference、Hub Serveing、Paddle Lite、Slim 离线量化等多种部署方式。
- ppcls:训练核心代码,文件夹下存放 PaddleClas 框架主体。配置文件、模型训练、评估、预测、动转静导出等具体代码实现均在这里。
- tools:训练、评估、预测、模型动转静导出的入口函数和脚本均在该文件下。
- requirements.txt 文件用于安装 PaddleClas 的依赖项。使用 pip 进行升级安装使用。
- tests:PaddleClas 模型从训练到预测的全链路测试,验证各功能是否能够正常使用。
四、数据集获取
链接:https://pan.baidu.com/s/1_GuRwxUmf42rVlmCL8ErlQ?pwd=8vet
提取码:8vet
五、环境搭建
- cuda、cudnn可根据这篇博客配置,我的是cuda10.1。
- python版本是3.7.11。
- 安装paddle-gpu:
python -m pip install paddlepaddle-gpu==2.3.2.post101 -f https://www.paddlepaddle.org.cn/whl/windows/mkl/avx/stable.html
:官网链接 - 如果是CPU则通过这个命令安装
python -m pip install paddlepaddle -i https://mirror.baidu.com/pypi/simple
- 剩下的环境就缺啥安装啥即可。
六、数据格式分析
七、模型训练
- 修改config文件对应属性
- –config 配置文件路径
- –override 使用其他的参数
- 修改yaml文件对应位置属性
- class_num
- epochs
- device
- image_root(train和eval)
- cls_label_path(train和eval)
python tools/train.py
-c ppcls/configs/quick_start/professional/MobileNetV1_multilabel.yaml
-o Arch.pretrained=True # 是否使用预训练模型
模型训练完之后会在主目录生成模型。
7.1 模型恢复训练
python tools/train.py \
-c ppcls/configs/quick_start/professional/MobileNetV1_multilabel.yaml
-o Global.checkpoints="./output/*********/epoch_5" \
-o Global.device=gpu
其中配置文件不需要做任何修改,只需要在继续训练时设置 Global.checkpoints 参数即可,表示加载的断点权重文件路径,使用该参数会同时加载保存的断点权重和学习率、优化器等信息。
可配置的部分评估参数说明如下:
- Arch.name:模型名称
- Global.pretrained_model:待评估的模型的预训练模型文件路径,不同于Global.Backbone.pretrained,此处的预训练模型是整个模型的权重,而Global.Backbone.pretrained只是Backbone部分的权重。当需要做模型评估时,需要加载整个模型的权重。
- Metric.Eval:待评估的指标,默认评估recall@1、recall@5、mAP。当你不准备评测某一项指标时,可以将对应的试标从配置文件中删除;当你想增加某一项评测指标时,也可以参考Metric部分在配置文件Metric.Eval中添加相关的指标。
注意:
- 在加载待评估模型时,需要指定模型文件的路径,但无需包含文件后缀名,PaddleClas 会自动补齐 .pdparams 的后缀。
- Metric learning 任务一般不评测 Topk Acc。
7.2 多卡训练
# PaddleClas 通过 launch 方式启动多卡多进程训练
export CUDA_VISIBLE_DEVICES=0,1,2,3
python -m paddle.distributed.launch \
--gpus="0,1,2,3" \
tools/train.py \
-c ppcls/configs/quick_start/professional/MobileNetV1_multilabel.yaml
7.3 其他训练指标
Metric可以修改为下面属性。
Metric:
Train:
- TopkAcc:
topk: [1, 5]
Eval:
- TopkAcc:
topk: [1, 5]
八、模型预测
-c:配置文件路径
-o Infer.infer_imgs:预测图片路径
-o Global.pretrained_model:训练输出模型路径
-o save_txt:是否在文件夹下将图片的预测结果保存到文本文件中
由于默认 class_id_map_file 是 ImageNet 数据集的映射文件,所以此处需要置 None。
python tools/infer.py -c ppcls/configs/quick_start/professional/MobileNetV1_multilabel.yaml -o Infer.infer_imgs=dataset/1.jpg -o Global.pretrained_model=output/MobileNetV1/best_model -o Infer.PostProcess.class_id_map_file=ppcls/utils/PULC_label_list/label_list.txt
九、模型评估
- python tools/eval.py
- -c ppcls/configs/quick_start/professional/MobileNetV1_multilabel.yaml
- -o Global.device=gpu
- -o DataLoader.Eval.dataset.image_root=E:\dataset\classify\NUS-SCENE-dataset/images/
- -o DataLoader.Eval.dataset.cls_label_path=E:\dataset\classify\NUS-SCENE-dataset/multilabel_test_list.txt
- -o Global.pretrained_model=output/MobileNetV1/best_model
- -o Arch.class_num=33
- -o Global.use_visualdl=True # 过程可视化
python tools/eval.py -c ppcls/configs/quick_start/professional/MobileNetV1_multilabel.yaml -o Global.device=gpu -o DataLoader.Eval.dataset.image_root=E:\dataset\classify\NUS-SCENE-dataset/images/ -o DataLoader.Eval.dataset.cls_label_path=E:\dataset\classify\NUS-SCENE-dataset/multilabel_test_list.txt -o Global.pretrained_model=output/MobileNetV1/best_model -o Arch.class_num=33