提交 026ddb45 编写于 作者: littletomatodonkey's avatar littletomatodonkey

update doc

上级 75a3c654
......@@ -185,7 +185,7 @@ for var in ./*_student; do cp "$var" "../student_model/${var%_student}"; done #
# 五、SSLD实战
本节将基于ImageNet-1K的数据集详细介绍SSLD蒸馏实验,如果想快速体验此方法,可以参考[**30min玩转PaddleClas**](../../tutorials/quick_start.md)中基于Flowers102的SSLD蒸馏实验。
本节将基于ImageNet-1K的数据集详细介绍SSLD蒸馏实验,如果想快速体验此方法,可以参考[**30分钟玩转PaddleClas**](../../tutorials/quick_start.md)中基于Flowers102的SSLD蒸馏实验。
## 7.1 参数配置
......@@ -196,13 +196,13 @@ for var in ./*_student; do cp "$var" "../student_model/${var%_student}"; done #
`ResNeXt101_32x16d_wsl`蒸馏`ResNet50_vd`的配置如下,其中`pretrained model`指定了`ResNeXt101_32x16d_wsl`(教师模型)的预训练模型的路径,该路径也可以同时指定教师模型与学生模型的预训练模型的路径,用户只需要同时传入二者预训练的路径即可(配置中的注释部分)。
```yaml
ARCHITECTURE:
name: 'ResNeXt101_32x16d_wsl_distill_ResNet50_vd'
pretrained_model: "./pretrained/ResNeXt101_32x16d_wsl_pretrained/"
ARCHITECTURE:
name: 'ResNeXt101_32x16d_wsl_distill_ResNet50_vd'
pretrained_model: "./pretrained/ResNeXt101_32x16d_wsl_pretrained/"
# pretrained_model:
# - "./pretrained/ResNeXt101_32x16d_wsl_pretrained/"
# - "./pretrained/ResNet50_vd_pretrained/"
use_distillation: True
use_distillation: True
```
### ResNet50_vd_ssld蒸馏MobileNetV3_large_x1_0
......@@ -210,13 +210,13 @@ use_distillation: True
类似于`ResNeXt101_32x16d_wsl`蒸馏`ResNet50_vd``ResNet50_vd_ssld`蒸馏`MobileNetV3_large_x1_0`的配置如下:
```yaml
ARCHITECTURE:
name: 'ResNet50_vd_distill_MobileNetV3_large_x1_0'
pretrained_model: "./pretrained/ResNet50_vd_ssld_pretrained/"
ARCHITECTURE:
name: 'ResNet50_vd_distill_MobileNetV3_large_x1_0'
pretrained_model: "./pretrained/ResNet50_vd_ssld_pretrained/"
# pretrained_model:
# - "./pretrained/ResNet50_vd_ssld_pretrained/"
# - "./pretrained/ResNet50_vd_pretrained/"
use_distillation: True
use_distillation: True
```
## 7.2 启动命令
......@@ -228,10 +228,10 @@ use_distillation: True
```bash
export PYTHONPATH=path_to_PaddleClas:$PYTHONPATH
python -m paddle.distributed.launch \
--selected_gpus="0,1,2,3" \
--log_dir=R50_vd_distill_MV3_large_x1_0 \
tools/train.py \
python -m paddle.distributed.launch \
--selected_gpus="0,1,2,3" \
--log_dir=R50_vd_distill_MV3_large_x1_0 \
tools/train.py \
-c ./configs/Distillation/R50_vd_distill_MV3_large_x1_0.yaml
```
......@@ -254,7 +254,7 @@ sh tools/run.sh
* 若用户准备添加无标签的训练数据,只需要将新的训练数据放置在原本训练数据的路径下,生成新的数据list即可,另外,新生成的数据list需要将无标签的数据添加伪标签(只是为了统一读数据)。
**此处插播一条硬广~**
> 如果您觉得此文档对您有帮助,欢迎star、watch、fork,三连我们的项目:[https://github.com/PaddlePaddle/PaddleClas](https://github.com/PaddlePaddle/PaddleClas)
> 如果您觉得此文档对您有帮助,欢迎star我们的项目:[https://github.com/PaddlePaddle/PaddleClas](https://github.com/PaddlePaddle/PaddleClas)
# 参考文献
......
......@@ -438,7 +438,7 @@ new_batch = cutmix_op(batch)
# 七、数据增广分类实战
本节将基于ImageNet-1K的数据集详细介绍数据增广实验,如果想快速体验此方法,可以参考[**30min玩转PaddleClas**](../../tutorials/quick_start.md)中基于Flowers102的数据增广实验。
本节将基于ImageNet-1K的数据集详细介绍数据增广实验,如果想快速体验此方法,可以参考[**30分钟玩转PaddleClas**](../../tutorials/quick_start.md)中基于Flowers102的数据增广实验。
## 7.1 参数配置
......@@ -449,24 +449,24 @@ new_batch = cutmix_op(batch)
`RandAugment`的图像增广方式的配置如下,其中用户需要指定其中的参数`num_layers``magnitude`,默认的数值分别是`2``5``RandAugment`是在uint8的数据格式上转换的,所以其处理过程应该放在归一化操作(`NormalizeImage`)之前。
```yaml
transforms:
- DecodeImage:
to_rgb: True
to_np: False
channel_first: False
- RandCropImage:
size: 224
- RandFlipImage:
flip_code: 1
- RandAugment:
num_layers: 2
magnitude: 5
- NormalizeImage:
scale: 1./255.
mean: [0.485, 0.456, 0.406]
std: [0.229, 0.224, 0.225]
order: ''
- ToCHWImage:
transforms:
- DecodeImage:
to_rgb: True
to_np: False
channel_first: False
- RandCropImage:
size: 224
- RandFlipImage:
flip_code: 1
- RandAugment:
num_layers: 2
magnitude: 5
- NormalizeImage:
scale: 1./255.
mean: [0.485, 0.456, 0.406]
std: [0.229, 0.224, 0.225]
order: ''
- ToCHWImage:
```
### Cutout
......@@ -474,24 +474,24 @@ new_batch = cutmix_op(batch)
`Cutout`的图像增广方式的配置如下,其中用户需要指定其中的参数`n_holes``length`,默认的数值分别是`1``112`。类似其他图像裁剪类的数据增广方式,`Cutout`既可以在uint8格式的数据上操作,也可以在归一化(`NormalizeImage`)后的数据上操作,此处给出的是在归一化后的操作。
```yaml
transforms:
- DecodeImage:
to_rgb: True
to_np: False
channel_first: False
- RandCropImage:
size: 224
- RandFlipImage:
flip_code: 1
- NormalizeImage:
scale: 1./255.
mean: [0.485, 0.456, 0.406]
std: [0.229, 0.224, 0.225]
order: ''
- Cutout:
n_holes: 1
length: 112
- ToCHWImage:
transforms:
- DecodeImage:
to_rgb: True
to_np: False
channel_first: False
- RandCropImage:
size: 224
- RandFlipImage:
flip_code: 1
- NormalizeImage:
scale: 1./255.
mean: [0.485, 0.456, 0.406]
std: [0.229, 0.224, 0.225]
order: ''
- Cutout:
n_holes: 1
length: 112
- ToCHWImage:
```
### Mixup
......@@ -499,24 +499,24 @@ new_batch = cutmix_op(batch)
`Mixup`的图像增广方式的配置如下,其中用户需要指定其中的参数`alpha`,默认的数值是`0.2`。类似其他图像混合类的数据增广方式,`Mixup`是在图像做完数据处理后将每个batch内的数据做图像混叠,将混叠后的图像和标签输入网络中训练,所以其是在图像数据处理(图像变换、图像裁剪)后操作。另外,在配置文件中,需要将`use_mix`参数设置为`True`
```yaml
transforms:
- DecodeImage:
to_rgb: True
to_np: False
channel_first: False
- RandCropImage:
size: 224
- RandFlipImage:
flip_code: 1
- NormalizeImage:
scale: 1./255.
mean: [0.485, 0.456, 0.406]
std: [0.229, 0.224, 0.225]
order: ''
- ToCHWImage:
mix:
- MixupOperator:
alpha: 0.2
transforms:
- DecodeImage:
to_rgb: True
to_np: False
channel_first: False
- RandCropImage:
size: 224
- RandFlipImage:
flip_code: 1
- NormalizeImage:
scale: 1./255.
mean: [0.485, 0.456, 0.406]
std: [0.229, 0.224, 0.225]
order: ''
- ToCHWImage:
mix:
- MixupOperator:
alpha: 0.2
```
## 7.2 启动命令
......@@ -528,11 +528,11 @@ new_batch = cutmix_op(batch)
```bash
export PYTHONPATH=path_to_PaddleClas:$PYTHONPATH
python -m paddle.distributed.launch \
--selected_gpus="0,1,2,3" \
--log_dir=ResNet50_Cutout \
tools/train.py \
-c ./configs/DataAugment/ResNet50_Cutout.yaml
python -m paddle.distributed.launch \
--selected_gpus="0,1,2,3" \
--log_dir=ResNet50_Cutout \
tools/train.py \
-c ./configs/DataAugment/ResNet50_Cutout.yaml
```
运行`run.sh`
......@@ -552,7 +552,7 @@ sh tools/run.sh
* 几乎每一类图像增广均含有超参数,我们只提供了基于ImageNet-1k的超参数,其他数据集需要用户自己调试超参数,具体超参数的含义用户可以阅读相关的论文,调试方法也可以参考训练技巧的章节。
**此处插播一条硬广~**
> 如果您觉得此文档对您有帮助,欢迎star、watch、fork,三连我们的项目:[https://github.com/PaddlePaddle/PaddleClas](https://github.com/PaddlePaddle/PaddleClas)
> 如果您觉得此文档对您有帮助,欢迎star我们的项目:[https://github.com/PaddlePaddle/PaddleClas](https://github.com/PaddlePaddle/PaddleClas)
# 参考文献
......
......@@ -85,7 +85,11 @@ Label_smoothing是深度学习中的一种正则化方法,其全称是 Label S
## 9.如何通过已有的预训练模型提升自己的数据集的精度
在现阶段计算机视觉领域中,加载预训练模型来训练自己的任务已成为普遍的做法,相比从随机初始化开始训练,加载预训练模型往往可以提升特定任务的精度。一般来说,业界广泛使用的预训练模型是通过训练128万张图片1000类的ImageNet-1k数据集得到的,该预训练模型的fc层权重是是一个k\*1000的矩阵,其中k是fc层以前的神经元数,在加载预训练权重时,无需加载fc层的权重。在学习率方面,如果您的任务训练的数据集特别小(如小于1千张),我们建议你使用较小的初始学习率,如0.001(batch_size:256,下同),以免较大的学习率破坏预训练权重。如果您的训练数据集规模相对较大(大于10万),我们建议你尝试更大的初始学习率,如0.01或者更大。
**此处插播一条硬广~**
> 如果您觉得此文档对您有帮助,欢迎star我们的项目:[https://github.com/PaddlePaddle/PaddleClas](https://github.com/PaddlePaddle/PaddleClas)
## 参考文献
[1]P. Goyal, P. Dolla ́r, R. B. Girshick, P. Noordhuis, L. Wesolowski, A. Kyrola, A. Tulloch, Y. Jia, and K. He. Accurate, large minibatch SGD: training imagenet in 1 hour. CoRR, abs/1706.02677, 2017.
[1]P. Goyal, P. Dolla ́r, R. B. Girshick, P. Noordhuis, L. Wesolowski, A. Kyrola, A. Tulloch, Y. Jia, and K. He. Accurate, large minibatch SGD: training imagenet in 1 hour. CoRR, abs/1706.02677, 2017.
[2]C.Szegedy,V.Vanhoucke,S.Ioffe,J.Shlens,andZ.Wojna. Rethinking the inception architecture for computer vision. CoRR, abs/1512.00567, 2015
[2]C.Szegedy,V.Vanhoucke,S.Ioffe,J.Shlens,andZ.Wojna. Rethinking the inception architecture for computer vision. CoRR, abs/1512.00567, 2015
......@@ -28,7 +28,7 @@ python tools/infer/predict.py \
**此处插播一条硬广~**
> 如果您觉得此文档对您有帮助,欢迎star、watch、fork,三连我们的项目:[https://github.com/PaddlePaddle/PaddleClas](https://github.com/PaddlePaddle/PaddleClas)
> 如果您觉得此文档对您有帮助,欢迎star我们的项目:[https://github.com/PaddlePaddle/PaddleClas](https://github.com/PaddlePaddle/PaddleClas)
## 预训练模型列表及下载地址
......
# 开始使用
---
请事先参考[安装指南](install.md)配置运行环境
有关模型库的基本信息请参考[README](https://github.com/PaddlePaddle/PaddleClas/blob/master/README.md)
请事先参考[安装指南](install.md)配置运行环境,并根据[数据说明](./data.md)文档准备ImageNet1k数据,本章节下面所有的实验均以ImageNet1k数据集为例。
## 一、设置环境变量
......@@ -13,10 +12,11 @@ export PYTHONPATH=path_to_PaddleClas:$PYTHONPATH
## 二、模型训练与评估
PaddleClas 提供模型训练与评估脚本:tools/train.py和tools/eval.py
PaddleClas 提供模型训练与评估脚本:`tools/train.py``tools/eval.py`
### 2.1 模型训练
以flower102数据为例按如下方式启动模型训练,flower数据集准备请参考[数据集准备](./data.md)
按照如下方式启动模型训练。
```bash
# PaddleClas通过launch方式启动多卡多进程训练
......@@ -24,9 +24,8 @@ PaddleClas 提供模型训练与评估脚本:tools/train.py和tools/eval.py
python -m paddle.distributed.launch \
--selected_gpus="0,1,2,3" \
--log_dir=log_ResNet50_vd \
tools/train.py \
-c ./configs/flower.yaml
-c ./configs/ResNet/ResNet50_vd.yaml
```
- 输出日志示例如下:
......@@ -40,10 +39,9 @@ epoch:0 train step:13 loss:7.9561 top1:0.0156 top5:0.1094 lr:0
```bash
python -m paddle.distributed.launch \
--selected_gpus="0,1,2,3" \
--log_dir=log_ResNet50_vd \
tools/train.py \
-c ./configs/flower.yaml \
-o use_mix=1
-c ./configs/ResNet/ResNet50_vd.yaml \
-o use_mix=1
```
......@@ -53,58 +51,28 @@ python -m paddle.distributed.launch \
epoch:0 train step:522 loss:1.6330 lr:0.100000 elapse:0.210
```
或是直接修改模型对应的yaml配置文件,具体配置参数参考[配置文档](config.md)
### 2.3 模型微调
以ResNet50_vd和ResNet50_vd_ssld预训练模型对flower102数据集进行微调。
ResNet50_vd: 在ImageNet1k数据集上训练 top1 acc:79.1% 模型详细信息参考[模型库](https://paddleclas.readthedocs.io/zh_CN/latest/models/ResNet_and_vd.html)
ResNet50_vd_ssld: 在ImageNet1k数据集训练的蒸馏模型 top1: 82.4% 模型详细信息参考[模型库](https://paddleclas.readthedocs.io/zh_CN/latest/models/ResNet_and_vd.html)
也可以直接修改模型对应的配置文件更新配置。具体配置参数参考[配置文档](config.md)
flower数据集相关信息参考[数据文档](data.md)
指定pretrained_model参数初始化预训练模型
ResNet50_vd:
### 2.2 模型微调
```bash
python -m paddle.distributed.launch \
--selected_gpus="0" \
tools/train.py \
-c ./configs/finetune/ResNet50_vd_finetune.yaml
-o pretrained_model=path_to_ResNet50_vd_pretrained_models
```
* [30分钟玩转PaddleClas](./quick_start.md)中包含大量模型微调的示例,可以参考该章节在特定的数据集上进行模型微调。
ResNet50_vd_ssld:
```bash
python -m paddle.distributed.launch \
--selected_gpus="0" \
tools/train.py \
-c ./configs/finetune/ResNet50_vd_ssld_finetune.yaml
-o pretrained_model=path_to_ResNet50_vd_ssld_pretrained_models
```
在使用ResNet50_vd预训练模型对flower102数据进行模型微调后,top1 acc 达到 92.71%。
在使用ResNet50_vd_ssld预训练模型对flower102数据进行模型微调后,top1 acc 达到94.96%。
### 2.2 模型评估
### 2.3 模型评估
```bash
python tools/eval.py \
-c ./configs/eval.yaml \
-o architecture="ResNet50_vd" \
-o ARCHITECTURE.name="ResNet50_vd" \
-o pretrained_model=path_to_pretrained_models
```
您可以更改configs/eval.yaml中的architecture字段和pretrained_model字段来配置评估模型,或是通过-o参数更新配置。
可以更改configs/eval.yaml中的`ARCHITECTURE.name`字段和pretrained_model字段来配置评估模型,也可以通过-o参数更新配置。
## 三、模型推理
PaddlePaddle提供三种方式进行预测推理,接下来介绍如何用预测引擎进行推理:
首先,对训练好的模型进行转换:
```bash
python tools/export_model.py \
-model=模型名字 \
......
......@@ -2,13 +2,12 @@
---
## 1.简介
## 一、简介
本章将介绍如何安装PaddleClas及其依赖项.
有关模型库的基本信息请参考[README](https://github.com/PaddlePaddle/PaddleClas/blob/master/README.md)
本章将介绍如何安装PaddleClas及其依赖项。
## 2.安装PaddlePaddle
## 二、安装PaddlePaddle
运行PaddleClas需要PaddlePaddle Fluid v1.7或更高版本。
......@@ -45,7 +44,7 @@ python -c "import paddle; print(paddle.__version__)"
- nccl >= 2.1.2
## 3.安装PaddleClas
## 三、安装PaddleClas
**克隆PaddleClas模型库:**
......@@ -61,14 +60,3 @@ Python依赖库在[requirements.txt](https://github.com/PaddlePaddle/PaddleClas/
```
pip install --upgrade -r requirements.txt
```
## 4.数据集和预训练模型
PaddleClas加载PaddleClas/dataset/中数据进行训练,请参照[数据文档](./data.md)进行准备。
PaddleClas提供丰富的预训练模型,请参照[数据文档](./data.md)进行准备。
## 5.开始使用
请参照[开始使用](./getting_started.md)文档
# 30min玩转PaddleClas
# 30分钟玩转PaddleClas
请事先参考[安装指南](install.md)配置运行环境和克隆PaddleClas代码。
......@@ -82,7 +82,9 @@ python -m paddle.distributed.launch \  
`Top1 Acc`曲线如下所示,最高准确率为0.2735。
![](../../images/quick_start/r50_vd_acc.png)
<div align="center">
<img src="../../images/quick_start/r50_vd_acc.png" width="600">
</div>
### 3.2 模型微调-基于ResNet50_vd预训练模型(准确率79.12\%)
......@@ -100,7 +102,9 @@ python -m paddle.distributed.launch \  
`Top1 Acc`曲线如下所示,最高准确率为0.9402,加载预训练模型之后,flowers102数据集精度大幅提升,绝对精度涨幅超过65\%
![](../../images/quick_start/r50_vd_pretrained_acc.png)
<div align="center">
<img src="../../images/quick_start/r50_vd_pretrained_acc.png" width="600">
</div>
### 3.3 SSLD模型微调-基于ResNet50_vd_ssld预训练模型(准确率82.39\%)
......@@ -215,7 +219,10 @@ python -m paddle.distributed.launch \  
下图给出了不同配置文件在迭代过程中的`Top1 Acc`的精度曲线变化图。
![](../../images/quick_start/all_acc.png)
<div align="center">
<img src="../../images/quick_start/all_acc.png" width="600">
</div>
* 更多训练及评估流程,请参考[开始使用文档](./getting_started.md)
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册