PaddleClas是百度为工业界和学术界所准备的一个图像分类工具集,使用此工具便可以简单实现高精度分类任务。

本文使用AIStudio计算平台建立一个实践项目,来演示PaddleClas的使用。项目使用的数据集为公开数据集Oxford 102 Flowers Dataset。

一、AI Studio平台建立项目

首先登录百度AI Studio,创建项目,网址为:https://aistudio.baidu.com/aistudio/projectoverview/public

点击【创建项目】。

选择Notebook类型项目。

目前的百度AI开发框架的版本已经全面迁移到2.x,项目框架选择2.x即可。

填写项目描述,项目标签中,选择建立项目的特征即可。此处选择【添加数据集】,从百度AI平台上搜索是否有flowers102数据集(见下图示)。

如果有,可以省去从国外网站下载数据包的时间。如果没有,可以从flowers102官网下载,然后在AI Studio平台创建自己的数据集,再在本步骤添加数据集到项目中。

如果数据文件小于150M,可不通过数据集方式添加到项目,可以在建立项目并启动后,上传到项目目录中

本项目使用的数据网址:

https://www.robots.ox.ac.uk/~vgg/data/flowers/102/102flowers.tgz

https://www.robots.ox.ac.uk/~vgg/data/flowers/102/imagelabels.mat

https://www.robots.ox.ac.uk/~vgg/data/flowers/102/setid.mat

点击【添加】,将数据集添加到建立的Notebook项目中。

选择上一步的【创建】按钮,弹出如下界面:

点击【查看】,即可打开创建的项目。

点击【启动环境】,即可进入建立的项目镜像。

启动环境时,有两个选项,因为要进行大数据训练,选择【高级版】(目前百度每天免费提供10小时算力)。

当你看到上面界面的时候,表示已经建立成功,可以进行第二步安装PaddleClas包了。

*AI Studio使用说明

https://ai.baidu.com/ai-doc/AISTUDIO/

*目录说明:

work目录(完整路径为/home/aistudio/work),一般放代码及工作过程文件 ;

data目录中(完整路径为/home/aistudio/data),放挂载的数据集。

本次实验只使用搜索到数据集中的3个文件。

*注意事项:

每个项目,相当于一个docker镜像环境,环境中操作系统为linux,paddle的基本运行环境预先已经安装好;

启动项目后,默认是在/home/aistudio下,就是linux的用户目录 ~;

/home/aistudio/data  目录中的修改,下次再启动项目时自动恢复

/home/aistudio/work 目录中的修改,会持续保存,注意使用空间不断增大,启动时会很慢

*如果要保持自己安装的第三方库,可以采用下面方式

!mkdir /home/aistudio/mylib

!pip install beautifulsoup4 -t /home/aistudio/mylib

每次重新启动Notebook kernel时,只要运行如下代码,即可将安装的库添加到搜索路径

import sys

sys.path.append('/home/aistudio/mylib')

二、安装PaddleClas包

本实验建立时选择了项目框架PaddlePaddle 2.x,此时启动的项目环境中已经预先安装有PaddlePaddle基础环境。

如果是在自己计算机的linux操作系统下使用,需要先安装PaddlePaddle(默认推荐使用GPU版本,快速训练):
pip install paddlepaddle-gpu

回到启动的AI Studio项目,选择【终端-1】(相当于linux中的终端窗口,可以执行任何命令),下面的操作都是在终端中进行。

执行pwd,检测当前是否在/home/aistudio下。执行ls命令,此位置下有data、work目录及一个.ipynb(notebook文件,可以在此文件编写python代码),具体目录用途参考上文说明。

本项目将PaddleClas安装到work目录下:

cd work

git clone https://gitee.com/paddlepaddle/PaddleClas/        从码云下载PaddleClas

cd PaddleClas

pip install -r requirements.txt

*PaddleClas主要目录说明:

configs/              配置文件存放位置,每种模型的配置文件放一个子目录
dataset/             数据集存放位置,推荐每个数据集一个子目录
deploy/              部署相关的程序
ppcls/                 PaddleClas的主体库代码
tools/                  模型下载、训练、评估、预测的工具脚本存放位置

三、PaddleClas快速训练

1.准备数据

假定当前在PaddleClas目录中。

本项目使用的数据集在data/data64337目录下面,只需要其中的3个文件(见第一部分中的图示),拷贝3个文件到 dataset/flowers102下,解压102flowers.tgz。

cd dataset/flowers102 

cp ~/data/data64337/*.*  .

tar -xf 102flowers.tgz

制作标签文件

python generate_flowers102_list.py jpg train > train.txt
python generate_flowers102_list.py jpg valid > val.txt
python generate_flowers102_list.py jpg test > test.txt
cat train.txt test.txt > train_test.txt

cd ~/work/PaddleClas/                    返回PaddleClas目录

2.下载预训练模型参数

继续之前,先把PaddleClas目录添加到python运行搜索路径中:

export PYTHONPATH=./:$PYTHONPATH

预训练模型保存了在其他数据集上训练好的模型参数,可以作为后续训练的起点,实现迁移学习。实验中下载3个预训练模型:

ResNet50、ResNet带蒸馏、MobileNetv3。下载到pretrained目录,并解压。

python tools/download.py -a ResNet50_vd -p ./pretrained -d True
python tools/download.py -a ResNet50_vd_ssld -p ./pretrained -d True
python tools/download.py -a MobileNetV3_large_x1_0 -p ./pretrained -d True

3.模型训练

*AI Studio的免费GPU环境提供的是单卡,在训练前需要先指明单卡:

export CUDA_VISIBLE_DEVICES=0

*配置文件列表

本实验使用的配置文件在configs/quick_start/中,选用其中部分进行演示:

ResNet50_vd.yaml                                                                         ResNet50模型,不加载预训练参数

ResNet50_vd_finetune.yaml                                                           ResNet50模型,加载预训练参数(就是上一步下载的ResNet50_vd参数)

ResNet50_vd_ssld_finetune.yaml                                                  ResNet50模型,加载预训练参数+单模型蒸馏特性(就是上一步下载的ResNet50_vd_ssld参数)

MobileNetV3_large_x1_0_finetune.yaml                                        MobileNetV3模型,加载预训练参数(就是上一步下载的MobileNetV3_large_x1_0参数)

ResNet50_vd_ssld_random_erasing_finetune.yaml                      ResNet50模型,加载预训练参数+单模型蒸馏特性+随机擦除数据增强(就是上一步下载的ResNet50_vd_ssld参数)

R50_vd_distill_MV3_large_x1_0.yaml                                            ResNet50模型+MobileNetV3模型,双模型蒸馏

*修改配置文件

例如下图打开【a.不加载预训练模型的训练】用到的ResNet50_vd.yaml 配置文件,根据【1、准备数据】中的标签文件名,修改配置。

!!!别忘记保存修改

a、ResNet50模型不加载预训练参数的训练

python -m paddle.distributed.launch \--selected_gpus="0" \tools/train.py \-c ./configs/quick_start/ResNet50_vd.yaml

在终端-1中执行上面的训练语句,训练结束,best精度为:top1 acc 0.27255

b、ResNet50模型加载预训练参数

python -m paddle.distributed.launch \--selected_gpus="0" \tools/train.py \-c ./configs/quick_start/ResNet50_vd_finetune.yaml

训练结果,best精度: top1 acc 0.94118

c、ResNet50模型加载通过知识蒸馏获得的参数

python -m paddle.distributed.launch \--selected_gpus="0" \tools/train.py \-c ./configs/quick_start/ResNet50_vd_ssld_finetune.yaml

配置文件中,推荐使用相对较小的网络中间层学习率。

ARCHITECTURE:name: 'ResNet50_vd'params:lr_mult_list: [0.1, 0.1, 0.2, 0.2, 0.3]
pretrained_model: "./pretrained/ResNet50_vd_ssld_pretrained"

训练结果,best精度为:top1 acc 0.93235   (精度反而不如b中。因为训练使用的是20轮,可以考虑调整其他参数,继续训练。官方给出的信息为加蒸馏特性后,应该好于b)

d、MobileNetV3加载预训练模型

python -m paddle.distributed.launch \--selected_gpus="0" \tools/train.py \-c ./configs/quick_start/MobileNetV3_large_x1_0_finetune.yaml

训练结果,best精度为:top1 acc 0.89902

e、ResNet50模型加载参数并使用RandomErasing数据增广

python -m paddle.distributed.launch \--selected_gpus="0" \tools/train.py \-c ./configs/quick_start/ResNet50_vd_ssld_random_erasing_finetune.yaml

训练结果,best精度为:top1 acc 0.92451     (精度反而不如b、c训练。因为训练使用的是20轮,可以考虑调整其他参数,继续训练。官方给出的信息为好于b、c)

f、实验知识蒸馏

使用e训练中,在flowers102数据集上训练的结果为教师模型,使用MobileNetV3_large_x1_0预训练模型(是在ImageNet1k数据集上训练)为学生模型。

cp -r output/ResNet50_vd/19/  ./pretrained/flowers102_R50_vd_final/               拷贝e训练的最后结果到预训练模型目录下备用(作为教师模型)

修改配置文件 configs/quick_start/R50_vd_distill_MV3_large_x1_0.yaml

python -m paddle.distributed.launch \--selected_gpus="0" \tools/train.py \-c ./configs/quick_start/R50_vd_distill_MV3_large_x1_0.yaml

训练结果,best精度为:top1 acc 0.93627


下图为PaddleClas官方给出的结果精度,与实验结果略有差距。也许因为配置参数有其他修改或运行环境有差异。有兴趣的读者可以尝试验证。


本文介绍了快速上手PaddleClas图像分类库的过程,不必编程,命令行+配置参数,即可实现多种组合的训练。PaddleClas中还有很多内容可以挖掘,这里只是打开了大门。

这里把相关的几个网址发一下,可以自行学习:

https://paddleclas.readthedocs.io/zh_CN/latest/tutorials/

https://gitee.com/paddlepaddle/PaddleClas/

https://github.com/PaddlePaddle/PaddleClas

本文由老牛实验室原创,转帖请注明。

对人工智能及相关领域感兴趣的读者,可以关注本账号。本账号头条、CSDN同名:老牛实验室。

快速上手飞桨PaddleClas图像分类库相关推荐

  1. 明日直播| NLPCC workshop百度架构师带你快速上手飞桨NLP

    点击左上方蓝字关注我们 国际自然语言处理和中文计算会议(NLPCC)10月16日正式开幕,云集自然语言处理和语言计算领域的研究和创新成果,是自然语言处理领域年度盛会. 本届会议中,主办方特邀飞桨承办线 ...

  2. 23个系列分类网络,10万分类预训练模型,这是飞桨PaddleClas百宝箱

    如何训练出优秀的图像分类模型?飞桨图像分类套件 PaddleClas 来助力. 今天咱们来聊聊计算机视觉领域最核心的技术之一--图像分类.顾名思义图像分类是指根据图像信息把不同类别的图像自动区分开来, ...

  3. 百度飞桨PaddleClas图像识别开源应用扫盲课笔记(一)

    前言:          百度PaddlePaddle团队今晚第一次在线直播课,本好奇宝宝进群后,一面面知识的壁垒立在我的面前,让我看到无数不了解的中英文词汇,但是这并没有打击到我小强般坚强的心,我就 ...

  4. 自动分类打标签!飞桨TSM模型帮你做视频理解

    导读:目前互联网视频数据日益增多,用户观看短视频.小视频的时长也迅速增长,如何对海量的视频资源快速准确地分析.处理.归类是一个亟待解决的问题.视频理解技术可以多维度解析视频内容,理解视频语义,自动分类 ...

  5. 飞桨框架2.0正式版重磅发布,一次端到端的“基础设施”革新

    在人工智能时代,深度学习框架下接芯片,上承各种应用,是"智能时代的操作系统".近期,我国首个自主研发.功能完备.开源开放的产业级深度学习框架飞桨发布了2.0正式版,实现了一次跨时代 ...

  6. PaddleOCR实践之飞桨常规赛:中文场景文字识别

    简介 本项目是参加飞桨常规赛:中文场景文字识别(已结束)的项目,项目score为85.87141. 生成的预测文件为work/PaddleOCR中的test2.txt文件 项目任务为识别包含中文文字的 ...

  7. 1.2 波士顿房价预测(飞桨版)

    文章目录 一.框架加载 二.数据处理 三.模型设计 四.训练配置 五.训练过程 六.保存并测试模型 6.1 保存模型 6.2 测试模型 一.框架加载 在数据处理之前,需要先加载飞桨框架的相关类库. # ...

  8. 使用飞桨完成手写数字识别模型

    手写数字识别任务 数字识别是计算机从纸质文档.照片或其他来源接收.理解并识别可读的数字的能力,目前比较受关注的是手写数字识别.手写数字识别是一个典型的图像分类问题,已经被广泛应用于汇款单号识别.手写邮 ...

  9. 百度飞桨、郑州大学联合培养AI工程人才,破解无纺布瑕疵检测难题

    1平方毫米有多大?圆珠笔尖大小.这么小的一个点要是放在高速运转每分钟几十米的布匹上,要检测出来的难度可想而知.而针对以无纺布为原材料的口罩,无纺布的质量要求容不得一点瑕疵,因此瑕疵检测成为行业里的一个 ...

最新文章

  1. MySQL 常见操作指令
  2. 《PHP和MySQL Web开发》学习之二--数据的存储与检索
  3. Yii的Where条件
  4. 走出舒适圈,从来都不简单
  5. LoadRunner如何监控Linux下的系统资源
  6. python中elif和while简单介绍及注意事项(含笔记)
  7. Problem C: 括号匹配(栈和队列)
  8. 已知斜边和角度求邻边_从数学史角度看数系发展
  9. 标准库函数和系统调用的区别
  10. 如何更好地优化大数据分析
  11. Navicat Mac版中如何使用搜索筛选
  12. 西门子tcpip通讯实例_西门子200SMART与视觉软件TCPIP通讯
  13. spring源码:入口
  14. python查看微信撤回消息_Python查看微信好友撤回的消息
  15. 严平稳随机过程,宽平稳随机过程,二阶矩过程之间的关系
  16. 2018至2021年新春挡电影票房分析
  17. 【windows——工具篇】哔哩哔哩快捷键
  18. android三星打印插件,三星打印服务插件 Samsung Print Service for Android
  19. 中国天气网全城市代码
  20. Learn Vim Progressively博文学习

热门文章

  1. Jenkins卸载方法
  2. CabloyJS微信模块、企业微信模块已出齐
  3. 电路抗干扰设计——非常详细
  4. WPF教程(二) WPF vs WinForms
  5. WiFi产品抗干扰设计
  6. 微信小程序前端备忘录记事本搜索功能
  7. iPad/iPhone内存管理四之viewDidUnload/dealloc详细解说
  8. java实现RabbitMQ消息队列
  9. Less -- 初见less(Less介绍 初次使用less 使用考拉编译less 盒子居中)
  10. xmind打开文件报错