目标分类笔记(二): 利用PaddleClas的框架来完成多标签分类任务(从数据准备到训练测试部署的完整流程)

简介: 这篇文章介绍了如何使用PaddleClas框架完成多标签分类任务,包括数据准备、环境搭建、模型训练、预测、评估等完整流程。

一、演示多分类效果

请添加图片描述

二、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

五、环境搭建

  1. cuda、cudnn可根据这篇博客配置,我的是cuda10.1。
  2. python版本是3.7.11。
  3. 安装paddle-gpu:python -m pip install paddlepaddle-gpu==2.3.2.post101 -f https://www.paddlepaddle.org.cn/whl/windows/mkl/avx/stable.html官网链接
    在这里插入图片描述
    在这里插入图片描述
  4. 如果是CPU则通过这个命令安装python -m pip install paddlepaddle -i https://mirror.baidu.com/pypi/simple
  5. 剩下的环境就缺啥安装啥即可。

六、数据格式分析

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

七、模型训练

  • 修改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

在这里插入图片描述

十、PaddleClas相关博客

相关实践学习
部署Stable Diffusion玩转AI绘画(GPU云服务器)
本实验通过在ECS上从零开始部署Stable Diffusion来进行AI绘画创作,开启AIGC盲盒。
目录
相关文章
|
3天前
|
人工智能 搜索推荐 数据管理
探索软件测试中的自动化测试框架选择与优化策略
本文深入探讨了在现代软件开发流程中,如何根据项目特性、团队技能和长期维护需求,精准选择合适的自动化测试框架。
37 8
|
4天前
|
安全 Ubuntu Linux
Metasploit Pro 4.22.6-2024111901 (Linux, Windows) - 专业渗透测试框架
Metasploit Pro 4.22.6-2024111901 (Linux, Windows) - 专业渗透测试框架
25 9
Metasploit Pro 4.22.6-2024111901 (Linux, Windows) - 专业渗透测试框架
|
15天前
|
机器学习/深度学习 人工智能 测试技术
探索自动化测试框架在软件开发中的应用与挑战##
本文将深入探讨自动化测试框架在现代软件开发过程中的应用,分析其优势与面临的挑战。通过具体案例分析,揭示如何有效整合自动化测试以提升软件质量和开发效率。 ##
|
13天前
|
存储 算法 C语言
用C语言开发游戏的实践过程,包括选择游戏类型、设计游戏框架、实现图形界面、游戏逻辑、调整游戏难度、添加音效音乐、性能优化、测试调试等内容
本文探讨了用C语言开发游戏的实践过程,包括选择游戏类型、设计游戏框架、实现图形界面、游戏逻辑、调整游戏难度、添加音效音乐、性能优化、测试调试等内容,旨在为开发者提供全面的指导和灵感。
30 2
|
18天前
|
JavaScript 安全 编译器
TypeScript 与 Jest 测试框架的结合使用,从 TypeScript 的测试需求出发,介绍了 Jest 的特点及其与 TypeScript 结合的优势,详细讲解了基本测试步骤、常见测试场景及异步操作测试方法
本文深入探讨了 TypeScript 与 Jest 测试框架的结合使用,从 TypeScript 的测试需求出发,介绍了 Jest 的特点及其与 TypeScript 结合的优势,详细讲解了基本测试步骤、常见测试场景及异步操作测试方法,并通过实际案例展示了其在项目中的应用效果,旨在提升代码质量和开发效率。
33 6
|
14天前
|
数据可视化 测试技术 API
软件测试中的自动化测试框架选择与实践
在当今快节奏的软件开发环境中,自动化测试成为了确保软件质量和加速交付的关键。本文将探讨自动化测试的重要性,并比较几种流行的自动化测试框架,包括Selenium、Appium和TestComplete。文章还将提供一些最佳实践和案例研究,以帮助读者更好地理解和实施自动化测试策略。
|
14天前
|
机器学习/深度学习 人工智能 Java
探索软件测试中的自动化框架选择与优化策略####
本文深入探讨了在软件测试领域,面对众多自动化测试框架时,如何根据项目特性、团队技能及长远规划做出最佳选择,并进一步阐述了优化这些框架以提升测试效率与质量的策略。通过对比分析主流自动化测试框架的优劣,结合具体案例,本文旨在为测试团队提供一套实用的框架选型与优化指南。 ####
|
14天前
|
敏捷开发 前端开发 Java
软件测试中的自动化测试框架选择与实践
在当今软件开发生命周期中,自动化测试已成为提升软件质量和开发效率的关键手段。本文旨在探讨自动化测试框架的选择标准及其在实际项目中的应用实践。通过对主流自动化测试框架的分析比较,结合具体案例,本文将阐述如何根据项目需求和团队特点选择合适的自动化测试工具,并分享实施过程中的经验教训。
30 1
|
20天前
|
jenkins 测试技术 持续交付
自动化测试框架的构建与优化:提升软件交付效率的关键####
本文深入探讨了自动化测试框架的核心价值,通过对比传统手工测试方法的局限性,揭示了自动化测试在现代软件开发生命周期中的重要性。不同于常规摘要仅概述内容,本部分强调了自动化测试如何显著提高测试覆盖率、缩短测试周期、降低人力成本,并促进持续集成/持续部署(CI/CD)流程的实施,最终实现软件质量和开发效率的双重飞跃。通过具体案例分析,展示了从零开始构建自动化测试框架的策略与最佳实践,包括选择合适的工具、设计高效的测试用例结构、以及如何进行性能调优等关键步骤。此外,还讨论了在实施过程中可能遇到的挑战及应对策略,为读者提供了一套可操作的优化指南。 ####
|
21天前
|
敏捷开发 监控 测试技术
探索自动化测试框架的构建与优化####
在软件开发周期中,自动化测试扮演着至关重要的角色。本文旨在深入探讨如何构建高效的自动化测试框架,并分享一系列实用策略以提升测试效率和质量。我们将从框架选型、结构设计、工具集成、持续集成/持续部署(CI/CD)、以及最佳实践等多个维度进行阐述,为软件测试人员提供一套系统化的实施指南。 ####