计算机系统应用教程网站

网站首页 > 技术文章 正文

快速上手飞桨PaddleClas图像分类库

btikc 2024-09-05 12:39:58 技术文章 25 ℃ 0 评论

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同名:老牛实验室。

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表