热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

基于Paddle的计算机视觉入门教程【学习笔记】(5)Paddlex实现垃圾分类

我是雪天鱼,一名FPGA爱好者,研究方向是FPGA架构探索和数字IC设计。关注公众号【集成电路设计教程】,获取更多学习资料,

我是 雪天鱼,一名FPGA爱好者,研究方向是FPGA架构探索和数字IC设计。

关注公众号【集成电路设计教程】,获取更多学习资料,并拉你进“IC设计交流群”。
QQIC设计&FPGA&DL交流群 群号:866169462

原作者课程链接:https://www.bilibili.com/video/BV18b4y1J7a6?p=2

一、安装 PaddleX

首先需要安装 Microsoft Visual C++ 14.0,安装工具自取
链接:https://pan.baidu.com/s/1NfJF2x3ZEnGzvlEcHcjxxg
提取码:n0ll

下载好后解压,双击 exe进行安装

enter description here

再进入之前创建的 paddle 的虚拟环境,输入下述指令安装PaddleX:

pip install paddlex==2.1.0 -i https://mirror.baidu.com/pypi/simple

通过 pip list 查看是否安装成功

enter description here

二、准备数据集

链接:https://pan.baidu.com/s/12x6C6O0R_3xGjTHdGy8Syw
提取码:l5ft

下载好后解压即可。

enter description here

  • eval.txt 用于测试
  • train.txt 用于模型训练
  • labels.txt 每个文件夹对于的label

三、模型训练

打开pycharm,新建名为 paddle 的项目,设置好 Python 解释器为 paddle 虚拟环境中的python。然后新建 train.py 编写训练代码:

from paddlex import transforms as T
import paddlex as pdx# 1 定义训练集的数据增强算子
train_transforms = T.Compose([T.RandomCrop(crop_size=224),T.RandomHorizontalFlip(),T.Normalize()])# 2 定义测试集的数据增强算子
eval_transforms = T.Compose([T.ResizeByShort(short_size=256),T.CenterCrop(crop_size=224),T.Normalize()
])# 3 定义训练数据集和测试数据集
train_dataset = pdx.datasets.ImageNet(data_dir='rubbish',file_list='rubbish/train.txt',label_list='rubbish/labels.txt',transforms=train_transforms,shuffle=True)
eval_dataset = pdx.datasets.ImageNet(data_dir='rubbish',file_list='rubbish/eval.txt',label_list='rubbish/labels.txt',transforms=eval_transforms)num_classes = len(train_dataset.labels) # label 个数# 4 定义垃圾分类的CNN模型
model = pdx.cls.MobileNetV3_small(num_classes=num_classes)# 5 模型训练
model.train(num_epochs=10, # 训练总轮数train_dataset=train_dataset,train_batch_size=64, # 每次送入显卡进行训练计算的图片张数eval_dataset=eval_dataset,lr_decay_epochs=[4, 6, 8], # 学习率减小的轮数save_dir='output/mobilenetv3_small', # 输出文件夹设置use_vdl=True)

刚开始训练时,学习率大容易快速收敛,但多轮训练后就需要将其设置小点,以免错过 loss 最小值。

enter description here

可以看到训练出来最优的模型是第 9 轮所训练出来的模型。

生成的文件有:

enter description here

enter description here

  • model.yml 是模型标注文件,简单介绍该模型。

四、使用训练好的模型进行预测

模型既然训练好了,就可以使用了,新建一个 predict.py,输入:

import paddlex as pdx
model = pdx.load_model('output/mobilenetv3_small/best_model')
result = model.predict('1.jpg')
print("Predict Result: ", result)

这里我从网上随便找了个易拉罐的图片:

enter description here

输出结果:

enter description here

可以看到识别正确。

五、训练过程可视化

通过在对应 paddle 的虚拟环境下,输入visualdl --logdir output/mobilenetv3_small --port 8001 即可可视化查看训练过程中,学习率、loss等参数的变化情况。

enter description here


推荐阅读
  • 抠图前vsPython自动抠图后在日常的工作和生活中,我们经常会遇到需要抠图的场景,即便是只有一张图片需要抠,也会抠得我们不耐烦ÿ ... [详细]
  • 1.如何在运行状态查看源代码?查看函数的源代码,我们通常会使用IDE来完成。比如在PyCharm中,你可以Ctrl+鼠标点击进入函数的源代码。那如果没有IDE呢?当我们想使用一个函 ... [详细]
  • Python自动化处理:从Word文档提取内容并生成带水印的PDF
    本文介绍如何利用Python实现从特定网站下载Word文档,去除水印并添加自定义水印,最终将文档转换为PDF格式。该方法适用于批量处理和自动化需求。 ... [详细]
  • 本文详细介绍了如何在Ubuntu系统中下载适用于Intel处理器的64位版本,涵盖了不同Linux发行版对64位架构的不同命名方式,并提供了具体的下载链接和步骤。 ... [详细]
  • 本文详细记录了在银河麒麟操作系统和龙芯架构上使用 Qt 5.15.2 进行项目打包时遇到的问题及解决方案,特别关注于 linuxdeployqt 工具的应用。 ... [详细]
  • 深入了解 Windows 窗体中的 SplitContainer 控件
    SplitContainer 控件是 Windows 窗体中的一种复合控件,由两个可调整大小的面板和一个可移动的拆分条组成。本文将详细介绍其功能、属性以及如何通过编程方式创建复杂的用户界面。 ... [详细]
  • 本文详细介绍了如何在 Windows 环境下使用 node-gyp 工具进行 Node.js 本地扩展的编译和配置,涵盖从环境搭建到代码实现的全过程。 ... [详细]
  • 创建项目:Visual Studio Online 入门指南
    本文介绍如何使用微软的 Visual Studio Online(VSO)创建和管理开发项目。作为一款基于云计算的开发平台,VSO 提供了丰富的工具和服务,简化了项目的配置和部署流程。 ... [详细]
  • 本文介绍如何在 Visual Studio Code 中使用 Jupyter Notebook 插件,包括创建、编辑和运行笔记本的基本操作。 ... [详细]
  • 俗话说得好,“工欲善其事,必先利其器”。这句话不仅强调了工具的重要性,也提醒我们在任何项目开始前,准备合适的工具至关重要。本文将介绍几款C语言编程中常用的工具,帮助初学者更好地选择适合自己学习和工作的编程环境。 ... [详细]
  • Ubuntu GamePack:专为游戏爱好者打造的Linux发行版
    随着Linux系统在游戏领域的应用越来越广泛,许多Linux用户开始寻求在自己的系统上畅玩游戏的方法。UALinux,一家致力于推广GNU/Linux使用的乌克兰公司,推出了基于Ubuntu 16.04的Ubuntu GamePack,旨在为Linux用户提供一个游戏友好型的操作环境。 ... [详细]
  • Jupyter 使用Anaconda 虚拟环境内核
    Anaconda虚拟环境中使用JupyterNotebook安装好Anaconda之后,进入AnacondaPrompt,创建虚拟环境, ... [详细]
  • 产业智能化升级的浪潮并没有因为疫情等原因停滞不前,作为带来人工智能应用井喷式发展的深度学习技术在近几年也可谓是“时代宠儿”,想要尝试应用深度学习技术解决 ... [详细]
  • 360SRC安全应急响应:从漏洞提交到修复的全过程
    本文详细介绍了360SRC平台处理一起关键安全事件的过程,涵盖从漏洞提交、验证、排查到最终修复的各个环节。通过这一案例,展示了360在安全应急响应方面的专业能力和严谨态度。 ... [详细]
  • Scala 实现 UTF-8 编码属性文件读取与克隆
    本文介绍如何使用 Scala 以 UTF-8 编码方式读取属性文件,并实现属性文件的克隆功能。通过这种方式,可以确保配置文件在多线程环境下的一致性和高效性。 ... [详细]
author-avatar
heqiuhao
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有