From eb61870a156abaeff2bab0037ab80478742ac9e4 Mon Sep 17 00:00:00 2001 From: jiangjiajun Date: Wed, 20 May 2020 11:07:21 +0800 Subject: [PATCH] add parameters --- docs/FAQ.md | 23 +++++++++++++---------- docs/appendix/index.rst | 8 +------- docs/appendix/parameters.md | 25 +++++++++++++++++++++++++ 3 files changed, 39 insertions(+), 17 deletions(-) create mode 100644 docs/appendix/parameters.md diff --git a/docs/FAQ.md b/docs/FAQ.md index d96e35c..425fb71 100755 --- a/docs/FAQ.md +++ b/docs/FAQ.md @@ -1,22 +1,25 @@ # 常见问题 -## 1. 训练过程因显存不够出错 +## 1. 训练参数如何调整 +参考[参数调整文档](appendix/paramters.md) + +## 2. 训练过程因显存不够出错 > 通过使用在终端`nvidia-smi`命令,查看GPU是否被其它任务占用,尝试清除其它任务; > 调低训练时的`batch_size`参数,从而降低显存的要求,注意需等比例调低`learning_rate`等参数; > 选用更小的模型或backbone。 -## 2. 是否有更小的模型,适用于更低配置的设备上运行 +## 3. 是否有更小的模型,适用于更低配置的设备上运行 > 可以使用模型裁剪,参考文档[模型裁剪使用教程](slim/prune.md),通过调整裁剪参数,可以控制模型裁剪后的大小,在实际实验中,如VOC检测数据,使用yolov3-mobilenet,原模型大小为XXM,裁剪后为XX M,精度基本保持不变 -## 3. 如何配置训练时GPU的卡数 +## 4. 如何配置训练时GPU的卡数 > 通过在终端export环境变量,或在Python代码中设置,可参考文档[CPU/多卡GPU训练](gpu_configure.md) -## 4. 想将之前训练的模型参数上继续训练 +## 5. 想将之前训练的模型参数上继续训练 > 在训练调用`train`接口时,将`pretrain_weights`设为之前的模型保存路径即可 -## 5. PaddleX保存的模型分为正常训练过程中产生、裁剪训练产生、导出为部署模型和量化保存这么多种,有什么差别,怎么区分 +## 6. PaddleX保存的模型分为正常训练过程中产生、裁剪训练产生、导出为部署模型和量化保存这么多种,有什么差别,怎么区分 **不同模型的功能差异** @@ -40,20 +43,20 @@ >> 通过模型目录下model.yml文件中`status`字段来区别不同的模型类型, 'Normal'、'Prune'、'Infer'、'Quant'分别表示正常模型训练保存、裁剪训练保存、导出的部署模型、量化保存模型 -## 6. 模型训练需要太久时间,或者训练速度太慢,怎么提速 +## 7. 模型训练需要太久时间,或者训练速度太慢,怎么提速 > 1.模型训练速度与用户选定的模型大小,和设定的`batch_size`相关,模型大小可直接参考[模型库](model_zoo.md)中的指标,一般而言,模型越大,训练速度就越慢; > 2.在模型速度之外,模型训练完成所需的时间又与用户设定的`num_epochs`迭代轮数相关,用户可以通过观察模型在验证集上的指标来决定是否提示结束掉训练进程(训练时设定`save_interval_epochs`参数,训练过程会每间隔`save_interval_epochs`轮数在验证集上计算指标,并保存模型); -## 7. 如何设定迭代的轮数 +## 8. 如何设定迭代的轮数 > 1. 用户自行训练时,如不确定迭代的轮数,可以将轮数设高一些,同时注意设置`save_interval_epochs`,这样模型迭代每间隔相应轮数就会在验证集上进行评估和保存,可以根据不同轮数模型在验证集上的评估指标,判断模型是否已经收敛,若模型已收敛,可以自行结束训练进程 > -## 8. 只有CPU,没有GPU,如何提升训练速度 +## 9. 只有CPU,没有GPU,如何提升训练速度 > 当没有GPU时,可以根据自己的CPU配置,选择是否使用多CPU进行训练,具体配置方式可以参考文档[多卡CPU/GPU训练](gpu_configure.md) > -## 9. 电脑不能联网,训练时因为下载预训练模型失败,如何解决 +## 10. 电脑不能联网,训练时因为下载预训练模型失败,如何解决 > 可以预先通过其它方式准备好预训练模型,然后训练时自定义`pretrain_weights`即可,可参考文档[无联网模型训练](how_to_offline_run.md) -## 10. 每次训练新的模型,都需要重新下载预训练模型,怎样可以下载一次就搞定 +## 11. 每次训练新的模型,都需要重新下载预训练模型,怎样可以下载一次就搞定 > 1.可以按照9的方式来解决这个问题 > 2.每次训练前都设定`paddlex.pretrain_dir`路径,如设定`paddlex.pretrain_dir='/usrname/paddlex`,如此下载完的预训练模型会存放至`/usrname/paddlex`目录下,而已经下载在该目录的模型也不会再次重复下载 diff --git a/docs/appendix/index.rst b/docs/appendix/index.rst index b914b5b..c319842 100755 --- a/docs/appendix/index.rst +++ b/docs/appendix/index.rst @@ -8,13 +8,7 @@ model_zoo.md metrics.md + parameters.md how_to_convert_dataset.md datasets.md - -* PaddleX版本: v0.1.7 -* 项目官网: http://www.paddlepaddle.org.cn/paddle/paddlex -* 项目GitHub: https://github.com/PaddlePaddle/PaddleX/tree/develop -* 官方QQ用户群: 1045148026 -* GitHub Issue反馈: http://www.github.com/PaddlePaddle/PaddleX/issues - diff --git a/docs/appendix/parameters.md b/docs/appendix/parameters.md new file mode 100644 index 0000000..732535d --- /dev/null +++ b/docs/appendix/parameters.md @@ -0,0 +1,25 @@ +# 训练参数调整 + +PaddleX所有训练接口中,内置的参数均为根据单GPU卡相应batch_size下的较优参数,用户在自己的数据上训练模型,涉及到参数调整时,如无太多参数调优经验,则可参考如下方式 + +## 1.Epoch数的调整 +Epoch数是模型训练过程,迭代的轮数,用户可以设置较大的数值,根据模型迭代过程在验证集上的指标表现,来判断模型是否收敛,进而提前终止训练。此外也可以使用`train`接口中的`early_stop`策略,模型在训练过程会自动判断模型是否收敛自动中止。 + +## 2.Batch Size的调整 +Batch Size指模型在训练过程中,一次性处理的样本数量, 如若使用多卡训练, batch_size会均分到各张卡上(因此需要让batch size整除卡数)。这个参数跟机器的显存/内存高度相关,`batch_size`越高,所消耗的显存/内存就越高。PaddleX在各个`train`接口中均配置了默认的batch size,如若用户调整batch size,则也注意需要对应调整其它参数,如下表所示展示YOLOv3在训练时的参数配置 + +| 参数 | 默认值 | 调整比例 | 示例 | +|:---------------- | :------------ | :------------------ | :------------ | +| train_batch_size | 8 | 调整为 8*alpha | 16 | +| learning_rate | 1.0/8000 | 调整为 alpha/8000 | 2.0/8000 | +| warmup_steps | 1000 | 调整为 1000/alpha
(该参数也可以自行根据数据情况调整) | 500 | +| lr_decay_epochs | [213, 240] | 不变 | [213, 240] | + + +更多训练接口可以参考 +- [分类模型-train](https://paddlex.readthedocs.io/zh_CN/latest/apis/models/classification.html#train) +- [目标检测检测FasterRCNN-train](https://paddlex.readthedocs.io/zh_CN/latest/apis/models/detection.html#id2) +- [目标检测YOLOv3-train](https://paddlex.readthedocs.io/zh_CN/latest/apis/models/detection.html#train) +- [实例分割MaskRCNN-train](https://paddlex.readthedocs.io/zh_CN/latest/apis/models/instance_segmentation.html#train) +- [语义分割DeepLabv3p-train](https://paddlex.readthedocs.io/zh_CN/latest/apis/models/semantic_segmentation.html#train) +- [语义分割UNet](https://paddlex.readthedocs.io/zh_CN/latest/apis/models/semantic_segmentation.html#id2) -- GitLab