Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
PaddlePaddle
PaddleClas
提交
7cb0d27a
P
PaddleClas
项目概览
PaddlePaddle
/
PaddleClas
大约 1 年 前同步成功
通知
115
Star
4999
Fork
1114
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
19
列表
看板
标记
里程碑
合并请求
6
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
P
PaddleClas
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
19
Issue
19
列表
看板
标记
里程碑
合并请求
6
合并请求
6
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
7cb0d27a
编写于
11月 22, 2021
作者:
S
sibo2rr
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
add menu to quick_start_classification_professional.md
上级
23a67b94
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
75 addition
and
29 deletion
+75
-29
docs/zh_CN/quick_start/quick_start_classification_professional.md
...CN/quick_start/quick_start_classification_professional.md
+75
-29
未找到文件。
docs/zh_CN/quick_start/quick_start_classification_professional.md
浏览文件 @
7cb0d27a
...
...
@@ -2,8 +2,32 @@
此处提供了专业用户在linux操作系统上使用PaddleClas的快速上手教程,主要内容基于CIFAR-100数据集,快速体验不同模型的训练、加载不同预训练模型、SSLD知识蒸馏方案和数据增广的效果。请事先参考
[
安装指南
](
../installation/install_paddleclas.md
)
配置运行环境和克隆PaddleClas代码。
------
## 一、数据和模型准备
## 目录
-
[
1. 数据和模型准备
](
#1
)
-
[
1.1 数据准备
](
#1.1
)
-
[
1.1.1 准备CIFAR100
](
#1.1.1
)
-
[
2. 模型训练
](
#2
)
-
[
2.1 单标签训练
](
#2.1
)
-
[
2.1.1 零基础训练:不加载预训练模型的训练
](
#2.1.1
)
-
[
2.1.2 迁移学习
](
#2.1.2
)
-
[
3. 数据增广
](
#3
)
-
[
3.1 数据增广的尝试-Mixup
](
#3.1
)
-
[
4. 知识蒸馏
](
#4
)
-
[
5. 模型评估与推理
](
#5
)
-
[
5.1 单标签分类模型评估与推理
](
#5.1
)
-
[
5.1.1 单标签分类模型评估
](
#5.1.1
)
-
[
5.1.2 单标签分类模型预测
](
#5.1.2
)
-
[
5.1.3 单标签分类使用inference模型进行模型推理
](
#5.1.3
)
<a
name=
"1"
></a>
## 1. 数据和模型准备
<a
name=
"1.1"
></a>
### 1.1 数据准备
...
...
@@ -14,6 +38,8 @@
cd path_to_PaddleClas
```
<a
name=
"1.1.1"
></a>
#### 1.1.1 准备CIFAR100
*
进入
`dataset/`
目录,下载并解压CIFAR100数据集。
...
...
@@ -25,14 +51,19 @@ tar -xf CIFAR100.tar
cd
../
```
<a
name=
"2"
></a>
## 2. 模型训练
## 二、模型训练
<a
name=
"2.1"
></a>
### 2.1 单标签训练
<a
name=
"2.1.2"
></a>
#### 2.1.1 零基础训练:不加载预训练模型的训练
*
基于
ResNet50_vd
模型,训练脚本如下所示。
*
基于
ResNet50_vd
模型,训练脚本如下所示。
```
shell
export
CUDA_VISIBLE_DEVICES
=
0,1,2,3
...
...
@@ -43,13 +74,14 @@ python3 -m paddle.distributed.launch \
-o
Global.output_dir
=
"output_CIFAR"
```
验证集的最高准确率为 0.415 左右。
验证集的最高准确率为0.415左右。
<a
name=
"2.1.2"
></a>
#### 2.1.2 迁移学习
*
基于
ImageNet1k分类预训练模型ResNet50_vd_pretrained(准确率79.12
\%
)
进行微调,训练脚本如下所示。
*
基于
ImageNet1k 分类预训练模型 ResNet50_vd_pretrained(准确率 79.12%)
进行微调,训练脚本如下所示。
```
shell
export
CUDA_VISIBLE_DEVICES
=
0,1,2,3
...
...
@@ -61,9 +93,9 @@ python3 -m paddle.distributed.launch \
-o
Arch.pretrained
=
True
```
验证集最高准确率为
0.718左右,加载预训练模型之后,CIFAR100数据集精度大幅提升,绝对精度涨幅30
\
%
。
验证集最高准确率为
0.718 左右,加载预训练模型之后,CIFAR100 数据集精度大幅提升,绝对精度涨幅 30
%。
*
基于
ImageNet1k分类预训练模型ResNet50_vd_ssld_pretrained(准确率82.39
\%
)
进行微调,训练脚本如下所示。
*
基于
ImageNet1k 分类预训练模型 ResNet50_vd_ssld_pretrained (准确率82.39%)
进行微调,训练脚本如下所示。
```
shell
export
CUDA_VISIBLE_DEVICES
=
0,1,2,3
...
...
@@ -76,9 +108,9 @@ python3 -m paddle.distributed.launch \
-o
Arch.use_ssld
=
True
```
最终CIFAR100验证集上精度指标为
0.73,相对于79.12
\%
预训练模型的微调结构,新数据集指标可以再次提升1.2
\
%
。
最终CIFAR100验证集上精度指标为
0.73,相对于 79.12% 预训练模型的微调结构,新数据集指标可以再次提升1.2
%。
*
替换
backbone为MobileNetV3_large_x1_0
进行微调,训练脚本如下所示。
*
替换
backbone 为 MobileNetV3_large_x1_0
进行微调,训练脚本如下所示。
```
shell
export
CUDA_VISIBLE_DEVICES
=
0,1,2,3
...
...
@@ -90,16 +122,20 @@ python3 -m paddle.distributed.launch \
-o
Arch.pretrained
=
True
```
验证集最高准确率为0.601左右, 较ResNet50_vd低近12%。
验证集最高准确率为 0.601 左右, 较 ResNet50_vd 低近 12%。
<a
name=
"3"
></a>
##
三、
数据增广
##
3.
数据增广
PaddleClas包含了很多数据增广的方法,如
Mixup、Cutout、RandomErasing
等,具体的方法可以参考
[
数据增广的章节
](
../algorithm_introduction/DataAugmentation.md
)
。
PaddleClas包含了很多数据增广的方法,如
Mixup、Cutout、RandomErasing
等,具体的方法可以参考
[
数据增广的章节
](
../algorithm_introduction/DataAugmentation.md
)
。
### 数据增广的尝试-Mixup
<a
name=
"3.1"
></a>
基于
`3.3节`
中的训练方法,结合Mixup的数据增广方式进行训练,具体的训练脚本如下所示。
### 3.1 数据增广的尝试-Mixup
基于
[
数据增广的章节
](
../algorithm_introduction/DataAugmentation.md
)
`3.3节`
中的训练方法,结合 Mixup 的数据增广方式进行训练,具体的训练脚本如下所示。
```
shell
export
CUDA_VISIBLE_DEVICES
=
0,1,2,3
...
...
@@ -111,28 +147,29 @@ python3 -m paddle.distributed.launch \
```
最终CIFAR100验证集上的精度为
0.73,使用数据增广可以使得模型精度再次提升约1.2
\
%
。
最终CIFAR100验证集上的精度为
0.73,使用数据增广可以使得模型精度再次提升约 1.2
%。
*
**注意**
* 其他数据增广的配置文件可以参考`ppcls/configs/DataAugment`中的配置文件。
*
其他数据增广的配置文件可以参考
`ppcls/configs/DataAugment`
中的配置文件。
*
训练 CIFAR100 的迭代轮数较少,因此进行训练时,验证集的精度指标可能会有 1% 左右的波动。
* 训练CIFAR100的迭代轮数较少,因此进行训练时,验证集的精度指标可能会有1\%左右的波动。
<a
name=
"4"
></a>
##
四、
知识蒸馏
##
4.
知识蒸馏
PaddleClas
包含了自研的SSLD知识蒸馏方案,具体的内容可以参考
[
知识蒸馏章节
](
../algorithm_introduction/knowledge_distillation.md
)
, 本小节将尝试使用知识蒸馏技术对MobileNetV3_large_x1_0模型进行训练,使用
`2.1.2小节`
训练得到的ResNet50_vd模型作为蒸馏所用的教师模型,首先将
`2.1.2小节`
训练得到的ResNet50_vd
模型保存到指定目录,脚本如下。
PaddleClas
包含了自研的 SSLD 知识蒸馏方案,具体的内容可以参考
[
知识蒸馏章节
](
../algorithm_introduction/knowledge_distillation.md
)
, 本小节将尝试使用知识蒸馏技术对 MobileNetV3_large_x1_0 模型进行训练,使用
`2.1.2小节`
训练得到的 ResNet50_vd 模型作为蒸馏所用的教师模型,首先将
`2.1.2小节`
训练得到的 ResNet50_vd
模型保存到指定目录,脚本如下。
```
shell
mkdir
pretrained
cp
-r
output_CIFAR/ResNet50_vd/best_model.pdparams ./pretrained/
```
配置文件中模型名字、教师模型
哈学生模型的配置、预训练地址配置以及freeze_params配置如下,其中freeze_params_list
中的两个值分别代表教师模型和学生模型是否冻结参数训练。
配置文件中模型名字、教师模型
和学生模型的配置、预训练地址配置以及 freeze_params 配置如下,其中
`freeze_params_list`
中的两个值分别代表教师模型和学生模型是否冻结参数训练。
```
yaml
Arch
:
...
...
@@ -152,7 +189,8 @@ Arch:
pretrained
:
True
```
Loss配置如下,其中训练Loss是学生模型的输出和教师模型的输出的交叉熵、验证Loss是学生模型的输出和真实标签的交叉熵。
Loss 配置如下,其中训练 Loss 是学生模型的输出和教师模型的输出的交叉熵、验证 Loss 是学生模型的输出和真实标签的交叉熵。
```
yaml
Loss
:
Train
:
...
...
@@ -178,19 +216,23 @@ python3 -m paddle.distributed.launch \
```
最终CIFAR100验证集上的精度为
64.4
\%
,使用教师模型进行知识蒸馏,MobileNetV3的精度涨幅4.3
\
%
。
最终CIFAR100验证集上的精度为
64.4%,使用教师模型进行知识蒸馏,MobileNetV3 的精度涨幅 4.3
%。
*
**注意**
* 蒸馏过程中,教师模型使用的预训练模型为CIFAR100数据集上的训练结果,学生模型使用的是ImageNet1k数据集上精度为75.32\%的MobileNetV3_large_x1_0预训练模型。
*
蒸馏过程中,教师模型使用的预训练模型为 CIFAR100 数据集上的训练结果,学生模型使用的是 ImageNet1k 数据集上精度为 75.32% 的 MobileNetV3_large_x1_0 预训练模型。
*
该蒸馏过程无须使用真实标签,所以可以使用更多的无标签数据,在使用过程中,可以将无标签数据生成假的
`train_list.txt`
,然后与真实的
`train_list.txt`
进行合并, 用户可以根据自己的数据自行体验。
* 该蒸馏过程无须使用真实标签,所以可以使用更多的无标签数据,在使用过程中,可以将无标签数据生成假的train_list.txt,然后与真实的train_list.txt进行合并, 用户可以根据自己的数据自行体验。
<a
name=
"5"
></a>
## 5. 模型评估与推理
## 五、模型评估与推理
<a
name=
"5.1"
></a>
### 5.1 单标签分类模型评估与推理
<a
name=
"5.1.1"
></a>
#### 5.1.1 单标签分类模型评估。
训练好模型之后,可以通过以下命令实现对模型精度的评估。
...
...
@@ -201,6 +243,8 @@ python3 tools/eval.py \
-o
Global.pretrained_model
=
"output_CIFAR/ResNet50_vd/best_model"
```
<a
name=
"5.1.2"
></a>
#### 5.1.2 单标签分类模型预测
模型训练完成之后,可以加载训练得到的预训练模型,进行模型预测。在模型库的
`tools/infer.py`
中提供了完整的示例,只需执行下述命令即可完成模型预测:
...
...
@@ -212,10 +256,11 @@ python3 tools/infer.py \
-
o
Global
.
pretrained_model
=
output_CIFAR
/
ResNet50_vd
/
best_model
```
<a
name=
"5.1.3"
></a>
#### 5.1.3 单标签分类使用inference模型进行模型推理
通过导出
inference模型,PaddlePaddle
支持使用预测引擎进行预测推理。接下来介绍如何用预测引擎进行推理:
通过导出
inference 模型,PaddlePaddle
支持使用预测引擎进行预测推理。接下来介绍如何用预测引擎进行推理:
首先,对训练好的模型进行转换:
```
bash
...
...
@@ -224,7 +269,7 @@ python3 tools/export_model.py \
-o
Global.pretrained_model
=
output_CIFAR/ResNet50_vd/best_model
```
*
默认会在
`inference`
文件夹下生成
`inference.pdiparams`
、
`inference.pdmodel`
和
`inference.pdiparams.info`
文件。
*
默认会在
`inference`
文件夹下生成
`inference.pdiparams`
、
`inference.pdmodel`
和
`inference.pdiparams.info`
文件。
使用预测引擎进行推理:
...
...
@@ -233,7 +278,8 @@ python3 tools/export_model.py \
```
bash
cd
deploy
```
更改inference_cls.yaml文件,由于训练CIFAR100采用的分辨率是32x32,所以需要改变相关的分辨率,最终配置文件中的图像预处理如下:
更改
`inference_cls.yaml`
文件,由于训练 CIFAR100 采用的分辨率是 32x32,所以需要改变相关的分辨率,最终配置文件中的图像预处理如下:
```
yaml
PreProcess
:
...
...
@@ -250,7 +296,7 @@ PreProcess:
-
ToCHWImage
:
```
执行命令进行预测,由于默认
class_id_map_file是ImageNet数据集的映射文件,所以此处需要置
None。
执行命令进行预测,由于默认
`class_id_map_file`
是 ImageNet 数据集的映射文件,所以此处需要置
None。
```
bash
python3 python/predict_cls.py
\
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录