提交 23ab4f48 编写于 作者: littletomatodonkey's avatar littletomatodonkey

fix content tree

上级 9d74393e
......@@ -52,7 +52,8 @@
## 文档教程
- [快速安装](./docs/zh_CN/tutorials/install.md)
- [30分钟玩转PaddleClas](./docs/zh_CN/tutorials/quick_start.md)
- [30分钟玩转PaddleClas(尝鲜版)](./docs/zh_CN/tutorials/quick_start_new_user.md)
- [30分钟玩转PaddleClas(进阶版)](./docs/zh_CN/tutorials/quick_start_professional.md)
- [模型库介绍和预训练模型](./docs/zh_CN/models/models_intro.md)
- [模型库概览图](#模型库概览图)
- [SSLD知识蒸馏系列](#SSLD知识蒸馏系列)
......@@ -87,6 +88,7 @@
- [知识蒸馏](./docs/zh_CN/advanced_tutorials/distillation/distillation.md)
- [数据增广](./docs/zh_CN/advanced_tutorials/image_augmentation/ImageAugment.md)
- [多标签分类](./docs/zh_CN/advanced_tutorials/multilabel/multilabel.md)
- [代码解析与社区贡献指南](./docs/zh_CN/tutorials/quick_start_community.md)
- 特色拓展应用
- [迁移学习](./docs/zh_CN/application/transfer_learning.md)
- [10万类图像分类预训练模型](./docs/zh_CN/application/transfer_learning.md)
......@@ -463,5 +465,6 @@ ViT(Vision Transformer)与DeiT(Data-efficient Image Transformers)系列
- 非常感谢[nblib](https://github.com/nblib)修正了PaddleClas中RandErasing的数据增广配置文件。
- 非常感谢[chenpy228](https://github.com/chenpy228)修正了PaddleClas文档中的部分错别字。
- 非常感谢[jm12138](https://github.com/jm12138)为PaddleClas添加ViT,DeiT系列模型和RepVGG系列模型。
- 非常感谢[FutureSI](https://aistudio.baidu.com/aistudio/personalcenter/thirdview/76563)对PaddleClas代码的解析与总结。
我们非常欢迎你为PaddleClas贡献代码,也十分感谢你的反馈。
......@@ -159,7 +159,7 @@ It can be seen here that for the baseline pretrained model, excessive adjustment
## Practice
This section will introduce the SSLD distillation experiments in detail based on the ImageNet-1K dataset. If you want to experience this method quickly, you can refer to [** Quick start PaddleClas in 30 minutes**] (../../tutorials/quick_start.md), whose dataset is set as Flowers102.
This section will introduce the SSLD distillation experiments in detail based on the ImageNet-1K dataset. If you want to experience this method quickly, you can refer to [** Quick start PaddleClas in 30 minutes**] (../../tutorials/quick_start_en.md), whose dataset is set as Flowers102.
......
......@@ -197,7 +197,7 @@ for var in ./*_student; do cp "$var" "../student_model/${var%_student}"; done #
## 五、SSLD实战
本节将基于ImageNet-1K的数据集详细介绍SSLD蒸馏实验,如果想快速体验此方法,可以参考[**30分钟玩转PaddleClas**](../../tutorials/quick_start.md)中基于Flowers102的SSLD蒸馏实验。
本节将基于ImageNet-1K的数据集详细介绍SSLD蒸馏实验,如果想快速体验此方法,可以参考[**30分钟玩转PaddleClas(进阶版)**](../../tutorials/quick_start_professional.md)中基于CIFAR100的SSLD蒸馏实验。
### 5.1 参数配置
......
......@@ -440,7 +440,7 @@ new_batch = cutmix_op(batch)
# 七、数据增广分类实战
本节将基于ImageNet-1K的数据集详细介绍数据增广实验,如果想快速体验此方法,可以参考[**30分钟玩转PaddleClas**](../../tutorials/quick_start.md)中基于Flowers102的数据增广实验。
本节将基于ImageNet-1K的数据集详细介绍数据增广实验,如果想快速体验此方法,可以参考[**30分钟玩转PaddleClas(进阶版)**](../../tutorials/quick_start_professional.md)中基于CIFAR100的数据增广实验。
## 7.1 参数配置
......
......@@ -5,7 +5,7 @@
* 本文档介绍了目前昆仑支持的模型以及如何在昆仑设备上训练这些模型。支持昆仑的PaddlePaddle安装参考install_kunlun(https://github.com/PaddlePaddle/FluidDoc/blob/develop/doc/paddle/install/install_Kunlun_zh.md)
## 昆仑训练
* 数据来源和预训练模型参考[quick_start](../tutorials/quick_start.md)。昆仑训练效果与CPU/GPU对齐。
* 数据来源和预训练模型参考[quick_start](../tutorials/quick_start_new_user.md)。昆仑训练效果与CPU/GPU对齐。
### ResNet50
* 命令:
......
# 开始使用
---
请参考[安装指南](./install.md)配置运行环境,并根据[快速开始](./quick_start.md)文档准备flower102数据集,本章节下面所有的实验均以flower102数据集为例。
请参考[安装指南](./install.md)配置运行环境,并根据[快速开始](./quick_start_new_user.md)文档准备flower102数据集,本章节下面所有的实验均以flower102数据集为例。
PaddleClas目前支持的训练/评估环境如下:
```shell
......@@ -174,7 +174,7 @@ python -m paddle.distributed.launch \
其中`pretrained_model`用于设置加载预训练权重文件的路径,使用时需要换成自己的预训练模型权重文件路径,也可以直接在配置文件中修改该路径。
[30分钟玩转PaddleClas教程](./quick_start.md)中包含大量模型微调的示例,可以参考该章节在特定的数据集上进行模型微调。
30分钟玩转PaddleClas[尝鲜版](./quick_start_new_user.md)[进阶版](./quick_start_professional.md)中包含大量模型微调的示例,可以参考该章节在特定的数据集上进行模型微调。
<a name="model_resume"></a>
......
......@@ -5,7 +5,8 @@
:maxdepth: 1
install.md
quick_start.md
quick_start_new_user.md
quick_start_professional.md
data.md
getting_started.md
config.md
\ No newline at end of file
config.md
# 30分钟玩转PaddleClas
基于flowers102数据集,30分钟体验PaddleClas不同骨干网络的模型训练、不同预训练模型、SSLD知识蒸馏方案和数据增广的效果。请事先参考[安装指南](install.md)配置运行环境和克隆PaddleClas代码。
## 一、数据和模型准备
* 进入PaddleClas目录。
```
cd path_to_PaddleClas
```
* 进入`dataset/flowers102`目录,下载并解压flowers102数据集。
```shell
cd dataset/flowers102
# 如果希望从浏览器中直接下载,可以复制该链接并访问,然后下载解压即可
wget https://paddle-imagenet-models-name.bj.bcebos.com/data/flowers102.zip
unzip flowers102.zip
```
* 返回`PaddleClas`根目录
```
cd ../../
```
## 二、环境准备
### 2.1 下载预训练模型
通过下面的命令下载所需要的预训练模型。
```bash
mkdir pretrained
cd pretrained
wget https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/ResNet50_vd_pretrained.pdparams
wget https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/ResNet50_vd_ssld_pretrained.pdparams
wget https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/MobileNetV3_large_x1_0_pretrained.pdparams
cd ../
```
**注意**:如果是在windows中下载预训练模型的话,需要将地址拷贝到浏览器中下载。
### 2.2 环境说明
* 下面所有的训练过程均在`单卡V100`机器上运行。首先需要设置可用的显卡设备id。
如果使用mac或者linux,可以使用下面的命令进行设置。
```shell
export CUDA_VISIBLE_DEVICES=0
```
如果使用windows,可以使用下面的命令进行设置。
```shell
set CUDA_VISIBLE_DEVICES=0
```
* 如果希望在cpu上训练,可以将配置文件中的`use_gpu: True`修改为`use_gpu: False`,或者在训练脚本后面添加`-o use_gpu=False`,表示传入参数,覆盖默认的`use_gpu`值。
## 三、模型训练
### 3.1 零基础训练:不加载预训练模型的训练
* 基于ResNet50_vd模型,训练脚本如下所示。
```shell
python3 tools/train.py -c ./configs/quick_start/ResNet50_vd.yaml
```
如果希望在cpu上训练,训练脚本如下所示。
```shell
python3 tools/train.py -c ./configs/quick_start/ResNet50_vd.yaml -o use_gpu=False
```
下面的训练任务中,如果希望使用cpu训练,也可以在训练脚本中添加`-o use_gpu=False`
验证集的`Top1 Acc`曲线如下所示,最高准确率为0.2735。
![](../../images/quick_start/r50_vd_acc.png)
### 3.2 模型微调-基于ResNet50_vd预训练模型(准确率79.12\%)
* 基于ImageNet1k分类预训练模型进行微调,训练脚本如下所示。
```shell
python3 tools/train.py -c ./configs/quick_start/ResNet50_vd_finetune.yaml
```
验证集的`Top1 Acc`曲线如下所示,最高准确率为0.9402,加载预训练模型之后,flowers102数据集精度大幅提升,绝对精度涨幅超过65\%
![](../../images/quick_start/r50_vd_pretrained_acc.png)
使用训练完的预训练模型对图片`docs/images/quick_start/flowers102/image_06739.jpg`进行预测,预测命令为
```shell
python3 tools/infer/infer.py \
-i docs/images/quick_start/flowers102/image_06739.jpg \
--model=ResNet50_vd \
--pretrained_model="output/ResNet50_vd/best_model/ppcls" \
--class_num=102 \
--top_k=5
```
最终可以得到如下结果,打印出了Top-5对应的class id以及score。
```
File:image_06739.jpg, Top-5 result: class id(s): [0, 96, 18, 50, 51], score(s): [0.79, 0.02, 0.01, 0.01, 0.01]
```
* 注意:这里每个模型的训练结果都不相同,因此结果可能稍有不同。
### 3.3 SSLD模型微调-基于ResNet50_vd_ssld预训练模型(准确率82.39\%)
需要注意的是,在使用通过知识蒸馏得到的预训练模型进行微调时,我们推荐使用相对较小的网络中间层学习率。
```yaml
ARCHITECTURE:
name: 'ResNet50_vd'
params:
lr_mult_list: [0.5, 0.5, 0.6, 0.6, 0.8]
pretrained_model: "./pretrained/ResNet50_vd_ssld_pretrained"
```
训练脚本如下。
```shell
python3 tools/train.py -c ./configs/quick_start/ResNet50_vd_ssld_finetune.yaml
```
最终flowers102验证集上精度指标为0.95,相对于79.12\%预训练模型的微调结构,新数据集指标可以再次提升0.98\%
### 3.4 尝试更多的模型结构-MobileNetV3
训练脚本如下所示。
```shell
python3 tools/train.py -c ./configs/quick_start/MobileNetV3_large_x1_0_finetune.yaml
```
最终flowers102验证集上的精度为0.90,比加载了预训练模型的ResNet50_vd的精度差了5\%。不同模型结构的网络在相同数据集上的性能表现不同,需要根据预测耗时以及存储的需求选择合适的模型。
### 3.5 数据增广的尝试-RandomErasing
训练数据量较小时,使用数据增广可以进一步提升模型精度,基于`3.3节`中的训练方法,结合RandomErasing的数据增广方式进行训练,具体的训练脚本如下所示。
```shell
python3 tools/train.py -c ./configs/quick_start/ResNet50_vd_ssld_random_erasing_finetune.yaml
```
最终flowers102验证集上的精度为0.9627,使用数据增广可以使得模型精度再次提升1.27\%
### 3.6 知识蒸馏小试牛刀
* 本小节将尝试使用知识蒸馏技术对MobileNetV3_large_x1_0模型进行训练,使用`3.5小节`训练得到的ResNet50_vd模型作为蒸馏所用的教师模型,首先将`3.5小节`训练得到的ResNet50_vd模型保存到指定目录,脚本如下。
```shell
cp -r output/ResNet50_vd/best_model/ ./pretrained/flowers102_R50_vd_final/
```
* 使用flowers102数据集进行模型蒸馏,为了进一步提提升模型的精度,使用`extra_list.txt`充当无标签数据,在这里有几点需要注意:
* `extra_list.txt``val_list.txt`的样本没有重复,因此可以用于扩充知识蒸馏任务的训练数据。
* 即使引入了有标签的extra_list.txt中的图像,但是代码中没有使用标签信息,因此仍然可以视为无标签的模型蒸馏。
* 蒸馏过程中,教师模型使用的预训练模型为flowers102数据集上的训练结果,学生模型使用的是ImageNet1k数据集上精度为75.32\%的MobileNetV3_large_x1_0预训练模型。
配置文件中数据数量、模型结构、预训练地址以及训练的数据配置如下:
```yaml
total_images: 7169
ARCHITECTURE:
name: 'ResNet50_vd_distill_MobileNetV3_large_x1_0'
pretrained_model:
- "./pretrained/flowers102_R50_vd_final/ppcls"
- "./pretrained/MobileNetV3_large_x1_0_pretrained/”
TRAIN:
file_list: "./dataset/flowers102/train_extra_list.txt"
```
最终的训练脚本如下所示。
```shell
python3 tools/train.py -c ./configs/quick_start/R50_vd_distill_MV3_large_x1_0.yaml
```
最终flowers102验证集上的精度为0.9647,结合更多的无标签数据,使用教师模型进行知识蒸馏,MobileNetV3的精度涨幅高达6.47\%
### 3.7 精度一览
* 下表给出了不同训练yaml文件对应的精度。
|配置文件 | Top1 Acc |
|- |:-: |
| ResNet50_vd.yaml | 0.2735 |
| MobileNetV3_large_x1_0_finetune.yaml | 0.9000 |
| ResNet50_vd_finetune.yaml | 0.9402 |
| ResNet50_vd_ssld_finetune.yaml | 0.9500 |
| ResNet50_vd_ssld_random_erasing_finetune.yaml | 0.9627 |
| R50_vd_distill_MV3_large_x1_0.yaml | 0.9647 |
下图给出了不同配置文件在迭代过程中的`Top1 Acc`的精度曲线变化图。
![](../../images/quick_start/all_acc.png)
* **注意**:flowers102数据集图片数量较少,因此进行训练时,验证集的精度指标可能会有1\%左右的波动。
* 更多训练及评估流程,请参考[开始使用文档](./getting_started.md)
# 30分钟玩转PaddleClas(专业版)
# 30分钟玩转PaddleClas(尝鲜版)
此处提供了专业用户在linux操作系统上使用PaddleClas的快速上手教程,主要内容包括基于CIFAR-100数据集和NUS-WIDE-SCENE数据集,快速体验不同模型的单标签训练及多标签训练、加载不同预训练模型、SSLD知识蒸馏方案和数据增广的效果。请事先参考[安装指南](install.md)配置运行环境和克隆PaddleClas代码。
......@@ -152,7 +152,7 @@ python3 -m paddle.distributed.launch \
tools/train.py \
-c ./configs/quick_start/professional/ResNet50_vd_mixup_CIFAR100_finetune.yaml \
-o model_save_dir="output_CIFAR"
```
最终CIFAR100验证集上的精度为0.73,使用数据增广可以使得模型精度再次提升约1.2\%
......@@ -162,7 +162,7 @@ python3 -m paddle.distributed.launch \
* **注意**
* 其他数据增广的配置文件可以参考`configs/DataAugment`中的配置文件。
* 训练CIFAR100的迭代轮数较少,因此进行训练时,验证集的精度指标可能会有1\%左右的波动。
......@@ -195,7 +195,7 @@ python3 -m paddle.distributed.launch \
tools/train.py \
-c ./configs/quick_start/professional/R50_vd_distill_MV3_large_x1_0_CIFAR100.yaml \
-o model_save_dir="output_CIFAR"
```
最终CIFAR100验证集上的精度为64.4\%,使用教师模型进行知识蒸馏,MobileNetV3的精度涨幅4.3\%
......@@ -203,7 +203,7 @@ python3 -m paddle.distributed.launch \
* **注意**
* 蒸馏过程中,教师模型使用的预训练模型为CIFAR100数据集上的训练结果,学生模型使用的是ImageNet1k数据集上精度为75.32\%的MobileNetV3_large_x1_0预训练模型。
* 该蒸馏过程无须使用真实标签,所以可以使用更多的无标签数据,在使用过程中,可以将无标签数据生成假的train_list.txt,然后与真实的train_list.txt进行合并, 用户可以根据自己的数据自行体验。
......@@ -218,7 +218,7 @@ python3 -m paddle.distributed.launch \
```bash
python3 tools/eval.py \
-c ./configs/quick_start/professional/ResNet50_vd_CIFAR100.yaml \
-o pretrained_model="./output_CIFAR/ResNet50_vd/best_model/ppcls"
-o pretrained_model="./output_CIFAR/ResNet50_vd/best_model/ppcls"
```
#### 5.1.2 单标签分类模型预测
......@@ -275,7 +275,7 @@ python3 tools/infer/predict.py \
```bash
python3 tools/eval.py \
-c ./configs/quick_start/ResNet50_vd_multilabel.yaml \
-o pretrained_model="./output_NUS-WIDE-SCENE/ResNet50_vd/best_model/ppcls"
-o pretrained_model="./output_NUS-WIDE-SCENE/ResNet50_vd/best_model/ppcls"
```
评估指标采用mAP,验证集的mAP应该在0.57左右。
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册