Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
PaddlePaddle
PaddleClas
提交
d64000e5
P
PaddleClas
项目概览
PaddlePaddle
/
PaddleClas
大约 2 年 前同步成功
通知
118
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看板
提交
d64000e5
编写于
4月 20, 2020
作者:
littletomatodonkey
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
update quick start
上级
5be6e5cd
变更
4
显示空白变更内容
内联
并排
Showing
4 changed file
with
75 addition
and
94 deletion
+75
-94
docs/zh_CN/application/transfer_learning.md
docs/zh_CN/application/transfer_learning.md
+2
-7
docs/zh_CN/tutorials/data.md
docs/zh_CN/tutorials/data.md
+4
-14
docs/zh_CN/tutorials/index.rst
docs/zh_CN/tutorials/index.rst
+2
-2
docs/zh_CN/tutorials/quick_start.md
docs/zh_CN/tutorials/quick_start.md
+67
-71
未找到文件。
docs/zh_CN/application/transfer_learning.md
浏览文件 @
d64000e5
...
...
@@ -79,11 +79,6 @@ Mixup: [False, True]
-
通过上述的实验验证了当使用一组固定参数时,相比于ImageNet预训练模型,使用大规模分类模型作为预训练模型在大多数情况下能够提升模型在新的数据集上得效果,通过参数搜索可以进一步提升精度。
## 三、图像分类迁移学习实战
*
该部分内容正在持续更新中。
## 参考文献
[1] Kornblith, Simon, Jonathon Shlens, and Quoc V. Le. "Do better imagenet models transfer better?."
*Proceedings of the IEEE conference on computer vision and pattern recognition*
. 2019.
...
...
docs/zh_CN/tutorials/data.md
浏览文件 @
d64000e5
...
...
@@ -4,7 +4,6 @@
## 1.简介
本文档介绍ImageNet1k和flowers102数据准备过程。
以及PaddleClas提供了丰富的
[
预训练模型
](
../models/models_intro.md
)
## 2.数据集准备
...
...
@@ -46,9 +45,13 @@ PaddleClas/dataset/imagenet/
```
### Flowers102
从
[
VGG官方网站
](
https://www.robots.ox.ac.uk/~vgg/data/flowers/102/
)
下载后的数据,解压后包括
```
shell
jpg/
setid.mat
imagelabels.mat
```
将以上文件放置在PaddleClas/dataset/flowers102/下
通过运行generate_flowers102_list.py生成train_list.txt和val_list.txt
...
...
@@ -69,16 +72,3 @@ PaddleClas/dataset/flowers102/
|_ train_list.txt
|_ val_list.txt
```
## 3.下载预训练模型
通过tools/download.py下载所需要的预训练模型。
```
bash
python tools/download.py
-a
ResNet50_vd
-p
./pretrained
-d
True
```
参数说明:
+
`architecture`
(简写 a):模型结构
+
`path`
(简写 p):下载路径
+
`decompress`
(简写 d):是否解压
docs/zh_CN/tutorials/index.rst
浏览文件 @
d64000e5
...
...
@@ -6,6 +6,6 @@
install.md
quick_start.md
data.md
getting_started.md
config.md
\ No newline at end of file
data.md
docs/zh_CN/tutorials/quick_start.md
浏览文件 @
d64000e5
# 30min玩转PaddleClas
请事先参考
[
安装指南
](
install.md
)
配置运行环境
请事先参考
[
安装指南
](
install.md
)
配置运行环境
和克隆PaddleClas代码。
## 一、
代码和数据
准备
## 一、
数据和模型
准备
*
克隆代码到本地并
进入PaddleClas目录。
*
进入PaddleClas目录。
```
git clone https://github.com/PaddlePaddle/PaddleClas.git
cd PaddleClas
cd path_to_PaddleClas
```
*
进入
`dataset/flowers102`
目录,下载并解压flowers102数据集.
...
...
@@ -18,11 +17,11 @@ cd PaddleClas
cd
dataset/flowers102
wget https://www.robots.ox.ac.uk/~vgg/data/flowers/102/102flowers.tgz
wget https://www.robots.ox.ac.uk/~vgg/data/flowers/102/imagelabels.mat
wget https://www.robots.ox.ac.uk/~vgg/data/flowers/102/setid.ma
wget https://www.robots.ox.ac.uk/~vgg/data/flowers/102/setid.ma
t
tar
-xf
102flowers.tgz
```
*
制作train/val/test
list
*
制作train/val/test
标签文件
```
shell
python generate_flowers102_list.py jpg train
>
train_list.txt
...
...
@@ -33,7 +32,6 @@ cat train_list.txt test_list.txt > train_test.txt
**注意**
:这里将train_list.txt和test_list.txt合并成train_test.txt,是为了之后在进行知识蒸馏时,使用更多的数据提升无标签知识蒸馏任务的效果。
*
返回
`PaddleClas`
根目录
```
...
...
@@ -48,13 +46,29 @@ cd ../../
export
PYTHONPATH
=
./:
$PYTHONPATH
```
### 下载预训练模型
通过tools/download.py下载所需要的预训练模型。
```
bash
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
```
参数说明:
+
`architecture`
(简写 a):模型结构
+
`path`
(简写 p):下载路径
+
`decompress`
(简写 d):是否解压
### 2.2 环境说明
*
为了保证对比的公平性,下面所有的训练过程均在
`单卡V100`
机器上实现
。
*
下面所有的训练过程均在
`单卡V100`
机器上运行
。
## 三、模型训练
*
本章节首先展示基于ResNet50_vd模型结构,在不加载预训练模型、加载精度为79.12
\%
的预训练模型以及精度为82.39
\%
的预训练模型的训练效果,同时给出了基于MobileNetV3模型结构的训练效果。此外,为了更方便地体验数据增广以及知识蒸馏的训练过程,本章节也提供了对应的训练命令。
### 3.1 零基础训练:不加载预训练模型的训练
...
...
@@ -64,44 +78,35 @@ export PYTHONPATH=./:$PYTHONPATH
export
CUDA_VISIBLE_DEVICES
=
0
python -m paddle.distributed.launch
\
--selected_gpus
=
"0"
\
--log_dir
=
log_train
\
tools/train.py
\
-c ./configs/quick_start/ResNet50_vd.yaml
```
最终
`Loss`
曲线如下所示。

`Top1 Acc`
曲线如下所示。
`Top1 Acc`
曲线如下所示,最高准确率为0.2735。

### 3.2 基于精度为79.12\%的
ImageNet
预训练模型微调
### 3.2 基于精度为79.12\%的
ResNet50_vd
预训练模型微调
*
基于ImageNet1k分类预训练模型进行微调,训练脚本如下所示。
```
shell
export
CUDA_VISIBLE_DEVICES
=
0
python -m paddle.distributed.launch
\
--selected_gpus
=
"0"
\
--log_dir
=
log_train
\
tools/train.py
\
-c ./configs/quick_start/ResNet50_vd.yaml
-c ./configs/quick_start/ResNet50_vd
_finetune
.yaml
```
最终
`Loss`
曲线如下所示。

`Top1 Acc`
曲线如下所示。
`Top1 Acc`
曲线如下所示,最高准确率为0.9402,加载预训练模型之后,flowers102数据集精度大幅提升,绝对精度涨幅超过65
\%
。

### 3.3 基于精度82.39\%的
ImageNet
预训练模型微调
### 3.3 基于精度82.39\%的
ResNet50_vd
预训练模型微调
需要注意的是,在使用通过知识蒸馏得到的预训练模型进行微调时,我们推荐使用相对较小的网络中间层学习率。
...
...
@@ -115,20 +120,51 @@ ARCHITECTURE:
pretrained_model
:
"
./pretrained/ResNet50_vd_ssld_pretrained"
```
最终的训练脚本所示。
训练脚本如下。
```
shell
export
CUDA_VISIBLE_DEVICES
=
0
python -m paddle.distributed.launch
\
--selected_gpus
=
"0"
\
--log_dir
=
log_train
\
tools/train.py
\
-c ./configs/quick_start/ResNet50_vd_ssld_finetune.yaml
```
### 3.4 使用ResNet50_vd蒸馏MobileNetV3
最终flowers102验证集上精度指标为0.95,相对于79.12
\%
预训练模型的微调结构,新数据集指标可以再次提升0.9
\%
。
### 3.4 尝试更多的模型结构-MobileNetV3
训练脚本如下所示。
```
shell
export
CUDA_VISIBLE_DEVICES
=
0
python -m paddle.distributed.launch
\
--selected_gpus
=
"0"
\
tools/train.py
\
-c ./configs/quick_start/MobileNetV3_large_x1_0_finetune.yaml
```
最终flowers102验证集上的精度为0.90,比加载了预训练模型的ResNet50_vd的精度差了5
\%
。不同模型结构的网络在相同数据集上的性能表现不同,需要根据预测耗时以及存储的需求选择合适的模型。
*
使用flowers102数据集进行模型蒸馏,为了进一步提提升模型的精度,使用test_list.txt充当无标签数据,在这里有三点需要注意:
### 3.5 数据增广的尝试-RandomErasing
训练数据量较小时,使用数据增广可以进一步提升模型精度,基于
`3.3节`
中的训练方法,结合RandomErasing的数据增广方式进行训练,具体的训练脚本如下所示。
```
shell
export
CUDA_VISIBLE_DEVICES
=
0
python -m paddle.distributed.launch
\
--selected_gpus
=
"0"
\
tools/train.py
\
-c ./configs/quick_start/ResNet50_vd_ssld_random_erasing_finetune.yaml
```
最终flowers102验证集上的精度为0.9627,使用数据增广可以使得模型精度再次提升1.27
\%
。
### 3.6 知识蒸馏小试牛刀
*
使用flowers102数据集进行模型蒸馏,为了进一步提提升模型的精度,使用test_list.txt充当无标签数据,在这里有几点需要注意:
*
`test_list.txt`
与
`val_list.txt`
的样本没有重复。
*
即使引入了有标签的test_list.txt中的测试集图像,但是代码中没有使用标签信息,因此仍然可以视为无标签的模型蒸馏。
*
蒸馏过程中,教师模型使用的预训练模型为flowers102数据集上的训练结果,学生模型使用的是ImageNet1k数据集上精度为75.32
\%
的MobileNetV3_large_x1_0预训练模型。
...
...
@@ -141,7 +177,6 @@ python -m paddle.distributed.launch \
cp
-r
output/ResNet50_vd/19/ ./pretrained/flowers102_R50_vd_final/
```
配置文件中数据数量、模型结构、预训练地址以及训练的数据配置如下:
```
yaml
...
...
@@ -161,40 +196,10 @@ TRAIN:
export
CUDA_VISIBLE_DEVICES
=
0
python -m paddle.distributed.launch
\
--selected_gpus
=
"0"
\
--log_dir
=
log_train
\
tools/train.py
\
-c ./configs/quick_start/R50_vd_distill_MV3_large_x1_0.yaml
```
### 3.5 其他模型
*
如果希望尝试更多的模型结构,可以很方便地修改模型名称,下面给出了使用MobileNetV3模型训练的命令。
```
shell
export
CUDA_VISIBLE_DEVICES
=
0
python -m paddle.distributed.launch
\
--selected_gpus
=
"0"
\
--log_dir
=
log_train
\
tools/train.py
\
-c ./configs/quick_start/MobileNetV3_large_x1_0_finetune.yaml
```
*
如果希望尝试增广方式,可以通过以下命令提供体验RandomErasing数据增广的训练效果。
```
shell
export
CUDA_VISIBLE_DEVICES
=
0
python -m paddle.distributed.launch
\
--selected_gpus
=
"0"
\
--log_dir
=
log_train
\
tools/train.py
\
-c ./configs/quick_start/ResNet50_vd_ssld_random_erasing_finetune.yaml
```
### 3.6 精度一览
*
下表给出了不同训练yaml文件对应的精度。
...
...
@@ -209,20 +214,11 @@ python -m paddle.distributed.launch \
| R50_vd_distill_MV3_large_x1_0.yaml | 0.9647 |
下图给出了不同配置文件的
`Loss`
与
`Top1 Acc`
的精度对比。

`Top1 Acc`
曲线如下所示。
下图给出了不同配置文件在迭代过程中的
`Top1 Acc`
的精度曲线变化图。

### 3.7 总结
*
对于新数据集,更推荐通过加载预训练模型进行微调的方式进行训练,以在新的数据集上获得更高的精度,减少收敛时间。
*
预训练模型
*
不同模型结构的网络在相同数据集上的性能表现不同,需要根据预测耗时以及存储的需求选择合适的模型。
*
数据增广在小数据集的训练中可以进一步提升模型精度。PaddleClas中也提供了8种数据增广方式,您也开业
*
无标签数据的知识蒸馏可以大幅提升学生模型的精度,甚至超越教师模型。
*
PaddleClas提供了十分丰富的模型库以及详细的高阶使用、预测部署文档,更多的内容可以参考
[
PaddleClas文档
](
https://paddleclas.readthedocs.io/zh_CN/latest/index.html
)
。
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录