From 217ab059a81aacc68560eb95d6b82ff40dc9343b Mon Sep 17 00:00:00 2001 From: cuicheng01 Date: Sun, 31 Oct 2021 16:09:58 +0000 Subject: [PATCH] Update docs --- docs/zh_CN/ImageNet_models_cn.md | 480 --------------- docs/zh_CN/Makefile | 20 - .../advanced_tutorials/DataAugmentation.md | 0 .../advanced_tutorials/code_overview.md | 0 .../distillation/distillation.md | 253 -------- .../advanced_tutorials/distillation/index.rst | 7 - .../advanced_tutorials/how_to_contribute.md | 0 .../image_augmentation/ImageAugment.md | 549 ------------------ .../image_augmentation/index.rst | 7 - docs/zh_CN/advanced_tutorials/index.rst | 9 - .../knowledge_distillation.md | 0 .../model_prune_quantization.md | 0 .../advanced_tutorials/multilabel/index.rst | 7 - .../multilabel/multilabel.md | 90 --- .../DataAugmentation.md | 0 .../algorithm_introduction/ImageNet_models.md | 0 .../image_classification.md | 0 .../knowledge_distillation.md | 0 .../algorithm_introduction/metric_learning.md | 0 .../model_prune_quantization.md | 0 .../cartoon_character_recognition.md | 38 -- docs/zh_CN/application/feature_learning.md | 29 - docs/zh_CN/application/index.rst | 8 - docs/zh_CN/application/logo_recognition.md | 52 -- docs/zh_CN/application/mainbody_detection.md | 188 ------ docs/zh_CN/application/object_detection.md | 39 -- docs/zh_CN/application/product_recognition.md | 41 -- docs/zh_CN/application/transfer_learning.md | 86 --- docs/zh_CN/application/vehicle_recognition.md | 97 ---- docs/zh_CN/competition_support.md | 19 - docs/zh_CN/conf.py | 79 --- .../classification_dataset.md | 0 .../data_preparation/recognition_dataset.md | 0 docs/zh_CN/extension/VisualDL.md | 43 -- docs/zh_CN/extension/code_overview.md | 5 - docs/zh_CN/extension/index.rst | 12 - .../zh_CN/extension/multi_machine_training.md | 6 - docs/zh_CN/extension/paddle_hub.md | 4 - .../extension/paddle_mobile_inference.md | 119 ---- docs/zh_CN/extension/paddle_quantization.md | 5 - docs/zh_CN/extension/paddle_serving.md | 65 --- docs/zh_CN/extension/train_on_xpu.md | 32 - docs/zh_CN/extension/train_with_DALI.md | 61 -- docs/zh_CN/faq.md | 262 --------- docs/zh_CN/faq_series.md | 11 - docs/{zh_CN_tmp => zh_CN}/faq_series/faq.md | 0 .../feature_visiualization/get_started.md | 84 --- .../feature_extraction.md | 0 .../image_recognition_pipeline/framework.png | Bin .../mainbody_detection.md | 0 .../vector_search.md | 0 docs/zh_CN/index.rst | 17 - docs/zh_CN/inference.md | 188 ------ .../inference_deployment/cpp_deploy.md | 0 .../cpp_deploy_on_windows.md | 0 .../inference_deployment/export_model.md | 0 .../paddle_hub_serving_deploy.md | 0 .../paddle_lite_deploy.md | 0 .../paddle_serving_deploy.md | 0 .../inference_deployment/python_deploy.md | 0 .../inference_deployment/whl_deploy.md | 0 .../installation/install_paddle.md | 0 .../installation/install_paddleclas.md | 0 .../introduction}/.gitkeep | 0 .../introduction/function_intro.md | 0 .../introduction/more_demo.md | 0 docs/zh_CN/make.bat | 35 -- docs/zh_CN/models/models_intro.md | 141 ++++- .../models_training}/.gitkeep | 0 .../models_training/classification.md | 0 .../models_training/config_description.md | 0 .../models_training/recognition.md | 0 .../models_training/train_strategy.md | 0 docs/zh_CN/more_demo.md | 61 -- .../others/competition_support.md | 0 docs/{zh_CN_tmp => zh_CN}/others/more_demo.md | 0 docs/zh_CN/{ => others}/update_history.md | 0 docs/{zh_CN_tmp => zh_CN}/others/versions.md | 0 .../quick_start_classification_new_user.md | 0 ...quick_start_classification_professional.md | 0 .../quick_start/quick_start_recognition.md | 0 docs/zh_CN/tutorials/config_description.md | 234 -------- docs/zh_CN/tutorials/data.md | 80 --- docs/zh_CN/tutorials/getting_started.md | 261 --------- .../tutorials/getting_started_retrieval.md | 248 -------- docs/zh_CN/tutorials/image_classification.md | 58 -- docs/zh_CN/tutorials/index.rst | 12 - docs/zh_CN/tutorials/install.md | 111 ---- docs/zh_CN/tutorials/quick_start_community.md | 452 -------------- docs/zh_CN/tutorials/quick_start_new_user.md | 169 ------ .../tutorials/quick_start_professional.md | 260 --------- .../tutorials/quick_start_recognition.md | 306 ---------- docs/zh_CN/whl.md | 237 -------- docs/zh_CN_tmp/faq_series/faq_2020_s1.md | 372 ------------ docs/zh_CN_tmp/faq_series/faq_2021_s1.md | 267 --------- docs/zh_CN_tmp/faq_series/faq_2021_s2.md | 342 ----------- docs/zh_CN_tmp/models/DLA.md | 21 - docs/zh_CN_tmp/models/DPN_DenseNet.md | 69 --- .../models/EfficientNet_and_ResNeXt101_wsl.md | 79 --- docs/zh_CN_tmp/models/HRNet.md | 64 -- docs/zh_CN_tmp/models/HarDNet.md | 14 - docs/zh_CN_tmp/models/Inception.md | 68 --- docs/zh_CN_tmp/models/LeViT.md | 17 - docs/zh_CN_tmp/models/MixNet.md | 21 - docs/zh_CN_tmp/models/Mobile.md | 150 ----- docs/zh_CN_tmp/models/Others.md | 55 -- docs/zh_CN_tmp/models/PP-LCNet.md | 143 ----- docs/zh_CN_tmp/models/ReXNet.md | 18 - docs/zh_CN_tmp/models/RedNet.md | 16 - docs/zh_CN_tmp/models/RepVGG.md | 23 - docs/zh_CN_tmp/models/ResNeSt_RegNet.md | 25 - docs/zh_CN_tmp/models/ResNet_and_vd.md | 97 ---- .../zh_CN_tmp/models/SEResNext_and_Res2Net.md | 117 ---- docs/zh_CN_tmp/models/SwinTransformer.md | 22 - docs/zh_CN_tmp/models/TNT.md | 12 - docs/zh_CN_tmp/models/Tricks.md | 96 --- docs/zh_CN_tmp/models/Twins.md | 17 - docs/zh_CN_tmp/models/ViT_and_DeiT.md | 36 -- docs/zh_CN_tmp/models/index.rst | 16 - docs/zh_CN_tmp/models/models_intro.md | 396 ------------- docs/zh_CN_tmp/models_training/.gitkeep | 0 docs/zh_CN_tmp/others/update_history.md | 50 -- 122 files changed, 119 insertions(+), 8181 deletions(-) delete mode 100644 docs/zh_CN/ImageNet_models_cn.md delete mode 100644 docs/zh_CN/Makefile rename docs/{zh_CN_tmp => zh_CN}/advanced_tutorials/DataAugmentation.md (100%) rename docs/{zh_CN_tmp => zh_CN}/advanced_tutorials/code_overview.md (100%) delete mode 100644 docs/zh_CN/advanced_tutorials/distillation/distillation.md delete mode 100644 docs/zh_CN/advanced_tutorials/distillation/index.rst rename docs/{zh_CN_tmp => zh_CN}/advanced_tutorials/how_to_contribute.md (100%) delete mode 100644 docs/zh_CN/advanced_tutorials/image_augmentation/ImageAugment.md delete mode 100644 docs/zh_CN/advanced_tutorials/image_augmentation/index.rst delete mode 100644 docs/zh_CN/advanced_tutorials/index.rst rename docs/{zh_CN_tmp => zh_CN}/advanced_tutorials/knowledge_distillation.md (100%) rename docs/{zh_CN_tmp => zh_CN}/advanced_tutorials/model_prune_quantization.md (100%) delete mode 100644 docs/zh_CN/advanced_tutorials/multilabel/index.rst delete mode 100644 docs/zh_CN/advanced_tutorials/multilabel/multilabel.md rename docs/{zh_CN_tmp => zh_CN}/algorithm_introduction/DataAugmentation.md (100%) rename docs/{zh_CN_tmp => zh_CN}/algorithm_introduction/ImageNet_models.md (100%) rename docs/{zh_CN_tmp => zh_CN}/algorithm_introduction/image_classification.md (100%) rename docs/{zh_CN_tmp => zh_CN}/algorithm_introduction/knowledge_distillation.md (100%) rename docs/{zh_CN_tmp => zh_CN}/algorithm_introduction/metric_learning.md (100%) rename docs/{zh_CN_tmp => zh_CN}/algorithm_introduction/model_prune_quantization.md (100%) delete mode 100644 docs/zh_CN/application/cartoon_character_recognition.md delete mode 100644 docs/zh_CN/application/feature_learning.md delete mode 100644 docs/zh_CN/application/index.rst delete mode 100644 docs/zh_CN/application/logo_recognition.md delete mode 100644 docs/zh_CN/application/mainbody_detection.md delete mode 100644 docs/zh_CN/application/object_detection.md delete mode 100644 docs/zh_CN/application/product_recognition.md delete mode 100644 docs/zh_CN/application/transfer_learning.md delete mode 100644 docs/zh_CN/application/vehicle_recognition.md delete mode 100644 docs/zh_CN/competition_support.md delete mode 100644 docs/zh_CN/conf.py rename docs/{zh_CN_tmp => zh_CN}/data_preparation/classification_dataset.md (100%) rename docs/{zh_CN_tmp => zh_CN}/data_preparation/recognition_dataset.md (100%) delete mode 100644 docs/zh_CN/extension/VisualDL.md delete mode 100644 docs/zh_CN/extension/code_overview.md delete mode 100644 docs/zh_CN/extension/index.rst delete mode 100644 docs/zh_CN/extension/multi_machine_training.md delete mode 100644 docs/zh_CN/extension/paddle_hub.md delete mode 100644 docs/zh_CN/extension/paddle_mobile_inference.md delete mode 100644 docs/zh_CN/extension/paddle_quantization.md delete mode 100644 docs/zh_CN/extension/paddle_serving.md delete mode 100644 docs/zh_CN/extension/train_on_xpu.md delete mode 100644 docs/zh_CN/extension/train_with_DALI.md delete mode 100644 docs/zh_CN/faq.md delete mode 100644 docs/zh_CN/faq_series.md rename docs/{zh_CN_tmp => zh_CN}/faq_series/faq.md (100%) delete mode 100644 docs/zh_CN/feature_visiualization/get_started.md rename docs/{zh_CN_tmp => zh_CN}/image_recognition_pipeline/feature_extraction.md (100%) rename docs/{zh_CN_tmp => zh_CN}/image_recognition_pipeline/framework.png (100%) rename docs/{zh_CN_tmp => zh_CN}/image_recognition_pipeline/mainbody_detection.md (100%) rename docs/{zh_CN_tmp => zh_CN}/image_recognition_pipeline/vector_search.md (100%) delete mode 100644 docs/zh_CN/index.rst delete mode 100644 docs/zh_CN/inference.md rename docs/{zh_CN_tmp => zh_CN}/inference_deployment/cpp_deploy.md (100%) rename docs/{zh_CN_tmp => zh_CN}/inference_deployment/cpp_deploy_on_windows.md (100%) rename docs/{zh_CN_tmp => zh_CN}/inference_deployment/export_model.md (100%) rename docs/{zh_CN_tmp => zh_CN}/inference_deployment/paddle_hub_serving_deploy.md (100%) rename docs/{zh_CN_tmp => zh_CN}/inference_deployment/paddle_lite_deploy.md (100%) rename docs/{zh_CN_tmp => zh_CN}/inference_deployment/paddle_serving_deploy.md (100%) rename docs/{zh_CN_tmp => zh_CN}/inference_deployment/python_deploy.md (100%) rename docs/{zh_CN_tmp => zh_CN}/inference_deployment/whl_deploy.md (100%) rename docs/{zh_CN_tmp => zh_CN}/installation/install_paddle.md (100%) rename docs/{zh_CN_tmp => zh_CN}/installation/install_paddleclas.md (100%) rename docs/{zh_CN_tmp/faq_series => zh_CN/introduction}/.gitkeep (100%) rename docs/{zh_CN_tmp => zh_CN}/introduction/function_intro.md (100%) rename docs/{zh_CN_tmp => zh_CN}/introduction/more_demo.md (100%) delete mode 100644 docs/zh_CN/make.bat rename docs/{zh_CN_tmp/introduction => zh_CN/models_training}/.gitkeep (100%) rename docs/{zh_CN_tmp => zh_CN}/models_training/classification.md (100%) rename docs/{zh_CN_tmp => zh_CN}/models_training/config_description.md (100%) rename docs/{zh_CN_tmp => zh_CN}/models_training/recognition.md (100%) rename docs/{zh_CN_tmp => zh_CN}/models_training/train_strategy.md (100%) delete mode 100644 docs/zh_CN/more_demo.md rename docs/{zh_CN_tmp => zh_CN}/others/competition_support.md (100%) rename docs/{zh_CN_tmp => zh_CN}/others/more_demo.md (100%) rename docs/zh_CN/{ => others}/update_history.md (100%) rename docs/{zh_CN_tmp => zh_CN}/others/versions.md (100%) rename docs/{zh_CN_tmp => zh_CN}/quick_start/quick_start_classification_new_user.md (100%) rename docs/{zh_CN_tmp => zh_CN}/quick_start/quick_start_classification_professional.md (100%) rename docs/{zh_CN_tmp => zh_CN}/quick_start/quick_start_recognition.md (100%) delete mode 100644 docs/zh_CN/tutorials/config_description.md delete mode 100644 docs/zh_CN/tutorials/data.md delete mode 100644 docs/zh_CN/tutorials/getting_started.md delete mode 100644 docs/zh_CN/tutorials/getting_started_retrieval.md delete mode 100644 docs/zh_CN/tutorials/image_classification.md delete mode 100644 docs/zh_CN/tutorials/index.rst delete mode 100644 docs/zh_CN/tutorials/install.md delete mode 100644 docs/zh_CN/tutorials/quick_start_community.md delete mode 100644 docs/zh_CN/tutorials/quick_start_new_user.md delete mode 100644 docs/zh_CN/tutorials/quick_start_professional.md delete mode 100644 docs/zh_CN/tutorials/quick_start_recognition.md delete mode 100644 docs/zh_CN/whl.md delete mode 100644 docs/zh_CN_tmp/faq_series/faq_2020_s1.md delete mode 100644 docs/zh_CN_tmp/faq_series/faq_2021_s1.md delete mode 100644 docs/zh_CN_tmp/faq_series/faq_2021_s2.md delete mode 100644 docs/zh_CN_tmp/models/DLA.md delete mode 100644 docs/zh_CN_tmp/models/DPN_DenseNet.md delete mode 100644 docs/zh_CN_tmp/models/EfficientNet_and_ResNeXt101_wsl.md delete mode 100644 docs/zh_CN_tmp/models/HRNet.md delete mode 100644 docs/zh_CN_tmp/models/HarDNet.md delete mode 100644 docs/zh_CN_tmp/models/Inception.md delete mode 100644 docs/zh_CN_tmp/models/LeViT.md delete mode 100644 docs/zh_CN_tmp/models/MixNet.md delete mode 100644 docs/zh_CN_tmp/models/Mobile.md delete mode 100644 docs/zh_CN_tmp/models/Others.md delete mode 100644 docs/zh_CN_tmp/models/PP-LCNet.md delete mode 100644 docs/zh_CN_tmp/models/ReXNet.md delete mode 100644 docs/zh_CN_tmp/models/RedNet.md delete mode 100644 docs/zh_CN_tmp/models/RepVGG.md delete mode 100644 docs/zh_CN_tmp/models/ResNeSt_RegNet.md delete mode 100644 docs/zh_CN_tmp/models/ResNet_and_vd.md delete mode 100644 docs/zh_CN_tmp/models/SEResNext_and_Res2Net.md delete mode 100644 docs/zh_CN_tmp/models/SwinTransformer.md delete mode 100644 docs/zh_CN_tmp/models/TNT.md delete mode 100644 docs/zh_CN_tmp/models/Tricks.md delete mode 100644 docs/zh_CN_tmp/models/Twins.md delete mode 100644 docs/zh_CN_tmp/models/ViT_and_DeiT.md delete mode 100644 docs/zh_CN_tmp/models/index.rst delete mode 100644 docs/zh_CN_tmp/models/models_intro.md delete mode 100644 docs/zh_CN_tmp/models_training/.gitkeep delete mode 100644 docs/zh_CN_tmp/others/update_history.md diff --git a/docs/zh_CN/ImageNet_models_cn.md b/docs/zh_CN/ImageNet_models_cn.md deleted file mode 100644 index 34e76276..00000000 --- a/docs/zh_CN/ImageNet_models_cn.md +++ /dev/null @@ -1,480 +0,0 @@ -简体中文 | [English](README.md) - - -## ImageNet预训练模型库 - - -### 模型库概览图 - -基于ImageNet1k分类数据集,PaddleClas支持35个系列分类网络结构以及对应的164个图像分类预训练模型,训练技巧、每个系列网络结构的简单介绍和性能评估将在相应章节展现,下面所有的速度指标评估环境如下: -* CPU的评估环境基于骁龙855(SD855)。 -* GPU评估环境基于T4机器,在FP32+TensorRT配置下运行500次测得(去除前10次的warmup时间)。 - -常见服务器端模型的精度指标与其预测耗时的变化曲线如下图所示。 - -![](../images/models/T4_benchmark/t4.fp32.bs1.main_fps_top1.png) - - -常见移动端模型的精度指标与其预测耗时、模型存储大小的变化曲线如下图所示。 - -![](../images/models/mobile_arm_storage.png) - -![](../images/models/mobile_arm_top1.png) - - - -### SSLD知识蒸馏预训练模型 -基于SSLD知识蒸馏的预训练模型列表如下所示,更多关于SSLD知识蒸馏方案的介绍可以参考:[SSLD知识蒸馏文档](./advanced_tutorials/distillation/distillation.md)。 - -* 服务器端知识蒸馏模型 - -| 模型 | Top-1 Acc | Reference
Top-1 Acc | Acc gain | time(ms)
bs=1 | time(ms)
bs=4 | Flops(G) | Params(M) | 下载地址 | -|---------------------|-----------|-----------|---------------|----------------|-----------|----------|-----------|-----------------------------------| -| ResNet34_vd_ssld | 0.797 | 0.760 | 0.037 | 2.434 | 6.222 | 7.39 | 21.82 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/legendary_models/ResNet34_vd_ssld_pretrained.pdparams) | -| ResNet50_vd_ssld | 0.830 | 0.792 | 0.039 | 3.531 | 8.090 | 8.67 | 25.58 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/legendary_models/ResNet50_vd_ssld_pretrained.pdparams) | -| ResNet101_vd_ssld | 0.837 | 0.802 | 0.035 | 6.117 | 13.762 | 16.1 | 44.57 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/legendary_models/ResNet101_vd_ssld_pretrained.pdparams) | -| Res2Net50_vd_26w_4s_ssld | 0.831 | 0.798 | 0.033 | 4.527 | 9.657 | 8.37 | 25.06 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/Res2Net50_vd_26w_4s_ssld_pretrained.pdparams) | -| Res2Net101_vd_
26w_4s_ssld | 0.839 | 0.806 | 0.033 | 8.087 | 17.312 | 16.67 | 45.22 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/Res2Net101_vd_26w_4s_ssld_pretrained.pdparams) | -| Res2Net200_vd_
26w_4s_ssld | 0.851 | 0.812 | 0.049 | 14.678 | 32.350 | 31.49 | 76.21 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/Res2Net200_vd_26w_4s_ssld_pretrained.pdparams) | -| HRNet_W18_C_ssld | 0.812 | 0.769 | 0.043 | 7.406 | 13.297 | 4.14 | 21.29 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/legendary_models/HRNet_W18_C_ssld_pretrained.pdparams) | -| HRNet_W48_C_ssld | 0.836 | 0.790 | 0.046 | 13.707 | 34.435 | 34.58 | 77.47 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/legendary_models/HRNet_W48_C_ssld_pretrained.pdparams) | -| SE_HRNet_W64_C_ssld | 0.848 | - | - | 31.697 | 94.995 | 57.83 | 128.97 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/legendary_models/SE_HRNet_W64_C_ssld_pretrained.pdparams) | - - -* 端侧知识蒸馏模型 - -| 模型 | Top-1 Acc | Reference
Top-1 Acc | Acc gain | SD855 time(ms)
bs=1 | Flops(G) | Params(M) | 模型大小(M) | 下载地址 | -|---------------------|-----------|-----------|---------------|----------------|-----------|----------|-----------|-----------------------------------| -| MobileNetV1_ssld | 0.779 | 0.710 | 0.069 | 32.523 | 1.11 | 4.19 | 16 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/legendary_models/MobileNetV1_ssld_pretrained.pdparams) | -| MobileNetV2_ssld | 0.767 | 0.722 | 0.045 | 23.318 | 0.6 | 3.44 | 14 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/MobileNetV2_ssld_pretrained.pdparams) | -| MobileNetV3_small_x0_35_ssld | 0.556 | 0.530 | 0.026 | 2.635 | 0.026 | 1.66 | 6.9 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/legendary_models/MobileNetV3_small_x0_35_ssld_pretrained.pdparams) | -| MobileNetV3_large_x1_0_ssld | 0.790 | 0.753 | 0.036 | 19.308 | 0.45 | 5.47 | 21 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/legendary_models/MobileNetV3_large_x1_0_ssld_pretrained.pdparams) | -| MobileNetV3_small_x1_0_ssld | 0.713 | 0.682 | 0.031 | 6.546 | 0.123 | 2.94 | 12 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/legendary_models/MobileNetV3_small_x1_0_ssld_pretrained.pdparams) | -| GhostNet_x1_3_ssld | 0.794 | 0.757 | 0.037 | 19.983 | 0.44 | 7.3 | 29 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/GhostNet_x1_3_ssld_pretrained.pdparams) | - - -* Intel CPU端知识蒸馏模型 - -| 模型 | Top-1 Acc | Reference
Top-1 Acc | Acc gain | Intel-Xeon-Gold-6148 time(ms)
bs=1 | Flops(M) | Params(M) | 下载地址 | -|---------------------|-----------|-----------|---------------|----------------|----------|-----------|-----------------------------------| -| PPLCNet_x0_5_ssld | 0.661 | 0.631 | 0.030 | 2.05 | 47 | 1.9 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/legendary_models/PPLCNet_x0_5_ssld_pretrained.pdparams) | -| PPLCNet_x1_0_ssld | 0.744 | 0.713 | 0.033 | 2.46 | 161 | 3.0 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/legendary_models/PPLCNet_x1_0_ssld_pretrained.pdparams) | -| PPLCNet_x2_5_ssld | 0.808 | 0.766 | 0.042 | 5.39 | 906 | 9.0 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/legendary_models/PPLCNet_x2_5_ssld_pretrained.pdparams) | - - - - -* 注: `Reference Top-1 Acc`表示PaddleClas基于ImageNet1k数据集训练得到的预训练模型精度。 - - -### PP-LCNet系列 - -PP-LCNet系列模型的精度、速度指标如下表所示,更多关于该系列的模型介绍可以参考:[PP-LCNet系列模型文档](./models/PP-LCNet.md)。 - -| 模型 | Top-1 Acc | Top-5 Acc | Intel-Xeon-Gold-6148 time(ms)
bs=1 | FLOPs(M) | Params(M) | 下载地址 | -|:--:|:--:|:--:|:--:|:--:|:--:|:--:| -| PPLCNet_x0_25 |0.5186 | 0.7565 | 1.74 | 18 | 1.5 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/legendary_models/PPLCNet_x0_25_pretrained.pdparams) | -| PPLCNet_x0_35 |0.5809 | 0.8083 | 1.92 | 29 | 1.6 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/legendary_models/PPLCNet_x0_35_pretrained.pdparams) | -| PPLCNet_x0_5 |0.6314 | 0.8466 | 2.05 | 47 | 1.9 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/legendary_models/PPLCNet_x0_5_pretrained.pdparams) | -| PPLCNet_x0_75 |0.6818 | 0.8830 | 2.29 | 99 | 2.4 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/legendary_models/PPLCNet_x0_75_pretrained.pdparams) | -| PPLCNet_x1_0 |0.7132 | 0.9003 | 2.46 | 161 | 3.0 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/legendary_models/PPLCNet_x1_0_pretrained.pdparams) | -| PPLCNet_x1_5 |0.7371 | 0.9153 | 3.19 | 342 | 4.5 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/legendary_models/PPLCNet_x1_5_pretrained.pdparams) | -| PPLCNet_x2_0 |0.7518 | 0.9227 | 4.27 | 590 | 6.5 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/legendary_models/PPLCNet_x2_0_pretrained.pdparams) | -| PPLCNet_x2_5 |0.7660 | 0.9300 | 5.39 | 906 | 9.0 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/legendary_models/PPLCNet_x2_5_pretrained.pdparams) | - - - -### ResNet及其Vd系列 - -ResNet及其Vd系列模型的精度、速度指标如下表所示,更多关于该系列的模型介绍可以参考:[ResNet及其Vd系列模型文档](./models/ResNet_and_vd.md)。 - -| 模型 | Top-1 Acc | Top-5 Acc | time(ms)
bs=1 | time(ms)
bs=4 | Flops(G) | Params(M) | 下载地址 | -|---------------------|-----------|-----------|-----------------------|----------------------|----------|-----------|----------------------------------------------------------------------------------------------| -| ResNet18 | 0.7098 | 0.8992 | 1.45606 | 3.56305 | 3.66 | 11.69 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/legendary_models/ResNet18_pretrained.pdparams) | -| ResNet18_vd | 0.7226 | 0.9080 | 1.54557 | 3.85363 | 4.14 | 11.71 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/legendary_models/ResNet18_vd_pretrained.pdparams) | -| ResNet34 | 0.7457 | 0.9214 | 2.34957 | 5.89821 | 7.36 | 21.8 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/legendary_models/ResNet34_pretrained.pdparams) | -| ResNet34_vd | 0.7598 | 0.9298 | 2.43427 | 6.22257 | 7.39 | 21.82 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/legendary_models/ResNet34_vd_pretrained.pdparams) | -| ResNet34_vd_ssld | 0.7972 | 0.9490 | 2.43427 | 6.22257 | 7.39 | 21.82 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/legendary_models/ResNet34_vd_ssld_pretrained.pdparams) | -| ResNet50 | 0.7650 | 0.9300 | 3.47712 | 7.84421 | 8.19 | 25.56 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/legendary_models/ResNet50_pretrained.pdparams) | -| ResNet50_vc | 0.7835 | 0.9403 | 3.52346 | 8.10725 | 8.67 | 25.58 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/ResNet50_vc_pretrained.pdparams) | -| ResNet50_vd | 0.7912 | 0.9444 | 3.53131 | 8.09057 | 8.67 | 25.58 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/legendary_models/ResNet50_vd_pretrained.pdparams) | -| ResNet101 | 0.7756 | 0.9364 | 6.07125 | 13.40573 | 15.52 | 44.55 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/legendary_models/ResNet101_pretrained.pdparams) | -| ResNet101_vd | 0.8017 | 0.9497 | 6.11704 | 13.76222 | 16.1 | 44.57 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/legendary_models/ResNet101_vd_pretrained.pdparams) | -| ResNet152 | 0.7826 | 0.9396 | 8.50198 | 19.17073 | 23.05 | 60.19 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/legendary_models/ResNet152_pretrained.pdparams) | -| ResNet152_vd | 0.8059 | 0.9530 | 8.54376 | 19.52157 | 23.53 | 60.21 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/legendary_models/ResNet152_vd_pretrained.pdparams) | -| ResNet200_vd | 0.8093 | 0.9533 | 10.80619 | 25.01731 | 30.53 | 74.74 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/legendary_models/ResNet200_vd_pretrained.pdparams) | -| ResNet50_vd_
ssld | 0.8300 | 0.9640 | 3.53131 | 8.09057 | 8.67 | 25.58 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/legendary_models/ResNet50_vd_ssld_pretrained.pdparams) | -| ResNet101_vd_
ssld | 0.8373 | 0.9669 | 6.11704 | 13.76222 | 16.1 | 44.57 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/legendary_models/ResNet101_vd_ssld_pretrained.pdparams) | - - - -### 移动端系列 - -移动端系列模型的精度、速度指标如下表所示,更多关于该系列的模型介绍可以参考:[移动端系列模型文档](./models/Mobile.md)。 - -| 模型 | Top-1 Acc | Top-5 Acc | SD855 time(ms)
bs=1 | Flops(G) | Params(M) | 模型大小(M) | 下载地址 | -|----------------------------------|-----------|-----------|------------------------|----------|-----------|---------|-----------------------------------------------------------------------------------------------------------| -| MobileNetV1_
x0_25 | 0.5143 | 0.7546 | 3.21985 | 0.07 | 0.46 | 1.9 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/legendary_models/MobileNetV1_x0_25_pretrained.pdparams) | -| MobileNetV1_
x0_5 | 0.6352 | 0.8473 | 9.579599 | 0.28 | 1.31 | 5.2 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/legendary_models/MobileNetV1_x0_5_pretrained.pdparams) | -| MobileNetV1_
x0_75 | 0.6881 | 0.8823 | 19.436399 | 0.63 | 2.55 | 10 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/legendary_models/MobileNetV1_x0_75_pretrained.pdparams) | -| MobileNetV1 | 0.7099 | 0.8968 | 32.523048 | 1.11 | 4.19 | 16 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/legendary_models/MobileNetV1_pretrained.pdparams) | -| MobileNetV1_
ssld | 0.7789 | 0.9394 | 32.523048 | 1.11 | 4.19 | 16 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/legendary_models/MobileNetV1_ssld_pretrained.pdparams) | -| MobileNetV2_
x0_25 | 0.5321 | 0.7652 | 3.79925 | 0.05 | 1.5 | 6.1 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/MobileNetV2_x0_25_pretrained.pdparams) | -| MobileNetV2_
x0_5 | 0.6503 | 0.8572 | 8.7021 | 0.17 | 1.93 | 7.8 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/MobileNetV2_x0_5_pretrained.pdparams) | -| MobileNetV2_
x0_75 | 0.6983 | 0.8901 | 15.531351 | 0.35 | 2.58 | 10 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/MobileNetV2_x0_75_pretrained.pdparams) | -| MobileNetV2 | 0.7215 | 0.9065 | 23.317699 | 0.6 | 3.44 | 14 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/MobileNetV2_pretrained.pdparams) | -| MobileNetV2_
x1_5 | 0.7412 | 0.9167 | 45.623848 | 1.32 | 6.76 | 26 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/MobileNetV2_x1_5_pretrained.pdparams) | -| MobileNetV2_
x2_0 | 0.7523 | 0.9258 | 74.291649 | 2.32 | 11.13 | 43 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/MobileNetV2_x2_0_pretrained.pdparams) | -| MobileNetV2_
ssld | 0.7674 | 0.9339 | 23.317699 | 0.6 | 3.44 | 14 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/MobileNetV2_ssld_pretrained.pdparams) | -| MobileNetV3_
large_x1_25 | 0.7641 | 0.9295 | 28.217701 | 0.714 | 7.44 | 29 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/legendary_models/MobileNetV3_large_x1_25_pretrained.pdparams) | -| MobileNetV3_
large_x1_0 | 0.7532 | 0.9231 | 19.30835 | 0.45 | 5.47 | 21 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/legendary_models/MobileNetV3_large_x1_0_pretrained.pdparams) | -| MobileNetV3_
large_x0_75 | 0.7314 | 0.9108 | 13.5646 | 0.296 | 3.91 | 16 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/legendary_models/MobileNetV3_large_x0_75_pretrained.pdparams) | -| MobileNetV3_
large_x0_5 | 0.6924 | 0.8852 | 7.49315 | 0.138 | 2.67 | 11 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/legendary_models/MobileNetV3_large_x0_5_pretrained.pdparams) | -| MobileNetV3_
large_x0_35 | 0.6432 | 0.8546 | 5.13695 | 0.077 | 2.1 | 8.6 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/legendary_models/MobileNetV3_large_x0_35_pretrained.pdparams) | -| MobileNetV3_
small_x1_25 | 0.7067 | 0.8951 | 9.2745 | 0.195 | 3.62 | 14 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/legendary_models/MobileNetV3_small_x1_25_pretrained.pdparams) | -| MobileNetV3_
small_x1_0 | 0.6824 | 0.8806 | 6.5463 | 0.123 | 2.94 | 12 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/legendary_models/MobileNetV3_small_x1_0_pretrained.pdparams) | -| MobileNetV3_
small_x0_75 | 0.6602 | 0.8633 | 5.28435 | 0.088 | 2.37 | 9.6 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/legendary_models/MobileNetV3_small_x0_75_pretrained.pdparams) | -| MobileNetV3_
small_x0_5 | 0.5921 | 0.8152 | 3.35165 | 0.043 | 1.9 | 7.8 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/legendary_models/MobileNetV3_small_x0_5_pretrained.pdparams) | -| MobileNetV3_
small_x0_35 | 0.5303 | 0.7637 | 2.6352 | 0.026 | 1.66 | 6.9 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/legendary_models/MobileNetV3_small_x0_35_pretrained.pdparams) | -| MobileNetV3_
small_x0_35_ssld | 0.5555 | 0.7771 | 2.6352 | 0.026 | 1.66 | 6.9 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/legendary_models/MobileNetV3_small_x0_35_ssld_pretrained.pdparams) | -| MobileNetV3_
large_x1_0_ssld | 0.7896 | 0.9448 | 19.30835 | 0.45 | 5.47 | 21 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/legendary_models/MobileNetV3_large_x1_0_ssld_pretrained.pdparams) | -| MobileNetV3_small_
x1_0_ssld | 0.7129 | 0.9010 | 6.5463 | 0.123 | 2.94 | 12 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/legendary_models/MobileNetV3_small_x1_0_ssld_pretrained.pdparams) | -| ShuffleNetV2 | 0.6880 | 0.8845 | 10.941 | 0.28 | 2.26 | 9 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/ShuffleNetV2_x1_0_pretrained.pdparams) | -| ShuffleNetV2_
x0_25 | 0.4990 | 0.7379 | 2.329 | 0.03 | 0.6 | 2.7 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/ShuffleNetV2_x0_25_pretrained.pdparams) | -| ShuffleNetV2_
x0_33 | 0.5373 | 0.7705 | 2.64335 | 0.04 | 0.64 | 2.8 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/ShuffleNetV2_x0_33_pretrained.pdparams) | -| ShuffleNetV2_
x0_5 | 0.6032 | 0.8226 | 4.2613 | 0.08 | 1.36 | 5.6 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/ShuffleNetV2_x0_5_pretrained.pdparams) | -| ShuffleNetV2_
x1_5 | 0.7163 | 0.9015 | 19.3522 | 0.58 | 3.47 | 14 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/ShuffleNetV2_x1_5_pretrained.pdparams) | -| ShuffleNetV2_
x2_0 | 0.7315 | 0.9120 | 34.770149 | 1.12 | 7.32 | 28 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/ShuffleNetV2_x2_0_pretrained.pdparams) | -| ShuffleNetV2_
swish | 0.7003 | 0.8917 | 16.023151 | 0.29 | 2.26 | 9.1 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/ShuffleNetV2_swish_pretrained.pdparams) | -| GhostNet_
x0_5 | 0.6688 | 0.8695 | 5.7143 | 0.082 | 2.6 | 10 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/GhostNet_x0_5_pretrained.pdparams) | -| GhostNet_
x1_0 | 0.7402 | 0.9165 | 13.5587 | 0.294 | 5.2 | 20 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/GhostNet_x1_0_pretrained.pdparams) | -| GhostNet_
x1_3 | 0.7579 | 0.9254 | 19.9825 | 0.44 | 7.3 | 29 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/GhostNet_x1_3_pretrained.pdparams) | -| GhostNet_
x1_3_ssld | 0.7938 | 0.9449 | 19.9825 | 0.44 | 7.3 | 29 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/GhostNet_x1_3_ssld_pretrained.pdparams) | - - - -### SEResNeXt与Res2Net系列 - -SEResNeXt与Res2Net系列模型的精度、速度指标如下表所示,更多关于该系列的模型介绍可以参考:[SEResNeXt与Res2Net系列模型文档](./models/SEResNext_and_Res2Net.md)。 - - -| 模型 | Top-1 Acc | Top-5 Acc | time(ms)
bs=1 | time(ms)
bs=4 | Flops(G) | Params(M) | 下载地址 | -|---------------------------|-----------|-----------|-----------------------|----------------------|----------|-----------|----------------------------------------------------------------------------------------------------| -| Res2Net50_
26w_4s | 0.7933 | 0.9457 | 4.47188 | 9.65722 | 8.52 | 25.7 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/Res2Net50_26w_4s_pretrained.pdparams) | -| Res2Net50_vd_
26w_4s | 0.7975 | 0.9491 | 4.52712 | 9.93247 | 8.37 | 25.06 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/Res2Net50_vd_26w_4s_pretrained.pdparams) | -| Res2Net50_
14w_8s | 0.7946 | 0.9470 | 5.4026 | 10.60273 | 9.01 | 25.72 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/Res2Net50_14w_8s_pretrained.pdparams) | -| Res2Net101_vd_
26w_4s | 0.8064 | 0.9522 | 8.08729 | 17.31208 | 16.67 | 45.22 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/Res2Net101_vd_26w_4s_pretrained.pdparams) | -| Res2Net200_vd_
26w_4s | 0.8121 | 0.9571 | 14.67806 | 32.35032 | 31.49 | 76.21 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/Res2Net200_vd_26w_4s_pretrained.pdparams) | -| Res2Net200_vd_
26w_4s_ssld | 0.8513 | 0.9742 | 14.67806 | 32.35032 | 31.49 | 76.21 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/Res2Net200_vd_26w_4s_ssld_pretrained.pdparams) | -| ResNeXt50_
32x4d | 0.7775 | 0.9382 | 7.56327 | 10.6134 | 8.02 | 23.64 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/ResNeXt50_32x4d_pretrained.pdparams) | -| ResNeXt50_vd_
32x4d | 0.7956 | 0.9462 | 7.62044 | 11.03385 | 8.5 | 23.66 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/ResNeXt50_vd_32x4d_pretrained.pdparams) | -| ResNeXt50_
64x4d | 0.7843 | 0.9413 | 13.80962 | 18.4712 | 15.06 | 42.36 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/ResNeXt50_64x4d_pretrained.pdparams) | -| ResNeXt50_vd_
64x4d | 0.8012 | 0.9486 | 13.94449 | 18.88759 | 15.54 | 42.38 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/ResNeXt50_vd_64x4d_pretrained.pdparams) | -| ResNeXt101_
32x4d | 0.7865 | 0.9419 | 16.21503 | 19.96568 | 15.01 | 41.54 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/ResNeXt101_32x4d_pretrained.pdparams) | -| ResNeXt101_vd_
32x4d | 0.8033 | 0.9512 | 16.28103 | 20.25611 | 15.49 | 41.56 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/ResNeXt101_vd_32x4d_pretrained.pdparams) | -| ResNeXt101_
64x4d | 0.7835 | 0.9452 | 30.4788 | 36.29801 | 29.05 | 78.12 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/ResNeXt101_64x4d_pretrained.pdparams) | -| ResNeXt101_vd_
64x4d | 0.8078 | 0.9520 | 30.40456 | 36.77324 | 29.53 | 78.14 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/ResNeXt101_vd_64x4d_pretrained.pdparams) | -| ResNeXt152_
32x4d | 0.7898 | 0.9433 | 24.86299 | 29.36764 | 22.01 | 56.28 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/ResNeXt152_32x4d_pretrained.pdparams) | -| ResNeXt152_vd_
32x4d | 0.8072 | 0.9520 | 25.03258 | 30.08987 | 22.49 | 56.3 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/ResNeXt152_vd_32x4d_pretrained.pdparams) | -| ResNeXt152_
64x4d | 0.7951 | 0.9471 | 46.7564 | 56.34108 | 43.03 | 107.57 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/ResNeXt152_64x4d_pretrained.pdparams) | -| ResNeXt152_vd_
64x4d | 0.8108 | 0.9534 | 47.18638 | 57.16257 | 43.52 | 107.59 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/ResNeXt152_vd_64x4d_pretrained.pdparams) | -| SE_ResNet18_vd | 0.7333 | 0.9138 | 1.7691 | 4.19877 | 4.14 | 11.8 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/SE_ResNet18_vd_pretrained.pdparams) | -| SE_ResNet34_vd | 0.7651 | 0.9320 | 2.88559 | 7.03291 | 7.84 | 21.98 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/SE_ResNet34_vd_pretrained.pdparams) | -| SE_ResNet50_vd | 0.7952 | 0.9475 | 4.28393 | 10.38846 | 8.67 | 28.09 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/SE_ResNet50_vd_pretrained.pdparams) | -| SE_ResNeXt50_
32x4d | 0.7844 | 0.9396 | 8.74121 | 13.563 | 8.02 | 26.16 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/SE_ResNeXt50_32x4d_pretrained.pdparams) | -| SE_ResNeXt50_vd_
32x4d | 0.8024 | 0.9489 | 9.17134 | 14.76192 | 10.76 | 26.28 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/SE_ResNeXt50_vd_32x4d_pretrained.pdparams) | -| SE_ResNeXt101_
32x4d | 0.7939 | 0.9443 | 18.82604 | 25.31814 | 15.02 | 46.28 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/SE_ResNeXt101_32x4d_pretrained.pdparams) | -| SENet154_vd | 0.8140 | 0.9548 | 53.79794 | 66.31684 | 45.83 | 114.29 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/SENet154_vd_pretrained.pdparams) | - - - -### DPN与DenseNet系列 - -DPN与DenseNet系列模型的精度、速度指标如下表所示,更多关于该系列的模型介绍可以参考:[DPN与DenseNet系列模型文档](./models/DPN_DenseNet.md)。 - - -| 模型 | Top-1 Acc | Top-5 Acc | time(ms)
bs=1 | time(ms)
bs=4 | Flops(G) | Params(M) | 下载地址 | -|-------------|-----------|-----------|-----------------------|----------------------|----------|-----------|--------------------------------------------------------------------------------------| -| DenseNet121 | 0.7566 | 0.9258 | 4.40447 | 9.32623 | 5.69 | 7.98 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/DenseNet121_pretrained.pdparams) | -| DenseNet161 | 0.7857 | 0.9414 | 10.39152 | 22.15555 | 15.49 | 28.68 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/DenseNet161_pretrained.pdparams) | -| DenseNet169 | 0.7681 | 0.9331 | 6.43598 | 12.98832 | 6.74 | 14.15 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/DenseNet169_pretrained.pdparams) | -| DenseNet201 | 0.7763 | 0.9366 | 8.20652 | 17.45838 | 8.61 | 20.01 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/DenseNet201_pretrained.pdparams) | -| DenseNet264 | 0.7796 | 0.9385 | 12.14722 | 26.27707 | 11.54 | 33.37 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/DenseNet264_pretrained.pdparams) | -| DPN68 | 0.7678 | 0.9343 | 11.64915 | 12.82807 | 4.03 | 10.78 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/DPN68_pretrained.pdparams) | -| DPN92 | 0.7985 | 0.9480 | 18.15746 | 23.87545 | 12.54 | 36.29 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/DPN92_pretrained.pdparams) | -| DPN98 | 0.8059 | 0.9510 | 21.18196 | 33.23925 | 22.22 | 58.46 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/DPN98_pretrained.pdparams) | -| DPN107 | 0.8089 | 0.9532 | 27.62046 | 52.65353 | 35.06 | 82.97 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/DPN107_pretrained.pdparams) | -| DPN131 | 0.8070 | 0.9514 | 28.33119 | 46.19439 | 30.51 | 75.36 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/DPN131_pretrained.pdparams) | - - - - -### HRNet系列 - -HRNet系列模型的精度、速度指标如下表所示,更多关于该系列的模型介绍可以参考:[HRNet系列模型文档](./models/HRNet.md)。 - - -| 模型 | Top-1 Acc | Top-5 Acc | time(ms)
bs=1 | time(ms)
bs=4 | Flops(G) | Params(M) | 下载地址 | -|-------------|-----------|-----------|------------------|------------------|----------|-----------|--------------------------------------------------------------------------------------| -| HRNet_W18_C | 0.7692 | 0.9339 | 7.40636 | 13.29752 | 4.14 | 21.29 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/legendary_models/HRNet_W18_C_pretrained.pdparams) | -| HRNet_W18_C_ssld | 0.81162 | 0.95804 | 7.40636 | 13.29752 | 4.14 | 21.29 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/legendary_models/HRNet_W18_C_ssld_pretrained.pdparams) | -| HRNet_W30_C | 0.7804 | 0.9402 | 9.57594 | 17.35485 | 16.23 | 37.71 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/legendary_models/HRNet_W30_C_pretrained.pdparams) | -| HRNet_W32_C | 0.7828 | 0.9424 | 9.49807 | 17.72921 | 17.86 | 41.23 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/legendary_models/HRNet_W32_C_pretrained.pdparams) | -| HRNet_W40_C | 0.7877 | 0.9447 | 12.12202 | 25.68184 | 25.41 | 57.55 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/legendary_models/HRNet_W40_C_pretrained.pdparams) | -| HRNet_W44_C | 0.7900 | 0.9451 | 13.19858 | 32.25202 | 29.79 | 67.06 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/legendary_models/HRNet_W44_C_pretrained.pdparams) | -| HRNet_W48_C | 0.7895 | 0.9442 | 13.70761 | 34.43572 | 34.58 | 77.47 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/legendary_models/HRNet_W48_C_pretrained.pdparams) | -| HRNet_W48_C_ssld | 0.8363 | 0.9682 | 13.70761 | 34.43572 | 34.58 | 77.47 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/legendary_models/HRNet_W48_C_ssld_pretrained.pdparams) | -| HRNet_W64_C | 0.7930 | 0.9461 | 17.57527 | 47.9533 | 57.83 | 128.06 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/legendary_models/HRNet_W64_C_pretrained.pdparams) | -| SE_HRNet_W64_C_ssld | 0.8475 | 0.9726 | 31.69770 | 94.99546 | 57.83 | 128.97 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/legendary_models/SE_HRNet_W64_C_ssld_pretrained.pdparams) | - - - -### Inception系列 - -Inception系列模型的精度、速度指标如下表所示,更多关于该系列的模型介绍可以参考:[Inception系列模型文档](./models/Inception.md)。 - -| 模型 | Top-1 Acc | Top-5 Acc | time(ms)
bs=1 | time(ms)
bs=4 | Flops(G) | Params(M) | 下载地址 | -|--------------------|-----------|-----------|-----------------------|----------------------|----------|-----------|---------------------------------------------------------------------------------------------| -| GoogLeNet | 0.7070 | 0.8966 | 1.88038 | 4.48882 | 2.88 | 8.46 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/GoogLeNet_pretrained.pdparams) | -| Xception41 | 0.7930 | 0.9453 | 4.96939 | 17.01361 | 16.74 | 22.69 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/Xception41_pretrained.pdparams) | -| Xception41_deeplab | 0.7955 | 0.9438 | 5.33541 | 17.55938 | 18.16 | 26.73 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/Xception41_deeplab_pretrained.pdparams) | -| Xception65 | 0.8100 | 0.9549 | 7.26158 | 25.88778 | 25.95 | 35.48 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/Xception65_pretrained.pdparams) | -| Xception65_deeplab | 0.8032 | 0.9449 | 7.60208 | 26.03699 | 27.37 | 39.52 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/Xception65_deeplab_pretrained.pdparams) | -| Xception71 | 0.8111 | 0.9545 | 8.72457 | 31.55549 | 31.77 | 37.28 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/Xception71_pretrained.pdparams) | -| InceptionV3 | 0.7914 | 0.9459 | 6.64054 | 13.53630 | 11.46 | 23.83 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/legendary_models/InceptionV3_pretrained.pdparams) | -| InceptionV4 | 0.8077 | 0.9526 | 12.99342 | 25.23416 | 24.57 | 42.68 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/InceptionV4_pretrained.pdparams) | - - - -### EfficientNet与ResNeXt101_wsl系列 - -EfficientNet与ResNeXt101_wsl系列模型的精度、速度指标如下表所示,更多关于该系列的模型介绍可以参考:[EfficientNet与ResNeXt101_wsl系列模型文档](./models/EfficientNet_and_ResNeXt101_wsl.md)。 - - -| 模型 | Top-1 Acc | Top-5 Acc | time(ms)
bs=1 | time(ms)
bs=4 | Flops(G) | Params(M) | 下载地址 | -|---------------------------|-----------|-----------|------------------|------------------|----------|-----------|----------------------------------------------------------------------------------------------------| -| ResNeXt101_
32x8d_wsl | 0.8255 | 0.9674 | 18.52528 | 34.25319 | 29.14 | 78.44 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/ResNeXt101_32x8d_wsl_pretrained.pdparams) | -| ResNeXt101_
32x16d_wsl | 0.8424 | 0.9726 | 25.60395 | 71.88384 | 57.55 | 152.66 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/ResNeXt101_32x16d_wsl_pretrained.pdparams) | -| ResNeXt101_
32x32d_wsl | 0.8497 | 0.9759 | 54.87396 | 160.04337 | 115.17 | 303.11 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/ResNeXt101_32x32d_wsl_pretrained.pdparams) | -| ResNeXt101_
32x48d_wsl | 0.8537 | 0.9769 | 99.01698256 | 315.91261 | 173.58 | 456.2 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/ResNeXt101_32x48d_wsl_pretrained.pdparams) | -| Fix_ResNeXt101_
32x48d_wsl | 0.8626 | 0.9797 | 160.0838242 | 595.99296 | 354.23 | 456.2 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/Fix_ResNeXt101_32x48d_wsl_pretrained.pdparams) | -| EfficientNetB0 | 0.7738 | 0.9331 | 3.442 | 6.11476 | 0.72 | 5.1 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/EfficientNetB0_pretrained.pdparams) | -| EfficientNetB1 | 0.7915 | 0.9441 | 5.3322 | 9.41795 | 1.27 | 7.52 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/EfficientNetB1_pretrained.pdparams) | -| EfficientNetB2 | 0.7985 | 0.9474 | 6.29351 | 10.95702 | 1.85 | 8.81 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/EfficientNetB2_pretrained.pdparams) | -| EfficientNetB3 | 0.8115 | 0.9541 | 7.67749 | 16.53288 | 3.43 | 11.84 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/EfficientNetB3_pretrained.pdparams) | -| EfficientNetB4 | 0.8285 | 0.9623 | 12.15894 | 30.94567 | 8.29 | 18.76 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/EfficientNetB4_pretrained.pdparams) | -| EfficientNetB5 | 0.8362 | 0.9672 | 20.48571 | 61.60252 | 19.51 | 29.61 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/EfficientNetB5_pretrained.pdparams) | -| EfficientNetB6 | 0.8400 | 0.9688 | 32.62402 | - | 36.27 | 42 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/EfficientNetB6_pretrained.pdparams) | -| EfficientNetB7 | 0.8430 | 0.9689 | 53.93823 | - | 72.35 | 64.92 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/EfficientNetB7_pretrained.pdparams) | -| EfficientNetB0_
small | 0.7580 | 0.9258 | 2.3076 | 4.71886 | 0.72 | 4.65 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/EfficientNetB0_small_pretrained.pdparams) | - - - -### ResNeSt与RegNet系列 - -ResNeSt与RegNet系列模型的精度、速度指标如下表所示,更多关于该系列的模型介绍可以参考:[ResNeSt与RegNet系列模型文档](./models/ResNeSt_RegNet.md)。 - - -| 模型 | Top-1 Acc | Top-5 Acc | time(ms)
bs=1 | time(ms)
bs=4 | Flops(G) | Params(M) | 下载地址 | -|------------------------|-----------|-----------|------------------|------------------|----------|-----------|------------------------------------------------------------------------------------------------------| -| ResNeSt50_
fast_1s1x64d | 0.8035 | 0.9528 | 3.45405 | 8.72680 | 8.68 | 26.3 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/ResNeSt50_fast_1s1x64d_pretrained.pdparams) | -| ResNeSt50 | 0.8083 | 0.9542 | 6.69042 | 8.01664 | 10.78 | 27.5 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/ResNeSt50_pretrained.pdparams) | -| RegNetX_4GF | 0.785 | 0.9416 | 6.46478 | 11.19862 | 8 | 22.1 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/RegNetX_4GF_pretrained.pdparams) | - - - -### ViT_and_DeiT系列 - -ViT(Vision Transformer)与DeiT(Data-efficient Image Transformers)系列模型的精度、速度指标如下表所示. 更多关于该系列模型的介绍可以参考: [ViT_and_DeiT系列模型文档](./models/ViT_and_DeiT.md)。 - - -| 模型 | Top-1 Acc | Top-5 Acc | time(ms)
bs=1 | time(ms)
bs=4 | Flops(G) | Params(M) | 下载地址 | -|------------------------|-----------|-----------|------------------|------------------|----------|------------------------|------------------------| -| ViT_small_
patch16_224 | 0.7769 | 0.9342 | - | - | | | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/ViT_small_patch16_224_pretrained.pdparams) | -| ViT_base_
patch16_224 | 0.8195 | 0.9617 | - | - | | 86 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/ViT_base_patch16_224_pretrained.pdparams) | -| ViT_base_
patch16_384 | 0.8414 | 0.9717 | - | - | | | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/ViT_base_patch16_384_pretrained.pdparams) | -| ViT_base_
patch32_384 | 0.8176 | 0.9613 | - | - | | | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/ViT_base_patch32_384_pretrained.pdparams) | -| ViT_large_
patch16_224 | 0.8323 | 0.9650 | - | - | | 307 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/ViT_large_patch16_224_pretrained.pdparams) | -| ViT_large_
patch16_384 | 0.8513 | 0.9736 | - | - | | | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/ViT_large_patch16_384_pretrained.pdparams) | -| ViT_large_
patch32_384 | 0.8153 | 0.9608 | - | - | | | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/ViT_large_patch32_384_pretrained.pdparams) | -| | | | | | | | | - - -| 模型 | Top-1 Acc | Top-5 Acc | time(ms)
bs=1 | time(ms)
bs=4 | Flops(G) | Params(M) | 下载地址 | -|------------------------|-----------|-----------|------------------|------------------|----------|------------------------|------------------------| -| DeiT_tiny_
patch16_224 | 0.718 | 0.910 | - | - | | 5 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/DeiT_tiny_patch16_224_pretrained.pdparams) | -| DeiT_small_
patch16_224 | 0.796 | 0.949 | - | - | | 22 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/DeiT_small_patch16_224_pretrained.pdparams) | -| DeiT_base_
patch16_224 | 0.817 | 0.957 | - | - | | 86 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/DeiT_base_patch16_224_pretrained.pdparams) | -| DeiT_base_
patch16_384 | 0.830 | 0.962 | - | - | | 87 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/DeiT_base_patch16_384_pretrained.pdparams) | -| DeiT_tiny_
distilled_patch16_224 | 0.741 | 0.918 | - | - | | 6 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/DeiT_tiny_distilled_patch16_224_pretrained.pdparams) | -| DeiT_small_
distilled_patch16_224 | 0.809 | 0.953 | - | - | | 22 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/DeiT_small_distilled_patch16_224_pretrained.pdparams) | -| DeiT_base_
distilled_patch16_224 | 0.831 | 0.964 | - | - | | 87 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/DeiT_base_distilled_patch16_224_pretrained.pdparams) | -| DeiT_base_
distilled_patch16_384 | 0.851 | 0.973 | - | - | | 88 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/DeiT_base_distilled_patch16_384_pretrained.pdparams) | -| | | | | | | | | - - - -### RepVGG系列 - -关于RepVGG系列模型的精度、速度指标如下表所示,更多介绍可以参考:[RepVGG系列模型文档](./models/RepVGG.md)。 - - -| 模型 | Top-1 Acc | Top-5 Acc | time(ms)
bs=1 | time(ms)
bs=4 | Flops(G) | Params(M) | 下载地址 | -|------------------------|-----------|-----------|------------------|------------------|----------|-----------|------------------------------------------------------------------------------------------------------| -| RepVGG_A0 | 0.7131 | 0.9016 | | | | | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/RepVGG_A0_pretrained.pdparams) | -| RepVGG_A1 | 0.7380 | 0.9146 | | | | | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/RepVGG_A1_pretrained.pdparams) | -| RepVGG_A2 | 0.7571 | 0.9264 | | | | | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/RepVGG_A2_pretrained.pdparams) | -| RepVGG_B0 | 0.7450 | 0.9213 | | | | | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/RepVGG_B0_pretrained.pdparams) | -| RepVGG_B1 | 0.7773 | 0.9385 | | | | | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/RepVGG_B1_pretrained.pdparams) | -| RepVGG_B2 | 0.7813 | 0.9410 | | | | | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/RepVGG_B2_pretrained.pdparams) | -| RepVGG_B1g2 | 0.7732 | 0.9359 | | | | | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/RepVGG_B1g2_pretrained.pdparams) | -| RepVGG_B1g4 | 0.7675 | 0.9335 | | | | | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/RepVGG_B1g4_pretrained.pdparams) | -| RepVGG_B2g4 | 0.7881 | 0.9448 | | | | | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/RepVGG_B2g4_pretrained.pdparams) | -| RepVGG_B3g4 | 0.7965 | 0.9485 | | | | | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/RepVGG_B3g4_pretrained.pdparams) | - - - -### MixNet系列 - -关于MixNet系列模型的精度、速度指标如下表所示,更多介绍可以参考:[MixNet系列模型文档](./models/MixNet.md)。 - -| 模型 | Top-1 Acc | Top-5 Acc | time(ms)
bs=1 | time(ms)
bs=4 | Flops(M) | Params(M) | 下载地址 | -| -------- | --------- | --------- | ---------------- | ---------------- | -------- | --------- | ------------------------------------------------------------ | -| MixNet_S | 0.7628 | 0.9299 | | | 252.977 | 4.167 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/MixNet_S_pretrained.pdparams) | -| MixNet_M | 0.7767 | 0.9364 | | | 357.119 | 5.065 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/MixNet_M_pretrained.pdparams) | -| MixNet_L | 0.7860 | 0.9437 | | | 579.017 | 7.384 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/MixNet_L_pretrained.pdparams) | - - - -### ReXNet系列 - -关于ReXNet系列模型的精度、速度指标如下表所示,更多介绍可以参考:[ReXNet系列模型文档](./models/ReXNet.md)。 - -| 模型 | Top-1 Acc | Top-5 Acc | time(ms)
bs=1 | time(ms)
bs=4 | Flops(G) | Params(M) | 下载地址 | -| ---------- | --------- | --------- | ---------------- | ---------------- | -------- | --------- | ------------------------------------------------------------ | -| ReXNet_1_0 | 0.7746 | 0.9370 | | | 0.415 | 4.838 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/ReXNet_1_0_pretrained.pdparams) | -| ReXNet_1_3 | 0.7913 | 0.9464 | | | 0.683 | 7.611 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/ReXNet_1_3_pretrained.pdparams) | -| ReXNet_1_5 | 0.8006 | 0.9512 | | | 0.900 | 9.791 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/ReXNet_1_5_pretrained.pdparams) | -| ReXNet_2_0 | 0.8122 | 0.9536 | | | 1.561 | 16.449 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/ReXNet_2_0_pretrained.pdparams) | -| ReXNet_3_0 | 0.8209 | 0.9612 | | | 3.445 | 34.833 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/ReXNet_3_0_pretrained.pdparams) | - - - -### SwinTransformer系列 - -关于SwinTransformer系列模型的精度、速度指标如下表所示,更多介绍可以参考:[SwinTransformer系列模型文档](./models/SwinTransformer.md)。 - -| 模型 | Top-1 Acc | Top-5 Acc | time(ms)
bs=1 | time(ms)
bs=4 | Flops(G) | Params(M) | 下载地址 | -| ---------- | --------- | --------- | ---------------- | ---------------- | -------- | --------- | ------------------------------------------------------------ | -| SwinTransformer_tiny_patch4_window7_224 | 0.8069 | 0.9534 | | | 4.5 | 28 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/SwinTransformer_tiny_patch4_window7_224_pretrained.pdparams) | -| SwinTransformer_small_patch4_window7_224 | 0.8275 | 0.9613 | | | 8.7 | 50 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/SwinTransformer_small_patch4_window7_224_pretrained.pdparams) | -| SwinTransformer_base_patch4_window7_224 | 0.8300 | 0.9626 | | | 15.4 | 88 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/SwinTransformer_base_patch4_window7_224_pretrained.pdparams) | -| SwinTransformer_base_patch4_window12_384 | 0.8439 | 0.9693 | | | 47.1 | 88 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/SwinTransformer_base_patch4_window12_384_pretrained.pdparams) | -| SwinTransformer_base_patch4_window7_224[1] | 0.8487 | 0.9746 | | | 15.4 | 88 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/SwinTransformer_base_patch4_window7_224_22kto1k_pretrained.pdparams) | -| SwinTransformer_base_patch4_window12_384[1] | 0.8642 | 0.9807 | | | 47.1 | 88 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/SwinTransformer_base_patch4_window12_384_22kto1k_pretrained.pdparams) | -| SwinTransformer_large_patch4_window7_224[1] | 0.8596 | 0.9783 | | | 34.5 | 197 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/SwinTransformer_large_patch4_window7_224_22kto1k_pretrained.pdparams) | -| SwinTransformer_large_patch4_window12_384[1] | 0.8719 | 0.9823 | | | 103.9 | 197 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/SwinTransformer_large_patch4_window12_384_22kto1k_pretrained.pdparams) | - -[1]:基于ImageNet22k数据集预训练,然后在ImageNet1k数据集迁移学习得到。 - - -### LeViT系列 - -关于LeViT系列模型的精度、速度指标如下表所示,更多介绍可以参考:[LeViT系列模型文档](./models/LeViT.md)。 - -| 模型 | Top-1 Acc | Top-5 Acc | time(ms)
bs=1 | time(ms)
bs=4 | Flops(M) | Params(M) | 下载地址 | -| ---------- | --------- | --------- | ---------------- | ---------------- | -------- | --------- | ------------------------------------------------------------ | -| LeViT_128S | 0.7598 | 0.9269 | | | 305 | 7.8 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/LeViT_128S_pretrained.pdparams) | -| LeViT_128 | 0.7810 | 0.9371 | | | 406 | 9.2 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/LeViT_128_pretrained.pdparams) | -| LeViT_192 | 0.7934 | 0.9446 | | | 658 | 11 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/LeViT_192_pretrained.pdparams) | -| LeViT_256 | 0.8085 | 0.9497 | | | 1120 | 19 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/LeViT_256_pretrained.pdparams) | -| LeViT_384 | 0.8191 | 0.9551 | | | 2353 | 39 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/LeViT_384_pretrained.pdparams) | - -**注**:与Reference的精度差异源于数据预处理不同及未使用蒸馏的head作为输出。 - - -### Twins系列 - -关于Twins系列模型的精度、速度指标如下表所示,更多介绍可以参考:[Twins系列模型文档](./models/Twins.md)。 - -| 模型 | Top-1 Acc | Top-5 Acc | time(ms)
bs=1 | time(ms)
bs=4 | Flops(G) | Params(M) | 下载地址 | -| ---------- | --------- | --------- | ---------------- | ---------------- | -------- | --------- | ------------------------------------------------------------ | -| pcpvt_small | 0.8082 | 0.9552 | | |3.7 | 24.1 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/pcpvt_small_pretrained.pdparams) | -| pcpvt_base | 0.8242 | 0.9619 | | | 6.4 | 43.8 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/pcpvt_base_pretrained.pdparams) | -| pcpvt_large | 0.8273 | 0.9650 | | | 9.5 | 60.9 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/pcpvt_large_pretrained.pdparams) | -| alt_gvt_small | 0.8140 | 0.9546 | | |2.8 | 24 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/alt_gvt_small_pretrained.pdparams) | -| alt_gvt_base | 0.8294 | 0.9621 | | | 8.3 | 56 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/alt_gvt_base_pretrained.pdparams) | -| alt_gvt_large | 0.8331 | 0.9642 | | | 14.8 | 99.2 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/alt_gvt_large_pretrained.pdparams) | - -**注**:与Reference的精度差异源于数据预处理不同。 - - -### HarDNet系列 - -关于HarDNet系列模型的精度、速度指标如下表所示,更多介绍可以参考:[HarDNet系列模型文档](./models/HarDNet.md)。 - -| 模型 | Top-1 Acc | Top-5 Acc | time(ms)
bs=1 | time(ms)
bs=4 | Flops(G) | Params(M) | 下载地址 | -| ---------- | --------- | --------- | ---------------- | ---------------- | -------- | --------- | ------------------------------------------------------------ | -| HarDNet39_ds | 0.7133 |0.8998 | | | 0.4 | 3.5 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/HarDNet39_ds_pretrained.pdparams) | -| HarDNet68_ds |0.7362 | 0.9152 | | | 0.8 | 4.2 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/HarDNet68_ds_pretrained.pdparams) | -| HarDNet68| 0.7546 | 0.9265 | | | 4.3 | 17.6 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/HarDNet68_pretrained.pdparams) | -| HarDNet85 | 0.7744 | 0.9355 | | | 9.1 | 36.7 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/HarDNet85_pretrained.pdparams) | - - -### DLA系列 - -关于 DLA系列模型的精度、速度指标如下表所示,更多介绍可以参考:[DLA系列模型文档](./models/DLA.md)。 - -| 模型 | Top-1 Acc | Top-5 Acc | time(ms)
bs=1 | time(ms)
bs=4 | Flops(G) | Params(M) | 下载地址 | -| ---------- | --------- | --------- | ---------------- | ---------------- | -------- | --------- | ------------------------------------------------------------ | -| DLA102 | 0.7893 |0.9452 | | | 7.2 | 33.3 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/DLA102_pretrained.pdparams) | -| DLA102x2 |0.7885 | 0.9445 | | | 9.3 | 41.4 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/DLA102x2_pretrained.pdparams) | -| DLA102x| 0.781 | 0.9400 | | | 5.9 | 26.4 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/DLA102x_pretrained.pdparams) | -| DLA169 | 0.7809 | 0.9409 | | | 11.6 | 53.5 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/DLA169_pretrained.pdparams) | -| DLA34 | 0.7603 | 0.9298 | | | 3.1 | 15.8 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/DLA34_pretrained.pdparams) | -| DLA46_c |0.6321 | 0.853 | | | 0.5 | 1.3 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/DLA46_c_pretrained.pdparams) | -| DLA60 | 0.7610 | 0.9292 | | | 4.2 | 22.0 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/DLA60_pretrained.pdparams) | -| DLA60x_c | 0.6645 | 0.8754 | | | 0.6 | 1.3 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/DLA60x_c_pretrained.pdparams) | -| DLA60x | 0.7753 | 0.9378 | | | 3.5 | 17.4 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/DLA60x_pretrained.pdparams) | - - -### RedNet系列 - -关于RedNet系列模型的精度、速度指标如下表所示,更多介绍可以参考:[RedNet系列模型文档](./models/RedNet.md)。 - -| 模型 | Top-1 Acc | Top-5 Acc | time(ms)
bs=1 | time(ms)
bs=4 | Flops(G) | Params(M) | 下载地址 | -| ---------- | --------- | --------- | ---------------- | ---------------- | -------- | --------- | ------------------------------------------------------------ | -| RedNet26 | 0.7595 |0.9319 | | | 1.7 | 9.2 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/RedNet26_pretrained.pdparams) | -| RedNet38 |0.7747 | 0.9356 | | | 2.2 | 12.4 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/RedNet38_pretrained.pdparams) | -| RedNet50| 0.7833 | 0.9417 | | | 2.7 | 15.5 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/RedNet50_pretrained.pdparams) | -| RedNet101 | 0.7894 | 0.9436 | | | 4.7 | 25.7 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/RedNet101_pretrained.pdparams) | -| RedNet152 | 0.7917 | 0.9440 | | | 6.8 | 34.0 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/RedNet152_pretrained.pdparams) | - - -### TNT系列 - -关于TNT系列模型的精度、速度指标如下表所示,更多介绍可以参考:[TNT系列模型文档](./models/TNT.md)。 - -| 模型 | Top-1 Acc | Top-5 Acc | time(ms)
bs=1 | time(ms)
bs=4 | Flops(G) | Params(M) | 下载地址 | -| ---------- | --------- | --------- | ---------------- | ---------------- | -------- | --------- | ------------------------------------------------------------ | -| TNT_small | 0.8121 |0.9563 | | | 5.2 | 23.8 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/TNT_small_pretrained.pdparams) | | - -**注**:TNT模型的数据预处理部分`NormalizeImage`中的`mean`与`std`均为0.5。 - - - -### 其他模型 - -关于AlexNet、SqueezeNet系列、VGG系列、DarkNet53等模型的精度、速度指标如下表所示,更多介绍可以参考:[其他模型文档](./models/Others.md)。 - - -| 模型 | Top-1 Acc | Top-5 Acc | time(ms)
bs=1 | time(ms)
bs=4 | Flops(G) | Params(M) | 下载地址 | -|------------------------|-----------|-----------|------------------|------------------|----------|-----------|------------------------------------------------------------------------------------------------------| -| AlexNet | 0.567 | 0.792 | 1.44993 | 2.46696 | 1.370 | 61.090 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/AlexNet_pretrained.pdparams) | -| SqueezeNet1_0 | 0.596 | 0.817 | 0.96736 | 2.53221 | 1.550 | 1.240 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/SqueezeNet1_0_pretrained.pdparams) | -| SqueezeNet1_1 | 0.601 | 0.819 | 0.76032 | 1.877 | 0.690 | 1.230 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/SqueezeNet1_1_pretrained.pdparams) | -| VGG11 | 0.693 | 0.891 | 3.90412 | 9.51147 | 15.090 | 132.850 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/legendary_models/VGG11_pretrained.pdparams) | -| VGG13 | 0.700 | 0.894 | 4.64684 | 12.61558 | 22.480 | 133.030 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/legendary_models/VGG13_pretrained.pdparams) | -| VGG16 | 0.720 | 0.907 | 5.61769 | 16.40064 | 30.810 | 138.340 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/legendary_models/VGG16_pretrained.pdparams) | -| VGG19 | 0.726 | 0.909 | 6.65221 | 20.4334 | 39.130 | 143.650 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/legendary_models/VGG19_pretrained.pdparams) | -| DarkNet53 | 0.780 | 0.941 | 4.10829 | 12.1714 | 18.580 | 41.600 | [下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/DarkNet53_pretrained.pdparams) | diff --git a/docs/zh_CN/Makefile b/docs/zh_CN/Makefile deleted file mode 100644 index d4bb2cbb..00000000 --- a/docs/zh_CN/Makefile +++ /dev/null @@ -1,20 +0,0 @@ -# Minimal makefile for Sphinx documentation -# - -# You can set these variables from the command line, and also -# from the environment for the first two. -SPHINXOPTS ?= -SPHINXBUILD ?= sphinx-build -SOURCEDIR = . -BUILDDIR = _build - -# Put it first so that "make" without argument is like "make help". -help: - @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) - -.PHONY: help Makefile - -# Catch-all target: route all unknown targets to Sphinx using the new -# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). -%: Makefile - @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) diff --git a/docs/zh_CN_tmp/advanced_tutorials/DataAugmentation.md b/docs/zh_CN/advanced_tutorials/DataAugmentation.md similarity index 100% rename from docs/zh_CN_tmp/advanced_tutorials/DataAugmentation.md rename to docs/zh_CN/advanced_tutorials/DataAugmentation.md diff --git a/docs/zh_CN_tmp/advanced_tutorials/code_overview.md b/docs/zh_CN/advanced_tutorials/code_overview.md similarity index 100% rename from docs/zh_CN_tmp/advanced_tutorials/code_overview.md rename to docs/zh_CN/advanced_tutorials/code_overview.md diff --git a/docs/zh_CN/advanced_tutorials/distillation/distillation.md b/docs/zh_CN/advanced_tutorials/distillation/distillation.md deleted file mode 100644 index cfbdbac2..00000000 --- a/docs/zh_CN/advanced_tutorials/distillation/distillation.md +++ /dev/null @@ -1,253 +0,0 @@ - -# 知识蒸馏 - -## 一、模型压缩方法简介 - -近年来,深度神经网络在计算机视觉、自然语言处理等领域被验证是一种极其有效的解决问题的方法。通过构建合适的神经网络,加以训练,最终网络模型的性能指标基本上都会超过传统算法。 - -在数据量足够大的情况下,通过合理构建网络模型的方式增加其参数量,可以显著改善模型性能,但是这又带来了模型复杂度急剧提升的问题。大模型在实际场景中使用的成本较高。 - -深度神经网络一般有较多的参数冗余,目前有几种主要的方法对模型进行压缩,减小其参数量。如裁剪、量化、知识蒸馏等,其中知识蒸馏是指使用教师模型(teacher model)去指导学生模型(student model)学习特定任务,保证小模型在参数量不变的情况下,得到比较大的性能提升,甚至获得与大模型相似的精度指标[1]。PaddleClas融合已有的蒸馏方法[2,3],提供了一种简单的半监督标签知识蒸馏方案(SSLD,Simple Semi-supervised Label Distillation),基于ImageNet1k分类数据集,在ResNet_vd以及MobileNet系列上的精度均有超过3%的绝对精度提升,具体指标如下图所示。 - - -![](../../../images/distillation/distillation_perform_s.jpg) - - -## 二、SSLD 蒸馏策略 - -### 2.1 简介 - -SSLD的流程图如下图所示。 - -![](../../../images/distillation/ppcls_distillation.png) - -首先,我们从ImageNet22k中挖掘出了近400万张图片,同时与ImageNet-1k训练集整合在一起,得到了一个新的包含500万张图片的数据集。然后,我们将学生模型与教师模型组合成一个新的网络,该网络分别输出学生模型和教师模型的预测分布,与此同时,固定教师模型整个网络的梯度,而学生模型可以做正常的反向传播。最后,我们将两个模型的logits经过softmax激活函数转换为soft label,并将二者的soft label做JS散度作为损失函数,用于蒸馏模型训练。下面以MobileNetV3(该模型直接训练,精度为75.3%)的知识蒸馏为例,介绍该方案的核心关键点(baseline为79.12%的ResNet50_vd模型蒸馏MobileNetV3,训练集为ImageNet1k训练集,loss为cross entropy loss,迭代轮数为120epoch,精度指标为75.6%)。 - -* 教师模型的选择。在进行知识蒸馏时,如果教师模型与学生模型的结构差异太大,蒸馏得到的结果反而不会有太大收益。相同结构下,精度更高的教师模型对结果也有很大影响。相比于79.12%的ResNet50_vd教师模型,使用82.4%的ResNet50_vd教师模型可以带来0.4%的绝对精度收益(`75.6%->76.0%`)。 - -* 改进loss计算方法。分类loss计算最常用的方法就是cross entropy loss,我们经过实验发现,在使用soft label进行训练时,相对于cross entropy loss,KL div loss对模型性能提升几乎无帮助,但是使用具有对称特性的JS div loss时,在多个蒸馏任务上相比cross entropy loss均有0.2%左右的收益(`76.0%->76.2%`),SSLD中也基于JS div loss展开实验。 - -* 更多的迭代轮数。蒸馏的baseline实验只迭代了120个epoch。实验发现,迭代轮数越多,蒸馏效果越好,最终我们迭代了360epoch,精度指标可以达到77.1%(`76.2%->77.1%`)。 - -* 无需数据集的真值标签,很容易扩展训练集。SSLD的loss在计算过程中,仅涉及到教师和学生模型对于相同图片的处理结果(经过softmax激活函数处理之后的soft label),因此即使图片数据不包含真值标签,也可以用来进行训练并提升模型性能。该蒸馏方案的无标签蒸馏策略也大大提升了学生模型的性能上限(`77.1%->78.5%`)。 - -* ImageNet1k蒸馏finetune。我们仅使用ImageNet1k数据,使用蒸馏方法对上述模型进行finetune,最终仍然可以获得0.4%的性能提升(`78.5%->78.9%`)。 - - - -### 2.2 数据选择 - - -* SSLD蒸馏方案的一大特色就是无需使用图像的真值标签,因此可以任意扩展数据集的大小,考虑到计算资源的限制,我们在这里仅基于ImageNet22k数据集对蒸馏任务的训练集进行扩充。在SSLD蒸馏任务中,我们使用了`Top-k per class`的数据采样方案[3]。具体步骤如下。 - * 训练集去重。我们首先基于SIFT特征相似度匹配的方式对ImageNet22k数据集与ImageNet1k验证集进行去重,防止添加的ImageNet22k训练集中包含ImageNet1k验证集图像,最终去除了4511张相似图片。部分过滤的相似图片如下所示。 - - ![](../../../images/distillation/22k_1k_val_compare_w_sift.png) - - * 大数据集soft label获取,对于去重后的ImageNet22k数据集,我们使用`ResNeXt101_32x16d_wsl`模型进行预测,得到每张图片的soft label。 - * Top-k数据选择,ImageNet1k数据共有1000类,对于每一类,找出属于该类并且得分最高的k张图片,最终得到一个数据量不超过`1000*k`的数据集(某些类上得到的图片数量可能少于k张)。 - * 将该数据集与ImageNet1k的训练集融合组成最终蒸馏模型所使用的数据集,数据量为500万。 - - -## 三、实验 - -* PaddleClas的蒸馏策略为`大数据集训练+ImageNet1k蒸馏finetune`的策略。选择合适的教师模型,首先在挑选得到的500万数据集上进行训练,然后在ImageNet1k训练集上进行finetune,最终得到蒸馏后的学生模型。 - -### 3.1 教师模型的选择 - -为了验证教师模型和学生模型的模型大小差异和教师模型的模型精度对蒸馏结果的影响,我们做了几组实验验证。训练策略统一为:`cosine_decay_warmup,lr=1.3, epoch=120, bs=2048`,学生模型均为从头训练。 - -|Teacher Model | Teacher Top1 | Student Model | Student Top1| -|- |:-: |:-: | :-: | -| ResNeXt101_32x16d_wsl | 84.2% | MobileNetV3_large_x1_0 | 75.78% | -| ResNet50_vd | 79.12% | MobileNetV3_large_x1_0 | 75.60% | -| ResNet50_vd | 82.35% | MobileNetV3_large_x1_0 | 76.00% | - - -从表中可以看出 - -> 教师模型结构相同时,其精度越高,最终的蒸馏效果也会更好一些。 -> -> 教师模型与学生模型的模型大小差异不宜过大,否则反而会影响蒸馏结果的精度。 - - -因此最终在蒸馏实验中,对于ResNet系列学生模型,我们使用`ResNeXt101_32x16d_wsl`作为教师模型;对于MobileNet系列学生模型,我们使用蒸馏得到的`ResNet50_vd`作为教师模型。 - -### 3.2 大数据蒸馏 - -基于PaddleClas的蒸馏策略为`大数据集训练+imagenet1k finetune`的策略。 - -针对从ImageNet22k挑选出的400万数据,融合imagenet1k训练集,组成共500万的训练集进行训练,具体地,在不同模型上的训练超参及效果如下。 - - -|Student Model | num_epoch | l2_ecay | batch size/gpu cards | base lr | learning rate decay | top1 acc | -| - |:-: |:-: | :-: |:-: |:-: |:-: | -| MobileNetV1 | 360 | 3e-5 | 4096/8 | 1.6 | cosine_decay_warmup | 77.65% | -| MobileNetV2 | 360 | 1e-5 | 3072/8 | 0.54 | cosine_decay_warmup | 76.34% | -| MobileNetV3_large_x1_0 | 360 | 1e-5 | 5760/24 | 3.65625 | cosine_decay_warmup | 78.54% | -| MobileNetV3_small_x1_0 | 360 | 1e-5 | 5760/24 | 3.65625 | cosine_decay_warmup | 70.11% | -| ResNet50_vd | 360 | 7e-5 | 1024/32 | 0.4 | cosine_decay_warmup | 82.07% | -| ResNet101_vd | 360 | 7e-5 | 1024/32 | 0.4 | cosine_decay_warmup | 83.41% | -| Res2Net200_vd_26w_4s | 360 | 4e-5 | 1024/32 | 0.4 | cosine_decay_warmup | 84.82% | - -### 3.3 ImageNet1k训练集finetune - -对于在大数据集上训练的模型,其学习到的特征可能与ImageNet1k数据特征有偏,因此在这里使用ImageNet1k数据集对模型进行finetune。finetune的超参和finetune的精度收益如下。 - - -|Student Model | num_epoch | l2_ecay | batch size/gpu cards | base lr | learning rate decay | top1 acc | -| - |:-: |:-: | :-: |:-: |:-: |:-: | -| MobileNetV1 | 30 | 3e-5 | 4096/8 | 0.016 | cosine_decay_warmup | 77.89% | -| MobileNetV2 | 30 | 1e-5 | 3072/8 | 0.0054 | cosine_decay_warmup | 76.73% | -| MobileNetV3_large_x1_0 | 30 | 1e-5 | 2048/8 | 0.008 | cosine_decay_warmup | 78.96% | -| MobileNetV3_small_x1_0 | 30 | 1e-5 | 6400/32 | 0.025 | cosine_decay_warmup | 71.28% | -| ResNet50_vd | 60 | 7e-5 | 1024/32 | 0.004 | cosine_decay_warmup | 82.39% | -| ResNet101_vd | 30 | 7e-5 | 1024/32 | 0.004 | cosine_decay_warmup | 83.73% | -| Res2Net200_vd_26w_4s | 360 | 4e-5 | 1024/32 | 0.004 | cosine_decay_warmup | 85.13% | - - -### 3.4 数据增广以及基于Fix策略的微调 - -* 基于前文所述的实验结论,我们在训练的过程中加入自动增广(AutoAugment)[4],同时进一步减小了l2_decay(4e-5->2e-5),最终ResNet50_vd经过SSLD蒸馏策略,在ImageNet1k上的精度可以达到82.99%,相比之前不加数据增广的蒸馏策略再次增加了0.6%。 - - -* 对于图像分类任务,在测试的时候,测试尺度为训练尺度的1.15倍左右时,往往在不需要重新训练模型的情况下,模型的精度指标就可以进一步提升[5],对于82.99%的ResNet50_vd在320x320的尺度下测试,精度可达83.7%,我们进一步使用Fix策略,即在320x320的尺度下进行训练,使用与预测时相同的数据预处理方法,同时固定除FC层以外的所有参数,最终在320x320的预测尺度下,精度可以达到**84.0%**。 - - -### 3.5 实验过程中的一些问题 - -* 在预测过程中,batch norm的平均值与方差是通过加载预训练模型得到(设其模式为test mode)。在训练过程中,batch norm是通过统计当前batch的信息(设其模式为train mode),与历史保存信息进行滑动平均计算得到,在蒸馏任务中,我们发现通过train mode,即教师模型的bn实时变化的模式,去指导学生模型,比通过test mode蒸馏,得到的学生模型性能更好一些,下面是一组实验结果。因此我们在该蒸馏方案中,均使用train mode去得到教师模型的soft label。 - -|Teacher Model | Teacher Top1 | Student Model | Student Top1| -|- |:-: |:-: | :-: | -| ResNet50_vd | 82.35% | MobileNetV3_large_x1_0 | 76.00% | -| ResNet50_vd | 82.35% | MobileNetV3_large_x1_0 | 75.84% | - - -## 四、蒸馏模型的应用 - -### 4.1 使用方法 - -* 中间层学习率调整。蒸馏得到的模型的中间层特征图更加精细化,因此将蒸馏模型预训练应用到其他任务中时,如果采取和之前相同的学习率,容易破坏中间层特征。而如果降低整体模型训练的学习率,则会带来训练收敛速度慢的问题。因此我们使用了中间层学习率调整的策略。具体地: - * 针对ResNet50_vd,我们设置一个学习率倍数列表,res block之前的3个conv2d卷积参数具有统一的学习率倍数,4个res block的conv2d分别有一个学习率参数,共需设置5个学习率倍数的超参。在实验中发现。用于迁移学习finetune分类模型时,`[0.1,0.1,0.2,0.2,0.3]`的中间层学习率倍数设置在绝大多数的任务中都性能更好;而在目标检测任务中,`[0.05,0.05,0.05,0.1,0.15]`的中间层学习率倍数设置能够带来更大的精度收益。 - * 对于MoblileNetV3_large_x1_0,由于其包含15个block,我们设置每3个block共享一个学习率倍数参数,因此需要共5个学习率倍数的参数,最终发现在分类和检测任务中,`[0.25,0.25,0.5,0.5,0.75]`的中间层学习率倍数能够带来更大的精度收益。 - - -* 适当的l2 decay。不同分类模型在训练的时候一般都会根据模型设置不同的l2 decay,大模型为了防止过拟合,往往会设置更大的l2 decay,如ResNet50等模型,一般设置为`1e-4`;而如MobileNet系列模型,在训练时往往都会设置为`1e-5~4e-5`,防止模型过度欠拟合,在蒸馏时亦是如此。在将蒸馏模型应用到目标检测任务中时,我们发现也需要调节backbone甚至特定任务模型模型的l2 decay,和预训练蒸馏时的l2 decay尽可能保持一致。以Faster RCNN MobiletNetV3 FPN为例,我们发现仅修改该参数,在COCO2017数据集上就可以带来最多0.5%左右的精度(mAP)提升(默认Faster RCNN l2 decay为1e-4,我们修改为1e-5~4e-5均有0.3%~0.5%的提升)。 - - -### 4.2 迁移学习finetune -* 为验证迁移学习的效果,我们在10个小的数据集上验证其效果。在这里为了保证实验的可对比性,我们均使用ImageNet1k数据集训练的标准预处理过程,对于蒸馏模型我们也添加了蒸馏模型中间层学习率的搜索。 -* 对于ResNet50_vd,baseline为Top1 Acc 79.12%的预训练模型基于grid search搜索得到的最佳精度,对比实验则为基于该精度对预训练和中间层学习率进一步搜索得到的最佳精度。下面给出10个数据集上所有baseline和蒸馏模型的精度对比。 - - -| Dataset | Model | Baseline Top1 Acc | Distillation Model Finetune | -|- |:-: |:-: | :-: | -| Oxford102 flowers | ResNete50_vd | 97.18% | 97.41% | -| caltech-101 | ResNete50_vd | 92.57% | 93.21% | -| Oxford-IIIT-Pets | ResNete50_vd | 94.30% | 94.76% | -| DTD | ResNete50_vd | 76.48% | 77.71% | -| fgvc-aircraft-2013b | ResNete50_vd | 88.98% | 90.00% | -| Stanford-Cars | ResNete50_vd | 92.65% | 92.76% | -| SUN397 | ResNete50_vd | 64.02% | 68.36% | -| cifar100 | ResNete50_vd | 86.50% | 87.58% | -| cifar10 | ResNete50_vd | 97.72% | 97.94% | -| Food-101 | ResNete50_vd | 89.58% | 89.99% | - -* 可以看出在上面10个数据集上,结合适当的中间层学习率倍数设置,蒸馏模型平均能够带来1%以上的精度提升。 - - -### 4.3 目标检测 - -我们基于两阶段目标检测Faster/Cascade RCNN模型验证蒸馏得到的预训练模型的效果。 - -* ResNet50_vd - -设置训练与评测的尺度均为640x640,最终COCO上检测指标如下。 - -| Model | train/test scale | pretrain top1 acc | feature map lr | coco mAP | -|- |:-: |:-: | :-: | :-: | -| Faster RCNN R50_vd FPN | 640/640 | 79.12% | [1.0,1.0,1.0,1.0,1.0] | 34.8% | -| Faster RCNN R50_vd FPN | 640/640 | 79.12% | [0.05,0.05,0.1,0.1,0.15] | 34.3% | -| Faster RCNN R50_vd FPN | 640/640 | 82.18% | [0.05,0.05,0.1,0.1,0.15] | 36.3% | - -在这里可以看出,对于未蒸馏模型,过度调整中间层学习率反而降低最终检测模型的性能指标。基于该蒸馏模型,我们也提供了领先的服务端实用目标检测方案,详细的配置与训练代码均已开源,可以参考[PaddleDetection](https://github.com/PaddlePaddle/PaddleDetection/tree/master/configs/rcnn_enhance)。 - - -## 五、SSLD实战 - -本节将基于ImageNet-1K的数据集详细介绍SSLD蒸馏实验,如果想快速体验此方法,可以参考[**30分钟玩转PaddleClas(进阶版)**](../../tutorials/quick_start_professional.md)中基于CIFAR100的SSLD蒸馏实验。 - -### 5.1 参数配置 - -实战部分提供了SSLD蒸馏的示例,在`ppcls/configs/ImageNet/Distillation/mv3_large_x1_0_distill_mv3_small_x1_0.yaml`中提供了`MobileNetV3_large_x1_0`蒸馏`MobileNetV3_small_x1_0`的配置文件,用户可以在`tools/train.sh`里直接替换配置文件的路径即可使用。 - -```yaml -Arch: - name: "DistillationModel" - # if not null, its lengths should be same as models - pretrained_list: - # if not null, its lengths should be same as models - freeze_params_list: - - True - - False - models: - - Teacher: - name: MobileNetV3_large_x1_0 - pretrained: True - use_ssld: True - - Student: - name: MobileNetV3_small_x1_0 - pretrained: False - - infer_model_name: "Student" -``` - -在参数配置中,`freeze_params_list`中需要指定模型是否需要冻结参数,`models`中需要指定Teacher模型和Student模型,其中Teacher模型需要加载预训练模型。用户可以直接在此处更改模型。 - - -### 5.2 启动命令 - -当用户配置完训练环境后,类似于训练其他分类任务,只需要将`tools/train.sh`中的配置文件替换成为相应的蒸馏配置文件即可。 - -其中`train.sh`中的内容如下: - -```bash - -python -m paddle.distributed.launch \ - --selected_gpus="0,1,2,3" \ - --log_dir=mv3_large_x1_0_distill_mv3_small_x1_0 \ - tools/train.py \ - -c ./ppcls/configs/ImageNet/Distillation/mv3_large_x1_0_distill_mv3_small_x1_0.yaml -``` - -运行`train.sh`: - -```bash -sh tools/train.sh -``` - -### 5.3 注意事项 - -* 用户在使用SSLD蒸馏之前,首先需要在目标数据集上训练一个教师模型,该教师模型用于指导学生模型在该数据集上的训练。 - -* 如果学生模型没有加载预训练模型,训练的其他超参数可以参考该学生模型在ImageNet-1k上训练的超参数,如果学生模型加载了预训练模型,学习率可以调整到原来的1/10或者1/100。 - -* 在SSLD蒸馏的过程中,学生模型只学习soft-label导致训练目标变的更加复杂,建议可以适当的调小`l2_decay`的值来获得更高的验证集准确率。 - -* 若用户准备添加无标签的训练数据,只需要将新的训练数据放置在原本训练数据的路径下,生成新的数据list即可,另外,新生成的数据list需要将无标签的数据添加伪标签(只是为了统一读数据)。 - - -> 如果您觉得此文档对您有帮助,欢迎star我们的项目:[https://github.com/PaddlePaddle/PaddleClas](https://github.com/PaddlePaddle/PaddleClas) - - -## 参考文献 - -[1] Hinton G, Vinyals O, Dean J. Distilling the knowledge in a neural network[J]. arXiv preprint arXiv:1503.02531, 2015. - -[2] Bagherinezhad H, Horton M, Rastegari M, et al. Label refinery: Improving imagenet classification through label progression[J]. arXiv preprint arXiv:1805.02641, 2018. - -[3] Yalniz I Z, Jégou H, Chen K, et al. Billion-scale semi-supervised learning for image classification[J]. arXiv preprint arXiv:1905.00546, 2019. - -[4] Cubuk E D, Zoph B, Mane D, et al. Autoaugment: Learning augmentation strategies from data[C]//Proceedings of the IEEE conference on computer vision and pattern recognition. 2019: 113-123. - -[5] Touvron H, Vedaldi A, Douze M, et al. Fixing the train-test resolution discrepancy[C]//Advances in Neural Information Processing Systems. 2019: 8250-8260. diff --git a/docs/zh_CN/advanced_tutorials/distillation/index.rst b/docs/zh_CN/advanced_tutorials/distillation/index.rst deleted file mode 100644 index a6a9eddd..00000000 --- a/docs/zh_CN/advanced_tutorials/distillation/index.rst +++ /dev/null @@ -1,7 +0,0 @@ -知识蒸馏 -================================ - -.. toctree:: - :maxdepth: 3 - - distillation.md diff --git a/docs/zh_CN_tmp/advanced_tutorials/how_to_contribute.md b/docs/zh_CN/advanced_tutorials/how_to_contribute.md similarity index 100% rename from docs/zh_CN_tmp/advanced_tutorials/how_to_contribute.md rename to docs/zh_CN/advanced_tutorials/how_to_contribute.md diff --git a/docs/zh_CN/advanced_tutorials/image_augmentation/ImageAugment.md b/docs/zh_CN/advanced_tutorials/image_augmentation/ImageAugment.md deleted file mode 100644 index 6278096d..00000000 --- a/docs/zh_CN/advanced_tutorials/image_augmentation/ImageAugment.md +++ /dev/null @@ -1,549 +0,0 @@ -# 一、数据增广 - -在图像分类任务中,图像数据的增广是一种常用的正则化方法,常用于数据量不足或者模型参数较多的场景。在本章节中,我们将对除 ImageNet 分类任务标准数据增广外的8种数据增广方式进行简单的介绍和对比,用户也可以将这些增广方法应用到自己的任务中,以获得模型精度的提升。这8种数据增广方式在ImageNet上的精度指标如下所示。 - -![](../../../images/image_aug/main_image_aug.png) - -# 二、常用数据增广方法 - -如果没有特殊说明,本章节中所有示例为 ImageNet 分类,并且假设最终输入网络的数据维度为:`[batch-size, 3, 224, 224]` - -其中 ImageNet 分类训练阶段的标准数据增广方式分为以下几个步骤: - -1. 图像解码:简写为 `ImageDecode` -2. 随机裁剪到长宽均为 224 的图像:简写为 `RandCrop` -3. 水平方向随机翻转:简写为 `RandFlip` -4. 图像数据的归一化:简写为 `Normalize` -5. 图像数据的重排,`[224, 224, 3]` 变为 `[3, 224, 224]`:简写为 `Transpose` -6. 多幅图像数据组成 batch 数据,如 `batch-size` 个 `[3, 224, 224]` 的图像数据拼组成 `[batch-size, 3, 224, 224]`:简写为 `Batch` - -相比于上述标准的图像增广方法,研究者也提出了很多改进的图像增广策略,这些策略均是在标准增广方法的不同阶段插入一定的操作,基于这些策略操作所处的不同阶段,我们将其分为了三类: - -1. 对 `RandCrop` 后的 224 的图像进行一些变换: AutoAugment,RandAugment -2. 对`Transpose` 后的 224 的图像进行一些裁剪: CutOut,RandErasing,HideAndSeek,GridMask -3. 对 `Batch` 后的数据进行混合: Mixup,Cutmix - -增广后的可视化效果如下所示。 - -![](../../../images/image_aug/image_aug_samples_s.jpg) - -具体如下表所示: - - -| 变换方法 | 输入 | 输出 | Auto-
Augment\[1\] | Rand-
Augment\[2\] | CutOut\[3\] | Rand
Erasing\[4\] | HideAnd-
Seek\[5\] | GridMask\[6\] | Mixup\[7\] | Cutmix\[8\] | -|-------------|---------------------------|---------------------------|------------------|------------------|-------------|------------------|------------------|---------------|------------|------------| -| Image
Decode | Binary | (224, 224, 3)
uint8 | Y | Y | Y | Y | Y | Y | Y | Y | -| RandCrop | (:, :, 3)
uint8 | (224, 224, 3)
uint8 | Y | Y | Y | Y | Y | Y | Y | Y | -| **Process** | (224, 224, 3)
uint8 | (224, 224, 3)
uint8 | Y | Y | \- | \- | \- | \- | \- | \- | -| RandFlip | (224, 224, 3)
uint8 | (224, 224, 3)
float32 | Y | Y | Y | Y | Y | Y | Y | Y | -| Normalize | (224, 224, 3)
uint8 | (3, 224, 224)
float32 | Y | Y | Y | Y | Y | Y | Y | Y | -| Transpose | (224, 224, 3)
float32 | (3, 224, 224)
float32 | Y | Y | Y | Y | Y | Y | Y | Y | -| **Process** | (3, 224, 224)
float32 | (3, 224, 224)
float32 | \- | \- | Y | Y | Y | Y | \- | \- | -| Batch | (3, 224, 224)
float32 | (N, 3, 224, 224)
float32 | Y | Y | Y | Y | Y | Y | Y | Y | -| **Process** | (N, 3, 224, 224)
float32 | (N, 3, 224, 224)
float32 | \- | \- | \- | \- | \- | \- | Y | Y | - - -PaddleClas中集成了上述所有的数据增广策略,每种数据增广策略的参考论文与参考开源代码均在下面的介绍中列出。下文将介绍这些策略的原理与使用方法,并以下图为例,对变换后的效果进行可视化。为了说明问题,本章节中将 `RandCrop` 替换为 `Resize`。 - -![][test_baseline] - -# 三、图像变换类 - -图像变换类指的是对 `RandCrop` 后的 224 的图像进行一些变换,主要包括 - -+ AutoAugment -+ RandAugment - -## 3.1 AutoAugment - -论文地址:[https://arxiv.org/abs/1805.09501v1](https://arxiv.org/abs/1805.09501v1) - -开源代码github地址:[https://github.com/DeepVoltaire/AutoAugment](https://github.com/DeepVoltaire/AutoAugment) - -不同于常规的人工设计图像增广方式,AutoAugment 是在一系列图像增广子策略的搜索空间中通过搜索算法找到的适合特定数据集的图像增广方案。针对 ImageNet 数据集,最终搜索出来的数据增广方案包含 25 个子策略组合,每个子策略中都包含两种变换,针对每幅图像都随机的挑选一个子策略组合,然后以一定的概率来决定是否执行子策略中的每种变换。 - -PaddleClas中`AutoAugment`的使用方法如下所示。 - -```python - -size = 224 - -decode_op = DecodeImage() -resize_op = ResizeImage(size=(size, size)) -autoaugment_op = ImageNetPolicy() - -ops = [decode_op, resize_op, autoaugment_op] - -imgs_dir = "imgs_dir" -file_names = os.listdir(imgs_dir) -for file_name in file_names: - file_path = os.join(imgs_dir, file_name) - with open(file_path) as f: - data = f.read() - img = transform(data, ops) -``` - -结果如下图所示。 - -![][test_autoaugment] - -## 3.2 RandAugment - -论文地址:[https://arxiv.org/pdf/1909.13719.pdf](https://arxiv.org/pdf/1909.13719.pdf) - -开源代码github地址:[https://github.com/heartInsert/randaugment](https://github.com/heartInsert/randaugment) - - -`AutoAugment` 的搜索方法比较暴力,直接在数据集上搜索针对该数据集的最优策略,其计算量很大。在 `RandAugment` 文章中作者发现,一方面,针对越大的模型,越大的数据集,使用 `AutoAugment` 方式搜索到的增广方式产生的收益也就越小;另一方面,这种搜索出的最优策略是针对该数据集的,其迁移能力较差,并不太适合迁移到其他数据集上。 - -在 `RandAugment` 中,作者提出了一种随机增广的方式,不再像 `AutoAugment` 中那样使用特定的概率确定是否使用某种子策略,而是所有的子策略都会以同样的概率被选择到,论文中的实验也表明这种数据增广方式即使在大模型的训练中也具有很好的效果。 - - -PaddleClas中`RandAugment`的使用方法如下所示。 - -```python - -size = 224 - -decode_op = DecodeImage() -resize_op = ResizeImage(size=(size, size)) -randaugment_op = RandAugment() - -ops = [decode_op, resize_op, randaugment_op] - -imgs_dir = 图像路径 -fnames = os.listdir(imgs_dir) -for f in fnames: - data = open(os.path.join(imgs_dir, f)).read() - img = transform(data, ops) -``` - -结果如下图所示。 - -![][test_randaugment] - - -# 四、图像裁剪类 - -图像裁剪类主要是对`Transpose` 后的 224 的图像进行一些裁剪,并将裁剪区域的像素值置为特定的常数(默认为0),主要包括: - -+ CutOut -+ RandErasing -+ HideAndSeek -+ GridMask - -图像裁剪的这些增广并非一定要放在归一化之后,也有不少实现是放在归一化之前的,也就是直接对 uint8 的图像进行操作,两种方式的差别是:如果直接对 uint8 的图像进行操作,那么再经过归一化之后被裁剪的区域将不再是纯黑或纯白(减均值除方差之后像素值不为0)。而对归一后之后的数据进行操作,裁剪的区域会是纯黑或纯白。 - -上述的裁剪变换思路是相同的,都是为了解决训练出的模型在有遮挡数据上泛化能力较差的问题,不同的是他们的裁剪方式、区域不太一样。 - -## 4.1 Cutout - -论文地址:[https://arxiv.org/abs/1708.04552](https://arxiv.org/abs/1708.04552) - -开源代码github地址:[https://github.com/uoguelph-mlrg/Cutout](https://github.com/uoguelph-mlrg/Cutout) - -Cutout 可以理解为 Dropout 的一种扩展操作,不同的是 Dropout 是对图像经过网络后生成的特征进行遮挡,而 Cutout 是直接对输入的图像进行遮挡,相对于Dropout对噪声的鲁棒性更好。作者在论文中也进行了说明,这样做法有以下两点优势:(1) 通过 Cutout 可以模拟真实场景中主体被部分遮挡时的分类场景;(2) 可以促进模型充分利用图像中更多的内容来进行分类,防止网络只关注显著性的图像区域,从而发生过拟合。 - - -PaddleClas中`Cutout`的使用方法如下所示。 - -```python - -size = 224 - -decode_op = DecodeImage() -resize_op = ResizeImage(size=(size, size)) -cutout_op = Cutout(n_holes=1, length=112) - -ops = [decode_op, resize_op, cutout_op] - -imgs_dir = 图像路径 -fnames = os.listdir(imgs_dir) -for f in fnames: - data = open(os.path.join(imgs_dir, f)).read() - img = transform(data, ops) -``` - -结果如下图所示。 - -![][test_cutout] - -## 4.2 RandomErasing - -论文地址:[https://arxiv.org/pdf/1708.04896.pdf](https://arxiv.org/pdf/1708.04896.pdf) - -开源代码github地址:[https://github.com/zhunzhong07/Random-Erasing](https://github.com/zhunzhong07/Random-Erasing) - -`RandomErasing` 与 `Cutout` 方法类似,同样是为了解决训练出的模型在有遮挡数据上泛化能力较差的问题,作者在论文中也指出,随机裁剪的方式与随机水平翻转具有一定的互补性。作者也在行人再识别(REID)上验证了该方法的有效性。与`Cutout`不同的是,在`RandomErasing`中,图片以一定的概率接受该种预处理方法,生成掩码的尺寸大小与长宽比也是根据预设的超参数随机生成。 - - -PaddleClas中`RandomErasing`的使用方法如下所示。 - -```python - -size = 224 - -decode_op = DecodeImage() -resize_op = ResizeImage(size=(size, size)) -randomerasing_op = RandomErasing() - -ops = [decode_op, resize_op, tochw_op, randomerasing_op] - -imgs_dir = 图像路径 -fnames = os.listdir(imgs_dir) -for f in fnames: - data = open(os.path.join(imgs_dir, f)).read() - img = transform(data, ops) - img = img.transpose((1, 2, 0)) -``` - -结果如下图所示。 - -![][test_randomerassing] - - -## 4.3 HideAndSeek - -论文地址:[https://arxiv.org/pdf/1811.02545.pdf](https://arxiv.org/pdf/1811.02545.pdf) - -开源代码github地址:[https://github.com/kkanshul/Hide-and-Seek](https://github.com/kkanshul/Hide-and-Seek) - - -`HideAndSeek`论文将图像分为若干块区域(patch),对于每块区域,都以一定的概率生成掩码,不同区域的掩码含义如下图所示。 - - -![][hide_and_seek_mask_expanation] - - -PaddleClas中`HideAndSeek`的使用方法如下所示。 - -```python - -size = 224 - -decode_op = DecodeImage() -resize_op = ResizeImage(size=(size, size)) -hide_and_seek_op = HideAndSeek() - -ops = [decode_op, resize_op, tochw_op, hide_and_seek_op] - -imgs_dir = 图像路径 -fnames = os.listdir(imgs_dir) -for f in fnames: - data = open(os.path.join(imgs_dir, f)).read() - img = transform(data, ops) - img = img.transpose((1, 2, 0)) -``` - -结果如下图所示。 - -![][test_hideandseek] - - -## 4.4 GridMask -论文地址:[https://arxiv.org/abs/2001.04086](https://arxiv.org/abs/2001.04086) - -开源代码github地址:[https://github.com/akuxcw/GridMask](https://github.com/akuxcw/GridMask) - - -作者在论文中指出,此前存在的基于对图像 crop 的方法存在两个问题,如下图所示: - -1. 过度删除区域可能造成目标主体大部分甚至全部被删除,或者导致上下文信息的丢失,导致增广后的数据成为噪声数据; -2. 保留过多的区域,对目标主体及上下文基本产生不了什么影响,失去增广的意义。 - -![][gridmask-0] - -因此如果避免过度删除或过度保留成为需要解决的核心问题。 - - -`GridMask`是通过生成一个与原图分辨率相同的掩码,并将掩码进行随机翻转,与原图相乘,从而得到增广后的图像,通过超参数控制生成的掩码网格的大小。 - - -在训练过程中,有两种以下使用方法: -1. 设置一个概率p,从训练开始就对图片以概率p使用`GridMask`进行增广。 -2. 一开始设置增广概率为0,随着迭代轮数增加,对训练图片进行`GridMask`增广的概率逐渐增大,最后变为p。 - -论文中验证上述第二种方法的训练效果更好一些。 - - -PaddleClas中`GridMask`的使用方法如下所示。 - - -```python - -size = 224 - -decode_op = DecodeImage() -resize_op = ResizeImage(size=(size, size)) -tochw_op = ToCHWImage() -gridmask_op = GridMask(d1=96, d2=224, rotate=1, ratio=0.6, mode=1, prob=0.8) - -ops = [decode_op, resize_op, tochw_op, gridmask_op] - -imgs_dir = 图像路径 -fnames = os.listdir(imgs_dir) -for f in fnames: - data = open(os.path.join(imgs_dir, f)).read() - img = transform(data, ops) - img = img.transpose((1, 2, 0)) -``` - - -结果如下图所示。 - -![][test_gridmask] - - -# 五、图像混叠 - -图像混叠主要对 `Batch` 后的数据进行混合,包括: - -+ Mixup -+ Cutmix - -前文所述的图像变换与图像裁剪都是针对单幅图像进行的操作,而图像混叠是对两幅图像进行融合,生成一幅图像,两种方法的主要区别为混叠的方式不太一样。 - -## 5.1 Mixup - -论文地址:[https://arxiv.org/pdf/1710.09412.pdf](https://arxiv.org/pdf/1710.09412.pdf) - -开源代码github地址:[https://github.com/facebookresearch/mixup-cifar10](https://github.com/facebookresearch/mixup-cifar10) - -Mixup 是最先提出的图像混叠增广方案,其原理简单、方便实现,不仅在图像分类上,在目标检测上也取得了不错的效果。为了便于实现,通常只对一个 batch 内的数据进行混叠,在 `Cutmix` 中也是如此。 - -如下是 `imaug` 中的实现,需要指出的是,下述实现会出现对同一幅进行相加的情况,也就是最终得到的图和原图一样,随着 `batch-size` 的增加这种情况出现的概率也会逐渐减小。 - -PaddleClas中`Mixup`的使用方法如下所示。 - -```python - -size = 224 - -decode_op = DecodeImage() -resize_op = ResizeImage(size=(size, size)) -tochw_op = ToCHWImage() -hide_and_seek_op = HideAndSeek() -mixup_op = MixupOperator() -cutmix_op = CutmixOperator() - -ops = [decode_op, resize_op, tochw_op] - -imgs_dir = 图像路径 - -batch = [] -fnames = os.listdir(imgs_dir) -for idx, f in enumerate(fnames): - data = open(os.path.join(imgs_dir, f)).read() - img = transform(data, ops) - batch.append( (img, idx) ) # fake label - -new_batch = mixup_op(batch) -``` - -结果如下图所示。 - -![][test_mixup] - -## 5.2 Cutmix - -论文地址:[https://arxiv.org/pdf/1905.04899v2.pdf](https://arxiv.org/pdf/1905.04899v2.pdf) - -开源代码github地址:[https://github.com/clovaai/CutMix-PyTorch](https://github.com/clovaai/CutMix-PyTorch) - -与 `Mixup` 直接对两幅图进行相加不一样,`Cutmix` 是从一幅图中随机裁剪出一个 `ROI`,然后覆盖当前图像中对应的区域,代码实现如下所示: - -```python - -size = 224 - -decode_op = DecodeImage() -resize_op = ResizeImage(size=(size, size)) -tochw_op = ToCHWImage() -hide_and_seek_op = HideAndSeek() -cutmix_op = CutmixOperator() - -ops = [decode_op, resize_op, tochw_op] - -imgs_dir = 图像路径 - -batch = [] -fnames = os.listdir(imgs_dir) -for idx, f in enumerate(fnames): - data = open(os.path.join(imgs_dir, f)).read() - img = transform(data, ops) - batch.append( (img, idx) ) # fake label - -new_batch = cutmix_op(batch) -``` - -结果如下图所示。 - -![][test_cutmix] - - - -# 六、实验 - -基于PaddleClas,在ImageNet1k数据集上的分类精度如下。 - -| 模型 | 初始学习率策略 | l2 decay | batch size | epoch | 数据变化策略 | Top1 Acc | 论文中结论 | -|-------------|------------------|--------------|------------|-------|----------------|------------|----| -| ResNet50 | 0.1/cosine_decay | 0.0001 | 256 | 300 | 标准变换 | 0.7731 | - | -| ResNet50 | 0.1/cosine_decay | 0.0001 | 256 | 300 | AutoAugment | 0.7795 | 0.7763 | -| ResNet50 | 0.1/cosine_decay | 0.0001 | 256 | 300 | mixup | 0.7828 | 0.7790 | -| ResNet50 | 0.1/cosine_decay | 0.0001 | 256 | 300 | cutmix | 0.7839 | 0.7860 | -| ResNet50 | 0.1/cosine_decay | 0.0001 | 256 | 300 | cutout | 0.7801 | - | -| ResNet50 | 0.1/cosine_decay | 0.0001 | 256 | 300 | gridmask | 0.7785 | 0.7790 | -| ResNet50 | 0.1/cosine_decay | 0.0001 | 256 | 300 | random-augment | 0.7770 | 0.7760 | -| ResNet50 | 0.1/cosine_decay | 0.0001 | 256 | 300 | random erasing | 0.7791 | - | -| ResNet50 | 0.1/cosine_decay | 0.0001 | 256 | 300 | hide and seek | 0.7743 | 0.7720 | - -**注意**: -* 在这里的实验中,为了便于对比,我们将l2 decay固定设置为1e-4,在实际使用中,我们推荐尝试使用更小的l2 decay。结合数据增广,我们发现将l2 decay由1e-4减小为7e-5均能带来至少0.3~0.5%的精度提升。 -* 我们目前尚未对不同策略进行组合并验证效果,这一块后续我们会开展更多的对比实验,敬请期待。 - - -# 七、数据增广分类实战 - -本节将基于ImageNet-1K的数据集详细介绍数据增广实验,如果想快速体验此方法,可以参考[**30分钟玩转PaddleClas(进阶版)**](../../tutorials/quick_start_professional.md)中基于CIFAR100的数据增广实验。 - -## 7.1 参数配置 - -由于不同的数据增广方式含有不同的超参数,为了便于理解和使用,我们在`configs/DataAugment`里分别列举了8种训练ResNet50的数据增广方式的参数配置文件,用户可以在`tools/run.sh`里直接替换配置文件的路径即可使用。此处分别挑选了图像变换、图像裁剪、图像混叠中的一个示例展示,其他参数配置用户可以自查配置文件。 - -### RandAugment - -`RandAugment`的图像增广方式的配置如下,其中用户需要指定其中的参数`num_layers`与`magnitude`,默认的数值分别是`2`和`5`。`RandAugment`是在uint8的数据格式上转换的,所以其处理过程应该放在归一化操作(`NormalizeImage`)之前。 - -```yaml - transform_ops: - - DecodeImage: - to_rgb: True - channel_first: False - - RandCropImage: - size: 224 - - RandFlipImage: - flip_code: 1 - - RandAugment: - num_layers: 2 - magnitude: 5 - - NormalizeImage: - scale: 1.0/255.0 - mean: [0.485, 0.456, 0.406] - std: [0.229, 0.224, 0.225] - order: '' -``` - -### Cutout - -`Cutout`的图像增广方式的配置如下,其中用户需要指定其中的参数`n_holes`与`length`,默认的数值分别是`1`和`112`。类似其他图像裁剪类的数据增广方式,`Cutout`既可以在uint8格式的数据上操作,也可以在归一化(`NormalizeImage`)后的数据上操作,此处给出的是在归一化后的操作。 - -```yaml - transform_ops: - - DecodeImage: - to_rgb: True - channel_first: False - - RandCropImage: - size: 224 - - RandFlipImage: - flip_code: 1 - - NormalizeImage: - scale: 1.0/255.0 - mean: [0.485, 0.456, 0.406] - std: [0.229, 0.224, 0.225] - order: '' - - Cutout: - n_holes: 1 - length: 112 -``` - -### Mixup - -`Mixup`的图像增广方式的配置如下,其中用户需要指定其中的参数`alpha`,默认的数值是`0.2`。类似其他图像混合类的数据增广方式,`Mixup`是在图像做完数据处理后将每个batch内的数据做图像混叠,将混叠后的图像和标签输入网络中训练,所以其是在图像数据处理(图像变换、图像裁剪)后操作。另外,在配置文件中,需要将`use_mix`参数设置为`True`。 - -```yaml - transform_ops: - - DecodeImage: - to_rgb: True - channel_first: False - - RandCropImage: - size: 224 - - RandFlipImage: - flip_code: 1 - - NormalizeImage: - scale: 1.0/255.0 - mean: [0.485, 0.456, 0.406] - std: [0.229, 0.224, 0.225] - order: '' - batch_transform_ops: - - MixupOperator: - alpha: 0.2 -``` - -## 7.2 启动命令 - -当用户配置完训练环境后,类似于训练其他分类任务,只需要将`tools/train.sh`中的配置文件替换成为相应的数据增广方式的配置文件即可。 - -其中`train.sh`中的内容如下: - -```bash - -python3 -m paddle.distributed.launch \ - --selected_gpus="0,1,2,3" \ - --log_dir=ResNet50_Cutout \ - tools/train.py \ - -c ./ppcls/configs/ImageNet/DataAugment/ResNet50_Cutout.yaml -``` - -运行`train.sh`: - -```bash -sh tools/train.sh -``` - -## 7.3 注意事项 - -* 由于图像混叠时需对label进行混叠,无法计算训练数据的准确率,所以在训练过程中没有打印训练准确率。 - -* 在使用数据增广后,由于训练数据更难,所以训练损失函数可能较大,训练集的准确率相对较低,但其有拥更好的泛化能力,所以验证集的准确率相对较高。 - -* 在使用数据增广后,模型可能会趋于欠拟合状态,建议可以适当的调小`l2_decay`的值来获得更高的验证集准确率。 - -* 几乎每一类图像增广均含有超参数,我们只提供了基于ImageNet-1k的超参数,其他数据集需要用户自己调试超参数,具体超参数的含义用户可以阅读相关的论文,调试方法也可以参考训练技巧的章节。 - - -> 如果您觉得此文档对您有帮助,欢迎star我们的项目:[https://github.com/PaddlePaddle/PaddleClas](https://github.com/PaddlePaddle/PaddleClas) - - -# 参考文献 - -[1] Cubuk E D, Zoph B, Mane D, et al. Autoaugment: Learning augmentation strategies from data[C]//Proceedings of the IEEE conference on computer vision and pattern recognition. 2019: 113-123. - - -[2] Cubuk E D, Zoph B, Shlens J, et al. Randaugment: Practical automated data augmentation with a reduced search space[J]. arXiv preprint arXiv:1909.13719, 2019. - -[3] DeVries T, Taylor G W. Improved regularization of convolutional neural networks with cutout[J]. arXiv preprint arXiv:1708.04552, 2017. - -[4] Zhong Z, Zheng L, Kang G, et al. Random erasing data augmentation[J]. arXiv preprint arXiv:1708.04896, 2017. - -[5] Singh K K, Lee Y J. Hide-and-seek: Forcing a network to be meticulous for weakly-supervised object and action localization[C]//2017 IEEE international conference on computer vision (ICCV). IEEE, 2017: 3544-3553. - -[6] Chen P. GridMask Data Augmentation[J]. arXiv preprint arXiv:2001.04086, 2020. - -[7] Zhang H, Cisse M, Dauphin Y N, et al. mixup: Beyond empirical risk minimization[J]. arXiv preprint arXiv:1710.09412, 2017. - -[8] Yun S, Han D, Oh S J, et al. Cutmix: Regularization strategy to train strong classifiers with localizable features[C]//Proceedings of the IEEE International Conference on Computer Vision. 2019: 6023-6032. - - - -[test_baseline]: ../../../images/image_aug/test_baseline.jpeg -[test_autoaugment]: ../../../images/image_aug/test_autoaugment.jpeg -[test_cutout]: ../../../images/image_aug/test_cutout.jpeg -[test_gridmask]: ../../../images/image_aug/test_gridmask.jpeg -[gridmask-0]: ../../../images/image_aug/gridmask-0.png -[test_hideandseek]: ../../../images/image_aug/test_hideandseek.jpeg -[test_randaugment]: ../../../images/image_aug/test_randaugment.jpeg -[test_randomerassing]: ../../../images/image_aug/test_randomerassing.jpeg -[hide_and_seek_mask_expanation]: ../../../images/image_aug/hide-and-seek-visual.png -[test_mixup]: ../../../images/image_aug/test_mixup.png -[test_cutmix]: ../../../images/image_aug/test_cutmix.png diff --git a/docs/zh_CN/advanced_tutorials/image_augmentation/index.rst b/docs/zh_CN/advanced_tutorials/image_augmentation/index.rst deleted file mode 100644 index 7bf96ecb..00000000 --- a/docs/zh_CN/advanced_tutorials/image_augmentation/index.rst +++ /dev/null @@ -1,7 +0,0 @@ -图像增广 -================================ - -.. toctree:: - :maxdepth: 3 - - ImageAugment.md diff --git a/docs/zh_CN/advanced_tutorials/index.rst b/docs/zh_CN/advanced_tutorials/index.rst deleted file mode 100644 index e3bda60b..00000000 --- a/docs/zh_CN/advanced_tutorials/index.rst +++ /dev/null @@ -1,9 +0,0 @@ -高阶使用 -================================ - -.. toctree:: - :maxdepth: 1 - - image_augmentation/index - distillation/index - multilabel/index diff --git a/docs/zh_CN_tmp/advanced_tutorials/knowledge_distillation.md b/docs/zh_CN/advanced_tutorials/knowledge_distillation.md similarity index 100% rename from docs/zh_CN_tmp/advanced_tutorials/knowledge_distillation.md rename to docs/zh_CN/advanced_tutorials/knowledge_distillation.md diff --git a/docs/zh_CN_tmp/advanced_tutorials/model_prune_quantization.md b/docs/zh_CN/advanced_tutorials/model_prune_quantization.md similarity index 100% rename from docs/zh_CN_tmp/advanced_tutorials/model_prune_quantization.md rename to docs/zh_CN/advanced_tutorials/model_prune_quantization.md diff --git a/docs/zh_CN/advanced_tutorials/multilabel/index.rst b/docs/zh_CN/advanced_tutorials/multilabel/index.rst deleted file mode 100644 index 28d5b69d..00000000 --- a/docs/zh_CN/advanced_tutorials/multilabel/index.rst +++ /dev/null @@ -1,7 +0,0 @@ -多标签分类 -================================ - -.. toctree:: - :maxdepth: 3 - - multilabel.md \ No newline at end of file diff --git a/docs/zh_CN/advanced_tutorials/multilabel/multilabel.md b/docs/zh_CN/advanced_tutorials/multilabel/multilabel.md deleted file mode 100644 index 50eec827..00000000 --- a/docs/zh_CN/advanced_tutorials/multilabel/multilabel.md +++ /dev/null @@ -1,90 +0,0 @@ -# 多标签分类quick start - -基于[NUS-WIDE-SCENE](https://lms.comp.nus.edu.sg/wp-content/uploads/2019/research/nuswide/NUS-WIDE.html)数据集,体验多标签分类的训练、评估、预测的过程,该数据集是NUS-WIDE数据集的一个子集。请事先参考[安装指南](install.md)配置运行环境和克隆PaddleClas代码。 - -## 一、数据和模型准备 - -* 进入PaddleClas目录。 - -``` -cd path_to_PaddleClas -``` - -* 创建并进入`dataset/NUS-WIDE-SCENE`目录,下载并解压NUS-WIDE-SCENE数据集。 - -```shell -mkdir dataset/NUS-WIDE-SCENE -cd dataset/NUS-WIDE-SCENE -wget https://paddle-imagenet-models-name.bj.bcebos.com/data/NUS-SCENE-dataset.tar -tar -xf NUS-SCENE-dataset.tar -``` - -* 返回`PaddleClas`根目录 - -``` -cd ../../ -``` - -## 二、模型训练 - -```shell -export CUDA_VISIBLE_DEVICES=0,1,2,3 -python3 -m paddle.distributed.launch \ - --gpus="0,1,2,3" \ - tools/train.py \ - -c ./ppcls/configs/quick_start/professional/MobileNetV1_multilabel.yaml -``` - -训练10epoch之后,验证集最好的正确率应该在0.95左右。 - -## 三、模型评估 - -```bash -python3 tools/eval.py \ - -c ./ppcls/configs/quick_start/professional/MobileNetV1_multilabel.yaml \ - -o Arch.pretrained="./output/MobileNetV1/best_model" -``` - -## 四、模型预测 - -```bash -python3 tools/infer.py \ - -c ./ppcls/configs/quick_start/professional/MobileNetV1_multilabel.yaml \ - -o Arch.pretrained="./output/MobileNetV1/best_model" -``` - -得到类似下面的输出: -``` -[{'class_ids': [6, 13, 17, 23, 26, 30], 'scores': [0.95683, 0.5567, 0.55211, 0.99088, 0.5943, 0.78767], 'file_name': './deploy/images/0517_2715693311.jpg', 'label_names': []}] -``` - -## 五、基于预测引擎预测 - -### 5.1 导出inference model - -```bash -python3 tools/export_model.py \ - -c ./ppcls/configs/quick_start/professional/MobileNetV1_multilabel.yaml \ - -o Arch.pretrained="./output/MobileNetV1/best_model" -``` -inference model的路径默认在当前路径下`./inference` - -### 5.2 基于预测引擎预测 - -首先进入deploy目录下: - -```bash -cd ./deploy -``` - -通过预测引擎推理预测: - -``` -python3 python/predict_cls.py \ - -c configs/inference_multilabel_cls.yaml -``` - -得到类似下面的输出: -``` -0517_2715693311.jpg: class id(s): [6, 13, 17, 23, 26, 30], score(s): [0.96, 0.56, 0.55, 0.99, 0.59, 0.79], label_name(s): [] -``` diff --git a/docs/zh_CN_tmp/algorithm_introduction/DataAugmentation.md b/docs/zh_CN/algorithm_introduction/DataAugmentation.md similarity index 100% rename from docs/zh_CN_tmp/algorithm_introduction/DataAugmentation.md rename to docs/zh_CN/algorithm_introduction/DataAugmentation.md diff --git a/docs/zh_CN_tmp/algorithm_introduction/ImageNet_models.md b/docs/zh_CN/algorithm_introduction/ImageNet_models.md similarity index 100% rename from docs/zh_CN_tmp/algorithm_introduction/ImageNet_models.md rename to docs/zh_CN/algorithm_introduction/ImageNet_models.md diff --git a/docs/zh_CN_tmp/algorithm_introduction/image_classification.md b/docs/zh_CN/algorithm_introduction/image_classification.md similarity index 100% rename from docs/zh_CN_tmp/algorithm_introduction/image_classification.md rename to docs/zh_CN/algorithm_introduction/image_classification.md diff --git a/docs/zh_CN_tmp/algorithm_introduction/knowledge_distillation.md b/docs/zh_CN/algorithm_introduction/knowledge_distillation.md similarity index 100% rename from docs/zh_CN_tmp/algorithm_introduction/knowledge_distillation.md rename to docs/zh_CN/algorithm_introduction/knowledge_distillation.md diff --git a/docs/zh_CN_tmp/algorithm_introduction/metric_learning.md b/docs/zh_CN/algorithm_introduction/metric_learning.md similarity index 100% rename from docs/zh_CN_tmp/algorithm_introduction/metric_learning.md rename to docs/zh_CN/algorithm_introduction/metric_learning.md diff --git a/docs/zh_CN_tmp/algorithm_introduction/model_prune_quantization.md b/docs/zh_CN/algorithm_introduction/model_prune_quantization.md similarity index 100% rename from docs/zh_CN_tmp/algorithm_introduction/model_prune_quantization.md rename to docs/zh_CN/algorithm_introduction/model_prune_quantization.md diff --git a/docs/zh_CN/application/cartoon_character_recognition.md b/docs/zh_CN/application/cartoon_character_recognition.md deleted file mode 100644 index c49cf684..00000000 --- a/docs/zh_CN/application/cartoon_character_recognition.md +++ /dev/null @@ -1,38 +0,0 @@ -# 动漫人物识别 -自七十年代以来,人脸识别已经成为了计算机视觉和生物识别领域研究最多的主题之一。近年来,传统的人脸识别方法已经被基于卷积神经网络(CNN)的深度学习方法代替。目前,人脸识别技术广泛应用于安防、商业、金融、智慧自助终端、娱乐等各个领域。而在行业应用强烈需求的推动下,动漫媒体越来越受到关注,动漫人物的人脸识别也成为一个新的研究领域。 - -## 1 算法介绍 - -算法整体流程,详见[特征学习](./feature_learning.md)整体流程。值得注意的是,本流程没有使用`Neck`模块。 - -具体配置信息详见[配置文件](../../../ppcls/configs/Cartoonface/ResNet50_icartoon.yaml)。 - -具体模块如下所示, - -### 1.1 数据增强 - -- 图像`Resize`到224 -- 随机水平翻转 -- Normalize:归一化到0~1 - -### 1.2 Backbone的具体设置 - -采用ResNet50作为backbone。并采用大模型进行蒸馏 - -### 1.3 Metric Learning相关Loss设置 - -在动漫人物识别中,只使用了`CELoss` - -## 2 实验结果 - -本方法使用iCartoonFace[1]数据集进行验证。该数据集由 5013 个动漫角色的 389678 张图像组成,并带有 ID、边界框、姿势和其他辅助属性。 iCartoonFace 是目前图像识别领域规模最大的卡通媒体数据集,而且质量高、注释丰富、内容全面,其中包含相似图像、有遮挡的图像以及外观有变化的图像。 -与其他数据集相比,iCartoonFace无论在图像数量还是实体数量上,均具有明显领先的优势。其中训练集: 5013类,389678张图像; 验证集: query2500张,gallery20000张。 - -![icartoon](../../images/icartoon1.png) - -值得注意的是,相比于人脸识别任务,动漫人物头像的配饰、道具、发型等因素可以显著提升识别的准确率,因此在原数据集标注框的基础上,长、宽各expand为之前的2倍,并做截断处理,得到了目前训练所有的数据集。 -在此数据集上,此方法Recall1 达到83.24%。 - -## 3 参考文献 - -[1] Cartoon Face Recognition: A Benchmark Dataset. 2020. [下载地址](https://github.com/luxiangju-PersonAI/iCartoonFace) diff --git a/docs/zh_CN/application/feature_learning.md b/docs/zh_CN/application/feature_learning.md deleted file mode 100644 index 5d6d292a..00000000 --- a/docs/zh_CN/application/feature_learning.md +++ /dev/null @@ -1,29 +0,0 @@ -# 特征学习 - -此部分主要是针对特征学习的训练模式进行说明,即`RecModel`的训练模式。主要是为了支持车辆识别(车辆细分类、ReID)、Logo识别、动漫人物识别、商品识别等特征学习的应用。与在`ImageNet`上训练普通的分类网络不同的是,此特征学习部分,主要有以下特征 - -- 支持对`backbone`的输出进行截断,即支持提取任意中间层的特征信息 -- 支持在`backbone`的feature输出层后,添加可配置的网络层,即`Neck`部分 -- 支持`ArcFace Loss`等`metric learning` 相关loss函数,提升特征学习能力 - -## 1 整体流程 - -![](../../images/recognition/rec_pipeline.png) - -特征学习的整体结构如上图所示,主要包括:数据增强、Backbone的设置、Neck、Metric Learning等几大部分。其中`Neck`部分为自由添加的网络层,如添加的embedding层等,当然也可以不用此模块。训练时,利用`Metric Learning`部分的Loss对模型进行优化。预测时,一般来说,默认以`Neck`部分的输出作为特征输出。 - -针对不同的应用,可以根据需要,对每一部分自由选择。每一部分的具体配置,如数据增强、Backbone、Neck、Metric Learning相关Loss等设置,详见具体应用:[车辆识别](./vehicle_recognition.md)、[Logo识别](./logo_recognition.md)、[动漫人物识别](./cartoon_character_recognition.md)、[商品识别](./product_recognition.md) - -## 2 配置文件说明 - -配置文件说明详见[yaml配置文件说明文档](../tutorials/config.md)。其中模型结构配置,详见文档中**识别模型结构配置**部分。 - -## 3 预训练模型 - -以下为各应用在不同数据集下的预训练模型 - -- 车辆细分类:[CompCars](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/rec/models/pretrain/vehicle_cls_ResNet50_CompCars_v1.2_pretrained.pdparams) -- 车辆ReID:[VERI-Wild](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/rec/models/pretrain/vehicle_reid_ResNet50_VERIWild_v1.1_pretrained.pdparams) -- 动漫人物识别:[iCartoon](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/rec/models/pretrain/cartoon_rec_ResNet50_iCartoon_v1.0_pretrained.pdparams) -- Logo识别:[Logo3K](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/rec/models/pretrain/logo_rec_ResNet50_Logo3K_v1.1_pretrained.pdparams) -- 商品识别: [Inshop](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/rec/models/pretrain/product_ResNet50_vd_Inshop_pretrained_v1.1.pdparams)、[Aliproduct](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/rec/models/pretrain/product_ResNet50_vd_Aliproduct_v1.0_pretrained.pdparams) diff --git a/docs/zh_CN/application/index.rst b/docs/zh_CN/application/index.rst deleted file mode 100644 index abeeef7e..00000000 --- a/docs/zh_CN/application/index.rst +++ /dev/null @@ -1,8 +0,0 @@ -应用拓展 -================================ - -.. toctree:: - :maxdepth: 2 - - transfer_learning.md - object_detection.md \ No newline at end of file diff --git a/docs/zh_CN/application/logo_recognition.md b/docs/zh_CN/application/logo_recognition.md deleted file mode 100644 index da5776c6..00000000 --- a/docs/zh_CN/application/logo_recognition.md +++ /dev/null @@ -1,52 +0,0 @@ -# Logo识别 - - Logo识别技术,是现实生活中应用很广的一个领域,比如一张照片中是否出现了Adidas或者Nike的商标Logo,或者一个杯子上是否出现了星巴克或者可口可乐的商标Logo。通常Logo类别数量较多时,往往采用检测+识别两阶段方式,检测模块负责检测出潜在的Logo区域,根据检测区域抠图后输入识别模块进行识别。识别模块多采用检索的方式,根据查询图片和底库图片进行相似度排序获得预测类别。此文档主要对Logo图片的特征提取部分进行相关介绍。 - -## 1 算法介绍 - -算法整体流程,详见[特征学习](./feature_learning.md)整体流程。 - -整体设置详见: [ResNet50_ReID.yaml](../../../ppcls/configs/Logo/ResNet50_ReID.yaml)。 - -具体模块如下所示 - -### 1.1数据增强 - -与普通训练分类不同,此部分主要使用如下图像增强方式: - -- 图像`Resize`到224。对于Logo而言,使用的图像,直接为检测器crop之后的图像,因此直接resize到224 -- [AugMix](https://arxiv.org/abs/1912.02781v1):模拟Logo图像形变变化等实际场景 -- [RandomErasing](https://arxiv.org/pdf/1708.04896v2.pdf):模拟遮挡等实际情况 - -### 1.2 Backbone的具体设置 - -使用`ResNet50`作为backbone,同时做了如下修改: - - - last stage stride=1, 保持最后输出特征图尺寸14x14。计算量增加较小,但显著提高模型特征提取能力 - - -具体代码:[ResNet50_last_stage_stride1](../../../ppcls/arch/backbone/variant_models/resnet_variant.py) - -### 1.3 Neck部分 - -为了降低inferecne时计算特征距离的复杂度,添加一个embedding 卷积层,特征维度为512。 - -### 1.4 Metric Learning相关Loss的设置 - -在Logo识别中,使用了[Pairwise Cosface + CircleMargin](https://arxiv.org/abs/2002.10857) 联合训练,其中权重比例为1:1 - -具体代码详见:[PairwiseCosface](../../../ppcls/loss/pairwisecosface.py) 、[CircleMargin](../../../ppcls/arch/gears/circlemargin.py) - -## 2 实验结果 - - - -使用LogoDet-3K[1]数据集进行实验,此数据集是具有完整标注的Logo数据集,有3000个标识类别,约20万个高质量的人工标注的标识对象和158652张图片。 - -由于原始的数据集中,图像包含标注的检测框,在识别阶段只考虑检测器抠图后的logo区域,因此采用原始的标注框抠出Logo区域图像构成训练集,排除背景在识别阶段的影响。对数据集进行划分,产生155427张训练集,覆盖3000个logo类别(同时作为测试时gallery图库),3225张测试集,用于作为查询集。抠图后的训练集可[在此下载](https://arxiv.org/abs/2008.05359) - -在此数据集上,recall1 达到89.8%。 - -## 3 参考文献 - -[1] LogoDet-3K: A Large-Scale Image Dataset for Logo Detection[J]. arXiv preprint arXiv:2008.05359, 2020. diff --git a/docs/zh_CN/application/mainbody_detection.md b/docs/zh_CN/application/mainbody_detection.md deleted file mode 100644 index 46c7ff4b..00000000 --- a/docs/zh_CN/application/mainbody_detection.md +++ /dev/null @@ -1,188 +0,0 @@ -# 主体检测 - - -主体检测技术是目前应用非常广泛的一种检测技术,它指的是检测出图片中一个或者多个主体的坐标位置,然后将图像中的对应区域裁剪下来,进行识别,从而完成整个识别过程。主体检测是识别任务的前序步骤,可以有效提升识别精度。 - -本部分主要从数据集、模型训练2个方面对该部分内容进行介绍。 - -## 1. 数据集 - -在PaddleClas的识别任务中,训练主体检测模型时主要用到了以下几个数据集。 - -| 数据集 | 数据量 | 主体检测任务中使用的数据量 | 场景 | 数据集地址 | -| ------------ | ------------- | -------| ------- | -------- | -| Objects365 | 170W | 6k | 通用场景 | [地址](https://www.objects365.org/overview.html) | -| COCO2017 | 12W | 5k | 通用场景 | [地址](https://cocodataset.org/) | -| iCartoonFace | 2k | 2k | 动漫人脸检测 | [地址](https://github.com/luxiangju-PersonAI/iCartoonFace) | -| LogoDet-3k | 3k | 2k | Logo检测 | [地址](https://github.com/Wangjing1551/LogoDet-3K-Dataset) | -| RPC | 3k | 3k | 商品检测 | [地址](https://rpc-dataset.github.io/) | - -在实际训练的过程中,将所有数据集混合在一起。由于是主体检测,这里将所有标注出的检测框对应的类别都修改为"前景"的类别,最终融合的数据集中只包含1个类别,即前景。 - - -## 2. 模型选择 - -目标检测方法种类繁多,比较常用的有两阶段检测器(如FasterRCNN系列等);单阶段检测器(如YOLO、SSD等);anchor-free检测器(如FCOS等)。 - -PP-YOLO由[PaddleDetection](https://github.com/PaddlePaddle/PaddleDetection)提出,从骨干网络、数据增广、正则化策略、损失函数、后处理等多个角度对yolov3模型进行深度优化,最终在"速度-精度"方面达到了业界领先的水平。具体地,优化的策略如下。 - -- 更优的骨干网络: ResNet50vd-DCN -- 更大的训练batch size: 8 GPUs,每GPU batch_size=24,对应调整学习率和迭代轮数 -- [Drop Block](https://arxiv.org/abs/1810.12890) -- [Exponential Moving Average](https://www.investopedia.com/terms/e/ema.asp) -- [IoU Loss](https://arxiv.org/pdf/1902.09630.pdf) -- [Grid Sensitive](https://arxiv.org/abs/2004.10934) -- [Matrix NMS](https://arxiv.org/pdf/2003.10152.pdf) -- [CoordConv](https://arxiv.org/abs/1807.03247) -- [Spatial Pyramid Pooling](https://arxiv.org/abs/1406.4729) -- 更优的预训练模型 - -更多关于PP-YOLO的详细介绍可以参考:[PP-YOLO 模型](https://github.com/PaddlePaddle/PaddleDetection/blob/release%2F2.1/configs/ppyolo/README_cn.md) - -在主体检测任务中,为了保证检测效果,我们使用ResNet50vd-DCN的骨干网络,使用配置文件[ppyolov2_r50vd_dcn_365e_coco.yml](https://github.com/PaddlePaddle/PaddleDetection/blob/release/2.1/configs/ppyolo/ppyolov2_r50vd_dcn_365e_coco.yml),更换为自定义的主体检测数据集,进行训练,最终得到检测模型。 -主体检测模型的inference模型下载地址为:[链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/rec/models/inference/ppyolov2_r50vd_dcn_mainbody_v1.0_infer.tar)。 - - -## 3. 模型训练 - -本节主要介绍怎样基于PaddleDetection,基于自己的数据集,训练主体检测模型。 - -### 3.1 环境准备 - -下载PaddleDetection代码,安装requirements。 - -```shell -cd -git clone https://github.com/PaddlePaddle/PaddleDetection.git - -cd PaddleDetection -# 安装其他依赖 -pip install -r requirements.txt -``` - -更多安装教程,请参考: [安装文档](https://github.com/PaddlePaddle/PaddleDetection/blob/release/2.1/docs/tutorials/INSTALL_cn.md) - -### 3.2 数据准备 - -对于自定义数据集,首先需要将自己的数据集修改为COCO格式,可以参考[自定义检测数据集教程](https://github.com/PaddlePaddle/PaddleDetection/blob/release/2.1/static/docs/tutorials/Custom_DataSet.md)制作COCO格式的数据集。 - -主体检测任务中,所有的检测框均属于前景,在这里需要将标注文件中,检测框的`category_id`修改为1,同时将整个标注文件中的`categories`映射表修改为下面的格式,即整个类别映射表中只包含`前景`类别。 - -```json -[{u'id': 1, u'name': u'foreground', u'supercategory': u'foreground'}] -``` - -### 3.3 配置文件改动和说明 - -我们使用 `configs/ppyolo/ppyolov2_r50vd_dcn_365e_coco.yml`配置进行训练,配置文件摘要如下: - -
- -
- -从上图看到 `ppyolov2_r50vd_dcn_365e_coco.yml` 配置需要依赖其他的配置文件,这些配置文件的含义如下: - -``` -coco_detection.yml:主要说明了训练数据和验证数据的路径 - -runtime.yml:主要说明了公共的运行参数,比如是否使用GPU、每多少个epoch存储checkpoint等 - -optimizer_365e.yml:主要说明了学习率和优化器的配置 - -ppyolov2_r50vd_dcn.yml:主要说明模型和主干网络的情况 - -ppyolov2_reader.yml:主要说明数据读取器配置,如batch size,并发加载子进程数等,同时包含读取后预处理操作,如resize、数据增强等等 -``` -在主体检测任务中,需要将`datasets/coco_detection.yml`中的`num_classes`参数修改为1(只有1个前景类别),同时将训练集和测试集的路径修改为自定义数据集的路径。 - -此外,也可以根据实际情况,修改上述文件,比如,如果显存溢出,可以将batch size和学习率等比缩小等。 - - -### 3.4 启动训练 - -PaddleDetection提供了单卡/多卡训练模式,满足用户多种训练需求。 - -* GPU 单卡训练 - -```bash -# windows和Mac下不需要执行该命令 -export CUDA_VISIBLE_DEVICES=0 -python tools/train.py -c configs/ppyolo/ppyolov2_r50vd_dcn_365e_coco.yml -``` - -* GPU多卡训练 - -```bash -export CUDA_VISIBLE_DEVICES=0,1,2,3 -python -m paddle.distributed.launch --gpus 0,1,2,3 tools/train.py -c configs/ppyolo/ppyolov2_r50vd_dcn_365e_coco.yml --eval -``` - ---eval:表示边训练边验证。 - - -* (**推荐**)模型微调 -如果希望加载PaddleClas中已经训练好的主体检测模型,在自己的数据集上进行模型微调,可以使用下面的命令进行训练。 - -```bash -export CUDA_VISIBLE_DEVICES=0 -# 指定pretrain_weights参数,加载通用的主体检测预训练模型 -python tools/train.py -c configs/ppyolo/ppyolov2_r50vd_dcn_365e_coco.yml -o pretrain_weights=https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/rec/models/pretrain/ppyolov2_r50vd_dcn_mainbody_v1.0_pretrained.pdparams -``` - - -* 模型恢复训练 - -在日常训练过程中,有的用户由于一些原因导致训练中断,可以使用-r的命令恢复训练: - -```bash -export CUDA_VISIBLE_DEVICES=0,1,2,3 -python -m paddle.distributed.launch --gpus 0,1,2,3 tools/train.py -c configs/ppyolo/ppyolov2_r50vd_dcn_365e_coco.yml --eval -r output/ppyolov2_r50vd_dcn_365e_coco/10000 -``` - -注意:如果遇到 "`Out of memory error`" 问题, 尝试在 `ppyolov2_reader.yml` 文件中调小`batch_size` - - -### 3.5 模型预测与调试 - -使用下面的命令完成PaddleDetection的预测过程。 - -```bash -export CUDA_VISIBLE_DEVICES=0 -python tools/infer.py -c configs/ppyolo/ppyolov2_r50vd_dcn_365e_coco.yml --infer_img=your_image_path.jpg --output_dir=infer_output/ --draw_threshold=0.5 -o weights=output/ppyolov2_r50vd_dcn_365e_coco/model_final -``` - -`--draw_threshold` 是个可选参数. 根据 [NMS](https://ieeexplore.ieee.org/document/1699659) 的计算,不同阈值会产生不同的结果 `keep_top_k`表示设置输出目标的最大数量,默认值为100,用户可以根据自己的实际情况进行设定。 - -### 3.6 模型导出与预测部署。 - -执行导出模型脚本: - -```bash -python tools/export_model.py -c configs/ppyolo/ppyolov2_r50vd_dcn_365e_coco.yml --output_dir=./inference -o weights=output/ppyolov2_r50vd_dcn_365e_coco/model_final.pdparams -``` - -预测模型会导出到`inference/ppyolov2_r50vd_dcn_365e_coco`目录下,分别为`infer_cfg.yml`(预测不需要), `model.pdiparams`, `model.pdiparams.info`,`model.pdmodel` 。 - -注意:`PaddleDetection`导出的inference模型的文件格式为`model.xxx`,这里如果希望与PaddleClas的inference模型文件格式保持一致,需要将其`model.xxx`文件修改为`inference.xxx`文件,用于后续主体检测的预测部署。 - -更多模型导出教程,请参考:[EXPORT_MODEL](https://github.com/PaddlePaddle/PaddleDetection/blob/release/2.1/deploy/EXPORT_MODEL.md) - -最终,目录`inference/ppyolov2_r50vd_dcn_365e_coco`中包含`inference.pdiparams`, `inference.pdiparams.info` 以及 `inference.pdmodel` 文件,其中`inference.pdiparams`为保存的inference模型权重文件,`inference.pdmodel`为保存的inference模型结构文件。 - - -导出模型之后,在主体检测与识别任务中,就可以将检测模型的路径更改为该inference模型路径,完成预测。 - -以商品识别为例,其配置文件为[inference_product.yaml](../../../deploy/configs/inference_product.yaml),修改其中的`Global.det_inference_model_dir`字段为导出的主体检测inference模型目录,参考[图像识别快速开始教程](../tutorials/quick_start_recognition.md),即可完成商品检测与识别过程。 - - -### FAQ - -#### Q:可以使用其他的主体检测模型结构吗? - -* A:可以的,但是目前的检测预处理过程仅适配yolo系列的预处理,因此在使用的时候,建议优先使用yolo系列的模型进行训练,如果希望使用faster rcnn等其他系列的模型,需要按照PaddleDetection的数据预处理,修改下预处理逻辑,这块如果您有需求或者有问题的话,欢迎提issue或者在群里反馈。 - -#### Q:可以修改主体检测的预测尺度吗? - -* A:可以的,但是需要注意2个地方 - * PaddleClas中提供的主体检测模型是基于640x640的分辨率去训练的,因此预测的时候也是默认使用640x640的分辨率进行预测,使用其他分辨率预测的话,精度会有所降低。 - * 在模型导出的时候,建议也修改下模型导出的分辨率,保持模型导出、模型预测的分辨率一致。 diff --git a/docs/zh_CN/application/object_detection.md b/docs/zh_CN/application/object_detection.md deleted file mode 100644 index 38806e3d..00000000 --- a/docs/zh_CN/application/object_detection.md +++ /dev/null @@ -1,39 +0,0 @@ -# 通用目标检测 - -## 服务器端实用目标检测方案 - -### 简介 - -* 近年来,学术界和工业界广泛关注图像中目标检测任务。基于SSLD蒸馏方案训练得到的ResNet50_vd预训练模型(ImageNet1k验证集上Top1 Acc为82.39%),结合PaddleDetection中的丰富算子,飞桨提供了一种面向服务器端实用的目标检测方案PSS-DET(Practical Server Side Detection)。基于COCO2017目标检测数据集,V100单卡预测速度为为61FPS时,COCO mAP可达41.6%;预测速度为20FPS时,COCO mAP可达47.8%。 - -### 消融实验 - -* 我们以标准的Faster RCNN ResNet50_vd FPN为例,下表给出了PSS-DET不同的模块的速度与精度收益。 - -| Trick | Train scale | Test scale | COCO mAP | Infer speed/FPS | -|- |:-: |:-: | :-: | :-: | -| `baseline` | 640x640 | 640x640 | 36.4% | 43.589 | -| +`test proposal=pre/post topk 500/300` | 640x640 | 640x640 | 36.2% | 52.512 | -| +`fpn channel=64` | 640x640 | 640x640 | 35.1% | 67.450 | -| +`ssld pretrain` | 640x640 | 640x640 | 36.3% | 67.450 | -| +`ciou loss` | 640x640 | 640x640 | 37.1% | 67.450 | -| +`DCNv2` | 640x640 | 640x640 | 39.4% | 60.345 | -| +`3x, multi-scale training` | 640x640 | 640x640 | 41.0% | 60.345 | -| +`auto augment` | 640x640 | 640x640 | 41.4% | 60.345 | -| +`libra sampling` | 640x640 | 640x640 | 41.6% | 60.345 | - - -基于该实验结论,我们结合Cascade RCNN,使用更大的训练与评估尺度(1000x1500),最终在单卡V100上速度为20FPS,COCO mAP达47.8%。下图给出了目前类似速度的目标检测方法的速度与精度指标。 - - -![pssdet](../../images/det/pssdet.png) - -**注意** -> 这里为了更方便地对比,我们将V100的预测耗时乘以1.2倍,近似转化为Titan V的预测耗时。 - -更加详细的代码、配置与预训练模型的地址可以参考[PaddleDetection](https://github.com/PaddlePaddle/PaddleDetection/tree/master/configs/rcnn_server_side_det)。 - - -## 移动端实用目标检测方案 - -* 目前正在更新中,敬请期待! \ No newline at end of file diff --git a/docs/zh_CN/application/product_recognition.md b/docs/zh_CN/application/product_recognition.md deleted file mode 100644 index eaa4cf2d..00000000 --- a/docs/zh_CN/application/product_recognition.md +++ /dev/null @@ -1,41 +0,0 @@ -# 商品识别 - -商品识别技术,是现如今应用非常广的一个领域。拍照购物的方式已经被很多人所采纳,无人结算台已经走入各大超市,无人超市更是如火如荼,这背后都是以商品识别技术作为支撑。商品识别技术大概是"商品检测+商品识别"这样的流程,商品检测模块负责检测出潜在的商品区域,商品识别模型负责将商品检测模块检测出的主体进行识别。识别模块多采用检索的方式,根据查询图片和底库图片进行相似度排序获得预测类别。此文档主要对商品图片的特征提取部分进行相关介绍。 - -## 1 算法介绍 - -算法整体流程,详见[特征学习](./feature_learning.md)整体流程。 - -整体设置详见: [ResNet50_vd_Aliproduct.yaml](../../../ppcls/configs/Products/ResNet50_vd_Aliproduct.yaml) - -具体细节如下所示。 - -### 1.1数据增强 - -- 图像`RandomCrop`到224x224 -- 图像`RandomFlip` -- Normlize:图像归一化 - -### 1.2 Backbone的具体设置 - -具体是用`ResNet50_vd`作为backbone,使用ImageNet预训练模型 - -### 1.3 Neck部分 - -加入一个512维的embedding FC层,没有做BatchNorm和激活。 - -### 1.4 Metric Learning相关Loss的设置 - -目前使用了[CELoss](../../../ppcls/loss/celoss.py)训练, 为了获得更加鲁棒的特征,后续会使用其他Loss参与训练,敬请期待。 - -## 2 实验结果 - - - -此方案在Aliproduct[1]数据集上进行实验。此数据集是天池竞赛开源的一个数据集,也是目前开源的最大的商品数据集,其有5万多个标识类别,约250万训练图片。 - -在此数据上,单模型Top 1 Acc:85.67%。 - -## 3 参考文献 - -[1] Weakly Supervised Learning with Side Information for Noisy Labeled Images. ECCV, 2020. diff --git a/docs/zh_CN/application/transfer_learning.md b/docs/zh_CN/application/transfer_learning.md deleted file mode 100644 index 81500927..00000000 --- a/docs/zh_CN/application/transfer_learning.md +++ /dev/null @@ -1,86 +0,0 @@ -# 图像分类迁移学习 - -迁移学习是机器学习领域的一个重要分支,广泛应用于文本、图像等各种领域,此处我们主要介绍的是图像分类领域的迁移学习,也就是我们常说的域迁移,比如将 ImageNet 分类模型迁移到我们自己场景的图像分类任务上,如花卉分类。 - -## 一、 超参搜索 - -ImageNet 作为业界常用的图像分类数据被大家广泛使用,已经总结出一系列经验性的超参,使用这些超参往往能够得到不错的训练精度,而这些经验性的参数在迁移到自己的业务中时,有时效果不佳。有两种常用的超参搜索方法可以用于获得更好的模型超参。 - -### 1.1 网格搜索 - -网格搜索,即穷举搜索,通过查找搜索空间内所有的点,确定最优值。方法简单有效,但当搜索空间较大时,需要消耗大量的计算资源。 - -### 1.2 贝叶斯搜索 - -贝叶斯搜索,即贝叶斯优化,在搜索空间中随机选取超参数点,采用高斯过程,即根据上一个超参数点的结果,更新当前的先验信息,计算前面n个超参数点的后验概率分布,得到搜索空间中每一个超参数点的期望均值和方差,其中期望均值越大表示接近最优指标的可能性越大,方差越大表示不确定性越大。通常将选择期望均值大的超参数点称为`exporitation`,选择方差大的超参数点称为`exploration`。在贝叶斯优化中通过定义`acquisition function`权衡期望均值和方差。贝叶斯搜索认为当前选择的超参数点是处于最大值可能出现的位置。 - ------- - -基于上述两种搜索方案,我们在8个开源数据集上将固定一组参数实验以及两种搜索方案做了对比实验,参照[1]的实验方案,我们对4个超参数进行搜索,搜索空间及实验结果如下所示: - -- 固定参数: - -``` -初始学习率lr=0.003,l2 decay=1e-4,label smoothing=False,mixup=False -``` - -- 超参搜索空间: - -``` -初始学习率lr: [0.1, 0.03, 0.01, 0.003, 0.001, 0.0003, 0.0001] - -L2 decay: [1e-3, 3e-4, 1e-4, 3e-5, 1e-5, 3e-6, 1e-6] - -Label smoothing: [False, True] - -Mixup: [False, True] -``` - -网格搜索的搜索次数为196次,而贝叶斯搜索通过设置最大迭代次数(`max_iter`)和是否重复搜索(`de_duplication`)来确定搜索次数。我们设计了系列实验,baseline为ImageNet1k校验集Top1 Acc为79.12%的ResNet50_vd预训练模型,并固定超参,在新数据集上finetune得到的模型。下表给出了固定参数、网格搜索以及贝叶斯搜索的精度与搜索次数对比。 - -- 精度与搜索次数对比: - -| 数据集 | 固定参数 | 网格搜索 | 网格搜索次数 | 贝叶斯搜索 | 贝叶斯搜索次数| -| ------------------ | -------- | -------- | -------- | -------- | ---------- | -| Oxford-IIIT-Pets | 93.64% | 94.55% | 196 | 94.04% | 20 | -| Oxford-102-Flowers | 96.08% | 97.69% | 196 | 97.49% | 20 | -| Food101 | 87.07% | 87.52% | 196 | 87.33% | 23 | -| SUN397 | 63.27% | 64.84% | 196 | 64.55% | 20 | -| Caltech101 | 91.71% | 92.54% | 196 | 92.16% | 14 | -| DTD | 76.87% | 77.53% | 196 | 77.47% | 13 | -| Stanford Cars | 85.14% | 92.72% | 196 | 92.72% | 25 | -| FGVC Aircraft | 80.32% | 88.45% | 196 | 88.36% | 20 | - - -- 上述实验验证了贝叶斯搜索相比网格搜索,在减少搜索次数10倍左右条件下,精度只下降0%~0.4%。 -- 当搜索空间进一步扩大时,例如将是否进行AutoAugment,RandAugment,Cutout, Cutmix以及Dropout这些正则化策略作为选择时,贝叶斯搜索能够在获取较优精度的前提下,有效地降低搜索次数。 - -## 二、 大规模分类模型 - -在实际应用中,由于训练数据的匮乏,往往将ImageNet1k数据集训练的分类模型作为预训练模型,进行图像分类的迁移学习。为了进一步助力解决实际问题,基于ResNet50_vd, 百度开源了自研的大规模分类预训练模型,其中训练数据为10万个类别,4300万张图片。10万类预训练模型的下载地址:[**下载地址**](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/ResNet50_vd_10w_pretrained.pdparams) - -我们在6个自有采集的数据集上进行迁移学习实验,采用一组固定参数以及网格搜索方式,其中训练轮数设置为20epochs,选用ResNet50_vd模型,ImageNet预训练精度为79.12%。实验数据集参数以及模型精度的对比结果如下: - -固定参数: - -``` -初始学习率lr=0.001,l2 decay=1e-4,label smoothing=False,mixup=False -``` - -| 数据集 | 数据统计 | **ImageNet预训练模型
固定参数Top-1/参数搜索Top-1** | **大规模分类预训练模型
固定参数Top-1/参数搜索Top-1** | -| --------------- | ----------------------------------------- | -------------------------------------------------------- | --------------------------------------------------------- | -| 花卉 | class:102
train:5789
valid:2396 | 0.7779/0.9883 | 0.9892/0.9954 | -| 手绘简笔画 | Class:18
train:1007
valid:432 | 0.8795/0.9196 | 0.9107/0.9219 | -| 植物叶子 | class:6
train:5256
valid:2278 | 0.8212/0.8482 | 0.8385/0.8659 | -| 集装箱车辆 | Class:115
train:4879
valid:2094 | 0.6230/0.9556 | 0.9524/0.9702 | -| 椅子 | class:5
train:169
valid:78 | 0.8557/0.9688 | 0.9077/0.9792 | -| 地质 | class:4
train:671
valid:296 | 0.5719/0.8094 | 0.6781/0.8219 | - -- 通过上述的实验验证了当使用一组固定参数时,相比于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. - -[2] Kolesnikov, Alexander, et al. "Large Scale Learning of General Visual Representations for Transfer." *arXiv preprint arXiv:1912.11370* (2019). diff --git a/docs/zh_CN/application/vehicle_recognition.md b/docs/zh_CN/application/vehicle_recognition.md deleted file mode 100644 index 665e4470..00000000 --- a/docs/zh_CN/application/vehicle_recognition.md +++ /dev/null @@ -1,97 +0,0 @@ -# 车辆识别 -此部分主要包含两部分:车辆细粒度分类、车辆ReID。 - -细粒度分类,是对属于某一类基础类别的图像进行子类别的细粉,如各种鸟、各种花、各种矿石之间。顾名思义,车辆细粒度分类是对车辆的不同子类别进行分类。 - -ReID,也就是 Re-identification,其定义是利用算法,在图像库中找到要搜索的目标的技术,所以它是属于图像检索的一个子问题。而车辆ReID就是给定一张车辆图像,找出同一摄像头不同的拍摄图像,或者不同摄像头下拍摄的同一车辆图像的过程。在此过程中,如何提取鲁棒特征,尤为重要。 - -此文档中,使用同一套训练方案对两个细方向分别做了尝试。 - -## 1 算法介绍 -算法整体流程,详见[特征学习](./feature_learning.md)整体流程。 - -车辆ReID整体设置详见: [ResNet50_ReID.yaml](../../../ppcls/configs/Vehicle/ResNet50_ReID.yaml)。 - -车辆细分类整体设置详见:[ResNet50.yaml](../../../ppcls/configs/Vehicle/ResNet50.yaml) - -具体细节如下所示。 - -### 1.1数据增强 - -与普通训练分类不同,此部分主要使用如下图像增强方式: - -- 图像`Resize`到224。尤其对于ReID而言,车辆图像已经是由检测器检测后crop出的车辆图像,因此若再使用crop图像增强,会丢失更多的车辆信息 -- [AugMix](https://arxiv.org/abs/1912.02781v1):模拟光照变化、摄像头位置变化等实际场景 -- [RandomErasing](https://arxiv.org/pdf/1708.04896v2.pdf):模拟遮挡等实际情况 - -### 1.2 Backbone的具体设置 - -使用`ResNet50`作为backbone,同时做了如下修改: - - - last stage stride=1, 保持最后输出特征图尺寸14x14。计算量增加较小,但显著提高模型特征提取能力 - - -具体代码:[ResNet50_last_stage_stride1](../../../ppcls/arch/backbone/variant_models/resnet_variant.py) - -### 1.3 Neck部分 - -为了降低inferecne时计算特征距离的复杂度,添加一个embedding 卷积层,特征维度为512。 - -### 1.4 Metric Learning相关Loss的设置 - -车辆ReID及细粒度分类中,使用了[SupConLoss](../../../ppcls/loss/supconloss.py) + [ArcLoss](../../../ppcls/arch/gears/arcmargin.py),其中权重比例为1:1 - -## 2 实验结果 - -### 2.1 车辆ReID - - - -此方法在VERI-Wild数据集上进行了实验。此数据集是在一个大型闭路电视监控系统,在无约束的场景下,一个月内(30*24小时)中捕获的。该系统由174个摄像头组成,其摄像机分布在200多平方公里的大型区域。原始车辆图像集包含1200万个车辆图像,经过数据清理和标注,采集了416314张40671个不同的车辆图像。[具体详见论文](https://github.com/PKU-IMRE/VERI-Wild) - -| **Methods** | **Small** | | | -| :--------------------------: | :-------: | :-------: | :-------: | -| | mAP | Top1 | Top5 | -| Strong baesline(Resnet50)[1] | 76.61 | 90.83 | 97.29 | -| HPGN(Resnet50+PGN)[2] | 80.42 | 91.37 | - | -| GLAMOR(Resnet50+PGN)[3] | 77.15 | 92.13 | 97.43 | -| PVEN(Resnet50)[4] | 79.8 | 94.01 | 98.06 | -| SAVER(VAE+Resnet50)[5] | 80.9 | 93.78 | 97.93 | -| PaddleClas baseline | 80.57 | **93.81** | **98.06** | - -### 2.2 车辆细分类 - -车辆细分类中,使用[CompCars](http://mmlab.ie.cuhk.edu.hk/datasets/comp_cars/index.html)作为训练数据集。 - -![](../../images/recognition/vehicle/CompCars.png) - -数据集中图像主要来自网络和监控数据,其中网络数据包含163个汽车制造商、1716个汽车型号的汽车。共**136,726**张全车图像,**27,618**张部分车图像。其中网络汽车数据包含bounding box、视角、5个属性(最大速度、排量、车门数、车座数、汽车类型)。监控数据包含**50,000**张前视角图像。 -值得注意的是,此数据集中需要根据自己的需要生成不同的label,如本demo中,将不同年份生产的相同型号的车辆视为同一类,因此,类别总数为:431类。 - -| **Methods** | Top1 Acc | -| :-----------------------------: | :--------: | -| ResNet101-swp[6] | 97.6% | -| Fine-Tuning DARTS[7] | 95.9% | -| Resnet50 + COOC[8] | 95.6% | -| A3M[9] | 95.4% | -| PaddleClas baseline (ResNet50) | **97.37**% | - -## 3 参考文献 - -[1] Bag of Tricks and a Strong Baseline for Deep Person Re-Identification.CVPR workshop 2019. - -[2] Exploring Spatial Significance via Hybrid Pyramidal Graph Network for Vehicle Re-identification. In arXiv preprint arXiv:2005.14684 - -[3] GLAMORous: Vehicle Re-Id in Heterogeneous Cameras Networks with Global and Local Attention. In arXiv preprint arXiv:2002.02256 - -[4] Parsing-based view-aware embedding network for vehicle re-identification. CVPR 2020. - -[5] The Devil is in the Details: Self-Supervised Attention for Vehicle Re-Identification. In ECCV 2020. - -[6] Deep CNNs With Spatially Weighted Pooling for Fine-Grained Car Recognition. IEEE Transactions on Intelligent Transportation Systems, 2017. - -[7] Fine-Tuning DARTS for Image Classification. 2020. - -[8] Fine-Grained Vehicle Classification with Unsupervised Parts Co-occurrence Learning. 2018 - -[9] Attribute-Aware Attention Model for Fine-grained Representation Learning. 2019. diff --git a/docs/zh_CN/competition_support.md b/docs/zh_CN/competition_support.md deleted file mode 100644 index db702d49..00000000 --- a/docs/zh_CN/competition_support.md +++ /dev/null @@ -1,19 +0,0 @@ -### 赛事支持 - -PaddleClas的建设源于百度实际视觉业务应用的淬炼和视觉前沿能力的探索,助力多个视觉重点赛事取得领先成绩,并且持续推进更多的前沿视觉问题的解决和落地应用。 - -* 2018年Kaggle Open Images V4图像目标检测挑战赛冠军 - -* 2019年Kaggle Open Images V5图像目标检测挑战赛亚军 - * 技术报告可以参考:[https://arxiv.org/pdf/1911.07171.pdf](https://arxiv.org/pdf/1911.07171.pdf) - * 详细文档与开源的模型可以参考:[OIDV5目标检测github地址](https://github.com/PaddlePaddle/PaddleDetection/blob/master/docs/featured_model/OIDV5_BASELINE_MODEL.md) - -* 2019年Kaggle地标检索挑战赛亚军 - * 技术报告可以参考:[https://arxiv.org/abs/1906.03990](https://arxiv.org/abs/1906.03990) - * 详细文档与开源的模型可以参考:[2019地标检索和识别github地址](https://github.com/PaddlePaddle/Research/tree/master/CV/landmark) - -* 2019年Kaggle地标识别挑战赛亚军 - * 技术报告可以参考:[https://arxiv.org/abs/1906.03990](https://arxiv.org/abs/1906.03990) - * 详细文档与开源的模型可以参考:[2019地标检索和识别github地址](https://github.com/PaddlePaddle/Research/tree/master/CV/landmark) - -* 首届多媒体信息识别技术竞赛中印刷文本OCR、人脸识别和地标识别三项任务A级证书 diff --git a/docs/zh_CN/conf.py b/docs/zh_CN/conf.py deleted file mode 100644 index 16529507..00000000 --- a/docs/zh_CN/conf.py +++ /dev/null @@ -1,79 +0,0 @@ -# Configuration file for the Sphinx documentation builder. -# -# This file only contains a selection of the most common options. For a full -# list see the documentation: -# https://www.sphinx-doc.org/en/master/usage/configuration.html - -# -- Path setup -------------------------------------------------------------- - -# If extensions (or modules to document with autodoc) are in another directory, -# add these directories to sys.path here. If the directory is relative to the -# documentation root, use os.path.abspath to make it absolute, like shown here. -# -import os -import recommonmark - -exclude_patterns = ['_build', 'Thumbs.db', '.DS_Store'] - -# -- Project information ----------------------------------------------------- - -project = 'PaddleClas' -copyright = '2020, paddlepaddle' -author = 'paddlepaddle' - -# -- General configuration --------------------------------------------------- - -# Add any Sphinx extension module names here, as strings. They can be -# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom -# ones. - -extensions = [ - 'sphinx.ext.autodoc', - 'sphinx.ext.napoleon', - 'sphinx.ext.coverage', - 'sphinx.ext.viewcode', - 'sphinx.ext.mathjax', - 'sphinx.ext.githubpages', - 'sphinx.ext.napoleon', - 'recommonmark', - 'sphinx_markdown_tables', -] - -# Add any paths that contain templates here, relative to this directory. -templates_path = ['_templates'] - -# md file can also be parased -source_suffix = ['.rst', '.md'] - -# The master toctree document. -master_doc = 'index' - -# The language for content autogenerated by Sphinx. Refer to documentation -# for a list of supported languages. -# -# This is also used if you do content translation via gettext catalogs. -# Usually you set "language" from the command line for these cases. -language = 'zh_CN' - -# -- Options for HTML output ------------------------------------------------- - -# The theme to use for HTML and HTML Help pages. See the documentation for -# a list of builtin themes. - -# on_rtd is whether we are on readthedocs.org, this line of code grabbed from docs.readthedocs.org -on_rtd = os.environ.get('READTHEDOCS', None) == 'True' - -if not on_rtd: # only import and set the theme if we're building docs locally - import sphinx_rtd_theme - html_theme = 'sphinx_rtd_theme' - html_theme_path = [sphinx_rtd_theme.get_html_theme_path()] - -# otherwise, readthedocs.org uses their theme by default, so no need to specify it - -# Add any paths that contain custom static files (such as style sheets) here, -# relative to this directory. They are copied after the builtin static files, -# so a file named "default.css" will overwrite the builtin "default.css". - -html_static_path = ['_static'] - -html_logo = '../images/logo.png' diff --git a/docs/zh_CN_tmp/data_preparation/classification_dataset.md b/docs/zh_CN/data_preparation/classification_dataset.md similarity index 100% rename from docs/zh_CN_tmp/data_preparation/classification_dataset.md rename to docs/zh_CN/data_preparation/classification_dataset.md diff --git a/docs/zh_CN_tmp/data_preparation/recognition_dataset.md b/docs/zh_CN/data_preparation/recognition_dataset.md similarity index 100% rename from docs/zh_CN_tmp/data_preparation/recognition_dataset.md rename to docs/zh_CN/data_preparation/recognition_dataset.md diff --git a/docs/zh_CN/extension/VisualDL.md b/docs/zh_CN/extension/VisualDL.md deleted file mode 100644 index 3c002006..00000000 --- a/docs/zh_CN/extension/VisualDL.md +++ /dev/null @@ -1,43 +0,0 @@ -# 使用VisualDL可视化训练过程 - -## 前言 -VisualDL是飞桨可视化分析工具,以丰富的图表呈现训练参数变化趋势、模型结构、数据样本、高维数据分布等。可帮助用户更清晰直观地理解深度学习模型训练过程及模型结构,进而实现高效的模型优化。更多细节请查看[VisualDL](https://github.com/PaddlePaddle/VisualDL/)。 - -## 在PaddleClas中使用VisualDL -现在PaddleClas支持在训练阶段使用VisualDL查看训练过程中学习率(learning rate)、损失值(loss)以及准确率(accuracy)的变化情况。 - -### 设置config文件并启动训练 -在PaddleClas中使用VisualDL,只需在训练配置文件(config文件)中设置字段 `Global.use_visualdl` 为 `True`: - -```yaml -# config.yaml -Global: -... - use_visualdl: True -... -``` - -PaddleClas 会将 VisualDL 的日志保存在 `Global.output_dir` 字段指定目录下的 `vdl/` 子目录下,然后正常启动训练即可: - -```shell -python3 tools/train.py -c config.yaml -``` - -### 启动VisualDL -在启动训练程序后,可以在新的终端session中启动VisualDL服务: - -```shell - visualdl --logdir ./output/vdl/ - ``` - -上述命令中,参数`--logdir`用于指定保存 VisualDL 日志的目录,VisualDL将遍历并且迭代寻找指定目录的子目录,将所有实验结果进行可视化。也同样可以使用下述参数设定VisualDL服务的ip及端口号: -* `--host`:设定IP,默认为127.0.0.1 -* `--port`:设定端口,默认为8040 - -更多参数信息,请查看[VisualDL](https://github.com/PaddlePaddle/VisualDL/blob/develop/README_CN.md#2-%E5%90%AF%E5%8A%A8%E9%9D%A2%E6%9D%BF)。 - -在启动VisualDL后,即可在浏览器中查看训练过程,输入地址`127.0.0.1:8840`: - -
- -
diff --git a/docs/zh_CN/extension/code_overview.md b/docs/zh_CN/extension/code_overview.md deleted file mode 100644 index 20cac8fa..00000000 --- a/docs/zh_CN/extension/code_overview.md +++ /dev/null @@ -1,5 +0,0 @@ -# 代码结构概览 - -* 正在持续更新中!!! - - diff --git a/docs/zh_CN/extension/index.rst b/docs/zh_CN/extension/index.rst deleted file mode 100644 index 657349a0..00000000 --- a/docs/zh_CN/extension/index.rst +++ /dev/null @@ -1,12 +0,0 @@ -实用工具 -================================ - -.. toctree:: - :maxdepth: 1 - - paddle_inference.md - paddle_mobile_inference.md - paddle_quantization.md - multi_machine_training.md - paddle_hub.md - paddle_serving.md diff --git a/docs/zh_CN/extension/multi_machine_training.md b/docs/zh_CN/extension/multi_machine_training.md deleted file mode 100644 index a54df703..00000000 --- a/docs/zh_CN/extension/multi_machine_training.md +++ /dev/null @@ -1,6 +0,0 @@ -# 多机训练 - -分布式训练的高性能,是飞桨的核心优势技术之一,在分类任务上,分布式训练可以达到几乎线性的加速比。 -[Fleet](https://github.com/PaddlePaddle/Fleet) 是用于 PaddlePaddle 分布式训练的高层 API,基于这套接口用户可以很容易切换到分布式训练程序。 -为了可以同时支持单机训练和多机训练,[PaddleClas](https://github.com/PaddlePaddle/PaddleClas) 采用 Fleet API 接口,更多的分布式训练可以参考 [Fleet API设计文档](https://github.com/PaddlePaddle/Fleet/blob/develop/README.md)。 - diff --git a/docs/zh_CN/extension/paddle_hub.md b/docs/zh_CN/extension/paddle_hub.md deleted file mode 100644 index 733d9d8f..00000000 --- a/docs/zh_CN/extension/paddle_hub.md +++ /dev/null @@ -1,4 +0,0 @@ -# Paddle Hub - -[PaddleHub](https://github.com/PaddlePaddle/PaddleHub) 是飞桨生态的预训练模型应用工具,开发者可以便捷地使用高质量的预训练模型结合 Fine-tune API 快速完成模型迁移到部署的全流程工作。 -PaddleHub 收录了 [PaddleClas](https://github.com/PaddlePaddle/PaddleClas) 的所有预训练模型,更多使用细节请查看 [PaddleHub官网](https://www.paddlepaddle.org.cn/hub)。 diff --git a/docs/zh_CN/extension/paddle_mobile_inference.md b/docs/zh_CN/extension/paddle_mobile_inference.md deleted file mode 100644 index 529df900..00000000 --- a/docs/zh_CN/extension/paddle_mobile_inference.md +++ /dev/null @@ -1,119 +0,0 @@ -# Paddle-Lite - -## 一、简介 - -[Paddle-Lite](https://github.com/PaddlePaddle/Paddle-Lite) 是飞桨推出的一套功能完善、易用性强且性能卓越的轻量化推理引擎。 -轻量化体现在使用较少比特数用于表示神经网络的权重和激活,能够大大降低模型的体积,解决终端设备存储空间有限的问题,推理性能也整体优于其他框架。 -[PaddleClas](https://github.com/PaddlePaddle/PaddleClas) 使用 Paddle-Lite 进行了[移动端模型的性能评估](../models/Mobile.md),本部分以`ImageNet1k`数据集的`MobileNetV1`模型为例,介绍怎样使用`Paddle-Lite`,在移动端(基于骁龙855的安卓开发平台)对进行模型速度评估。 - - -## 二、评估步骤 - -### 2.1 导出inference模型 - -* 首先需要将训练过程中保存的模型存储为用于预测部署的固化模型,可以使用`tools/export_model.py`导出inference模型,具体使用方法如下。 - -```shell -python tools/export_model.py -m MobileNetV1 -p pretrained/MobileNetV1_pretrained/ -o inference/MobileNetV1 -``` - -最终在`inference/MobileNetV1`文件夹下会保存得到`model`与`parmas`文件。 - - -### 2.2 benchmark二进制文件下载 - -* 使用adb(Android Debug Bridge)工具可以连接Android手机与PC端,并进行开发调试等。安装好adb,并确保PC端和手机连接成功后,使用以下命令可以查看手机的ARM版本,并基于此选择合适的预编译库。 - -```shell -adb shell getprop ro.product.cpu.abi -``` - -* 下载benchmark_bin文件 - -```shell -wget -c https://paddle-inference-dist.bj.bcebos.com/PaddleLite/benchmark_0/benchmark_bin_v8 -``` - -如果查看的ARM版本为v7,则需要下载v7版本的benchmark_bin文件,下载命令如下。 - -```shell -wget -c https://paddle-inference-dist.bj.bcebos.com/PaddleLite/benchmark_0/benchmark_bin_v7 -``` - -### 2.3 模型速度benchmark - -PC端和手机连接成功后,使用下面的命令开始模型评估。 - -``` -sh deploy/lite/benchmark/benchmark.sh ./benchmark_bin_v8 ./inference result_armv8.txt true -``` - -其中`./benchmark_bin_v8`为benchmark二进制文件路径,`./inference`为所有需要评测的模型的路径,`result_armv8.txt`为保存的结果文件,最后的参数`true`表示在评估之后会首先进行模型优化。最终在当前文件夹下会输出`result_armv8.txt`的评估结果文件,具体信息如下。 - -``` -PaddleLite Benchmark -Threads=1 Warmup=10 Repeats=30 -MobileNetV1 min = 30.89100 max = 30.73600 average = 30.79750 - -Threads=2 Warmup=10 Repeats=30 -MobileNetV1 min = 18.26600 max = 18.14000 average = 18.21637 - -Threads=4 Warmup=10 Repeats=30 -MobileNetV1 min = 10.03200 max = 9.94300 average = 9.97627 -``` - -这里给出了不同线程数下的模型预测速度,单位为FPS,以线程数为1为例,MobileNetV1在骁龙855上的平均速度为`30.79750FPS`。 - - -### 2.4 模型优化与速度评估 - - -* 在2.3节中提到了在模型评估之前对其进行优化,在这里也可以首先对模型进行优化,再直接加载优化后的模型进行速度评估。 - -* Paddle-Lite 提供了多种策略来自动优化原始的训练模型,其中包括量化、子图融合、混合调度、Kernel优选等等方法。为了使优化过程更加方便易用,Paddle-Lite提供了opt 工具来自动完成优化步骤,输出一个轻量的、最优的可执行模型。可以在[Paddle-Lite模型优化工具页面](https://paddle-lite.readthedocs.io/zh/latest/user_guides/model_optimize_tool.html)下载。在这里以`MacOS`开发环境为例,下载[opt_mac](https://paddlelite-data.bj.bcebos.com/model_optimize_tool/opt_mac)模型优化工具,并使用下面的命令对模型进行优化。 - - - -```shell -model_file="../MobileNetV1/model" -param_file="../MobileNetV1/params" -opt_models_dir="./opt_models" -mkdir ${opt_models_dir} -./opt_mac --model_file=${model_file} \ - --param_file=${param_file} \ - --valid_targets=arm \ - --optimize_out_type=naive_buffer \ - --prefer_int8_kernel=false \ - --optimize_out=${opt_models_dir}/MobileNetV1 -``` - -其中`model_file`与`param_file`分别是导出的inference模型结构文件与参数文件地址,转换成功后,会在`opt_models`文件夹下生成`MobileNetV1.nb`文件。 - - - - -使用benchmark_bin文件加载优化后的模型进行评估,具体的命令如下。 - -```shell -bash benchmark.sh ./benchmark_bin_v8 ./opt_models result_armv8.txt -``` - -最终`result_armv8.txt`中结果如下。 - -``` -PaddleLite Benchmark -Threads=1 Warmup=10 Repeats=30 -MobileNetV1_lite min = 30.89500 max = 30.78500 average = 30.84173 - -Threads=2 Warmup=10 Repeats=30 -MobileNetV1_lite min = 18.25300 max = 18.11000 average = 18.18017 - -Threads=4 Warmup=10 Repeats=30 -MobileNetV1_lite min = 10.00600 max = 9.90000 average = 9.96177 -``` - - -以线程数为1为例,MobileNetV1在骁龙855上的平均速度为`30.84173FPS`。 - - -更加具体的参数解释与Paddle-Lite使用方法可以参考 [Paddle-Lite 文档](https://paddle-lite.readthedocs.io/zh/latest/)。 diff --git a/docs/zh_CN/extension/paddle_quantization.md b/docs/zh_CN/extension/paddle_quantization.md deleted file mode 100644 index 9e320ebd..00000000 --- a/docs/zh_CN/extension/paddle_quantization.md +++ /dev/null @@ -1,5 +0,0 @@ -# 模型量化 - -模型量化是 [PaddleSlim](https://github.com/PaddlePaddle/PaddleSlim) 的特色功能之一,支持动态和静态两种量化训练方式,对权重全局量化和 Channel-Wise 量化,同时以兼容 Paddle-Lite 的格式保存模型。 -[PaddleClas](https://github.com/PaddlePaddle/PaddleClas) 使用该量化工具,量化了78.9%的mobilenet_v3_large_x1_0的蒸馏模型, 量化后SD855上预测速度从19.308ms加速到14.395ms,存储大小从21M减小到10M, top1识别准确率75.9%。 -具体的训练方法可以参见 [PaddleSlim 量化训练](../../../deploy/slim/quant/README.md)。 diff --git a/docs/zh_CN/extension/paddle_serving.md b/docs/zh_CN/extension/paddle_serving.md deleted file mode 100644 index 7b910204..00000000 --- a/docs/zh_CN/extension/paddle_serving.md +++ /dev/null @@ -1,65 +0,0 @@ -# 模型服务化部署 - -## 一、简介 -[Paddle Serving](https://github.com/PaddlePaddle/Serving) 旨在帮助深度学习开发者轻易部署在线预测服务,支持一键部署工业级的服务能力、客户端和服务端之间高并发和高效通信、并支持多种编程语言开发客户端。 - -该部分以HTTP预测服务部署为例,介绍怎样在PaddleClas中使用PaddleServing部署模型服务。 - - -## 二、Serving安装 - -Serving官网推荐使用docker安装并部署Serving环境。首先需要拉取docker环境并创建基于Serving的docker。 - -```shell -nvidia-docker pull hub.baidubce.com/paddlepaddle/serving:0.2.0-gpu -nvidia-docker run -p 9292:9292 --name test -dit hub.baidubce.com/paddlepaddle/serving:0.2.0-gpu -nvidia-docker exec -it test bash -``` - -进入docker后,需要安装Serving相关的python包。 - -```shell -pip install paddlepaddle-gpu -pip install paddle-serving-client -pip install paddle-serving-server-gpu -``` - -* 如果安装速度太慢,可以通过`-i https://pypi.tuna.tsinghua.edu.cn/simple`更换源,加速安装过程。 - -* 如果希望部署CPU服务,可以安装serving-server的cpu版本,安装命令如下。 - -```shell -pip install paddle-serving-server -``` - -### 三、导出模型 - -使用`tools/export_serving_model.py`脚本导出Serving模型,以`ResNet50_vd`为例,使用方法如下。 - -```shell -python tools/export_serving_model.py -m ResNet50_vd -p ./pretrained/ResNet50_vd_pretrained/ -o serving -``` - -最终在serving文件夹下会生成`ppcls_client_conf`与`ppcls_model`两个文件夹,分别存储了client配置、模型参数与结构文件。 - - -### 四、服务部署与请求 - -* 使用下面的方式启动Serving服务。 - -```shell -python tools/serving/image_service_gpu.py serving/ppcls_model workdir 9292 -``` - -其中`serving/ppcls_model`为刚才保存的Serving模型地址,`workdir`为为工作目录,`9292`为服务的端口号。 - - -* 使用下面的脚本向Serving服务发送识别请求,并返回结果。 - -``` -python tools/serving/image_http_client.py 9292 ./docs/images/logo.png -``` - -`9292`为发送请求的端口号,需要与服务启动时的端口号保持一致,`./docs/images/logo.png`为待识别的图像文件。最终返回Top1识别结果的类别ID以及概率值。 - -* 更多的服务部署类型,如`RPC预测服务`等,可以参考Serving的github官网:[https://github.com/PaddlePaddle/Serving/tree/develop/python/examples/imagenet](https://github.com/PaddlePaddle/Serving/tree/develop/python/examples/imagenet) diff --git a/docs/zh_CN/extension/train_on_xpu.md b/docs/zh_CN/extension/train_on_xpu.md deleted file mode 100644 index c1b9a6d2..00000000 --- a/docs/zh_CN/extension/train_on_xpu.md +++ /dev/null @@ -1,32 +0,0 @@ -# 图像分类昆仑模型介绍(持续更新中) - -## 前言 - -* 本文档介绍了目前昆仑支持的模型以及如何在昆仑设备上训练这些模型。支持昆仑的PaddlePaddle安装参考install_kunlun(https://github.com/PaddlePaddle/FluidDoc/blob/develop/doc/paddle/install/install_Kunlun_zh.md) - -## 昆仑训练 -* 数据来源和预训练模型参考[quick_start](../tutorials/quick_start_new_user.md)。昆仑训练效果与CPU/GPU对齐。 - -### ResNet50 -* 命令: - -```python3.7 tools/static/train.py -c configs/quick_start/ResNet50_vd_finetune_kunlun.yaml -o use_gpu=False -o use_xpu=True -o is_distributed=False``` - -与cpu/gpu训练的区别是加上-o use_xpu=True, 表示执行在昆仑设备上。 - -### MobileNetV3 -* 命令: - -```python3.7 tools/static/train.py -c configs/quick_start/MobileNetV3_large_x1_0_finetune.yaml -o use_gpu=False -o use_xpu=True -o is_distributed=False``` - -### HRNet -* 命令: - -```python3.7 tools/static/train.py -c configs/quick_start/HRNet_W18_C_finetune.yaml -o is_distributed=False -o use_cpu=False -o use_xpu=True -o use_gpu=False``` - - -### VGG16/19 -* 命令: - -```python3.7 tools/static/train.py -c configs/quick_start/VGG16_finetune_kunlun.yaml -o use_gpu=False -o use_cpu=False -o use_xpu=True -o is_distributed=False``` -```python3.7 tools/static/train.py -c configs/quick_start/VGG19_finetune_kunlun.yaml -o use_gpu=False -o use_cpu=False -o use_xpu=True -o is_distributed=False``` diff --git a/docs/zh_CN/extension/train_with_DALI.md b/docs/zh_CN/extension/train_with_DALI.md deleted file mode 100644 index 880a0558..00000000 --- a/docs/zh_CN/extension/train_with_DALI.md +++ /dev/null @@ -1,61 +0,0 @@ -# 使用DALI加速训练 - -## 前言 -[NVIDIA数据加载库](https://docs.nvidia.com/deeplearning/dali/user-guide/docs/index.html)(The NVIDIA Data Loading Library,DALI)是用于数据加载和预处理的开源库,用于加速深度学习训练、推理过程,它可以直接构建飞桨Paddle的DataLoader数据读取器。 - -由于深度学习程序在训练阶段依赖大量数据,这些数据需要经过加载、预处理等操作后,才能送入训练程序,而这些操作通常在CPU完成,因此限制了训练速度进一步提高,特别是在batch_size较大时,数据读取可能成为训练速度的瓶颈。DALI可以基于GPU的高并行特性实现数据加载及预处理操作,可以进一步提高训练速度。 - -## 安装DALI -目前DALI仅支持Linux x64平台,且CUDA版本大于等于10.2。 - -* 对于CUDA 10: - - pip install --extra-index-url https://developer.download.nvidia.com/compute/redist nvidia-dali-cuda100 - -* 对于CUDA 11.0: - - pip install --extra-index-url https://developer.download.nvidia.com/compute/redist nvidia-dali-cuda110 - -关于更多DALI安装的信息,可以参考[DALI官方](https://docs.nvidia.com/deeplearning/dali/user-guide/docs/installation.html)。 - -## 使用DALI -PaddleClas支持在静态图训练方式中使用DALI加速,由于DALI仅支持GPU训练,因此需要设置GPU,且DALI需要占用GPU显存,需要为DALI预留显存。使用DALI训练只需在训练配置文件中设置字段`use_dali=True`,或通过以下命令启动训练即可: - -```shell -# 设置用于训练的GPU卡号 -export CUDA_VISIBLE_DEVICES="0" - -# 设置用于神经网络训练的显存大小,可根据具体情况设置,一般可设置为0.8或0.7,剩余显存则预留DALI使用 -export FLAGS_fraction_of_gpu_memory_to_use=0.80 - -python ppcls/static/train.py -c ./ppcls/configs/ImageNet/ResNet/ResNet50.yaml -o use_dali=True -``` - -也可以使用多卡训练: - -```shell -# 设置用于训练的GPU卡号 -export CUDA_VISIBLE_DEVICES="0,1,2,3,4,5,6,7" - -# 设置用于神经网络训练的显存大小,可根据具体情况设置,一般可设置为0.8或0.7,剩余显存则预留DALI使用 -export FLAGS_fraction_of_gpu_memory_to_use=0.80 - -python -m paddle.distributed.launch \ - --gpus="0,1,2,3,4,5,6,7" \ - ppcls/static/train.py \ - -c ./ppcls/configs/ImageNet/ResNet/ResNet50.yaml \ - -o use_dali=True -``` - -## 使用FP16训练 -在上述基础上,使用FP16半精度训练,可以进一步提高速度,可以参考下面的配置与运行命令。 - -```shell -export CUDA_VISIBLE_DEVICES=0,1,2,3,4,5,6,7 -export FLAGS_fraction_of_gpu_memory_to_use=0.8 - -python -m paddle.distributed.launch \ - --gpus="0,1,2,3,4,5,6,7" \ - ppcls/static/train.py \ - -c ./ppcls/configs/ImageNet/ResNet/ResNet50_fp16.yaml -``` diff --git a/docs/zh_CN/faq.md b/docs/zh_CN/faq.md deleted file mode 100644 index 68330f36..00000000 --- a/docs/zh_CN/faq.md +++ /dev/null @@ -1,262 +0,0 @@ -# FAQ - -## 写在前面 - -* 我们收集整理了开源以来在issues和用户群中的常见问题并且给出了简要解答,旨在为图像分类的开发者提供一些参考,也希望帮助大家少走一些弯路。 - -* 图像分类领域大佬众多,模型和论文更新速度也很快,本文档回答主要依赖有限的项目实践,难免挂一漏万,如有遗漏和不足,也希望有识之士帮忙补充和修正,万分感谢。 - - -## PaddleClas常见问题汇总 - -* [图像分类30个问题](#图像分类30个问题) - * [基础知识](#基础知识) - * [模型训练相关](#模型训练相关) - * [数据相关](#数据相关) - * [模型推理与预测相关](#模型推理与预测相关) -* [PaddleClas使用问题](#PaddleClas使用问题) - - - -## 图像分类30个问题 - - -### 基础知识 - ->> -* Q: 图像分类领域常用的分类指标有几种 -* A: - * 对于单个标签的图像分类问题(仅包含1个类别与背景),评估指标主要有Accuracy,Precision,Recall,F-score等,令TP(True Positive)表示将正类预测为正类,FP(False Positive)表示将负类预测为正类,TN(True Negative)表示将负类预测为负类,FN(False Negative)表示将正类预测为负类。那么Accuracy=(TP + TN) / NUM,Precision=TP /(TP + FP),Recall=TP /(TP + FN)。 - * 对于类别数大于1的图像分类问题,评估指标主要有Accuary和Class-wise Accuracy,Accuary表示所有类别预测正确的图像数量占总图像数量的百分比;Class-wise Accuracy是对每个类别的图像计算Accuracy,然后再对所有类别的Accuracy取平均得到。 - ->> -* Q: 怎样根据自己的任务选择合适的模型进行训练? -* A: 如果希望在服务器部署,或者希望精度尽可能地高,对模型存储大小或者预测速度的要求不是很高,那么推荐使用ResNet_vd、Res2Net_vd、DenseNet、Xception等适合于服务器端的系列模型;如果希望在移动端侧部署,则推荐使用MobileNetV3、GhostNet等适合于移动端的系列模型。同时,我们推荐在选择模型的时候可以参考[模型库](https://github.com/PaddlePaddle/PaddleClas/tree/master/docs/zh_CN/models)中的速度-精度指标图。 - ->> -* Q: 如何进行参数初始化,什么样的初始化可以加快模型收敛? -* A: 众所周知,参数的初始化可以影响模型的最终性能。一般来说,如果目标数据集不是很大,建议使用ImageNet-1k训练得到的预训练模型进行初始化。如果是自己手动设计的网络或者暂时没有基于ImageNet-1k训练得到的预训练权重,可以使用Xavier初始化或者MSRA初始化,其中Xavier初始化是针对Sigmoid函数提出的,对RELU函数不太友好,网络越深,各层输入的方差越小,网络越难训练,所以当神经网络中使用较多RELU激活函数时,推荐使用MSRA初始化。 - ->> -* Q: 针对深度神经网络参数冗余的问题,目前有哪些比较好的解决办法? -* A: 目前有几种主要的方法对模型进行压缩,减少模型参数冗余的问题,如剪枝、量化、知识蒸馏等。模型剪枝指的是将权重矩阵中相对不重要的权值剔除,然后再重新对网络进行微调;模型量化指的是一种将浮点计算转成低比特定点计算的技术,如8比特、4比特等,可以有效的降低模型计算强度、参数大小和内存消耗。知识蒸馏是指使用教师模型(teacher model)去指导学生模型(student model)学习特定任务,保证小模型在参数量不变的情况下,性能有较大的提升,甚至获得与大模型相似的精度指标。 - ->> -* Q: 怎样在其他任务,如目标检测、图像分割、关键点检测等任务中选择比较合适的分类模型作为骨干网络? -* A: 在不考虑速度的情况下,在大部分的任务中,推荐使用精度更高的预训练模型和骨干网络,PaddleClas中开源了一系列的SSLD知识蒸馏预训练模型,如ResNet50_vd_ssld, Res2Net200_vd_26w_4s_ssld等,在模型精度和速度方面都是非常有优势的,推荐大家使用。对于一些特定的任务,如图像分割或者关键点检测等任务,对图像分辨率的要求比较高,那么更推荐使用HRNet等能够同时兼顾网络深度和分辨率的神经网络模型,PaddleClas也提供了HRNet_W18_C_ssld、HRNet_W48_C_ssld等精度非常高的HRNet SSLD蒸馏系列预训练模型,大家可以使用这些精度更高的预训练模型与骨干网络,提升自己在其他任务上的模型精度。 - ->> -* Q: 注意力机制是什么?目前有哪些比较常用的注意力机制方法? -* A: 注意力机制(Attention Mechanism)源于对人类视觉的研究。将注意力机制用在计算机视觉任务上,可以有效捕捉图片中有用的区域,从而提升整体网络性能。目前比较常用的有[SE block](https://arxiv.org/abs/1709.01507)、[SK-block](https://arxiv.org/abs/1903.06586)、[Non-local block](https://arxiv.org/abs/1711.07971)、[GC block](https://arxiv.org/abs/1904.11492)、[CBAM](https://arxiv.org/abs/1807.06521)等,核心思想就是去学习特征图在不同区域或者不同通道中的重要性,从而让网络更加注意显著性的区域。 - - -### 模型训练相关 - ->> -* Q: 使用深度卷积网络做图像分类如果训练一个拥有1000万个类的模型会碰到什么问题? -* A: 因为FC层参数很多,内存/显存/模型的存储占用都会大幅增大;模型收敛速度也会变慢一些。建议在这种情况下,再最后的FC层前加一层维度较小的FC,这样可以大幅减少模型的存储大小。 - ->> -* Q: 训练过程中,如果模型收敛效果很差,可能的原因有哪些呢? -* A: 主要有以下几个可以排查的地方:(1)应该检查数据标注,确保训练集和验证集的数据标注没有问题。(2)可以试着调整一下学习率(初期可以以10倍为单位进行调节),过大(训练震荡)或者过小(收敛太慢)的学习率都可能导致收敛效果差。(3)数据量太大,选择的模型太小,难以学习所有数据的特征。(4)可以看下数据预处理的过程中是否使用了归一化,如果没有使用归一化操作,收敛速度可能会比较慢。(5)如果数据量比较小,可以试着加载PaddleClas中提供的基于ImageNet-1k数据集的预训练模型,这可以大大提升训练收敛速度。(6)数据集存在长尾问题,可以参考[数据长尾问题解决方案](#jump)。 - ->> -* Q: 训练图像分类任务时,该怎么选择合适的优化器? -* A: 优化器的目的是为了让损失函数尽可能的小,从而找到合适的参数来完成某项任务。目前业界主要用到的优化器有SGD、RMSProp、Adam、AdaDelt等,其中由于带momentum的SGD优化器广泛应用于学术界和工业界,所以我们发布的模型也大都使用该优化器来实现损失函数的梯度下降。带momentum的SGD优化器有两个劣势,其一是收敛速度慢,其二是初始学习率的设置需要依靠大量的经验,然而如果初始学习率设置得当并且迭代轮数充足,该优化器也会在众多的优化器中脱颖而出,使得其在验证集上获得更高的准确率。一些自适应学习率的优化器如Adam、RMSProp等,收敛速度往往比较快,但是最终的收敛精度会稍差一些。如果追求更快的收敛速度,我们推荐使用这些自适应学习率的优化器,如果追求更高的收敛精度,我们推荐使用带momentum的SGD优化器。 - ->> -* Q: 当前主流的学习率下降策略有哪些?一般需要怎么选择呢? -* A: 学习率是通过损失函数的梯度调整网络权重的超参数的速度。学习率越低,损失函数的变化速度就越慢。虽然使用低学习率可以确保不会错过任何局部极小值,但也意味着将花费更长的时间来进行收敛,特别是在被困在高原区域的情况下。在整个训练过程中,我们不能使用同样的学习率来更新权重,否则无法到达最优点,所以需要在训练过程中调整学习率的大小。在训练初始阶段,由于权重处于随机初始化的状态,损失函数相对容易进行梯度下降,所以可以设置一个较大的学习率。在训练后期,由于权重参数已经接近最优值,较大的学习率无法进一步寻找最优值,所以需要设置一个较小的学习率。在训练整个过程中,很多研究者使用的学习率下降方式是piecewise_decay,即阶梯式下降学习率,如在ResNet50标准的训练中,我们设置的初始学习率是0.1,每30epoch学习率下降到原来的1/10,一共迭代120epoch。除了piecewise_decay,很多研究者也提出了学习率的其他下降方式,如polynomial_decay(多项式下降)、exponential_decay(指数下降),cosine_decay(余弦下降)等,其中cosine_decay无需调整超参数,鲁棒性也比较高,所以成为现在提高模型精度首选的学习率下降方式。Cosine_decay和piecewise_decay的学习率变化曲线如下图所示,容易观察到,在整个训练过程中,cosine_decay都保持着较大的学习率,所以其收敛较为缓慢,但是最终的收敛效果较peicewise_decay更好一些。 -![](../images/models/lr_decay.jpeg) ->> -* Q: Warmup学习率策略是什么?一般用在什么样的场景中? -* A: Warmup策略顾名思义就是让学习率先预热一下,在训练初期我们不直接使用最大的学习率,而是用一个逐渐增大的学习率去训练网络,当学习率增大到最高点时,再使用学习率下降策略中提到的学习率下降方式衰减学习率的值。如果使用较大的batch_size训练神经网络时,我们建议您使用warmup策略。实验表明,在batch_size较大时,warmup可以稳定提升模型的精度。在训练MobileNetV3等batch_size较大的实验中,我们默认将warmup中的epoch设置为5,即先用5epoch将学习率从0增加到最大值,再去做相应的学习率衰减。 - ->> -* Q: 什么是`batch size`?在模型训练中,怎么选择合适的`batch size`? -* A: `batch size`是训练神经网络中的一个重要的超参数,该值决定了一次将多少数据送入神经网络参与训练。论文[Accurate, Large Minibatch SGD: Training ImageNet in 1 Hour](https://arxiv.org/abs/1706.02677),当`batch size`的值与学习率的值呈线性关系时,收敛精度几乎不受影响。在训练ImageNet数据时,大部分的神经网络选择的初始学习率为0.1,`batch size`是256,所以根据实际的模型大小和显存情况,可以将学习率设置为0.1*k,batch_size设置为256*k。在实际任务中,也可以将该设置作为初始参数,进一步调节学习率参数并获得更优的性能。 ->> -* Q: weight_decay是什么?怎么选择合适的weight_decay呢? -* A: 过拟合是机器学习中常见的一个名词,简单理解即为模型在训练数据上表现很好,但在测试数据上表现较差,在卷积神经网络中,同样存在过拟合的问题,为了避免过拟合,很多正则方式被提出,其中,weight_decay是其中一个广泛使用的避免过拟合的方式。在使用SGD优化器时,weight_decay等价于在最终的损失函数后添加L2正则化,L2正则化使得网络的权重倾向于选择更小的值,最终整个网络中的参数值更趋向于0,模型的泛化性能相应提高。在各大深度学习框架的实现中,该值表达的含义是L2正则前的系数,在paddle框架中,该值的名称是l2_decay,所以以下都称其为l2_decay。该系数越大,表示加入的正则越强,模型越趋于欠拟合状态。在训练ImageNet的任务中,大多数的网络将该参数值设置为1e-4,在一些小的网络如MobileNet系列网络中,为了避免网络欠拟合,该值设置为1e-5~4e-5之间。当然,该值的设置也和具体的数据集有关系,当任务的数据集较大时,网络本身趋向于欠拟合状态,可以将该值适当减小,当任务的数据集较小时,网络本身趋向于过拟合状态,可以将该值适当增大。下表展示了MobileNetV1_x0_25在ImageNet-1k上使用不同l2_decay的精度情况。由于MobileNetV1_x0_25是一个比较小的网络,所以l2_decay过大会使网络趋向于欠拟合状态,所以在该网络中,相对1e-4,3e-5是更好的选择。 - -| 模型 | L2_decay | Train acc1/acc5 | Test acc1/acc5 | -|:--:|:--:|:--:|:--:| -| MobileNetV1_x0_25 | 1e-4 | 43.79%/67.61% | 50.41%/74.70% | -| MobileNetV1_x0_25 | 3e-5 | 47.38%/70.83% | 51.45%/75.45% | - - ->> -* Q: 标签平滑(label_smoothing)指的是什么?有什么效果呢?一般适用于什么样的场景中? -* A: Label_smoothing是深度学习中的一种正则化方法,其全称是 Label Smoothing Regularization(LSR),即标签平滑正则化。在传统的分类任务计算损失函数时,是将真实的one hot标签与神经网络的输出做相应的交叉熵计算,而label_smoothing是将真实的one hot标签做一个标签平滑的处理,使得网络学习的标签不再是一个hard label,而是一个有概率值的soft label,其中在类别对应的位置的概率最大,其他位置概率是一个非常小的数。具体的计算方式参见论文[2]。在label_smoothing里,有一个epsilon的参数值,该值描述了将标签软化的程度,该值越大,经过label smoothing后的标签向量的标签概率值越小,标签越平滑,反之,标签越趋向于hard label,在训练ImageNet-1k的实验里通常将该值设置为0.1。 -在训练ImageNet-1k的实验中,我们发现,ResNet50大小级别及其以上的模型在使用label_smooting后,精度有稳定的提升。下表展示了ResNet50_vd在使用label_smoothing前后的精度指标。同时,由于label_smoohing相当于一种正则方式,在相对较小的模型上,精度提升不明显甚至会有所下降,下表展示了ResNet18在ImageNet-1k上使用label_smoothing前后的精度指标。可以明显看到,在使用label_smoothing后,精度有所下降。 - -| 模型 | Use_label_smoothing | Test acc1 | -|:--:|:--:|:--:| -| ResNet50_vd | 0 | 77.9% | -| ResNet50_vd | 1 | 78.4% | -| ResNet18 | 0 | 71.0% | -| ResNet18 | 1 | 70.8% | - - ->> -* Q: 在训练的时候怎么通过训练集和验证集的准确率或者loss确定进一步的调优策略呢? -* A: 在训练网络的过程中,通常会打印每一个epoch的训练集准确率和验证集准确率,二者刻画了该模型在两个数据集上的表现。通常来说,训练集的准确率比验证集准确率微高或者二者相当是比较不错的状态。如果发现训练集的准确率比验证集高很多,说明在这个任务上已经过拟合,需要在训练过程中加入更多的正则,如增大l2_decay的值,加入更多的数据增广策略,加入label_smoothing策略等;如果发现训练集的准确率比验证集低一些,说明在这个任务上可能欠拟合,需要在训练过程中减弱正则效果,如减小l2_decay的值,减少数据增广方式,增大图片crop区域面积,减弱图片拉伸变换,去除label_smoothing等。 - ->> -* Q: 怎么使用已有的预训练模型提升自己的数据集的精度呢? -* A: 在现阶段计算机视觉领域中,加载预训练模型来训练自己的任务已成为普遍的做法,相比从随机初始化开始训练,加载预训练模型往往可以提升特定任务的精度。一般来说,业界广泛使用的预训练模型是通过训练128万张图片1000类的ImageNet-1k数据集得到的,该预训练模型的fc层权重是是一个k\*1000的矩阵,其中k是fc层以前的神经元数,在加载预训练权重时,无需加载fc层的权重。在学习率方面,如果您的任务训练的数据集特别小(如小于1千张),我们建议你使用较小的初始学习率,如0.001(batch_size:256,下同),以免较大的学习率破坏预训练权重。如果您的训练数据集规模相对较大(大于10万),我们建议你尝试更大的初始学习率,如0.01或者更大。 - - -### 数据相关 - ->> -* Q: 图像分类的数据预处理过程一般包括哪些步骤? -* A: 以在ImageNet-1k数据集上训练ResNet50为例,一张图片被输入进网络,主要有图像解码、随机裁剪、随机水平翻转、标准化、数据重排,组batch并送进网络这几个步骤。图像解码指的是将图片文件读入到内存中,随机裁剪指的是将读入的图像随机拉伸并裁剪到长宽均为224的图像,随机水平翻转指的是对裁剪后的图片以0.5的概率进行水平翻转,标准化指的是将图片每个通道的数据通过去均值实现中心化的处理,使得数据尽可能符合`N(0,1)`的正态分布,数据重排指的是将数据由`[224,224,3]`的格式变为`[3,224,224]`的格式,组batch指的是将多幅图像组成一个批数据,送进网络进行训练。 - ->> -* Q: 随机裁剪是怎么影响小模型训练的性能的? -* A: 在ImageNet-1k数据的标准预处理中,随机裁剪函数中定义了scale和ratio两个值,两个值分别确定了图片crop的大小和图片的拉伸程度,其中scale的默认取值范围是0.08-1(lower_scale-upper_scale),ratio的默认取值范围是3/4-4/3(lower_ratio-upper_ratio)。在非常小的网络训练中,此类数据增强会使得网络欠拟合,导致精度有所下降。为了提升网络的精度,可以使其数据增强变的更弱,即增大图片的crop区域或者减弱图片的拉伸变换程度。我们可以分别通过增大lower_scale的值或缩小lower_ratio与upper_scale的差距来实现更弱的图片变换。下表列出了使用不同lower_scale训练MobileNetV2_x0_25的精度,可以看到,增大图片的crop区域面积后训练精度和验证精度均有提升。 - -| 模型 | Scale取值范围 | Train_acc1/acc5 | Test_acc1/acc5 | -|:--:|:--:|:--:|:--:| -| MobileNetV2_x0_25 | [0.08,1] | 50.36%/72.98% | 52.35%/75.65% | -| MobileNetV2_x0_25 | [0.2,1] | 54.39%/77.08% | 53.18%/76.14% | - - ->> -* Q: 数据量不足的情况下,目前有哪些常见的数据增广方法来增加训练样本的丰富度呢? -* A: PaddleClas中将目前比较常见的数据增广方法分为了三大类,分别是图像变换类、图像裁剪类和图像混叠类,图像变换类主要包括AutoAugment和RandAugment,图像裁剪类主要包括CutOut、RandErasing、HideAndSeek和GridMask,图像混叠类主要包括Mixup和Cutmix,更详细的关于数据增广的介绍可以参考:[数据增广章节](./advanced_tutorials/image_augmentation/ImageAugment.md)。 ->> -* Q: 对于遮挡情况比较常见的图像分类场景,该使用什么数据增广方法去提升模型的精度呢? -* A: 在训练的过程中可以尝试对训练集使用CutOut、RandErasing、HideAndSeek和GridMask等裁剪类数据增广方法,让模型也能够不止学习到显著区域,也能关注到非显著性区域,从而在遮挡的情况下,也能较好地完成识别任务。 - ->> -* Q: 对于色彩变换情况比较复杂的情况下,应该使用哪些数据增广方法提升模型精度呢? -* A: 可以考虑使用AutoAugment或者RandAugment的数据增广策略,这两种策略中都包括了锐化、直方图均衡化等丰富的颜色变换,可以让模型在训练的过程中对这些变换更加鲁棒。 ->> -* Q: Mixup和Cutmix的工作原理是什么?为什么它们也是非常有效的数据增广方法? -* A: Mixup通过线性叠加两张图片生成新的图片,对应label也进行线性叠加用以训练,Cutmix则是从一幅图中随机裁剪出一个 感兴趣区域(ROI),然后覆盖当前图像中对应的区域,label也按照图像面积比例进行线性叠加。它们其实也是生成了和训练集不同的样本和label并让网络去学习,从而扩充了样本的丰富度。 ->> -* Q: 对于精度要求不是那么高的图像分类任务,大概需要准备多大的训练数据集呢? -* A: 训练数据的数量和需要解决问题的复杂度有关系。难度越大,精度要求越高,则数据集需求越大,而且一般情况实际中的训练数据越多效果越好。当然,一般情况下,在加载预训练模型的情况下,每个类别包括10-20张图像即可保证基本的分类效果;不加载预训练模型的情况下,每个类别需要至少包含100-200张图像以保证基本的分类效果。 - ->> -* Q: 对于长尾分布的数据集,目前有哪些比较常用的方法? -* A: (1)可以对数据量比较少的类别进行重采样,增加其出现的概率;(2)可以修改loss,增加图像较少对应的类别的图片的loss权重;(3)可以借鉴迁移学习的方法,从常见类别中学习通用知识,然后迁移到少样本的类别中。 - - -### 模型推理与预测相关 - ->> -* Q: 有时候图像中只有小部分区域是所关注的前景物体,直接拿原图来进行分类的话,识别效果很差,这种情况要怎么做呢? -* A: 可以在分类之前先加一个主体检测的模型,将前景物体检测出来之后再进行分类,可以大大提升最终的识别效果。如果不考虑时间成本,也可以使用multi-crop的方式对所有的预测做融合来决定最终的类别。 ->> -* Q: 目前推荐的,模型预测方式有哪些? -* A: 在模型训练完成之后,推荐使用导出的固化模型(inference model),基于Paddle预测引擎进行预测,目前支持python inference与cpp inference。如果希望基于服务化部署预测模型,那么推荐使用HubServing的部署方式。 ->> -* Q: 模型训练完成之后,有哪些比较合适的预测方法进一步提升模型精度呢? -* A: (1)可以使用更大的预测尺度,比如说训练的时候使用的是224,那么预测的时候可以考虑使用288或者320,这会直接带来0.5%左右的精度提升。(2)可以使用测试时增广的策略(Test Time Augmentation, TTA),将测试集通过旋转、翻转、颜色变换等策略,创建多个副本,并分别预测,最后将所有的预测结果进行融合,这可以大大提升预测结果的精度和鲁棒性。(3)当然,也可以使用多模型融合的策略,将多个模型针对相同图片的预测结果进行融合。 ->> -* Q: 多模型融合的时候,该怎么选择合适的模型进行融合呢? -* A: 在不考虑预测速度的情况下,建议选择精度尽量高的模型;同时建议选择不同结构或者系列的模型进行融合,比如在精度相似的情况下,ResNet50_vd与Xception65的模型融合结果往往比ResNet50_vd与ResNet101_vd的模型融合结果要好一些。 - ->> -* Q: 使用固定的模型进行预测时有哪些比较常用的加速方法? -* A: (1)使用性能更优的GPU进行预测;(2)增大预测的batch size;(3)使用TenorRT以及FP16半精度浮点数等方法进行预测。 - - - -## PaddleClas使用问题 - ->> -* Q: 多卡评估时,为什么每张卡输出的精度指标不相同? -* A: 目前PaddleClas基于fleet api使用多卡,在多卡评估时,每张卡都是单独读取各自part的数据,不同卡中计算的图片是不同的,因此最终指标也会有微量差异,如果希望得到准确的评估指标,可以使用单卡评估。 - ->> -* Q: 在配置文件的`TRAIN`字段中配置了`mix`的参数,为什么`mixup`的数据增广预处理没有生效呢? -* A: 使用mixup时,数据预处理部分与模型输入部分均需要修改,因此还需要在配置文件中显式地配置`use_mix: True`,才能使得`mixup`生效。 - - ->> -* Q: 评估和预测时,已经指定了预训练模型所在文件夹的地址,但是仍然无法导入参数,这么为什么呢? -* A: 加载预训练模型时,需要指定预训练模型的前缀,例如预训练模型参数所在的文件夹为`output/ResNet50_vd/19`,预训练模型参数的名称为`output/ResNet50_vd/19/ppcls.pdparams`,则`pretrained_model`参数需要指定为`output/ResNet50_vd/19/ppcls`,PaddleClas会自动补齐`.pdparams`的后缀。 - - ->> -* Q: 在评测`EfficientNetB0_small`模型时,为什么最终的精度始终比官网的低0.3%左右? -* A: `EfficientNet`系列的网络在进行resize的时候,是使用`cubic插值方式`(resize参数的interpolation值设置为2),而其他模型默认情况下为None,因此在训练和评估的时候需要显式地指定resize的interpolation值。具体地,可以参考以下配置中预处理过程中ResizeImage的参数。 -``` -VALID: - batch_size: 16 - num_workers: 4 - file_list: "./dataset/ILSVRC2012/val_list.txt" - data_dir: "./dataset/ILSVRC2012/" - shuffle_seed: 0 - transforms: - - DecodeImage: - to_rgb: True - to_np: False - channel_first: False - - ResizeImage: - resize_short: 256 - interpolation: 2 - - CropImage: - size: 224 - - NormalizeImage: - scale: 1.0/255.0 - mean: [0.485, 0.456, 0.406] - std: [0.229, 0.224, 0.225] - order: '' - - ToCHWImage: -``` - ->> -* Q: python2下,使用visualdl的时候,报出以下错误,`TypeError: __init__() missing 1 required positional argument: 'sync_cycle'`,这是为什么呢? -* A: 目前visualdl仅支持在python3下运行,visualdl需要是2.0以上的版本,如果visualdl版本不对的话,可以通过以下方式进行安装:`pip3 install visualdl==2.0.0b8 -i https://mirror.baidu.com/pypi/simple` - ->> -* Q: 自己在测ResNet50_vd预测单张图片速度的时候发现比官网提供的速度benchmark慢了很多,而且CPU速度比GPU速度快很多,这个是为什么呢? -* A: 模型预测需要初始化,初始化的过程比较耗时,因此在统计预测速度的时候,需要批量跑一批图片,去除前若干张图片的预测耗时,再统计下平均的时间。GPU比CPU速度测试单张图片速度慢是因为GPU的初始化并CPU要慢很多。 - ->> -* Q: 在动态图中加载静态图预训练模型的时候,需要注意哪些问题? -* A: 在使用infer.py预测单张图片或者文件夹中的图片时,需要注意指定[infer.py](https://github.com/PaddlePaddle/PaddleClas/blob/53c5850df7c49a1bfcd8d989e6ccbea61f406a1d/tools/infer/infer.py#L40)中的`load_static_weights`为True,在finetune或者评估的时候需要添加`-o load_static_weights=True`的参数。 ->> -* Q: 灰度图可以用于模型训练吗? -* A: 灰度图也可以用于模型训练,不过需要修改模型的输入shape为`[1, 224, 224]`,此外数据增广部分也需要注意适配一下。不过为了更好地使用PaddleClas代码的话,即使是灰度图,也建议调整为3通道的图片进行训练(RGB通道的像素值相等)。 - ->> -* Q: 怎么在windows上或者cpu上面模型训练呢? -* A: 可以参考[PaddleClas开始使用教程](https://github.com/PaddlePaddle/PaddleClas/blob/master/docs/zh_CN/tutorials/getting_started.md),详细介绍了在Linux、Windows、CPU等环境中进行模型训练、评估与预测的教程。 ->> -* Q: 怎样在模型训练的时候使用label smoothing呢? -* A: 可以在配置文件中设置label smoothing epsilon的值,`ls_epsilon=0.1`,表示设置该值为0.1,若该值为-1,则表示不使用label smoothing。 ->> -* Q: PaddleClas提供的10W类图像分类预训练模型能否用于模型推断呢? -* A: 该10W类图像分类预训练模型没有提供fc全连接层的参数,无法用于模型推断,目前可以用于模型微调。 ->> -* Q: 在使用`tools/infere/predict.py`进行模型预测的时候,报了这个问题:`Error: Pass tensorrt_subgraph_pass has not been registered`,这是为什么呢? -* A: 如果希望使用TensorRT进行模型预测推理的话,需要编译带TensorRT的PaddlePaddle,编译的时候参考以下的编译方式,其中`TENSORRT_ROOT`表示TensorRT的路径。 -``` -cmake .. \ - -DWITH_CONTRIB=OFF \ - -DWITH_MKL=ON \ - -DWITH_MKLDNN=ON \ - -DWITH_TESTING=OFF \ - -DCMAKE_BUILD_TYPE=Release \ - -DWITH_INFERENCE_API_TEST=OFF \ - -DON_INFER=ON \ - -DWITH_PYTHON=ON \ - -DPY_VERSION=2.7 \ - -DTENSORRT_ROOT=/usr/local/TensorRT6-cuda10.0-cudnn7/ -make -j16 -make inference_lib_dist -``` ->> -* Q: 怎样在训练的时候使用自动混合精度(Automatic Mixed Precision, AMP)训练呢? -* A: 可以参考[ResNet50_fp16.yml](https://github.com/PaddlePaddle/PaddleClas/blob/master/configs/ResNet/ResNet50_fp16.yml)这个配置文件;具体地,如果希望自己的配置文件在模型训练的时候也支持自动混合精度,可以在配置文件中添加下面的配置信息。 -``` -use_fp16: True -amp_scale_loss: 128.0 -use_dynamic_loss_scaling: True -``` diff --git a/docs/zh_CN/faq_series.md b/docs/zh_CN/faq_series.md deleted file mode 100644 index ce986b60..00000000 --- a/docs/zh_CN/faq_series.md +++ /dev/null @@ -1,11 +0,0 @@ -# 图像分类FAQ(持续更新) - -## 前言 - -* 本文档收集了大家在使用PaddleClas或者学习图像分类时遇到的一些问题,旨在为图像分类任务的开发者提供一些参考,如果问题欢迎帮忙补充和修正,不胜感激。 - -## 目录 - -* [【精选】图像分类30个问题及PaddleClas常见使用问题](./faq.md) -* [2020 FAQ第一季](./faq_series/faq_2020_s1.md)(最近更新2020.12.31) -* [2021 FAQ第一季](./faq_series/faq_2021_s1.md)(最近更新2021.02.03) diff --git a/docs/zh_CN_tmp/faq_series/faq.md b/docs/zh_CN/faq_series/faq.md similarity index 100% rename from docs/zh_CN_tmp/faq_series/faq.md rename to docs/zh_CN/faq_series/faq.md diff --git a/docs/zh_CN/feature_visiualization/get_started.md b/docs/zh_CN/feature_visiualization/get_started.md deleted file mode 100644 index 8a7229e8..00000000 --- a/docs/zh_CN/feature_visiualization/get_started.md +++ /dev/null @@ -1,84 +0,0 @@ -# 特征图可视化指南 - -## 一、概述 - -特征图是输入图片在卷积网络中的特征表达,对特征图的研究可以有利于我们对于模型的理解与设计,所以基于动态图我们使用本工具来可视化特征图。 - -## 二、准备工作 - -首先需要选定研究的模型,本文设定ResNet50作为研究模型,将resnet.py从[模型库](../../../ppcls/arch/architecture/)拷贝到当前目录下,并下载预训练模型[预训练模型](../../zh_CN/models/models_intro), 复制resnet50的模型链接,使用下列命令下载并解压预训练模型。 - -```bash -wget The Link for Pretrained Model -tar -xf Downloaded Pretrained Model -``` - -以resnet50为例: -```bash -wget https://paddle-imagenet-models-name.bj.bcebos.com/ResNet50_pretrained.tar -tar -xf ResNet50_pretrained.tar -``` - -## 三、修改模型 - -找到我们所需要的特征图位置,设置self.fm将其fetch出来,本文以resnet50中的stem层之后的特征图为例。 - -在fm_vis.py中修改模型的名字。 - -在ResNet50的__init__函数中定义self.fm -```python -self.fm = None -``` -在ResNet50的forward函数中指定特征图 -```python -def forward(self, inputs): - y = self.conv(inputs) - self.fm = y - y = self.pool2d_max(y) - for bottleneck_block in self.bottleneck_block_list: - y = bottleneck_block(y) - y = self.avg_pool(y) - y = fluid.layers.reshape(y, shape=[-1, self.pool2d_avg_output]) - y = self.out(y) - return y, self.fm -``` -执行函数 -```bash -python tools/feature_maps_visualization/fm_vis.py -i the image you want to test \ - -c channel_num -p pretrained model \ - --show whether to show \ - --interpolation interpolation method\ - --save_path where to save \ - --use_gpu whether to use gpu -``` -参数说明: -+ `-i`:待预测的图片文件路径,如 `./test.jpeg` -+ `-c`:特征图维度,如 `./resnet50_vd/model` -+ `-p`:权重文件路径,如 `./ResNet50_pretrained/` -+ `--interpolation`: 图像插值方式, 默认值 1 -+ `--save_path`:保存路径,如:`./tools/` -+ `--use_gpu`:是否使用 GPU 预测,默认值:True - -## 四、结果 - -* 输入图片: - -![](../../../docs/images/feature_maps/feature_visualization_input.jpg) - -* 运行下面的特征图可视化脚本 - -``` -python tools/feature_maps_visualization/fm_vis.py \ - -i ./docs/images/feature_maps/feature_visualization_input.jpg \ - -c 5 \ - -p pretrained/ResNet50_pretrained/ \ - --show=True \ - --interpolation=1 \ - --save_path="./output.png" \ - --use_gpu=False \ - --load_static_weights=True -``` - -* 输出特征图保存为`output.png`,如下所示。 - -![](../../../docs/images/feature_maps/feature_visualization_output.jpg) diff --git a/docs/zh_CN_tmp/image_recognition_pipeline/feature_extraction.md b/docs/zh_CN/image_recognition_pipeline/feature_extraction.md similarity index 100% rename from docs/zh_CN_tmp/image_recognition_pipeline/feature_extraction.md rename to docs/zh_CN/image_recognition_pipeline/feature_extraction.md diff --git a/docs/zh_CN_tmp/image_recognition_pipeline/framework.png b/docs/zh_CN/image_recognition_pipeline/framework.png similarity index 100% rename from docs/zh_CN_tmp/image_recognition_pipeline/framework.png rename to docs/zh_CN/image_recognition_pipeline/framework.png diff --git a/docs/zh_CN_tmp/image_recognition_pipeline/mainbody_detection.md b/docs/zh_CN/image_recognition_pipeline/mainbody_detection.md similarity index 100% rename from docs/zh_CN_tmp/image_recognition_pipeline/mainbody_detection.md rename to docs/zh_CN/image_recognition_pipeline/mainbody_detection.md diff --git a/docs/zh_CN_tmp/image_recognition_pipeline/vector_search.md b/docs/zh_CN/image_recognition_pipeline/vector_search.md similarity index 100% rename from docs/zh_CN_tmp/image_recognition_pipeline/vector_search.md rename to docs/zh_CN/image_recognition_pipeline/vector_search.md diff --git a/docs/zh_CN/index.rst b/docs/zh_CN/index.rst deleted file mode 100644 index 12a486ed..00000000 --- a/docs/zh_CN/index.rst +++ /dev/null @@ -1,17 +0,0 @@ -欢迎使用PaddleClas图像分类库! -================================ - -.. toctree:: - :maxdepth: 1 - - tutorials/index - models/index - advanced_tutorials/index - application/index - extension/index - competition_support.md - model_zoo.md - update_history.md - faq.md - -:math:`PaddlePaddle2020` diff --git a/docs/zh_CN/inference.md b/docs/zh_CN/inference.md deleted file mode 100644 index cd224339..00000000 --- a/docs/zh_CN/inference.md +++ /dev/null @@ -1,188 +0,0 @@ - -# 基于Python预测引擎推理 - -inference 模型(`paddle.jit.save`保存的模型) -一般是模型训练,把模型结构和模型参数保存在文件中的固化模型,多用于预测部署场景。 -训练过程中保存的模型是checkpoints模型,保存的只有模型的参数,多用于恢复训练等。 -与checkpoints模型相比,inference 模型会额外保存模型的结构信息,在预测部署、加速推理上性能优越,灵活方便,适合于实际系统集成。 - -接下来首先介绍如何将训练的模型转换成inference模型,然后依次介绍主体检测模型、特征提取模型在CPU、GPU上的预测方法, -之后介绍主体检测、特征提取、特征检索串联的预测方法,最后介绍图像分类的预测方法。 - - -- [一、训练模型转inference模型](#训练模型转inference模型) - - [1.1 特征提取模型转inference模型](#特征提取模型转inference模型) - - [1.2 分类模型转inference模型](#分类模型转inference模型) - -- [二、主体检测模型推理](#主体检测模型推理) - -- [三、特征提取模型推理](#特征提取模型推理) - -- [四、主体检测、特征提取和向量检索串联](#主体检测、特征提取和向量检索串联) - -- [五、图像分类模型推理](#图像分类模型推理) - - - -## 一、训练模型转inference模型 - - -### 1.1 特征提取模型转inference模型 -以下命令请在PaddleClas的根目录执行。以商品识别特征提取模型模型为例,首先下载预训练模型: - -```shell script -wget -P ./product_pretrain/ https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/rec/models/pretrain/product_ResNet50_vd_Aliproduct_v1.0_pretrained.pdparams -``` - -上述模型是ResNet50_vd在AliProduct上训练的模型,训练使用的配置文件为ppcls/configs/Products/ResNet50_vd_Aliproduct.yaml -将训练好的模型转换成inference模型只需要运行如下命令: -``` shell script -# -c 后面设置训练算法的yml配置文件 -# -o 配置可选参数 -# Global.pretrained_model 参数设置待转换的训练模型地址,不用添加文件后缀 .pdmodel,.pdopt或.pdparams。 -# Global.save_inference_dir参数设置转换的模型将保存的地址。 - -python3.7 tools/export_model.py -c ppcls/configs/Products/ResNet50_vd_Aliproduct.yaml -o Global.pretrained_model=./product_pretrain/product_ResNet50_vd_Aliproduct_v1.0_pretrained -o Global.save_inference_dir=./deploy/models/product_ResNet50_vd_aliproduct_v1.0_infer -``` - -这里也可以使用自己训练的模型。转inference模型时,使用的配置文件和训练时使用的配置文件相同。另外,还需要设置配置文件中的`Global.pretrained_model`参数,其指向训练中保存的模型参数文件。 -转换成功后,在模型保存目录下有三个文件: -``` -├── product_ResNet50_vd_aliproduct_v1.0_infer -│ ├── inference.pdiparams # 识别inference模型的参数文件 -│ ├── inference.pdiparams.info # 识别inference模型的参数信息,可忽略 -│ └── inference.pdmodel # 识别inference模型的program文件 -``` - - -### 1.2 分类模型转inference模型 - -下载预训练模型: -``` shell script -wget -P ./cls_pretrain/ https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/legendary_models/ResNet50_vd_pretrained.pdparams -``` - -上述模型是使用ResNet50_vd在ImageNet上训练的模型,使用的配置文件为`ppcls/configs/ImageNet/ResNet/ResNet50_vd.yaml`。 -转inference模型与特征提取模型的方式相同,如下: -``` -# -c 后面设置训练算法的yml配置文件 -# -o 配置可选参数 -# Global.pretrained_model 参数设置待转换的训练模型地址,不用添加文件后缀 .pdmodel,.pdopt或.pdparams。 -# Global.save_inference_dir参数设置转换的模型将保存的地址。 - -python3.7 tools/export_model.py -c ppcls/configs/ImageNet/ResNet/ResNet50_vd.yaml -o Global.pretrained_model=./cls_pretrain/ResNet50_vd_pretrained -o Global.save_inference_dir=./deploy/models/class_ResNet50_vd_ImageNet_infer -``` - -转换成功后,在目录下有三个文件: -``` -├── class_ResNet50_vd_ImageNet_infer -│ ├── inference.pdiparams # 识别inference模型的参数文件 -│ ├── inference.pdiparams.info # 识别inference模型的参数信息,可忽略 -│ └── inference.pdmodel # 识别inference模型的program文件 -``` - - -## 二、主体检测模型推理 - -下面介绍主体检测模型推理,以下命令请进入PaddleClas的deploy目录执行: -```shell script -cd deploy -``` -使用PaddleClas提供的主体检测Inference模型进行推理,可以执行: - -```shell script -mkdir -p models -cd models -# 下载通用检测inference模型并解压 -wget https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/rec/models/inference/ppyolov2_r50vd_dcn_mainbody_v1.0_infer.tar && tar -xf ppyolov2_r50vd_dcn_mainbody_v1.0_infer.tar -cd .. - -# 用下载的inference模型进行预测 -python3.7 python/predict_det.py -c configs/inference_det.yaml -``` -输入的图像如下所示。 -[](../images/recognition/product_demo/wangzai.jpg) -最终输出结果如下: -```text -[{'class_id': 0, 'score': 0.4762245, 'bbox': array([305.55115, 226.05322, 776.61084, 930.42395], dtype=float32), 'label_name': 'foreground'}] -``` -检测的可视化结果如下: -[](../images/recognition/product_demo/wangzai_det_result.jpg) - -如果想要修改图像,可以在`configs/inference_det.yaml`中,修改infer_imgs的值,或使用-o Global.infer_imgs修改, -例如,要使用`images/anmuxi.jpg`可以运行: - -```shell script -python3.7 python/predict_det.py -c configs/inference_det.yaml -o Global.infer_imgs=images/anmuxi.jpg -``` - -如果想使用CPU进行预测,可以将配置文件中`use_gpu`选项设置为`False`,或者执行命令: -```shell script -python3.7 python/predict_det.py -c configs/inference_det.yaml -o Global.use_gpu=False -``` - - -## 三、特征提取模型推理 - -下面以商品特征提取为例,介绍特征提取模型推理。其他应用可以参考图像识别快速开始中的[模型地址](./tutorials/quick_start_recognition.md#2-%E5%9B%BE%E5%83%8F%E8%AF%86%E5%88%AB%E4%BD%93%E9%AA%8C), -将链接替换为相应模型的链接。以下命令请进入PaddleClas的deploy目录执行: -```shell script -cd deploy -``` -使用PaddleClas提供的商品特征提取Inference模型进行推理,可以执行: - -```shell script -mkdir -p models -cd models -# 下载商品特征提取inference模型并解压 -wget https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/rec/models/inference/product_ResNet50_vd_aliproduct_v1.0_infer.tar && tar -xf product_ResNet50_vd_aliproduct_v1.0_infer.tar -cd .. - -# 用下载的inference模型进行预测 -python3.7 python/predict_rec.py -c configs/inference_rec.yaml -``` -预测可以得到一个512特征向量,直接在命令行输出显示。 - -如果想要修改图像,可以在configs/inference_det.yaml中,修改infer_imgs的值,或使用-o Global.infer_imgs修改, -例如,要使用`images/anmuxi.jpg`可以运行: - -```shell script -python3.7 python/predict_rec.py -c configs/inference_rec.yaml -o Global.infer_imgs=images/anmuxi.jpg -``` - -如果想使用CPU进行预测,可以将配置文件中use_gpu选项设置为False,或者执行命令: -``` -python3.7 python/predict_rec.py -c configs/inference_rec.yaml -o Global.use_gpu=False -``` - - -## 四、主体检测、特征提取和向量检索串联 -主体检测、特征提取和向量检索的串联预测,可以参考[图像识别快速体验](./tutorials/quick_start_recognition.md) - - -## 五、图像分类模型推理 - -下面介绍图像分类模型推理,以下命令请进入PaddleClas的deploy目录执行: -```shell script -cd deploy -``` -使用PaddleClas提供的商品特征提取Inference模型进行推理,首先请下载预训练模型并导出inference模型,具体参见[2. 分类模型转inference模型](#分类模型转inference模型)。 - -导出inference模型后,可以使用下面的命令预测: -```shell script -python3.7 python/predict_cls.py -c configs/inference_cls.yaml -``` - -如果想要修改图像,可以在configs/inference_det.yaml中,修改infer_imgs的值,或使用-o Global.infer_imgs修改, -例如,要使用`images/ILSVRC2012_val_00010010.jpeg`可以运行: - -```shell script -python3.7 python/predict_cls.py -c configs/inference_cls.yaml -o Global.infer_imgs=images/ILSVRC2012_val_00010010.jpeg - -``` - -如果想使用CPU进行预测,可以将配置文件中use_gpu选项设置为False,或者执行命令: -``` -python3.7 python/predict_cls.py -c configs/inference_cls.yaml -o Global.use_gpu=False -``` - diff --git a/docs/zh_CN_tmp/inference_deployment/cpp_deploy.md b/docs/zh_CN/inference_deployment/cpp_deploy.md similarity index 100% rename from docs/zh_CN_tmp/inference_deployment/cpp_deploy.md rename to docs/zh_CN/inference_deployment/cpp_deploy.md diff --git a/docs/zh_CN_tmp/inference_deployment/cpp_deploy_on_windows.md b/docs/zh_CN/inference_deployment/cpp_deploy_on_windows.md similarity index 100% rename from docs/zh_CN_tmp/inference_deployment/cpp_deploy_on_windows.md rename to docs/zh_CN/inference_deployment/cpp_deploy_on_windows.md diff --git a/docs/zh_CN_tmp/inference_deployment/export_model.md b/docs/zh_CN/inference_deployment/export_model.md similarity index 100% rename from docs/zh_CN_tmp/inference_deployment/export_model.md rename to docs/zh_CN/inference_deployment/export_model.md diff --git a/docs/zh_CN_tmp/inference_deployment/paddle_hub_serving_deploy.md b/docs/zh_CN/inference_deployment/paddle_hub_serving_deploy.md similarity index 100% rename from docs/zh_CN_tmp/inference_deployment/paddle_hub_serving_deploy.md rename to docs/zh_CN/inference_deployment/paddle_hub_serving_deploy.md diff --git a/docs/zh_CN_tmp/inference_deployment/paddle_lite_deploy.md b/docs/zh_CN/inference_deployment/paddle_lite_deploy.md similarity index 100% rename from docs/zh_CN_tmp/inference_deployment/paddle_lite_deploy.md rename to docs/zh_CN/inference_deployment/paddle_lite_deploy.md diff --git a/docs/zh_CN_tmp/inference_deployment/paddle_serving_deploy.md b/docs/zh_CN/inference_deployment/paddle_serving_deploy.md similarity index 100% rename from docs/zh_CN_tmp/inference_deployment/paddle_serving_deploy.md rename to docs/zh_CN/inference_deployment/paddle_serving_deploy.md diff --git a/docs/zh_CN_tmp/inference_deployment/python_deploy.md b/docs/zh_CN/inference_deployment/python_deploy.md similarity index 100% rename from docs/zh_CN_tmp/inference_deployment/python_deploy.md rename to docs/zh_CN/inference_deployment/python_deploy.md diff --git a/docs/zh_CN_tmp/inference_deployment/whl_deploy.md b/docs/zh_CN/inference_deployment/whl_deploy.md similarity index 100% rename from docs/zh_CN_tmp/inference_deployment/whl_deploy.md rename to docs/zh_CN/inference_deployment/whl_deploy.md diff --git a/docs/zh_CN_tmp/installation/install_paddle.md b/docs/zh_CN/installation/install_paddle.md similarity index 100% rename from docs/zh_CN_tmp/installation/install_paddle.md rename to docs/zh_CN/installation/install_paddle.md diff --git a/docs/zh_CN_tmp/installation/install_paddleclas.md b/docs/zh_CN/installation/install_paddleclas.md similarity index 100% rename from docs/zh_CN_tmp/installation/install_paddleclas.md rename to docs/zh_CN/installation/install_paddleclas.md diff --git a/docs/zh_CN_tmp/faq_series/.gitkeep b/docs/zh_CN/introduction/.gitkeep similarity index 100% rename from docs/zh_CN_tmp/faq_series/.gitkeep rename to docs/zh_CN/introduction/.gitkeep diff --git a/docs/zh_CN_tmp/introduction/function_intro.md b/docs/zh_CN/introduction/function_intro.md similarity index 100% rename from docs/zh_CN_tmp/introduction/function_intro.md rename to docs/zh_CN/introduction/function_intro.md diff --git a/docs/zh_CN_tmp/introduction/more_demo.md b/docs/zh_CN/introduction/more_demo.md similarity index 100% rename from docs/zh_CN_tmp/introduction/more_demo.md rename to docs/zh_CN/introduction/more_demo.md diff --git a/docs/zh_CN/make.bat b/docs/zh_CN/make.bat deleted file mode 100644 index 2119f510..00000000 --- a/docs/zh_CN/make.bat +++ /dev/null @@ -1,35 +0,0 @@ -@ECHO OFF - -pushd %~dp0 - -REM Command file for Sphinx documentation - -if "%SPHINXBUILD%" == "" ( - set SPHINXBUILD=sphinx-build -) -set SOURCEDIR=. -set BUILDDIR=_build - -if "%1" == "" goto help - -%SPHINXBUILD% >NUL 2>NUL -if errorlevel 9009 ( - echo. - echo.The 'sphinx-build' command was not found. Make sure you have Sphinx - echo.installed, then set the SPHINXBUILD environment variable to point - echo.to the full path of the 'sphinx-build' executable. Alternatively you - echo.may add the Sphinx directory to PATH. - echo. - echo.If you don't have Sphinx installed, grab it from - echo.http://sphinx-doc.org/ - exit /b 1 -) - -%SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O% -goto end - -:help -%SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O% - -:end -popd diff --git a/docs/zh_CN/models/models_intro.md b/docs/zh_CN/models/models_intro.md index 16123be0..592893fb 100644 --- a/docs/zh_CN/models/models_intro.md +++ b/docs/zh_CN/models/models_intro.md @@ -2,26 +2,13 @@ ## 概述 -基于ImageNet1k分类数据集,PaddleClas支持的29种系列分类网络结构以及对应的134个图像分类预训练模型如下所示,训练技巧、每个系列网络结构的简单介绍和性能评估将在相应章节展现。 +基于ImageNet1k分类数据集,PaddleClas支持的36种系列分类网络结构以及对应的175个图像分类预训练模型如下所示,训练技巧、每个系列网络结构的简单介绍和性能评估将在相应章节展现。 ## 评估环境 * CPU的评估环境基于骁龙855(SD855)。 -* GPU评估环境基于V100和TensorRT,评估脚本如下。 +* Intel CPU的评估环境基于Intel(R) Xeon(R) Gold 6148。 +* GPU评估环境基于V100和TensorRT。 -```shell -#!/usr/bin/env bash - -export PYTHONPATH=$PWD:$PYTHONPATH - -python tools/infer/predict.py \ - --model_file='pretrained/infer/model' \ - --params_file='pretrained/infer/params' \ - --enable_benchmark=True \ - --model_name=ResNet50_vd \ - --use_tensorrt=True \ - --use_fp16=False \ - --batch_size=1 -``` ![](../../images/models/T4_benchmark/t4.fp32.bs4.main_fps_top1.png) @@ -34,6 +21,7 @@ python tools/infer/predict.py \ ## 预训练模型列表及下载地址 + - ResNet及其Vd系列 - ResNet系列[[1](#ref1)]([论文地址](http://openaccess.thecvf.com/content_cvpr_2016/html/He_Deep_Residual_Learning_CVPR_2016_paper.html)) - [ResNet18](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/ResNet18_pretrained.pdparams) @@ -52,12 +40,23 @@ python tools/infer/predict.py \ - [ResNet152_vd](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/ResNet152_vd_pretrained.pdparams) - [ResNet200_vd](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/ResNet200_vd_pretrained.pdparams) - [ResNet50_vd_ssld](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/ResNet50_vd_ssld_pretrained.pdparams) - - [ResNet50_vd_ssld_v2](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/ResNet50_vd_ssld_v2_pretrained.pdparams) - [Fix_ResNet50_vd_ssld_v2](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/Fix_ResNet50_vd_ssld_v2_pretrained.pdparams) - [ResNet101_vd_ssld](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/ResNet101_vd_ssld_pretrained.pdparams) -- 移动端系列 +- 轻量级模型系列 + - PP-LCNet系列[[28](#28)]([论文地址](https://arxiv.org/pdf/2109.15099.pdf)) + - [PPLCNet_x0_25](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/legendary_models/PPLCNet_x0_25_pretrained.pdparams) + - [PPLCNet_x0_35](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/legendary_models/PPLCNet_x0_35_pretrained.pdparams) + - [PPLCNet_x0_5](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/legendary_models/PPLCNet_x0_5_pretrained.pdparams) + - [PPLCNet_x0_75](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/legendary_models/PPLCNet_x0_75_pretrained.pdparams) + - [PPLCNet_x1_0](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/legendary_models/PPLCNet_x1_0_pretrained.pdparams) + - [PPLCNet_x1_5](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/legendary_models/PPLCNet_x1_5_pretrained.pdparams) + - [PPLCNet_x2_0](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/legendary_models/PPLCNet_x2_0_pretrained.pdparams) + - [PPLCNet_x2_5](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/legendary_models/PPLCNet_x2_5_pretrained.pdparams) + - [PPLCNet_x0_5_ssld](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/legendary_models/PPLCNet_x0_5__ssld_pretrained.pdparams) + - [PPLCNet_x1_0_ssld](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/legendary_models/PPLCNet_x1_0_ssld_pretrained.pdparams) + - [PPLCNet_x2_5_ssld](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/legendary_models/PPLCNet_x2_5__ssld_pretrained.pdparams) - MobileNetV3系列[[3](#ref3)]([论文地址](https://arxiv.org/abs/1905.02244)) - [MobileNetV3_large_x0_35](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/MobileNetV3_large_x0_35_pretrained.pdparams) - [MobileNetV3_large_x0_5](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/MobileNetV3_large_x0_5_pretrained.pdparams) @@ -99,7 +98,17 @@ python tools/infer/predict.py \ - [GhostNet_x1_0](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/GhostNet_x1_0_pretrained.pdparams) - [GhostNet_x1_3](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/GhostNet_x1_3_pretrained.pdparams) - [GhostNet_x1_3_ssld](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/GhostNet_x1_3_ssld_pretrained.pdparams) - + - MixNet系列[[29](#ref29)]([论文地址](https://arxiv.org/pdf/1907.09595.pdf)) + - [MixNet_S](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/MixNet_S_pretrained.pdparams) + - [MixNet_M](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/MixNet_M_pretrained.pdparams) + - [MixNet_L](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/MixNet_L_pretrained.pdparams) + - ReXNet系列[[30](#ref30)]([论文地址](https://arxiv.org/pdf/2007.00992.pdf)) + - [ReXNet_1_0](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/ReXNet_1_0_pretrained.pdparams) + - [ReXNet_1_3](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/ReXNet_1_3_pretrained.pdparams) + - [ReXNet_1_5](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/ReXNet_1_5_pretrained.pdparams) + - [ReXNet_2_0](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/ReXNet_2_0_pretrained.pdparams) + - [ReXNet_3_0](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/ReXNet_3_0_pretrained.pdparams) + - SEResNeXt与Res2Net系列 - ResNeXt系列[[7](#ref7)]([论文地址](https://arxiv.org/abs/1611.05431)) @@ -217,9 +226,38 @@ python tools/infer/predict.py \ - [SwinTransformer_large_patch4_window12_384_22kto1k](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/SwinTransformer_large_patch4_window12_384_22kto1k_pretrained.pdparams) - [SwinTransformer_large_patch4_window7_224_22k](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/SwinTransformer_large_patch4_window7_224_22k_pretrained.pdparams) - [SwinTransformer_large_patch4_window7_224_22kto1k](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/SwinTransformer_large_patch4_window7_224_22kto1k_pretrained.pdparams) - - - + - ViT系列[[31](#ref31)]([论文地址](https://arxiv.org/pdf/2010.11929.pdf)) + - [ViT_small_patch16_224](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/ViT_small_patch16_224_pretrained.pdparams) + - [ViT_base_patch16_224](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/ViT_base_patch16_224_pretrained.pdparams) + - [ViT_base_patch16_384](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/ViT_base_patch16_384_pretrained.pdparams) + - [ViT_base_patch32_384](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/ViT_base_patch32_384_pretrained.pdparams) + - [ViT_large_patch16_224](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/ViT_large_patch16_224_pretrained.pdparams) + - [ViT_large_patch16_384](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/ViT_large_patch16_384_pretrained.pdparams) + - [ViT_large_patch32_384](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/ViT_large_patch32_384_pretrained.pdparams) + - DeiT系列[[32](#ref32)]([论文地址](https://arxiv.org/pdf/2012.12877.pdf)) + - [DeiT_tiny_patch16_224](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/DeiT_tiny_patch16_224_pretrained.pdparams) + - [DeiT_small_patch16_224](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/DeiT_small_patch16_224_pretrained.pdparams) + - [DeiT_base_patch16_224](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/DeiT_base_patch16_224_pretrained.pdparams) + - [DeiT_base_patch16_384](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/DeiT_base_patch16_384_pretrained.pdparams) + - [DeiT_tiny_distilled_patch16_224](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/DeiT_tiny_distilled_patch16_224_pretrained.pdparams) + - [DeiT_small_distilled_patch16_224](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/DeiT_small_distilled_patch16_224_pretrained.pdparams) + - [DeiT_base_distilled_patch16_224](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/DeiT_base_distilled_patch16_224_pretrained.pdparams) + - [DeiT_base_distilled_patch16_384](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/DeiT_base_distilled_patch16_384_pretrained.pdparams) + - LeViT系列[[33](#ref33)]([论文地址](https://arxiv.org/pdf/2104.01136.pdf)) + - [LeViT_128S](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/LeViT_128S_pretrained.pdparams) + - [LeViT_128](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/LeViT_128_pretrained.pdparams) + - [LeViT_192](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/LeViT_192_pretrained.pdparams) + - [LeViT_256](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/LeViT_256_pretrained.pdparams) + - [LeViT_384](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/LeViT_384_pretrained.pdparams) + - Twins系列[[34](#ref43)]([论文地址](https://arxiv.org/pdf/2104.13840.pdf)) + - [pcpvt_small](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/pcpvt_small_pretrained.pdparams) + - [pcpvt_base](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/pcpvt_base_pretrained.pdparams) + - [pcpvt_large](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/pcpvt_large_pretrained.pdparams) + - [alt_gvt_small](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/alt_gvt_small_pretrained.pdparams) + - [alt_gvt_base](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/alt_gvt_base_pretrained.pdparams) + - [alt_gvt_large](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/alt_gvt_large_pretrained.pdparams) + - TNT系列[[35](#ref35)]([论文地址](https://arxiv.org/pdf/2103.00112.pdf)) + - [TNT_small](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/TNT_small_pretrained.pdparams) - 其他模型 - AlexNet系列[[18](#ref18)]([论文地址](https://papers.nips.cc/paper/4824-imagenet-classification-with-deep-convolutional-neural-networks.pdf)) @@ -234,6 +272,40 @@ python tools/infer/predict.py \ - [VGG19](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/VGG19_pretrained.pdparams) - DarkNet系列[[21](#ref21)]([论文地址](https://arxiv.org/abs/1506.02640)) - [DarkNet53](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/DarkNet53_pretrained.pdparams) + - RepVGG系列[[36](#ref36)]([论文地址](https://arxiv.org/pdf/2101.03697.pdf)) + - [RepVGG_A0](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/RepVGG_A0_pretrained.pdparams) + - [RepVGG_A1](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/RepVGG_A1_pretrained.pdparams) + - [RepVGG_A2](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/RepVGG_A2_pretrained.pdparams) + - [RepVGG_B0](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/RepVGG_B0_pretrained.pdparams) + - [RepVGG_B1s](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/RepVGG_B1_pretrained.pdparams) + - [RepVGG_B2](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/RepVGG_B2_pretrained.pdparams) + - [RepVGG_B1g2](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/RepVGG_B1g2_pretrained.pdparams) + - [RepVGG_B1g4](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/RepVGG_B1g4_pretrained.pdparams) + - [RepVGG_B2g4](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/RepVGG_B2g4_pretrained.pdparams) + - [RepVGG_B3g4](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/RepVGG_B3g4_pretrained.pdparams) + - HarDNet系列[[37](#ref37)]([论文地址](https://arxiv.org/pdf/1909.00948.pdf)) + - [HarDNet39_ds](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/HarDNet39_ds_pretrained.pdparams) + - [HarDNet68_ds](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/HarDNet68_ds_pretrained.pdparams) + - [HarDNet68](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/HarDNet68_pretrained.pdparams) + - [HarDNet85](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/HarDNet85_pretrained.pdparams) + - DLA系列[[38](#ref38)]([论文地址](https://arxiv.org/pdf/1707.06484.pdf)) + - [DLA102](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/DLA102_pretrained.pdparams) + - [DLA102x2](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/DLA102x2_pretrained.pdparams) + - [DLA102x](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/DLA102x_pretrained.pdparams) + - [DLA169](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/DLA169_pretrained.pdparams) + - [DLA34](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/DLA34_pretrained.pdparams) + - [DLA46_c](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/DLA46_c_pretrained.pdparams) + - [DLA60](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/DLA60_pretrained.pdparams) + - [DLA60x_c](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/DLA60x_c_pretrained.pdparams) + - [DLA60x](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/DLA60x_pretrained.pdparams) + - RedNet系列[[39](#ref39)]([论文地址](https://arxiv.org/pdf/2103.06255.pdf)) + - [RedNet26](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/RedNet26_pretrained.pdparams) + - [RedNet38](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/RedNet38_pretrained.pdparams) + - [RedNet50](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/RedNet50_pretrained.pdparams) + - [RedNet101](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/RedNet101_pretrained.pdparams) + - [RedNet152](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/RedNet152_pretrained.pdparams) + + **注意**:以上模型中EfficientNetB1-B7的预训练模型转自[pytorch版EfficientNet](https://github.com/lukemelas/EfficientNet-PyTorch),ResNeXt101_wsl系列预训练模型转自[官方repo](https://github.com/facebookresearch/WSL-Images),剩余预训练模型均基于飞桨训练得到的,并在configs里给出了相应的训练超参数。 @@ -297,3 +369,28 @@ python tools/infer/predict.py \ [26] C.Szegedy, V.Vanhoucke, S.Ioffe, J.Shlens, and Z.Wojna. Rethinking the inception architecture for computer vision. arXiv preprint arXiv:1512.00567, 2015. [27] Ze Liu, Yutong Lin, Yue Cao, Han Hu, Yixuan Wei, Zheng Zhang, Stephen Lin and Baining Guo. Swin Transformer: Hierarchical Vision Transformer using Shifted Windows. + +[28]Cheng Cui, Tingquan Gao, Shengyu Wei, Yuning Du, Ruoyu Guo, Shuilong Dong, Bin Lu, Ying Zhou, Xueying Lv, Qiwen Liu, Xiaoguang Hu, Dianhai Yu, Yanjun Ma. PP-LCNet: A Lightweight CPU Convolutional Neural Network. + +[29]Mingxing Tan, Quoc V. Le. MixConv: Mixed Depthwise Convolutional Kernels. + +[30]Dongyoon Han, Sangdoo Yun, Byeongho Heo, YoungJoon Yoo. Rethinking Channel Dimensions for Efficient Model Design. + +[31]Alexey Dosovitskiy, Lucas Beyer, Alexander Kolesnikov, Dirk Weissenborn, Xiaohua Zhai, Thomas Unterthiner, Mostafa Dehghani, Matthias Minderer, Georg Heigold, Sylvain Gelly, Jakob Uszkoreit, Neil Houlsby. AN IMAGE IS WORTH 16X16 WORDS: +TRANSFORMERS FOR IMAGE RECOGNITION AT SCALE. + +[32]Hugo Touvron, Matthieu Cord, Matthijs Douze, Francisco Massa, Alexandre Sablayrolles, Herve Jegou. Training data-efficient image transformers & distillation through attention. + +[33]Benjamin Graham, Alaaeldin El-Nouby, Hugo Touvron, Pierre Stock, Armand Joulin, Herve Jegou, Matthijs Douze. LeViT: a Vision Transformer in ConvNet’s Clothing for Faster Inference. + +[34]Xiangxiang Chu, Zhi Tian, Yuqing Wang, Bo Zhang, Haibing Ren, Xiaolin Wei, Huaxia Xia, Chunhua Shen. Twins: Revisiting the Design of Spatial Attention in Vision Transformers. + +[35]Kai Han, An Xiao, Enhua Wu, Jianyuan Guo, Chunjing Xu, Yunhe Wang. Transformer in Transformer. + +[36]Xiaohan Ding, Xiangyu Zhang, Ningning Ma, Jungong Han, Guiguang Ding, Jian Sun. RepVGG: Making VGG-style ConvNets Great Again. + +[37]Ping Chao, Chao-Yang Kao, Yu-Shan Ruan, Chien-Hsiang Huang, Youn-Long Lin. HarDNet: A Low Memory Traffic Network. + +[38]Fisher Yu, Dequan Wang, Evan Shelhamer, Trevor Darrell. Deep Layer Aggregation. + +[39]Duo Lim Jie Hu, Changhu Wang, Xiangtai Li, Qi She, Lei Zhu, Tong Zhang, Qifeng Chen. Involution: Inverting the Inherence of Convolution for Visual Recognition. \ No newline at end of file diff --git a/docs/zh_CN_tmp/introduction/.gitkeep b/docs/zh_CN/models_training/.gitkeep similarity index 100% rename from docs/zh_CN_tmp/introduction/.gitkeep rename to docs/zh_CN/models_training/.gitkeep diff --git a/docs/zh_CN_tmp/models_training/classification.md b/docs/zh_CN/models_training/classification.md similarity index 100% rename from docs/zh_CN_tmp/models_training/classification.md rename to docs/zh_CN/models_training/classification.md diff --git a/docs/zh_CN_tmp/models_training/config_description.md b/docs/zh_CN/models_training/config_description.md similarity index 100% rename from docs/zh_CN_tmp/models_training/config_description.md rename to docs/zh_CN/models_training/config_description.md diff --git a/docs/zh_CN_tmp/models_training/recognition.md b/docs/zh_CN/models_training/recognition.md similarity index 100% rename from docs/zh_CN_tmp/models_training/recognition.md rename to docs/zh_CN/models_training/recognition.md diff --git a/docs/zh_CN_tmp/models_training/train_strategy.md b/docs/zh_CN/models_training/train_strategy.md similarity index 100% rename from docs/zh_CN_tmp/models_training/train_strategy.md rename to docs/zh_CN/models_training/train_strategy.md diff --git a/docs/zh_CN/more_demo.md b/docs/zh_CN/more_demo.md deleted file mode 100644 index e0b19423..00000000 --- a/docs/zh_CN/more_demo.md +++ /dev/null @@ -1,61 +0,0 @@ -## 识别效果展示 -- 商品识别 -
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
- -- 动漫人物识别 -
- -
-
- -
-
- -
- -- logo识别 -
- -
-
- -
-
- -
- -- 车辆识别 -
- -
-
- -
-
- -
- -[更多效果图](https://github.com/PaddlePaddle/PaddleClas/tree/release/2.2/docs/images/recognition/more_demo_images) diff --git a/docs/zh_CN_tmp/others/competition_support.md b/docs/zh_CN/others/competition_support.md similarity index 100% rename from docs/zh_CN_tmp/others/competition_support.md rename to docs/zh_CN/others/competition_support.md diff --git a/docs/zh_CN_tmp/others/more_demo.md b/docs/zh_CN/others/more_demo.md similarity index 100% rename from docs/zh_CN_tmp/others/more_demo.md rename to docs/zh_CN/others/more_demo.md diff --git a/docs/zh_CN/update_history.md b/docs/zh_CN/others/update_history.md similarity index 100% rename from docs/zh_CN/update_history.md rename to docs/zh_CN/others/update_history.md diff --git a/docs/zh_CN_tmp/others/versions.md b/docs/zh_CN/others/versions.md similarity index 100% rename from docs/zh_CN_tmp/others/versions.md rename to docs/zh_CN/others/versions.md diff --git a/docs/zh_CN_tmp/quick_start/quick_start_classification_new_user.md b/docs/zh_CN/quick_start/quick_start_classification_new_user.md similarity index 100% rename from docs/zh_CN_tmp/quick_start/quick_start_classification_new_user.md rename to docs/zh_CN/quick_start/quick_start_classification_new_user.md diff --git a/docs/zh_CN_tmp/quick_start/quick_start_classification_professional.md b/docs/zh_CN/quick_start/quick_start_classification_professional.md similarity index 100% rename from docs/zh_CN_tmp/quick_start/quick_start_classification_professional.md rename to docs/zh_CN/quick_start/quick_start_classification_professional.md diff --git a/docs/zh_CN_tmp/quick_start/quick_start_recognition.md b/docs/zh_CN/quick_start/quick_start_recognition.md similarity index 100% rename from docs/zh_CN_tmp/quick_start/quick_start_recognition.md rename to docs/zh_CN/quick_start/quick_start_recognition.md diff --git a/docs/zh_CN/tutorials/config_description.md b/docs/zh_CN/tutorials/config_description.md deleted file mode 100644 index 6f2cb482..00000000 --- a/docs/zh_CN/tutorials/config_description.md +++ /dev/null @@ -1,234 +0,0 @@ -# 配置说明 - ---- - -## 简介 - -本文档介绍了PaddleClas配置文件(`ppcls/configs/*.yaml`)中各参数的含义,以便您更快地自定义或修改超参数配置。 - - -## 配置详解 - -### 1.分类模型 - -此处以`ResNet50_vd`在`ImageNet-1k`上的训练配置为例,详解各个参数的意义。[配置路径](../../../ppcls/configs/ImageNet/ResNet/ResNet50_vd.yaml)。 - -#### 1.1 全局配置(Global) - -| 参数名字 | 具体含义 | 默认值 | 可选值 | -|:---:|:---:|:---:|:---:| -| checkpoints | 断点模型路径,用于恢复训练 | null | str | -| pretrained_model | 预训练模型路径 | null | str | -| output_dir | 保存模型路径 | "./output/" | str | -| save_interval | 每隔多少个epoch保存模型 | 1 | int | -| eval_during_train| 是否在训练时进行评估 | True | bool | -| eval_interval | 每隔多少个epoch进行模型评估 | 1 | int | -| epochs | 训练总epoch数 | | int | -| print_batch_step | 每隔多少个mini-batch打印输出 | 10 | int | -| use_visualdl | 是否是用visualdl可视化训练过程 | False | bool | -| image_shape | 图片大小 | [3,224,224] | list, shape: (3,) | -| save_inference_dir | inference模型的保存路径 | "./inference" | str | -| eval_mode | eval的模式 | "classification" | "retrieval" | - -**注**:`pretrained_model`也可以填写存放预训练模型的http地址。 - -#### 1.2 结构(Arch) - -| 参数名字 | 具体含义 | 默认值 | 可选值 | -|:---:|:---:|:---:|:---:| -| name | 模型结构名字 | ResNet50 | PaddleClas提供的模型结构 | -| class_num | 分类数 | 1000 | int | -| pretrained | 预训练模型 | False | bool, str | - -**注**:此处的pretrained可以设置为`True`或者`False`,也可以设置权重的路径。另外当`Global.pretrained_model`也设置相应路径时,此处的`pretrained`失效。 - -#### 1.3 损失函数(Loss) - -| 参数名字 | 具体含义 | 默认值 | 可选值 | -|:---:|:---:|:---:|:---:| -| CELoss | 交叉熵损失函数 | —— | —— | -| CELoss.weight | CELoss的在整个Loss中的权重 | 1.0 | float | -| CELoss.epsilon | CELoss中label_smooth的epsilon值 | 0.1 | float,0-1之间 | - - -#### 1.4 优化器(Optimizer) - -| 参数名字 | 具体含义 | 默认值 | 可选值 | -|:---:|:---:|:---:|:---:| -| name | 优化器方法名 | "Momentum" | "RmsProp"等其他优化器 | -| momentum | momentum值 | 0.9 | float | -| lr.name | 学习率下降方式 | "Cosine" | "Linear"、"Piecewise"等其他下降方式 | -| lr.learning_rate | 学习率初始值 | 0.1 | float | -| lr.warmup_epoch | warmup轮数 | 0 | int,如5 | -| regularizer.name | 正则化方法名 | "L2" | ["L1", "L2"] | -| regularizer.coeff | 正则化系数 | 0.00007 | float | - -**注**:`lr.name`不同时,新增的参数可能也不同,如当`lr.name=Piecewise`时,需要添加如下参数: - -``` - lr: - name: Piecewise - learning_rate: 0.1 - decay_epochs: [30, 60, 90] - values: [0.1, 0.01, 0.001, 0.0001] -``` - -添加方法及参数请查看[learning_rate.py](../../../ppcls/optimizer/learning_rate.py)。 - - -#### 1.5数据读取模块(DataLoader) - -##### 1.5.1 dataset - -| 参数名字 | 具体含义 | 默认值 | 可选值 | -|:---:|:---:|:---:|:---:| -| name | 读取数据的类的名字 | ImageNetDataset | VeriWild等其他读取数据类的名字 | -| image_root | 数据集存放的路径 | ./dataset/ILSVRC2012/ | str | -| cls_label_path | 数据集标签list | ./dataset/ILSVRC2012/train_list.txt | str | -| transform_ops | 单张图片的数据预处理 | —— | —— | -| batch_transform_ops | batch图片的数据预处理 | —— | —— | - - -transform_ops中参数的意义: - -| 功能名字 | 参数名字 | 具体含义 | -|:---:|:---:|:---:| -| DecodeImage | to_rgb | 数据转RGB | -| | channel_first | 按CHW排列的图片数据 | -| RandCropImage | size | 随机裁剪 | -| RandFlipImage | | 随机翻转 | -| NormalizeImage | scale | 归一化scale值 | -| | mean | 归一化均值 | -| | std | 归一化方差 | -| | order | 归一化顺序 | -| CropImage | size | 裁剪大小 | -| ResizeImage | resize_short | 按短边调整大小 | - -batch_transform_ops中参数的含义: - -| 功能名字 | 参数名字 | 具体含义 | -|:---:|:---:|:---:| -| MixupOperator | alpha | Mixup参数值,该值越大增强越强 | - -##### 1.5.2 sampler - -| 参数名字 | 具体含义 | 默认值 | 可选值 | -|:---:|:---:|:---:|:---:| -| name | sampler类型 | DistributedBatchSampler | DistributedRandomIdentitySampler等其他Sampler | -| batch_size | 批大小 | 64 | int | -| drop_last | 是否丢掉最后不够batch-size的数据 | False | bool | -| shuffle | 数据是否做shuffle | True | bool | - -##### 1.5.3 loader - -| 参数名字 | 具体含义 | 默认值 | 可选值 | -|:---:|:---:|:---:|:---:| -| num_workers | 数据读取线程数 | 4 | int | -| use_shared_memory | 是否使用共享内存 | True | bool | - - -#### 1.6 评估指标(Metric) - -| 参数名字 | 具体含义 | 默认值 | 可选值 | -|:---:|:---:|:---:|:---:| -| TopkAcc | TopkAcc | [1, 5] | list, int | - -#### 1.7 预测(Infer) - -| 参数名字 | 具体含义 | 默认值 | 可选值 | -|:---:|:---:|:---:|:---:| -| infer_imgs | 被infer的图像的地址 | docs/images/whl/demo.jpg | str | -| batch_size | 批大小 | 10 | int | -| PostProcess.name | 后处理名字 | Topk | str | -| PostProcess.topk | topk的值 | 5 | int | -| PostProcess.class_id_map_file | class id和名字的映射文件 | ppcls/utils/imagenet1k_label_list.txt | str | - -**注**:Infer模块的`transforms`的解释参考数据读取模块中的dataset中`transform_ops`的解释。 - - -### 2.蒸馏模型 - -**注**:此处以`MobileNetV3_large_x1_0`在`ImageNet-1k`上蒸馏`MobileNetV3_small_x1_0`的训练配置为例,详解各个参数的意义。[配置路径](../../../ppcls/configs/ImageNet/Distillation/mv3_large_x1_0_distill_mv3_small_x1_0.yaml)。这里只介绍与分类模型有区别的参数。 - -#### 2.1 结构(Arch) - -| 参数名字 | 具体含义 | 默认值 | 可选值 | -|:---:|:---:|:---:|:---:| -| name | 模型结构名字 | DistillationModel | —— | -| class_num | 分类数 | 1000 | int | -| freeze_params_list | 冻结参数列表 | [True, False] | list | -| models | 模型列表 | [Teacher, Student] | list | -| Teacher.name | 教师模型的名字 | MobileNetV3_large_x1_0 | PaddleClas中的模型 | -| Teacher.pretrained | 教师模型预训练权重 | True | 布尔值或者预训练权重路径 | -| Teacher.use_ssld | 教师模型预训练权重是否是ssld权重 | True | 布尔值 | -| infer_model_name | 被infer模型的类型 | Student | Teacher | - -**注**: - -1.list在yaml中体现如下: -``` - freeze_params_list: - - True - - False -``` -2.Student的参数情况类似,不再赘述。 - -#### 2.2 损失函数(Loss) - -| 参数名字 | 具体含义 | 默认值 | 可选值 | -|:---:|:---:|:---:|:---:| -| DistillationCELoss | 蒸馏的交叉熵损失函数 | —— | —— | -| DistillationCELoss.weight | Loss权重 | 1.0 | float | -| DistillationCELoss.model_name_pairs | ["Student", "Teacher"] | —— | —— | -| DistillationGTCELoss.weight | 蒸馏的模型与真实Label的交叉熵损失函数 | —— | —— | -| DistillationGTCELos.weight | Loss权重 | 1.0 | float | -| DistillationCELoss.model_names | 与真实label作交叉熵的模型名字 | ["Student"] | —— | - - -#### 2.3 评估指标(Metric) - -| 参数名字 | 具体含义 | 默认值 | 可选值 | -|:---:|:---:|:---:|:---:| -| DistillationTopkAcc | DistillationTopkAcc | 包含model_key和topk两个参数 | —— | -| DistillationTopkAcc.model_key | 被评估的模型 | "Student" | "Teacher" | -| DistillationTopkAcc.topk | Topk的值 | [1, 5] | list, int | - -**注**:`DistillationTopkAcc`与普通`TopkAcc`含义相同,只是只用在蒸馏任务中。 - -### 3. 识别模型 - -**注**:此处以`ResNet50`在`LogoDet-3k`上的训练配置为例,详解各个参数的意义。[配置路径](../../../ppcls/configs/Logo/ResNet50_ReID.yaml)。这里只介绍与分类模型有区别的参数。 - -#### 3.1 结构(Arch) - -| 参数名字 | 具体含义 | 默认值 | 可选值 | -| :---------------: | :-----------------------: | :--------: | :----------------------------------------------------------: | -| name | 模型结构 | "RecModel" | ["RecModel"] | -| infer_output_key | inference时的输出值 | “feature” | ["feature", "logits"] | -| infer_add_softmax | infercne是否添加softmax | False | [True, False] | -| Backbone.name | Backbone的名字 | ResNet50_last_stage_stride1 | PaddleClas提供的其他backbone | -| Backbone.pretrained | Backbone预训练模型 | True | 布尔值或者预训练模型路径 | -| BackboneStopLayer.name | Backbone中的输出层名字 | True | Backbone中的特征输出层的`full_name` | -| Neck.name | 网络Neck部分名字 | VehicleNeck | 需传入字典结构,Neck网络层的具体输入参数 | -| Neck.in_channels | 输入Neck部分的维度大小 | 2048 | 与BackboneStopLayer.name层的大小相同 | -| Neck.out_channels | 输出Neck部分的维度大小,即特征维度大小 | 512 | int | -| Head.name | 网络Head部分名字 | CircleMargin | Arcmargin等 | -| Head.embedding_size | 特征维度大小 | 512 | 与Neck.out_channels保持一致 | -| Head.class_num | 类别数 | 3000 | int | -| Head.margin | CircleMargin中的margin值 | 0.35 | float | -| Head.scale | CircleMargin中的scale值 | 64 | int | - -**注**: - -1.在PaddleClas中,`Neck`部分是Backbone与embedding层的连接部分,`Head`部分是embedding层与分类层的连接部分。 - -2.`BackboneStopLayer.name`的获取方式可以通过将模型可视化后获取,可视化方式可以参考[Netron](https://github.com/lutzroeder/netron)或者[visualdl](https://github.com/PaddlePaddle/VisualDL)。 - -3.调用`tools/export_model.py`会将模型的权重转为inference model,其中`infer_add_softmax`参数会控制是否在其后增加`Softmax`激活函数,代码中默认为`True`(分类任务中最后的输出层会接`Softmax`激活函数),识别任务中特征层无须接激活函数,此处要设置为`False`。 - -#### 3.2 评估指标(Metric) - -| 参数名字 | 具体含义 | 默认值 | 可选值 | -|:---:|:---:|:---:|:---:| -| Recallk| 召回率 | [1, 5] | list, int | -| mAP| 平均检索精度 | None | None | diff --git a/docs/zh_CN/tutorials/data.md b/docs/zh_CN/tutorials/data.md deleted file mode 100644 index 71c50102..00000000 --- a/docs/zh_CN/tutorials/data.md +++ /dev/null @@ -1,80 +0,0 @@ -# 数据说明 - ---- - -## 1.简介 -本文档介绍ImageNet1k和flowers102数据准备过程。 - -## 2.数据集准备 - -数据集 | 训练集大小 | 测试集大小 | 类别数 | 备注| -:------:|:---------------:|:---------------------:|:-----------:|:-----------: -[flowers102](https://www.robots.ox.ac.uk/~vgg/data/flowers/102/)|1k | 6k | 102 | -[ImageNet1k](http://www.image-net.org/challenges/LSVRC/2012/)|1.2M| 50k | 1000 | - -* 数据格式 -按照如下结构组织数据,其中`train_list.txt`和`val_list.txt`的格式形如: - -```shell -# 每一行采用"空格"分隔图像路径与标注 - -# 下面是train_list.txt中的格式样例 -train/n01440764/n01440764_10026.JPEG 0 -... - -# 下面是val_list.txt中的格式样例 -val/ILSVRC2012_val_00000001.JPEG 65 -... -``` - -### ImageNet1k -从官方下载数据后,按如下组织数据 - -```bash -PaddleClas/dataset/ILSVRC2012/ -|_ train/ -| |_ n01440764 -| | |_ n01440764_10026.JPEG -| | |_ ... -| |_ ... -| | -| |_ n15075141 -| |_ ... -| |_ n15075141_9993.JPEG -|_ val/ -| |_ ILSVRC2012_val_00000001.JPEG -| |_ ... -| |_ ILSVRC2012_val_00050000.JPEG -|_ train_list.txt -|_ val_list.txt -``` - -### 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 - -```bash -python generate_flowers102_list.py jpg train > train_list.txt -python generate_flowers102_list.py jpg valid > val_list.txt - -``` -按照如下结构组织数据: - -```bash -PaddleClas/dataset/flowers102/ -|_ jpg/ -| |_ image_03601.jpg -| |_ ... -| |_ image_02355.jpg -|_ train_list.txt -|_ val_list.txt -``` diff --git a/docs/zh_CN/tutorials/getting_started.md b/docs/zh_CN/tutorials/getting_started.md deleted file mode 100644 index 3708d3e8..00000000 --- a/docs/zh_CN/tutorials/getting_started.md +++ /dev/null @@ -1,261 +0,0 @@ -# 开始使用 ---- -请参考[安装指南](./install.md)配置运行环境,并根据[快速开始](./quick_start_new_user.md)文档准备flower102数据集,本章节下面所有的实验均以flower102数据集为例。 - -PaddleClas目前支持的训练/评估环境如下: -```shell -└── CPU/单卡GPU -    ├── Linux -    └── Windows - -└── 多卡GPU - └── Linux -``` - -## 1. 基于CPU/单卡GPU上的训练与评估 - -在基于CPU/单卡GPU上训练与评估,推荐使用`tools/train.py`与`tools/eval.py`脚本。关于Linux平台多卡GPU环境下的训练与评估,请参考[2. 基于Linux+GPU的模型训练与评估](#2)。 - - -### 1.1 模型训练 - -准备好配置文件之后,可以使用下面的方式启动训练。 - -``` -python3 tools/train.py \ - -c ./ppcls/configs/quick_start/MobileNetV3_large_x1_0.yaml \ - -o Arch.pretrained=False \ - -o Global.device=gpu -``` - -其中,`-c`用于指定配置文件的路径,`-o`用于指定需要修改或者添加的参数,其中`-o Arch.pretrained=False`表示不使用预训练模型,`-o Global.device=gpu`表示使用GPU进行训练。如果希望使用CPU进行训练,则需要将`Global.device`设置为`cpu`。 - -更详细的训练配置,也可以直接修改模型对应的配置文件。具体配置参数参考[配置文档](config_description.md)。 - -运行上述命令,可以看到输出日志,示例如下: - -* 如果在训练中使用了mixup或者cutmix的数据增广方式,那么日志中将不会打印top-1与top-k(默认为5)信息: - ``` - ... - [Train][Epoch 3/20][Avg]CELoss: 6.46287, loss: 6.46287 - ... - [Eval][Epoch 3][Avg]CELoss: 5.94309, loss: 5.94309, top1: 0.01961, top5: 0.07941 - ... - ``` - -* 如果训练过程中没有使用mixup或者cutmix的数据增广,那么除了上述信息外,日志中也会打印出top-1与top-k(默认为5)的信息: - - ``` - ... - [Train][Epoch 3/20][Avg]CELoss: 6.12570, loss: 6.12570, top1: 0.01765, top5: 0.06961 - ... - [Eval][Epoch 3][Avg]CELoss: 5.40727, loss: 5.40727, top1: 0.07549, top5: 0.20980 - ... - ``` - -训练期间也可以通过VisualDL实时观察loss变化,详见[VisualDL](../extension/VisualDL.md)。 - -### 1.2 模型微调 - -根据自己的数据集路径设置好配置文件后,可以通过加载预训练模型的方式进行微调,如下所示。 - -``` -python3 tools/train.py \ - -c ./ppcls/configs/quick_start/MobileNetV3_large_x1_0.yaml \ - -o Arch.pretrained=True \ - -o Global.device=gpu -``` - -其中`Arch.pretrained`设置为`True`表示加载ImageNet的预训练模型,此外,`Arch.pretrained`也可以指定具体的模型权重文件的地址,使用时需要换成自己的预训练模型权重文件的路径。 - -我们也提供了大量基于`ImageNet-1k`数据集的预训练模型,模型列表及下载地址详见[模型库概览](../models/models_intro.md)。 - - -### 1.3 模型恢复训练 - -如果训练任务因为其他原因被终止,也可以加载断点权重文件,继续训练: - -``` -python3 tools/train.py \ - -c ./ppcls/configs/quick_start/MobileNetV3_large_x1_0.yaml \ - -o Global.checkpoints="./output/MobileNetV3_large_x1_0/epoch_5" \ - -o Global.device=gpu -``` - -其中配置文件不需要做任何修改,只需要在继续训练时设置`Global.checkpoints`参数即可,表示加载的断点权重文件路径,使用该参数会同时加载保存的断点权重和学习率、优化器等信息。 - -**注意**: - -* `-o Global.checkpoints`参数无需包含断点权重文件的后缀名,上述训练命令会在训练过程中生成如下所示的断点权重文件,若想从断点`5`继续训练,则`Global.checkpoints`参数只需设置为`"../output/MobileNetV3_large_x1_0/epoch_5"`,PaddleClas会自动补充后缀名。output目录下的文件结构如下所示: - - ```shell - output - ├── MobileNetV3_large_x1_0 - │   ├── best_model.pdopt - │   ├── best_model.pdparams - │   ├── best_model.pdstates - │   ├── epoch_1.pdopt - │   ├── epoch_1.pdparams - │   ├── epoch_1.pdstates - . - . - . - ``` - - -### 1.4 模型评估 - -可以通过以下命令进行模型评估。 - -```bash -python3 tools/eval.py \ - -c ./ppcls/configs/quick_start/MobileNetV3_large_x1_0.yaml \ - -o Global.pretrained_model=./output/MobileNetV3_large_x1_0/best_model -``` - -上述命令将使用`./configs/quick_start/MobileNetV3_large_x1_0.yaml`作为配置文件,对上述训练得到的模型`./output/MobileNetV3_large_x1_0/best_model`进行评估。你也可以通过更改配置文件中的参数来设置评估,也可以通过`-o`参数更新配置,如上所示。 - -可配置的部分评估参数说明如下: -* `Arch.name`:模型名称 -* `Global.pretrained_model`:待评估的模型预训练模型文件路径 - -**注意:** 在加载待评估模型时,需要指定模型文件的路径,但无需包含文件后缀名,PaddleClas会自动补齐`.pdparams`的后缀,如[1.3 模型恢复训练](#1.3)。 - - -## 2. 基于Linux+GPU的模型训练与评估 - -如果机器环境为Linux+GPU,那么推荐使用`paddle.distributed.launch`启动模型训练脚本(`tools/train.py`)、评估脚本(`tools/eval.py`),可以更方便地启动多卡训练与评估。 - -### 2.1 模型训练 - -参考如下方式启动模型训练,`paddle.distributed.launch`通过设置`gpus`指定GPU运行卡号: - -```bash -# PaddleClas通过launch方式启动多卡多进程训练 - -export CUDA_VISIBLE_DEVICES=0,1,2,3 - -python3 -m paddle.distributed.launch \ - --gpus="0,1,2,3" \ - tools/train.py \ - -c ./ppcls/configs/quick_start/MobileNetV3_large_x1_0.yaml -``` - -输出日志信息的格式同上,详见[1.1 模型训练](#1.1)。 - -### 2.2 模型微调 - -根据自己的数据集配置好配置文件之后,可以加载预训练模型进行微调,如下所示。 - -``` -export CUDA_VISIBLE_DEVICES=0,1,2,3 - -python3 -m paddle.distributed.launch \ - --gpus="0,1,2,3" \ - tools/train.py \ - -c ./ppcls/configs/quick_start/MobileNetV3_large_x1_0.yaml \ - -o Arch.pretrained=True -``` - -其中`Arch.pretrained`为`True`或`False`,当然也可以设置加载预训练权重文件的路径,使用时需要换成自己的预训练模型权重文件路径,也可以直接在配置文件中修改该路径。 - -30分钟玩转PaddleClas[尝鲜版](./quick_start_new_user.md)与[进阶版](./quick_start_professional.md)中包含大量模型微调的示例,可以参考该章节在特定的数据集上进行模型微调。 - - - -### 2.3 模型恢复训练 - -如果训练任务因为其他原因被终止,也可以加载断点权重文件继续训练。 - -``` -export CUDA_VISIBLE_DEVICES=0,1,2,3 - -python3 -m paddle.distributed.launch \ - --gpus="0,1,2,3" \ - tools/train.py \ - -c ./ppcls/configs/quick_start/MobileNetV3_large_x1_0.yaml \ - -o Global.checkpoints="./output/MobileNetV3_large_x1_0/epoch_5" \ - -o Global.device=gpu -``` - -其中配置文件不需要做任何修改,只需要在训练时设置`Global.checkpoints`参数即可,该参数表示加载的断点权重文件路径,使用该参数会同时加载保存的模型参数权重和学习率、优化器等信息,详见[1.3 模型恢复训练](#1.3)。 - - -### 2.4 模型评估 - -可以通过以下命令进行模型评估。 - -```bash -export CUDA_VISIBLE_DEVICES=0,1,2,3 -python3 -m paddle.distributed.launch \ - tools/eval.py \ - -c ./ppcls/configs/quick_start/MobileNetV3_large_x1_0.yaml \ - -o Global.pretrained_model=./output/MobileNetV3_large_x1_0/best_model -``` - -参数说明详见[1.4 模型评估](#1.4)。 - - - -## 3. 使用预训练模型进行模型预测 - -模型训练完成之后,可以加载训练得到的预训练模型,进行模型预测。在模型库的 `tools/infer/infer.py` 中提供了完整的示例,只需执行下述命令即可完成模型预测: - -```python - -python3 tools/infer.py \ - -c ./ppcls/configs/quick_start/MobileNetV3_large_x1_0.yaml \ - -o Infer.infer_imgs=dataset/flowers102/jpg/image_00001.jpg \ - -o Global.pretrained_model=./output/MobileNetV3_large_x1_0/best_model -``` - -参数说明: -+ `Infer.infer_imgs`:待预测的图片文件路径或者批量预测时的图片文件夹。 -+ `Global.pretrained_model`:模型权重文件路径,如 `./output/MobileNetV3_large_x1_0/best_model` - - - -## 4. 使用inference模型进行模型推理 - -通过导出inference模型,PaddlePaddle支持使用预测引擎进行预测推理。接下来介绍如何用预测引擎进行推理: -首先,对训练好的模型进行转换: - -```bash -python3 tools/export_model.py \ - -c ./ppcls/configs/quick_start/MobileNetV3_large_x1_0.yaml \ - -o Global.pretrained_model=output/MobileNetV3_large_x1_0/best_model -``` - - -其中,`Global.pretrained_model`用于指定模型文件路径,该路径仍无需包含模型文件后缀名(如[1.3 模型恢复训练](#1.3))。 - -上述命令将生成模型结构文件(`inference.pdmodel`)和模型权重文件(`inference.pdiparams`),然后可以使用预测引擎进行推理: - -进入deploy目录下: - -```bash -cd deploy -``` - -执行命令进行预测,由于默认class_id_map_file是ImageNet数据集的映射文件,所以此处需要置None。 - -```bash -python3 python/predict_cls.py \ - -c configs/inference_cls.yaml \ - -o Global.infer_imgs=../dataset/flowers102/jpg/image_00001.jpg \ - -o Global.inference_model_dir=../inference/ \ - -o PostProcess.Topk.class_id_map_file=None - - -其中: -+ `Global.infer_imgs`:待预测的图片文件路径。 -+ `Global.inference_model_dir`:inference模型结构文件路径,如 `../inference/inference.pdmodel` -+ `Global.use_tensorrt`:是否使用 TesorRT 预测引擎,默认值:`False` -+ `Global.use_gpu`:是否使用 GPU 预测,默认值:`True` -+ `Global.enable_mkldnn`:是否启用`MKL-DNN`加速,默认为`False`。注意`enable_mkldnn`与`use_gpu`同时为`True`时,将忽略`enable_mkldnn`,而使用GPU运行。 -+ `Global.use_fp16`:是否启用`FP16`,默认为`False`。 - - -**注意**: 如果使用`Transformer`系列模型,如`DeiT_***_384`, `ViT_***_384`等,请注意模型的输入数据尺寸,需要设置参数`resize_short=384`, `resize=384`。 - -* 如果你希望提升评测模型速度,使用gpu评测时,建议开启TensorRT加速预测,使用cpu评测时,建议开启MKL-DNN加速预测。 diff --git a/docs/zh_CN/tutorials/getting_started_retrieval.md b/docs/zh_CN/tutorials/getting_started_retrieval.md deleted file mode 100644 index 12c54cd8..00000000 --- a/docs/zh_CN/tutorials/getting_started_retrieval.md +++ /dev/null @@ -1,248 +0,0 @@ -# 开始使用 ---- -首先,请参考[安装指南](./install.md)配置运行环境。 - -PaddleClas图像检索部分目前支持的训练/评估环境如下: -```shell -└── CPU/单卡GPU -    ├── Linux -    └── Windows -``` -## 目录 - -* [1. 数据准备与处理](#数据准备与处理) -* [2. 基于单卡GPU上的训练与评估](#基于单卡GPU上的训练与评估) - * [2.1 模型训练](#模型训练) - * [2.2 模型恢复训练](#模型恢复训练) - * [2.3 模型评估](#模型评估) -* [3. 导出inference模型](#导出inference模型) - - -## 1. 数据的准备与处理 - -* 进入PaddleClas目录。 - -```bash -## linux or mac, $path_to_PaddleClas表示PaddleClas的根目录,用户需要根据自己的真实目录修改 -cd $path_to_PaddleClas -``` - -* 进入`dataset`目录,为了快速体验PaddleClas图像检索模块,此处使用的数据集为[CUB_200_2011](http://vision.ucsd.edu/sites/default/files/WelinderEtal10_CUB-200.pdf),其是一个包含200类鸟的细粒度鸟类数据集。首先,下载CUB_200_2011数据集,下载方式请参考[官网](http://www.vision.caltech.edu/visipedia/CUB-200-2011.html)。 - -```shell -# linux or mac -cd dataset - -# 将下载后的数据拷贝到此目录 -cp {数据存放的路径}/CUB_200_2011.tgz . - -# 解压 -tar -xzvf CUB_200_2011.tgz - -#进入CUB_200_2011目录 -cd CUB_200_2011 -``` - -该数据集在用作图像检索任务时,通常将前100类当做训练集,后100类当做测试集,所以此处需要将下载的数据集做一些后处理,来更好的适应PaddleClas的图像检索训练。 - -```shell -#新建train和test目录 -mkdir train && mkdir test - -#将数据分成训练集和测试集,前100类作为训练集,后100类作为测试集 -ls images | awk -F "." '{if(int($1)<101)print "mv images/"$0" train/"int($1)}' | sh -ls images | awk -F "." '{if(int($1)>100)print "mv images/"$0" test/"int($1)}' | sh - -#生成train_list和test_list -tree -r -i -f train | grep jpg | awk -F "/" '{print $0" "int($2) " "NR}' > train_list.txt -tree -r -i -f test | grep jpg | awk -F "/" '{print $0" "int($2) " "NR}' > test_list.txt -``` - -至此,现在已经得到`CUB_200_2011`的训练集(`train`目录)、测试集(`test`目录)、`train_list.txt`、`test_list.txt`。 - -数据处理完毕后,`CUB_200_2011`中的`train`目录下应有如下结构: - -``` -├── 1 -│   ├── Black_Footed_Albatross_0001_796111.jpg -│   ├── Black_Footed_Albatross_0002_55.jpg - ... -├── 10 -│   ├── Red_Winged_Blackbird_0001_3695.jpg -│   ├── Red_Winged_Blackbird_0005_5636.jpg -... -``` - -`train_list.txt`应为: - -``` -train/99/Ovenbird_0137_92639.jpg 99 1 -train/99/Ovenbird_0136_92859.jpg 99 2 -train/99/Ovenbird_0135_93168.jpg 99 3 -train/99/Ovenbird_0131_92559.jpg 99 4 -train/99/Ovenbird_0130_92452.jpg 99 5 -... -``` -其中,分隔符为空格" ", 三列数据的含义分别是训练数据的路径、训练数据的label信息、训练数据的unique id。 - -测试集格式与训练集格式相同。 - -**注意**: - -* 当gallery dataset和query dataset相同时,为了去掉检索得到的第一个数据(检索图片本身无须评估),每个数据需要对应一个unique id,用于后续评测mAP、recall@1等指标。关于gallery dataset与query dataset的解析请参考[图像检索数据集介绍](#图像检索数据集介绍), 关于mAP、recall@1等评测指标请参考[图像检索评价指标](#图像检索评价指标)。 - -返回`PaddleClas`根目录 - -```shell -# linux or mac -cd ../../ -``` - - -## 2. 基于单卡GPU上的训练与评估 - -在基于单卡GPU上训练与评估,推荐使用`tools/train.py`与`tools/eval.py`脚本。 - - -### 2.1 模型训练 - -准备好配置文件之后,可以使用下面的方式启动图像检索任务的训练。PaddleClas训练图像检索任务的方法是度量学习,关于度量学习的解析请参考[度量学习](#度量学习)。 - -``` -python3 tools/train.py \ - -c ./ppcls/configs/quick_start/MobileNetV1_retrieval.yaml \ - -o Arch.Backbone.pretrained=True \ - -o Global.device=gpu -``` - -其中,`-c`用于指定配置文件的路径,`-o`用于指定需要修改或者添加的参数,其中`-o Arch.Backbone.pretrained=True`表示Backbone部分使用预训练模型,此外,`Arch.Backbone.pretrained`也可以指定具体的模型权重文件的地址,使用时需要换成自己的预训练模型权重文件的路径。`-o Global.device=gpu`表示使用GPU进行训练。如果希望使用CPU进行训练,则需要将`Global.device`设置为`cpu`。 - -更详细的训练配置,也可以直接修改模型对应的配置文件。具体配置参数参考[配置文档](config_description.md)。 - -运行上述命令,可以看到输出日志,示例如下: - - ``` - ... - [Train][Epoch 1/50][Avg]CELoss: 6.59110, TripletLossV2: 0.54044, loss: 7.13154 - ... - [Eval][Epoch 1][Avg]recall1: 0.46962, recall5: 0.75608, mAP: 0.21238 - ... - ``` -此处配置文件的Backbone是MobileNetV1,如果想使用其他Backbone,可以重写参数`Arch.Backbone.name`,比如命令中增加`-o Arch.Backbone.name={其他Backbone}`。此外,由于不同模型`Neck`部分的输入维度不同,更换Backbone后可能需要改写此处的输入大小,改写方式类似替换Backbone的名字。 - -在训练Loss部分,此处使用了[CELoss](../../../ppcls/loss/celoss.py)和[TripletLossV2](../../../ppcls/loss/triplet.py),配置文件如下: - -``` -Loss: - Train: - - CELoss: - weight: 1.0 - - TripletLossV2: - weight: 1.0 - margin: 0.5 -``` - -最终的总Loss是所有Loss的加权和,其中weight定义了特定Loss在最终总Loss的权重。如果想替换其他Loss,也可以在配置文件中更改Loss字段,目前支持的Loss请参考[Loss](../../../ppcls/loss)。 - - -### 2.2 模型恢复训练 - -如果训练任务因为其他原因被终止,也可以加载断点权重文件,继续训练: - -``` -python3 tools/train.py \ - -c ./ppcls/configs/quick_start/MobileNetV1_retrieval.yaml \ - -o Global.checkpoints="./output/RecModel/epoch_5" \ - -o Global.device=gpu -``` - -其中配置文件不需要做任何修改,只需要在继续训练时设置`Global.checkpoints`参数即可,表示加载的断点权重文件路径,使用该参数会同时加载保存的断点权重和学习率、优化器等信息。 - -**注意**: - -* `-o Global.checkpoints`参数无需包含断点权重文件的后缀名,上述训练命令会在训练过程中生成如下所示的断点权重文件,若想从断点`5`继续训练,则`Global.checkpoints`参数只需设置为`"./output/RecModel/epoch_5"`,PaddleClas会自动补充后缀名。 - - ```shell - output/ - └── RecModel - ├── best_model.pdopt - ├── best_model.pdparams - ├── best_model.pdstates - ├── epoch_1.pdopt - ├── epoch_1.pdparams - ├── epoch_1.pdstates - . - . - . - ``` - - -### 2.3 模型评估 - -可以通过以下命令进行模型评估。 - -```bash -python3 tools/eval.py \ - -c ./ppcls/configs/quick_start/MobileNetV1_retrieval.yaml \ - -o Global.pretrained_model=./output/RecModel/best_model -``` - -上述命令将使用`./configs/quick_start/MobileNetV1_retrieval.yaml`作为配置文件,对上述训练得到的模型`./output/RecModel/best_model`进行评估。你也可以通过更改配置文件中的参数来设置评估,也可以通过`-o`参数更新配置,如上所示。 - -可配置的部分评估参数说明如下: -* `Arch.name`:模型名称 -* `Global.pretrained_model`:待评估的模型的预训练模型文件路径,不同于`Global.Backbone.pretrained`,此处的预训练模型是整个模型的权重,而`Global.Backbone.pretrained`只是Backbone部分的权重。当需要做模型评估时,需要加载整个模型的权重。 -* `Metric.Eval`:待评估的指标,默认评估recall@1、recall@5、mAP。当你不准备评测某一项指标时,可以将对应的试标从配置文件中删除;当你想增加某一项评测指标时,也可以参考[Metric](../../../ppcls/metric/metrics.py)部分在配置文件`Metric.Eval`中添加相关的指标。 - -**注意:** - -* 在加载待评估模型时,需要指定模型文件的路径,但无需包含文件后缀名,PaddleClas会自动补齐`.pdparams`的后缀,如[2.2 模型恢复训练](#模型恢复训练)。 - -* Metric learning任务一般不评测TopkAcc。 - - -## 3. 导出inference模型 - -通过导出inference模型,PaddlePaddle支持使用预测引擎进行预测推理。对训练好的模型进行转换: - -```bash -python3 tools/export_model.py \ - -c ./ppcls/configs/quick_start/MobileNetV1_retrieval.yaml \ - -o Global.pretrained_model=output/RecModel/best_model \ - -o Global.save_inference_dir=./inference -``` - -其中,`Global.pretrained_model`用于指定模型文件路径,该路径仍无需包含模型文件后缀名(如[2.2 模型恢复训练](#模型恢复训练))。当执行后,会在当前目录下生成`./inference`目录,目录下包含`inference.pdiparams`、`inference.pdiparams.info`、`inference.pdmodel`文件。`Global.save_inference_dir`可以指定导出inference模型的路径。此处保存的inference模型在embedding特征层做了截断,即模型最终的输出为n维embedding特征。 - -上述命令将生成模型结构文件(`inference.pdmodel`)和模型权重文件(`inference.pdiparams`),然后可以使用预测引擎进行推理。使用inference模型推理的流程可以参考[基于Python预测引擎预测推理](https://github.com/PaddlePaddle/PaddleClas/blob/develop/docs/zh_CN/inference.md)。 - -## 基础知识 - -图像检索指的是给定一个包含特定实例(例如特定目标、场景、物品等)的查询图像,图像检索旨在从数据库图像中找到包含相同实例的图像。不同于图像分类,图像检索解决的是一个开集问题,训练集中可能不包含被识别的图像的类别。图像检索的整体流程为:首先将图像中表示为一个合适的特征向量,其次,对这些图像的特征向量用欧式距离或余弦距离进行最近邻搜索以找到底库中相似的图像,最后,可以使用一些后处理技术对检索结果进行微调,确定被识别图像的类别等信息。所以,决定一个图像检索算法性能的关键在于图像对应的特征向量的好坏。 - - -- 度量学习(Metric Learning) - -度量学习研究如何在一个特定的任务上学习一个距离函数,使得该距离函数能够帮助基于近邻的算法 (kNN、k-means等) 取得较好的性能。深度度量学习 (Deep Metric Learning )是度量学习的一种方法,它的目标是学习一个从原始特征到低维稠密的向量空间 (嵌入空间,embedding space) 的映射,使得同类对象在嵌入空间上使用常用的距离函数 (欧氏距离、cosine距离等) 计算的距离比较近,而不同类的对象之间的距离则比较远。深度度量学习在计算机视觉领域取得了非常多的成功的应用,比如人脸识别、商品识别、图像检索、行人重识别等。 - - -- 图像检索数据集介绍 - - - 训练集合(train dataset):用来训练模型,使模型能够学习该集合的图像特征。 - - 底库数据集合(gallery dataset):用来提供图像检索任务中的底库数据,该集合可与训练集或测试集相同,也可以不同,当与训练集相同时,测试集的类别体系应与训练集的类别体系相同。 - - 测试集合(query dataset):用来测试模型的好坏,通常要对测试集的每一张测试图片进行特征提取,之后和底库数据的特征进行距离匹配,得到识别结果,后根据识别结果计算整个测试集的指标。 - - -- 图像检索评价指标 - - - - 召回率(recall):表示预测为正例且标签为正例的个数 / 标签为正例的个数 - - - recall@1:检索的top-1中预测正例且标签为正例的个数 / 标签为正例的个数 - - recall@5:检索的top-5中所有预测正例且标签为正例的个数 / 标签为正例的个数 - - - - 平均检索精度(mAP) - - - AP: AP指的是不同召回率上的正确率的平均值 - - mAP: 测试集中所有图片对应的AP的的平均值 diff --git a/docs/zh_CN/tutorials/image_classification.md b/docs/zh_CN/tutorials/image_classification.md deleted file mode 100644 index 631e9926..00000000 --- a/docs/zh_CN/tutorials/image_classification.md +++ /dev/null @@ -1,58 +0,0 @@ -# 图像分类 ---- - -图像分类是根据图像的语义信息将不同类别图像区分开来,是计算机视觉中重要的基本问题,也是图像检测、图像分割、物体跟踪、行为分析等其他高层视觉任务的基础。图像分类在很多领域有广泛应用,包括安防领域的人脸识别和智能视频分析等,交通领域的交通场景识别,互联网领域基于内容的图像检索和相册自动归类,医学领域的图像识别等。 - -一般来说,图像分类通过手工特征或特征学习方法对整个图像进行全部描述,然后使用分类器判别物体类别,因此如何提取图像的特征至关重要。在深度学习算法之前使用较多的是基于词袋(Bag of Words)模型的物体分类方法。而基于深度学习的图像分类方法,可以通过有监督或无监督的方式学习层次化的特征描述,从而取代了手工设计或选择图像特征的工作。深度学习模型中的卷积神经网络(Convolution Neural Network, CNN)近年来在图像领域取得了惊人的成绩,CNN直接利用图像像素信息作为输入,最大程度上保留了输入图像的所有信息,通过卷积操作进行特征的提取和高层抽象,模型输出直接是图像识别的结果。这种基于"输入-输出"直接端到端的学习方法取得了非常好的效果,得到了广泛的应用。 - -图像分类是计算机视觉里很基础但又重要的一个领域,其研究成果一直影响着计算机视觉甚至深度学习的发展,图像分类有很多子领域,如多标签分类、细粒度分类等,此处只对单标签图像分类做一个简述。 - - -## 一、数据集介绍 - -### 1.1 ImageNet-1k - -ImageNet项目是一个大型视觉数据库,用于视觉目标识别软件研究。该项目已手动注释了1400多万张图像,以指出图片中的对象,并在至少100万张图像中提供了边框。ImageNet-1k是ImageNet数据集的子集,其包含1000个类别。训练集包含1281167个图像数据,验证集包含50000个图像数据。2010年以来,ImageNet项目每年举办一次图像分类竞赛,即ImageNet大规模视觉识别挑战赛(ILSVRC)。挑战赛使用的数据集即为ImageNet-1k。到目前为止,ImageNet-1k已经成为计算机视觉领域发展的最重要的数据集之一,其促进了整个计算机视觉的发展,很多计算机视觉下游任务的初始化模型都是基于该数据集训练得到的权重。 - -### 1.2 CIFAR-10/CIFAR-100 - -CIFAR-10数据集由10个类的60000个彩色图像组成,图像分辨率为32x32,每个类有6000个图像,其中训练集5000张,验证集1000张,10个不同的类代表飞机、汽车、鸟类、猫、鹿、狗、青蛙、马、轮船和卡车。CIFAR-100数据集是CIFAR-10的扩展,由100个类的60000个彩色图像组成,图像分辨率为32x32,每个类有600个图像,其中训练集500张,验证集100张。由于这两个数据集规模较小,因此可以让研究人员快速尝试不同的算法。这两个数据集也是图像分类领域测试模型好坏的常用数据集。 - -## 二、图像分类的流程 - -将准备好的训练数据做相应的数据预处理后经过图像分类模型,模型的输出与真实标签做交叉熵损失函数,该损失函数描述了模型的收敛方向,遍历所有的图片数据输入模型,对最终损失函数通过某些优化器做相应的梯度下降,将梯度信息回传到模型中,更新模型的权重,如此循环往复遍历多次数据,即可得到一个图像分类的模型。 - -### 2.1 数据及其预处理 - -数据的质量及数量往往可以决定一个模型的好坏。在图像分类领域,数据包括图像及标签。在大部分情形下,带有标签的数据比较匮乏,所以数量很难达到使模型饱和的程度,为了可以使模型学习更多的图像特征,图像数据在进入模型之前要经过很多图像变换或者数据增强,来保证输入图像数据的多样性,从而保证模型有更好的泛化能力。PaddleClas提供了训练ImageNet-1k的标准图像变换,也提供了8中数据增强的方法,相关代码可以[数据处理](../../../ppcls/data/preprocess),配置文件可以参考[数据增强配置文件](../../../ppcls/configs/ImageNet/DataAugment)。 - -### 2.2 模型准备 - -在数据确定后,模型往往决定了最终算法精度的上限,在图像分类领域,经典的模型层出不穷,PaddleClas提供了35个系列共164个ImageNet预训练模型。具体的精度、速度等指标请参考[骨干网络和预训练模型库](../ImageNet_models_cn.md)。 - -### 2.3 模型训练 - -在准备好数据、模型后,便可以开始迭代模型并更新模型的参数。经过多次迭代最终可以得到训练好的模型来做图像分类任务。图像分类的训练过程需要很多经验,涉及很多超参数的设置,PaddleClas提供了一些列的[训练调优方法](../models/Tricks.md),可以快速助你获得高精度的模型。 - -### 2.4 模型评估 - -当训练得到一个模型之后,如何确定模型的好坏,需要将模型在验证集上进行评估。评估指标一般是Top1-Acc或者Top5-Acc,该指标越高往往代表模型性能越好。 - - -## 三、主要算法简介 - -- LeNet:Yan LeCun等人于上个世纪九十年代第一次将卷积神经网络应用到图像分类任务上,创造性的提出了LeNet,在手写数字识别任务上取得了巨大的成功。 - -- AlexNet:Alex Krizhevsky等人在2012年提出了AlexNet,并应用于ImageNet上,获得了2012年ImageNet分类比赛的冠军,从此,掀起了深度学习的热潮。 - -- VGG:Simonyan和Zisserman于2014年提出了VGG网络结构,该网络结构使用了更小的卷积核堆叠整个网络,在ImageNet分类上取得了更好的性能,也为之后的网络结构设计提供了新的思路。 - -- GoogLeNet:Christian Szegedy等人在2014年提出了GoogLeNet,该网络使用了多分支结构和全局平均池化层(GAP),在保持模型精度的同时,模型存储和计算量大大缩减。该网络取得了2014年ImageNet分类比赛的冠军。 - -- ResNet:Kaiming He等人在2015年提出了ResNet,通过引入残差模块加深了网络的深度,最终该网络将ImageNet分类的识别错误率降低到了3.6\%,首次超出正常人眼的识别精度。 - -- DenseNet:Huang Gao等人在2017年提出了DenseNet,该网络设计了一种更稠密连接的block,在更小的参数量上获得了更高的性能。 - -- EfficientNet:Mingxing Tan等人在2019年提出了EfficientNet,该网络平衡了网络的宽度、网络的深度、以及输入图片的分辨率,在同样FLOPS与参数量的情况下,精度达到了state-of-the-art的效果。 - -关于更多的算法介绍,请参考[算法介绍](../models)。 diff --git a/docs/zh_CN/tutorials/index.rst b/docs/zh_CN/tutorials/index.rst deleted file mode 100644 index 53464cf0..00000000 --- a/docs/zh_CN/tutorials/index.rst +++ /dev/null @@ -1,12 +0,0 @@ -初级使用 -================================ - -.. toctree:: - :maxdepth: 1 - - install.md - quick_start_new_user.md - quick_start_professional.md - data.md - getting_started.md - config.md diff --git a/docs/zh_CN/tutorials/install.md b/docs/zh_CN/tutorials/install.md deleted file mode 100644 index 67243643..00000000 --- a/docs/zh_CN/tutorials/install.md +++ /dev/null @@ -1,111 +0,0 @@ -# 安装说明 - ---- -本章将介绍如何安装PaddleClas及其依赖项。 - - -## 1. 安装PaddlePaddle - -运行PaddleClas需要`PaddlePaddle 2.1`或更高版本。可以参考下面的步骤安装PaddlePaddle。 - -### 1.1 环境要求 - -- python 3.x -- cuda >= 10.1 (如果使用paddlepaddle-gpu) -- cudnn >= 7.6.4 (如果使用paddlepaddle-gpu) -- nccl >= 2.1.2 (如果使用分布式训练/评估) -- gcc >= 8.2 - -建议使用我们提供的docker运行PaddleClas,有关docker、nvidia-docker使用请参考[链接](https://www.runoob.com/docker/docker-tutorial.html)。 - -在cuda10.1时,建议显卡驱动版本大于等于418.39;在使用cuda10.2时,建议显卡驱动版本大于440.33,更多cuda版本与要求的显卡驱动版本可以参考[链接](https://docs.nvidia.com/deploy/cuda-compatibility/index.html)。 - - -如果不使用docker,可以直接跳过1.2部分内容,从1.3部分开始执行。 - - -### 1.2 (建议)准备docker环境。第一次使用这个镜像,会自动下载该镜像,请耐心等待。 - -``` -# 切换到工作目录下 -cd /home/Projects -# 首次运行需创建一个docker容器,再次运行时不需要运行当前命令 -# 创建一个名字为ppcls的docker容器,并将当前目录映射到容器的/paddle目录下 - -如果您希望在CPU环境下使用docker,使用docker而不是nvidia-docker创建docker,设置docker容器共享内存shm-size为8G,建议设置8G以上 -sudo docker run --name ppcls -v $PWD:/paddle --shm-size=8G --network=host -it paddlepaddle/paddle:2.1.0 /bin/bash - -如果希望使用GPU版本的容器,请运行以下命令创建容器。 -sudo nvidia-docker run --name ppcls -v $PWD:/paddle --shm-size=8G --network=host -it paddlepaddle/paddle:2.1.0-gpu-cuda10.2-cudnn7 /bin/bash -``` - - -您也可以访问[DockerHub](https://hub.docker.com/r/paddlepaddle/paddle/tags/)获取与您机器适配的镜像。 - -``` -# ctrl+P+Q可退出docker 容器,重新进入docker 容器使用如下命令 -sudo docker exec -it ppcls /bin/bash -``` - -### 1.3 通过pip安装PaddlePaddle - -运行下面的命令,通过pip安装最新GPU版本PaddlePaddle - -```bash -pip3 install paddlepaddle-gpu --upgrade -i https://mirror.baidu.com/pypi/simple -``` - -如果希望在CPU环境中使用PaddlePaddle,可以运行下面的命令安装PaddlePaddle。 - -```bash -pip3 install paddlepaddle --upgrade -i https://mirror.baidu.com/pypi/simple -``` - -**注意:** -* 如果先安装了CPU版本的paddlepaddle,之后想切换到GPU版本,那么需要首先卸载CPU版本的paddle,再安装GPU版本的paddle,否则容易导致使用的paddle版本混乱。 -* 您也可以从源码编译安装PaddlePaddle,请参照[PaddlePaddle 安装文档](http://www.paddlepaddle.org.cn/install/quick)中的说明进行操作。 - - -### 1.4 验证是否安装成功 - -使用以下命令可以验证PaddlePaddle是否安装成功。 - -```python -import paddle -paddle.utils.run_check() -``` - -查看PaddlePaddle版本的命令如下: - -```bash -python3 -c "import paddle; print(paddle.__version__)" -``` - -注意: -- 从源码编译的PaddlePaddle版本号为0.0.0,请确保使用了PaddlePaddle 2.0及之后的源码编译。 -- PaddleClas基于PaddlePaddle高性能的分布式训练能力,若您从源码编译,请确保打开编译选项,**WITH_DISTRIBUTE=ON**。具体编译选项参考[编译选项表](https://www.paddlepaddle.org.cn/documentation/docs/zh/develop/install/Tables.html#id3)。 -- 在docker中运行时,为保证docker容器有足够的共享内存用于Paddle的数据读取加速,在创建docker容器时,请设置参数`--shm_size=8g`,条件允许的话可以设置为更大的值。 -- - - -## 2. 安装PaddleClas - -### 2.1 克隆PaddleClas模型库 - -```bash -git clone https://github.com/PaddlePaddle/PaddleClas.git -b release/2.2 -``` - -如果从github上网速太慢,可以从gitee下载,下载命令如下: - -```bash -git clone https://gitee.com/paddlepaddle/PaddleClas.git -b release/2.2 -``` - -### 2.2 安装Python依赖库 - -Python依赖库在`requirements.txt`中给出,可通过如下命令安装: - -```bash -pip3 install --upgrade -r requirements.txt -i https://mirror.baidu.com/pypi/simple -``` diff --git a/docs/zh_CN/tutorials/quick_start_community.md b/docs/zh_CN/tutorials/quick_start_community.md deleted file mode 100644 index a39686fb..00000000 --- a/docs/zh_CN/tutorials/quick_start_community.md +++ /dev/null @@ -1,452 +0,0 @@ -# PaddleClas代码解析与社区贡献指南 - -## 1. 整体代码结构解析 - -### 1.1 前言 - -有用户对PaddleClas的代码做了非常详细的解读,可以参考下面的三篇文档。本部分内容大部分也是来自该系列文档,在此感谢[FutureSI](https://aistudio.baidu.com/aistudio/personalcenter/thirdview/76563)的贡献与解读。 - - -* [PaddleClas 分类套件源码解析(一)](https://aistudio.baidu.com/aistudio/projectdetail/1308952) -* [PaddleClas 分类套件源码解析(二)](https://aistudio.baidu.com/aistudio/projectdetail/1315501) -* [PaddleClas 分类套件源码解析(三)](https://aistudio.baidu.com/aistudio/projectdetail/1339544) - -### 1.2 代码解析 - -#### 1.2.1 整体代码和目录概览 - -* PaddleClas主要代码和目录结构如下 - -
- -
- -* configs 文件夹下存放训练脚本和验证脚本的yaml配置文件,文件按模型类别存放。 -* dataset 文件夹下存放数据集和用于处理数据集的脚本。脚本负责将数据集处理为适合Dataloader处理的格式。 -* docs 文件夹下存放中英文文档。 -* deploy 文件夹存放的是部署工具,支持 Cpp inference、Hub Serveing、Paddle Lite、Slim量化等多种部署方式。 -* ppcls 文件夹下存放PaddleClas框架主体。模型结构脚本、数据增强脚本、优化脚本等DL程序的标准流程代码都在这里。 -* tools 文件夹下存放用于模型下载、训练、预测的脚本。 -* requirements.txt 文件用于安装 PaddleClas 的依赖项。使用pip进行升级安装使用。 - -#### 1.2.2 训练模块定义 - -深度学习模型训练流程框图如下。 - -
- -
- -具体地,深度学习模型训练过程中,主要包含以下几个核心模块。 - -* 数据:对于有监督任务来说,训练数据一般包含原始数据及其标注。在基于单标签的图像分类任务中,原始数据指的是图像数据,而标注则是该图像数据所属的类比。PaddleClas中,训练时需要提供标签文件,形式如下,每一行包含一条训练样本,分别表示图片路径和类别标签,用分隔符隔开(默认为空格)。 - -``` -train/n01440764/n01440764_10026.JPEG 0 -train/n01440764/n01440764_10027.JPEG 0 -``` - -在代码`ppcls/data/reader.py`中,包含`CommonDataset`类,继承自`paddle.io.Dataset`,该数据集类可以通过一个键值进行索引并获取指定样本。 - -对于读入的数据,需要通过数据转换,将原始的图像数据进行转换。训练时,标准的数据预处理包含:`DecodeImage`, `RandCropImage`, `RandFlipImage`, `NormalizeImage`, `ToCHWImage`。在配置文件中体现如下,数据预处理主要包含在`transforms`字段中,以列表形式呈现,会按照顺序对数据依次做这些转换。 - -```yaml -DataLoader: - Train: - dataset: - name: ImageNetDataset - image_root: ./dataset/ILSVRC2012/ - cls_label_path: ./dataset/ILSVRC2012/train_list.txt - transform_ops: - - DecodeImage: - to_rgb: True - channel_first: False - - RandCropImage: - size: 224 - - RandFlipImage: - flip_code: 1 - - NormalizeImage: - scale: 1.0/255.0 - mean: [0.485, 0.456, 0.406] - std: [0.229, 0.224, 0.225] - order: '' -``` - -PaddleClas中也包含了`AutoAugment`, `RandAugment`等数据增广方法,也可以通过在配置文件中配置,从而添加到训练过程的数据预处理中。每个数据转换的方法均以类实现,方便迁移和复用,更多的数据处理具体实现过程可以参考`ppcls/data/preprocess/ops/`下的代码。 - -对于组成一个batch的数据,也可以使用mixup或者cutmix等方法进行数据增广。PaddleClas中集成了`MixupOperator`, `CutmixOperator`, `FmixOperator`等基于batch的数据增广方法,可以在配置文件中配置mix参数进行配置,更加具体的实现可以参考`ppcls/data/preprocess/batch_ops/batch_operators.py`。 - -图像分类中,数据后处理主要为`argmax`操作,在此不再赘述。 - -* 模型结构 - -在配置文件中,模型结构定义如下 - -```yaml -Arch: - name: ResNet50 - pretrained: False - use_ssld: False -``` - -`Arch.name`表示模型名称,`Arch.pretrained`表示是否添加预训练模型。所有的模型名称均在`ppcls/arch/backbone/__init__.py`中定义。 - -对应的,在`ppcls/arch/__init__.py`中,通过`build_model`方法创建模型对象。 - -```python -def build_model(config): - config = copy.deepcopy(config) - model_type = config.pop("name") - mod = importlib.import_module(__name__) - arch = getattr(mod, model_type)(**config) - return arch -``` - -* 损失函数 - -PaddleClas中,包含了`CELoss`, `JSDivLoss`, `TripletLoss`, `CenterLoss`等损失函数,均定义在`ppcls/loss`中。 - -在`ppcls/loss/__init__.py`文件中,使用`CombinedLoss`来构建及合并损失函数,不同训练策略中所需要的损失函数与计算方法不同,PaddleClas在构建损失函数过程中,主要考虑了以下几个因素。 - -1. 是否使用label smooth -2. 是否使用mixup或者cutmix -3. 是否使用蒸馏方法进行训练 -4. 是否是训练metric learning - - -用户可以在配置文件中指定损失函数的类型及权重,如在训练中添加TripletLossV2,配置文件如下: - -```yaml -Loss: - Train: - - CELoss: - weight: 1.0 - - TripletLossV2: - weight: 1.0 - margin: 0.5 -``` - -* 优化器和学习率衰减、权重衰减策略 - -图像分类任务中,`Momentum`是一种比较常用的优化器,PaddleClas中提供了`Momentum`与`RMSProp`两种优化器策略。 - -权重衰减策略是一种比较常用的正则化方法,主要用于防止模型过拟合。PaddleClas中提供了`L1Decay`和`L2Decay`两种权重衰减策略。 - -学习率衰减是图像分类任务中必不可少的精度提升训练方法,PaddleClas目前支持`Cosine`, `Piecewise`, `Linear`等学习率衰减策略。 - -在配置文件中,优化器、权重衰减策略、学习率衰减策略可以通过以下的字段进行配置。 - -```yaml -Optimizer: - name: Momentum - momentum: 0.9 - lr: - name: Piecewise - learning_rate: 0.1 - decay_epochs: [30, 60, 90] - values: [0.1, 0.01, 0.001, 0.0001] - regularizer: - name: 'L2' - coeff: 0.0001 -``` - -在`ppcls/optimizer/__init__.py`中使用`build_optimizer`创建优化器和学习率对象。 - -```python -def build_optimizer(config, epochs, step_each_epoch, parameters): - config = copy.deepcopy(config) - # step1 build lr - lr = build_lr_scheduler(config.pop('lr'), epochs, step_each_epoch) - logger.debug("build lr ({}) success..".format(lr)) - # step2 build regularization - if 'regularizer' in config and config['regularizer'] is not None: - reg_config = config.pop('regularizer') - reg_name = reg_config.pop('name') + 'Decay' - reg = getattr(paddle.regularizer, reg_name)(**reg_config) - else: - reg = None - logger.debug("build regularizer ({}) success..".format(reg)) - # step3 build optimizer - optim_name = config.pop('name') - if 'clip_norm' in config: - clip_norm = config.pop('clip_norm') - grad_clip = paddle.nn.ClipGradByNorm(clip_norm=clip_norm) - else: - grad_clip = None - optim = getattr(optimizer, optim_name)(learning_rate=lr, - weight_decay=reg, - grad_clip=grad_clip, - **config)(parameters=parameters) - logger.debug("build optimizer ({}) success..".format(optim)) - return optim, lr - ``` - - 不同优化器和权重衰减策略均以类的形式实现,具体实现可以参考文件`ppcls/optimizer/optimizer.py`;不同的学习率衰减策略可以参考文件`ppcls/optimizer/learning_rate.py`。 - - -* 训练时评估与模型存储 - -模型在训练的时候,可以设置模型保存的间隔,也可以选择每隔若干个epoch对验证集进行评估,从而可以保存在验证集上精度最佳的模型。配置文件中,可以通过下面的字段进行配置。 - -```yaml -Global: - save_interval: 1 # 模型保存的epoch间隔 - eval_during_train: True # 是否进行训练时评估 - eval_interval: 1 # 评估的epoch间隔 -``` - -模型存储是通过 Paddle 框架的 `paddle.save()` 函数实现的,存储的是模型的 persistable 版本,便于继续训练。具体实现如下 - -```python -ef save_model(program, model_path, epoch_id, prefix='ppcls'): - model_path = os.path.join(model_path, str(epoch_id)) - _mkdir_if_not_exist(model_path) - model_prefix = os.path.join(model_path, prefix) - paddle.static.save(program, model_prefix) - logger.info( - logger.coloring("Already save model in {}".format(model_path), "HEADER")) -``` - -在保存的时候有两点需要注意: -1. 只在0号节点上保存模型。否则多卡训练的时候,如果所有节点都保存模型到相同的路径,则多个节点写文件时可能会发生写文件冲突,导致最终保存的模型无法被正确加载。 -2. 优化器参数也需要存储,方便后续的加载断点进行训练。 - -1.2.3 预测部署代码和方式。 - -* 如果希望在服务端使用cpp进行部署,可以参考[cpp inference预测教程](../../../deploy/cpp_infer/readme.md)。 -* 如果希望将分类模型部署为服务,可以参考[hub serving预测部署教程](../../../deploy/hubserving/readme.md)。 -* 如果希望将对分类模型进行量化,可以参考[Paddle Slim量化教程](../../../deploy/slim/quant/README.md)。 -* 如果希望在移动端使用分类模型进行预测,可以参考[PaddleLite预测部署教程](../../../deploy/lite/readme.md)。 - - -## 2. 如何贡献代码 - -### 2.1 PaddleClas分支说明 - -PaddleClas未来将维护2种分支,分别为: - -* release/x.x系列分支:为稳定的发行版本分支,会适时打tag发布版本,适配Paddle的release版本。当前最新的分支为release/2.0分支,是当前默认分支,适配Paddle v2.0.0。随着版本迭代,release/x.x系列分支会越来越多,默认维护最新版本的release分支,前1个版本分支会修复bug,其他的分支不再维护。 -* develop分支:为开发分支,适配Paddle的develop版本,主要用于开发新功能。如果有同学需要进行二次开发,请选择develop分支。为了保证develop分支能在需要的时候拉出release/x.x分支,develop分支的代码只能使用Paddle最新release分支中有效的api。也就是说,如果Paddle develop分支中开发了新的api,但尚未出现在release分支代码中,那么请不要在PaddleClas中使用。除此之外,对于不涉及api的性能优化、参数调整、策略更新等,都可以正常进行开发。 - -PaddleClas的历史分支,未来将不再维护。考虑到一些同学可能仍在使用,这些分支还会继续保留: - -* release/static分支:这个分支曾用于静态图的开发与测试,目前兼容>=1.7版本的Paddle。如果有特殊需求,要适配旧版本的Paddle,那还可以使用这个分支,但除了修复bug外不再更新代码。 -* dygraph-dev分支:这个分支将不再维护,也不再接受新的代码,请使用的同学尽快迁移到develop分支。 - - -PaddleClas欢迎大家向repo中积极贡献代码,下面给出一些贡献代码的基本流程。 - -### 2.2 PaddleClas代码提交流程与规范 - -#### 2.2.1 fork和clone代码 - -* 跳转到[PaddleClas GitHub首页](https://github.com/PaddlePaddle/PaddleClas),然后单击 Fork 按钮,生成自己目录下的仓库,比如 `https://github.com/USERNAME/PaddleClas`。 - - -
- -
- - -* 将远程仓库clone到本地 - -```shell -# 拉取develop分支的代码 -git clone https://github.com/USERNAME/PaddleClas.git -b develop -cd PaddleClas -``` - -clone的地址可以从下面获取 - - - -
- -
- -#### 2.2.2 和远程仓库建立连接 - -首先通过`git remote -v`查看当前远程仓库的信息。 - -``` -origin https://github.com/USERNAME/PaddleClas.git (fetch) -origin https://github.com/USERNAME/PaddleClas.git (push) -``` - -只有clone的远程仓库的信息,也就是自己用户名下的 PaddleClas,接下来我们创建一个原始 PaddleClas 仓库的远程主机,命名为 upstream。 - -```shell -git remote add upstream https://github.com/PaddlePaddle/PaddleClas.git -``` - -使用`git remote -v`查看当前远程仓库的信息,输出如下,发现包括了origin和upstream 2个远程仓库。 - -``` -origin https://github.com/USERNAME/PaddleClas.git (fetch) -origin https://github.com/USERNAME/PaddleClas.git (push) -upstream https://github.com/PaddlePaddle/PaddleClas.git (fetch) -upstream https://github.com/PaddlePaddle/PaddleClas.git (push) -``` - -这主要是为了后续在提交pull request(PR)时,始终保持本地仓库最新。 - -#### 2.2.3 创建本地分支 - -可以基于当前分支创建新的本地分支,命令如下。 - -```shell -git checkout -b new_branch -``` - -也可以基于远程或者上游的分支创建新的分支,命令如下。 - -```shell -# 基于用户远程仓库(origin)的develop创建new_branch分支 -git checkout -b new_branch origin/develop -# 基于上游远程仓库(upstream)的develop创建new_branch分支 -# 如果需要从upstream创建新的分支,需要首先使用git fetch upstream获取上游代码 -git checkout -b new_branch upstream/develop -``` - -最终会显示切换到新的分支,输出信息如下 - -``` -Branch new_branch set up to track remote branch develop from upstream. -Switched to a new branch 'new_branch' -``` - -#### 2.2.4 使用pre-commit勾子 - -Paddle 开发人员使用 pre-commit 工具来管理 Git 预提交钩子。 它可以帮助我们格式化源代码(C++,Python),在提交(commit)前自动检查一些基本事宜(如每个文件只有一个 EOL,Git 中不要添加大文件等)。 - -pre-commit测试是 Travis-CI 中单元测试的一部分,不满足钩子的 PR 不能被提交到 PaddleClas,首先安装并在当前目录运行它: - -```shell -pip install pre-commit -pre-commit install -``` - -* **注意** -1. Paddle 使用 clang-format 来调整 C/C++ 源代码格式,请确保 `clang-format` 版本在 3.8 以上。 -2. 通过pip install pre-commit和conda install -c conda-forge pre-commit安装的yapf稍有不同的,PaddleClas 开发人员使用的是`pip install pre-commit`。 - - -#### 2.2.5 修改与提交代码 - -可以通过`git status`查看改动的文件。 -对PaddleClas的`README.md`做了一些修改,希望提交上去。则可以通过以下步骤 - -```shell -git add README.md -pre-commit -``` - -重复上述步骤,直到pre-comit格式检查不报错。如下所示。 - -
- -
- - -使用下面的命令完成提交。 - -```shell -git commit -m "your commit info" -``` - -#### 2.2.6 保持本地仓库最新 - -获取 upstream 的最新代码并更新当前分支。这里的upstream来自于2.2节的`和远程仓库建立连接`部分。 - -```shell -git fetch upstream -# 如果是希望提交到其他分支,则需要从upstream的其他分支pull代码,这里是develop -git pull upstream develop -``` - -#### 2.2.7 push到远程仓库 - -```shell -git push origin new_branch -``` - -#### 2.2.7 提交Pull Request - -点击new pull request,选择本地分支和目标分支,如下图所示。在PR的描述说明中,填写该PR所完成的功能。接下来等待review,如果有需要修改的地方,参照上述步骤更新 origin 中的对应分支即可。 - -
- -
- - - -#### 2.2.8 签署CLA协议和通过单元测试 - -* 签署CLA -在首次向PaddlePaddle提交Pull Request时,您需要您签署一次CLA(Contributor License Agreement)协议,以保证您的代码可以被合入,具体签署方式如下: - -1. 请您查看PR中的Check部分,找到license/cla,并点击右侧detail,进入CLA网站 -2. 点击CLA网站中的“Sign in with GitHub to agree”,点击完成后将会跳转回您的Pull Request页面 - - -#### 2.2.9 删除分支 - -* 删除远程分支 - -在 PR 被 merge 进主仓库后,我们可以在 PR 的页面删除远程仓库的分支。 - -也可以使用 `git push origin :分支名` 删除远程分支,如: - - -```shell -git push origin :new_branch -``` - -* 删除本地分支 - -```shell -# 切换到develop分支,否则无法删除当前分支 -git checkout develop - -# 删除new_branch分支 -git branch -D new_branch -``` - -#### 2.2.10 提交代码的一些约定 - -为了使官方维护人员在评审代码时更好地专注于代码本身,请您每次提交代码时,遵守以下约定: - -1)请保证Travis-CI 中单元测试能顺利通过。如果没过,说明提交的代码存在问题,官方维护人员一般不做评审。 - -2)提交PUll Request前: - -请注意commit的数量。 - -原因:如果仅仅修改一个文件但提交了十几个commit,每个commit只做了少量的修改,这会给评审人带来很大困扰。评审人需要逐一查看每个commit才能知道做了哪些修改,且不排除commit之间的修改存在相互覆盖的情况。 - -建议:每次提交时,保持尽量少的commit,可以通过git commit --amend补充上次的commit。对已经Push到远程仓库的多个commit,可以参考[squash commits after push](https://stackoverflow.com/questions/5667884/how-to-squash-commits-in-git-after-they-have-been-pushed)。 - -请注意每个commit的名称:应能反映当前commit的内容,不能太随意。 - -3)如果解决了某个Issue的问题,请在该PUll Request的第一个评论框中加上:fix #issue_number,这样当该PUll Request被合并后,会自动关闭对应的Issue。关键词包括:close, closes, closed, fix, fixes, fixed, resolve, resolves, resolved,请选择合适的词汇。详细可参考[Closing issues via commit messages](https://help.github.com/articles/closing-issues-via-commit-messages)。 - -此外,在回复评审人意见时,请您遵守以下约定: - -1)官方维护人员的每一个review意见都希望得到回复,这样会更好地提升开源社区的贡献。 - -- 对评审意见同意且按其修改完的,给个简单的Done即可; -- 对评审意见不同意的,请给出您自己的反驳理由。 - -2)如果评审意见比较多, - -- 请给出总体的修改情况。 -- 请采用`start a review`进行回复,而非直接回复的方式。原因是每个回复都会发送一封邮件,会造成邮件灾难。 - - -## 3. 总结 - -* 开源社区依赖于众多开发者与用户的贡献和反馈,在这里感谢与期待大家向PaddleClas提出宝贵的意见与pull request,希望我们可以一起打造一个领先实用全面的图像分类代码仓库! - -## 4. 参考文献 -1. [PaddlePaddle本地开发指南](https://www.paddlepaddle.org.cn/documentation/docs/zh/develop/guides/08_contribution/index_cn.html) -2. [向开源框架提交pr的过程](https://blog.csdn.net/vim_wj/article/details/78300239) diff --git a/docs/zh_CN/tutorials/quick_start_new_user.md b/docs/zh_CN/tutorials/quick_start_new_user.md deleted file mode 100644 index 325c99cd..00000000 --- a/docs/zh_CN/tutorials/quick_start_new_user.md +++ /dev/null @@ -1,169 +0,0 @@ -# 30分钟玩转PaddleClas(尝鲜版) - -此教程主要针对初级用户,即深度学习相关理论知识处于入门阶段,具有一定的python基础,能够阅读简单代码的用户。此内容主要包括利用PaddleClas进行网络训练及模型预测。 - -## 一、基础知识 - -图像分类顾名思义就是一个模式分类问题,是计算机视觉中最基础的任务,它的目标是将不同的图像,划分到不同的类别。以下会对整个模型训练过程中需要了解到的一些概念做简单的解释,希望能够对初次体验PaddleClas的你有所帮助: - -- train/val/test dataset分别代表模型的训练集、验证集和测试集 - - - 训练集(train dataset):用来训练模型,使模型能够识别不同类型的特征 - - 验证集(val dataset):训练过程中的测试集,方便训练过程中查看模型训练程度 - - 测试集(test dataset):训练模型结束后,用于评价模型结果的测试集 - -- 预训练模型 - - 使用在某个较大的数据集训练好的预训练模型,即被预置了参数的权重,可以帮助模型在新的数据集上更快收敛。尤其是对一些训练数据比较稀缺的任务,在神经网络参数十分庞大的情况下,仅仅依靠任务自身的训练数据可能无法训练充分,加载预训练模型的方法可以认为是让模型基于一个更好的初始状态进行学习,从而能够达到更好的性能。 - -- 迭代轮数(epoch) - - 模型训练迭代的总轮数,模型对训练集全部样本过一遍即为一个epoch。当测试错误率和训练错误率相差较小时,可认为当前迭代轮数合适;当测试错误率先变小后变大时,则说明迭代轮数过大,需要减小迭代轮数,否则容易出现过拟合。 - -- 损失函数(Loss Function) - - 训练过程中,衡量模型输出(预测值)与真实值之间的差异 - -- 准确率(Acc) - - 表示预测正确的样本数占总数据的比例 - - - Top1 Acc:预测结果中概率最大的所在分类正确,则判定为正确 - - Top5 Acc:预测结果中概率排名前5中有分类正确,则判定为正确 - -## 二、环境安装与配置 - -具体安装步骤可详看[安装文档](install.md)。 - -## 三、数据的准备与处理 - -* 进入PaddleClas目录。 - -```bash -# linux or mac, $path_to_PaddleClas表示PaddleClas的根目录,用户需要根据自己的真实目录修改 -cd $path_to_PaddleClas -``` - -* 进入`dataset/flowers102`目录,下载并解压flowers102数据集. - -```shell -# linux or mac -cd dataset/flowers102 -# 如果希望从浏览器中直接下载,可以复制该链接并访问,然后下载解压即可 -wget https://paddle-imagenet-models-name.bj.bcebos.com/data/flowers102.zip -# 解压 -unzip flowers102.zip -``` - -没有安装`wget`命令或者windows中下载的话,需要将地址拷贝到浏览器中下载,并进行解压到PaddleClas的根目录即可。 - -解压完成后,在文件夹下已经生成用于训练和测试的三个`.txt`文件:`train_list.txt`(训练集,1020张图)、`val_list.txt`(验证集,1020张图)、`train_extra_list.txt`(更大的训练集,7169张图)。文件中每行格式:**图像相对路径** **图像的label_id**(注意:中间有空格)。 - -此时flowers102数据集存放在**dataset/flowers102/jpg** 文件夹中,图像示例如下: - -
- -
- -* 返回`PaddleClas`根目录 - -```shell -# linux or mac -cd ../../ -# windoes直接打开PaddleClas根目录即可 -``` - -## 四、模型训练 - -### 使用CPU进行模型训练 - -由于使用CPU来进行模型训练,计算速度较慢,因此,此处以ShuffleNetV2_x0_25为例。此模型计算量较小,在CPU上计算速度较快。但是也因为模型较小,训练好的模型精度也不会太高。 - -#### 不使用预训练模型 - -```shell -# windows在cmd中进入PaddleClas根目录,执行此命令 -python tools/train.py -c ./ppcls/configs/quick_start/new_user/ShuffleNetV2_x0_25.yaml -``` - -- `-c` 参数是指定训练的配置文件路径,训练的具体超参数可查看`yaml`文件 -- `yaml`文`Global.device` 参数设置为`cpu`,即使用CPU进行训练(若不设置,此参数默认为`True`) -- `yaml`文件中`epochs`参数设置为20,说明对整个数据集进行20个epoch迭代,预计训练20分钟左右(不同CPU,训练时间略有不同),此时训练模型不充分。若提高训练模型精度,请将此参数设大,如**40**,训练时间也会相应延长 - -#### 使用预训练模型 - -```shell -python tools/train.py -c ./ppcls/configs/quick_start/new_user/ShuffleNetV2_x0_25.yaml -o Arch.pretrained=True -``` - -- `-o` 参数可以选择为True或False,也可以是预训练模型存放路径,当选择为True时,预训练权重会自动下载到本地。注意:若为预训练模型路径,则不要加上:`.pdparams` - -可以使用将使用与不使用预训练模型训练进行对比,观察loss的下降情况。 - -### 使用GPU进行模型训练 - -由于GPU训练速度更快,可以使用更复杂模型,因此以ResNet50_vd为例。与ShuffleNetV2_x0_25相比,此模型计算量较大, 训练好的模型精度也会更高。 - -首先要设置环境变量,使用0号GPU进行训练 - -- linux 或者 mac - - ```shell - export CUDA_VISIBLE_DEVICES=0 - ``` - -- windows - - ```shell - set CUDA_VISIBLE_DEVICES=0 - ``` - -#### 不使用预训练模型 - -```shell -python3 tools/train.py -c ./ppcls/configs/quick_start/ResNet50_vd.yaml -``` - -训练完成后,验证集的`Top1 Acc`曲线如下所示,最高准确率为0.2735。训练精度曲线下图所示 - -
- -
- -#### 使用预训练模型进行训练 - -基于ImageNet1k分类预训练模型进行微调,训练脚本如下所示 - -```shell -python3 tools/train.py -c ./ppcls/configs/quick_start/ResNet50_vd.yaml -o Arch.pretrained=True -``` - -**注**: - -- 此训练脚本使用GPU,如使用CPU可按照上文中[使用CPU进行模型训练](#使用CPU进行模型训练)所示,进行修改 - -验证集的`Top1 Acc`曲线如下所示,最高准确率为0.9402,加载预训练模型之后,flowers102数据集精度大幅提升,绝对精度涨幅超过65%。 - -
- -
- -## 五、模型预测 - -训练完成后预测代码如下 - -```shell -cd $path_to_PaddleClas -python3 tools/infer.py -c ./ppcls/configs/quick_start/new_user/ShuffleNetV2_x0_25.yaml -o Infer.infer_imgs=dataset/flowers102/jpg/image_00001.jpg -o Global.pretrained_model=output/ShuffleNetV2_x0_25/best_model -``` - -`-i`输入为单张图像路径,运行成功后,示例结果如下: - -`[{'class_ids': [76, 65, 34, 9, 69], 'scores': [0.91762, 0.01801, 0.00833, 0.0071, 0.00669], 'file_name': 'dataset/flowers102/jpg/image_00001.jpg', 'label_names': []}]` - -`-i`输入为图像集所在目录,运行成功后,示例结果如下: - -```txt -[{'class_ids': [76, 65, 34, 9, 69], 'scores': [0.91762, 0.01801, 0.00833, 0.0071, 0.00669], 'file_name': 'dataset/flowers102/jpg/image_00001.jpg', 'label_names': []}, {'class_ids': [76, 69, 34, 28, 9], 'scores': [0.77122, 0.06295, 0.02537, 0.02531, 0.0251], 'file_name': 'dataset/flowers102/jpg/image_00002.jpg', 'label_names': []}, {'class_ids': [99, 76, 81, 85, 16], 'scores': [0.26374, 0.20423, 0.07818, 0.06042, 0.05499], 'file_name': 'dataset/flowers102/jpg/image_00003.jpg', 'label_names': []}, {'class_ids': [9, 37, 34, 24, 76], 'scores': [0.17784, 0.16651, 0.14539, 0.12096, 0.04816], 'file_name': 'dataset/flowers102/jpg/image_00004.jpg', 'label_names': []}, {'class_ids': [76, 66, 91, 16, 13], 'scores': [0.95494, 0.00688, 0.00596, 0.00352, 0.00308], 'file_name': 'dataset/flowers102/jpg/image_00005.jpg', 'label_names': []}, {'class_ids': [76, 66, 34, 8, 43], 'scores': [0.44425, 0.07487, 0.05609, 0.05609, 0.03667], 'file_name': 'dataset/flowers102/jpg/image_00006.jpg', 'label_names': []}, {'class_ids': [86, 93, 81, 22, 21], 'scores': [0.44714, 0.13582, 0.07997, 0.0514, 0.03497], 'file_name': 'dataset/flowers102/jpg/image_00007.jpg', 'label_names': []}, {'class_ids': [13, 76, 81, 18, 97], 'scores': [0.26771, 0.1734, 0.06576, 0.0451, 0.03986], 'file_name': 'dataset/flowers102/jpg/image_00008.jpg', 'label_names': []}, {'class_ids': [34, 76, 8, 5, 9], 'scores': [0.67224, 0.31896, 0.00241, 0.00227, 0.00102], 'file_name': 'dataset/flowers102/jpg/image_00009.jpg', 'label_names': []}, {'class_ids': [76, 34, 69, 65, 66], 'scores': [0.95185, 0.01101, 0.00875, 0.00452, 0.00406], 'file_name': 'dataset/flowers102/jpg/image_00010.jpg', 'label_names': []}] -``` -其中,列表的长度为batch_size的大小。 diff --git a/docs/zh_CN/tutorials/quick_start_professional.md b/docs/zh_CN/tutorials/quick_start_professional.md deleted file mode 100644 index 2ab5ea5d..00000000 --- a/docs/zh_CN/tutorials/quick_start_professional.md +++ /dev/null @@ -1,260 +0,0 @@ -# 30分钟玩转PaddleClas(进阶版) - -此处提供了专业用户在linux操作系统上使用PaddleClas的快速上手教程,主要内容基于CIFAR-100数据集,快速体验不同模型的训练、加载不同预训练模型、SSLD知识蒸馏方案和数据增广的效果。请事先参考[安装指南](install.md)配置运行环境和克隆PaddleClas代码。 - - -## 一、数据和模型准备 - -### 1.1 数据准备 - - -* 进入PaddleClas目录。 - -``` -cd path_to_PaddleClas -``` - -#### 1.1.1 准备CIFAR100 - -* 进入`dataset/`目录,下载并解压CIFAR100数据集。 - -```shell -cd dataset -wget https://paddle-imagenet-models-name.bj.bcebos.com/data/CIFAR100.tar -tar -xf CIFAR100.tar -cd ../ -``` - - -## 二、模型训练 - -### 2.1 单标签训练 - -#### 2.1.1 零基础训练:不加载预训练模型的训练 - -* 基于ResNet50_vd模型,训练脚本如下所示。 - -```shell -export CUDA_VISIBLE_DEVICES=0,1,2,3 -python3 -m paddle.distributed.launch \ - --gpus="0,1,2,3" \ - tools/train.py \ - -c ./ppcls/configs/quick_start/professional/ResNet50_vd_CIFAR100.yaml \ - -o Global.output_dir="output_CIFAR" -``` - - -验证集的最高准确率为0.415左右。 - - -#### 2.1.2 迁移学习 - -* 基于ImageNet1k分类预训练模型ResNet50_vd_pretrained(准确率79.12\%)进行微调,训练脚本如下所示。 - -```shell -export CUDA_VISIBLE_DEVICES=0,1,2,3 -python3 -m paddle.distributed.launch \ - --gpus="0,1,2,3" \ - tools/train.py \ - -c ./ppcls/configs/quick_start/professional/ResNet50_vd_CIFAR100.yaml \ - -o Global.output_dir="output_CIFAR" \ - -o Arch.pretrained=True -``` - -验证集最高准确率为0.718左右,加载预训练模型之后,CIFAR100数据集精度大幅提升,绝对精度涨幅30\%。 - -* 基于ImageNet1k分类预训练模型ResNet50_vd_ssld_pretrained(准确率82.39\%)进行微调,训练脚本如下所示。 - -```shell -export CUDA_VISIBLE_DEVICES=0,1,2,3 -python3 -m paddle.distributed.launch \ - --gpus="0,1,2,3" \ - tools/train.py \ - -c ./ppcls/configs/quick_start/professional/ResNet50_vd_CIFAR100.yaml \ - -o Global.output_dir="output_CIFAR" \ - -o Arch.pretrained=True \ - -o Arch.use_ssld=True -``` - -最终CIFAR100验证集上精度指标为0.73,相对于79.12\%预训练模型的微调结构,新数据集指标可以再次提升1.2\%。 - -* 替换backbone为MobileNetV3_large_x1_0进行微调,训练脚本如下所示。 - -```shell -export CUDA_VISIBLE_DEVICES=0,1,2,3 -python3 -m paddle.distributed.launch \ - --gpus="0,1,2,3" \ - tools/train.py \ - -c ./ppcls/configs/quick_start/professional/MobileNetV3_large_x1_0_CIFAR100_finetune.yaml \ - -o Global.output_dir="output_CIFAR" \ - -o Arch.pretrained=True -``` - -验证集最高准确率为0.601左右, 较ResNet50_vd低近12%。 - - -## 三、数据增广 - -PaddleClas包含了很多数据增广的方法,如Mixup、Cutout、RandomErasing等,具体的方法可以参考[数据增广的章节](../advanced_tutorials/image_augmentation/ImageAugment.md)。 - -### 数据增广的尝试-Mixup - -基于`3.3节`中的训练方法,结合Mixup的数据增广方式进行训练,具体的训练脚本如下所示。 - -```shell -export CUDA_VISIBLE_DEVICES=0,1,2,3 -python3 -m paddle.distributed.launch \ - --gpus="0,1,2,3" \ - tools/train.py \ - -c ./ppcls/configs/quick_start/professional/ResNet50_vd_mixup_CIFAR100_finetune.yaml \ - -o Global.output_dir="output_CIFAR" - -``` - -最终CIFAR100验证集上的精度为0.73,使用数据增广可以使得模型精度再次提升约1.2\%。 - - - -* **注意** - - * 其他数据增广的配置文件可以参考`ppcls/configs/DataAugment`中的配置文件。 - - * 训练CIFAR100的迭代轮数较少,因此进行训练时,验证集的精度指标可能会有1\%左右的波动。 - - -## 四、知识蒸馏 - - -PaddleClas包含了自研的SSLD知识蒸馏方案,具体的内容可以参考[知识蒸馏章节](../advanced_tutorials/distillation/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中的两个值分别代表教师模型和学生模型是否冻结参数训练。 - -```yaml -Arch: - name: "DistillationModel" - # if not null, its lengths should be same as models - pretrained_list: - # if not null, its lengths should be same as models - freeze_params_list: - - True - - False - models: - - Teacher: - name: ResNet50_vd - pretrained: "./pretrained/best_model" - - Student: - name: MobileNetV3_large_x1_0 - pretrained: True -``` - -Loss配置如下,其中训练Loss是学生模型的输出和教师模型的输出的交叉熵、验证Loss是学生模型的输出和真实标签的交叉熵。 -```yaml -Loss: - Train: - - DistillationCELoss: - weight: 1.0 - model_name_pairs: - - ["Student", "Teacher"] - Eval: - - DistillationGTCELoss: - weight: 1.0 - model_names: ["Student"] -``` - -最终的训练脚本如下所示。 - -```shell -export CUDA_VISIBLE_DEVICES=0,1,2,3 -python3 -m paddle.distributed.launch \ - --gpus="0,1,2,3" \ - tools/train.py \ - -c ./ppcls/configs/quick_start/professional/R50_vd_distill_MV3_large_x1_0_CIFAR100.yaml \ - -o Global.output_dir="output_CIFAR" - -``` - -最终CIFAR100验证集上的精度为64.4\%,使用教师模型进行知识蒸馏,MobileNetV3的精度涨幅4.3\%。 - -* **注意** - - * 蒸馏过程中,教师模型使用的预训练模型为CIFAR100数据集上的训练结果,学生模型使用的是ImageNet1k数据集上精度为75.32\%的MobileNetV3_large_x1_0预训练模型。 - - * 该蒸馏过程无须使用真实标签,所以可以使用更多的无标签数据,在使用过程中,可以将无标签数据生成假的train_list.txt,然后与真实的train_list.txt进行合并, 用户可以根据自己的数据自行体验。 - - -## 五、模型评估与推理 - -### 5.1 单标签分类模型评估与推理 - -#### 5.1.1 单标签分类模型评估。 - -训练好模型之后,可以通过以下命令实现对模型精度的评估。 - -```bash -python3 tools/eval.py \ - -c ./ppcls/configs/quick_start/professional/ResNet50_vd_CIFAR100.yaml \ - -o Global.pretrained_model="output_CIFAR/ResNet50_vd/best_model" -``` - -#### 5.1.2 单标签分类模型预测 - -模型训练完成之后,可以加载训练得到的预训练模型,进行模型预测。在模型库的 `tools/infer.py` 中提供了完整的示例,只需执行下述命令即可完成模型预测: - -```python -python3 tools/infer.py \ - -c ./ppcls/configs/quick_start/professional/ResNet50_vd_CIFAR100.yaml \ - -o Infer.infer_imgs=./dataset/CIFAR100/test/0/0001.png \ - -o Global.pretrained_model=output_CIFAR/ResNet50_vd/best_model -``` - - -#### 5.1.3 单标签分类使用inference模型进行模型推理 - -通过导出inference模型,PaddlePaddle支持使用预测引擎进行预测推理。接下来介绍如何用预测引擎进行推理: -首先,对训练好的模型进行转换: - -```bash -python3 tools/export_model.py \ - -c ./ppcls/configs/quick_start/professional/ResNet50_vd_CIFAR100.yaml \ - -o Global.pretrained_model=output_CIFAR/ResNet50_vd/best_model -``` - -* 默认会在`inference`文件夹下生成`inference.pdiparams`、`inference.pdmodel`和`inference.pdiparams.info`文件。 - -使用预测引擎进行推理: - -进入deploy目录下: - -```bash -cd deploy -``` -更改inference_cls.yaml文件,由于训练CIFAR100采用的分辨率是32x32,所以需要改变相关的分辨率,最终配置文件中的图像预处理如下: - -```yaml -PreProcess: - transform_ops: - - ResizeImage: - resize_short: 36 - - CropImage: - size: 32 - - NormalizeImage: - scale: 0.00392157 - mean: [0.485, 0.456, 0.406] - std: [0.229, 0.224, 0.225] - order: '' - - ToCHWImage: -``` - -执行命令进行预测,由于默认class_id_map_file是ImageNet数据集的映射文件,所以此处需要置None。 - -```bash -python3 python/predict_cls.py \ - -c configs/inference_cls.yaml \ - -o Global.infer_imgs=../dataset/CIFAR100/test/0/0001.png \ - -o PostProcess.Topk.class_id_map_file=None -``` diff --git a/docs/zh_CN/tutorials/quick_start_recognition.md b/docs/zh_CN/tutorials/quick_start_recognition.md deleted file mode 100644 index 8cc62923..00000000 --- a/docs/zh_CN/tutorials/quick_start_recognition.md +++ /dev/null @@ -1,306 +0,0 @@ -# 图像识别快速开始 - -本文档包含3个部分:环境配置、图像识别体验、未知类别的图像识别体验。 - -如果图像类别已经存在于图像索引库中,那么可以直接参考[图像识别体验](#图像识别体验)章节,完成图像识别过程;如果希望识别未知类别的图像,即图像类别之前不存在于索引库中,那么可以参考[未知类别的图像识别体验](#未知类别的图像识别体验)章节,完成建立索引并识别的过程。 - -## 目录 - -* [1. 环境配置](#环境配置) -* [2. 图像识别体验](#图像识别体验) - * [2.1 下载、解压inference 模型与demo数据](#下载、解压inference_模型与demo数据) - * [2.2 商品别与检索](#商品识别与检索) - * [2.2.1 识别单张图像](#识别单张图像) - * [2.2.2 基于文件夹的批量识别](#基于文件夹的批量识别) -* [3. 未知类别的图像识别体验](#未知类别的图像识别体验) - * [3.1 准备新的数据与标签](#准备新的数据与标签) - * [3.2 建立新的索引库](#建立新的索引库) - * [3.3 基于新的索引库的图像识别](#基于新的索引库的图像识别) - - - -## 1. 环境配置 - -* 安装:请先参考[快速安装](./install.md)配置PaddleClas运行环境。 - -* 进入`deploy`运行目录。本部分所有内容与命令均需要在`deploy`目录下运行,可以通过下面的命令进入`deploy`目录。 - - ``` - cd deploy - ``` - - -## 2. 图像识别体验 - -检测模型与4个方向(Logo、动漫人物、车辆、商品)的识别inference模型、测试数据下载地址以及对应的配置文件地址如下。 - -服务器端通用主体检测模型与各方向识别模型: - -| 模型简介 | 推荐场景 | inference模型 | 预测配置文件 | 构建索引库的配置文件 | -| ------------ | ------------- | -------- | ------- | -------- | -| 通用主体检测模型 | 通用场景 |[模型下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/rec/models/inference/ppyolov2_r50vd_dcn_mainbody_v1.0_infer.tar) | - | - | -| Logo识别模型 | Logo场景 | [模型下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/rec/models/inference/logo_rec_ResNet50_Logo3K_v1.0_infer.tar) | [inference_logo.yaml](../../../deploy/configs/inference_logo.yaml) | [build_logo.yaml](../../../deploy/configs/build_logo.yaml) | -| 动漫人物识别模型 | 动漫人物场景 | [模型下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/rec/models/inference/cartoon_rec_ResNet50_iCartoon_v1.0_infer.tar) | [inference_cartoon.yaml](../../../deploy/configs/inference_cartoon.yaml) | [build_cartoon.yaml](../../../deploy/configs/build_cartoon.yaml) | -| 车辆细分类模型 | 车辆场景 | [模型下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/rec/models/inference/vehicle_cls_ResNet50_CompCars_v1.0_infer.tar) | [inference_vehicle.yaml](../../../deploy/configs/inference_vehicle.yaml) | [build_vehicle.yaml](../../../deploy/configs/build_vehicle.yaml) | -| 商品识别模型 | 商品场景 | [模型下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/rec/models/inference/product_ResNet50_vd_aliproduct_v1.0_infer.tar) | [inference_product.yaml](../../../deploy/configs/inference_product.yaml) | [build_product.yaml](../../../deploy/configs/build_product.yaml) | -| 车辆ReID模型 | 车辆ReID场景 | [模型下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/rec/models/inference/vehicle_reid_ResNet50_VERIWild_v1.0_infer.tar) | - | - | - -轻量级通用主体检测模型与轻量级通用识别模型: - -| 模型简介 | 推荐场景 | inference模型 | 预测配置文件 | 构建索引库的配置文件 | -| ------------ | ------------- | -------- | ------- | -------- | -| 轻量级通用主体检测模型 | 通用场景 |[模型下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/rec/models/inference/picodet_PPLCNet_x2_5_mainbody_lite_v1.0_infer.tar) | - | - | -| 轻量级通用识别模型 | 通用场景 | [模型下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/rec/models/inference/general_PPLCNet_x2_5_lite_v1.0_infer.tar) | [inference_product.yaml](../../../deploy/configs/inference_product.yaml) | [build_product.yaml](../../../deploy/configs/build_product.yaml) | - -本章节demo数据下载地址如下: [数据下载链接](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/rec/data/recognition_demo_data_v1.1.tar)。 - -**注意** - -1. windows 环境下如果没有安装wget,可以按照下面的步骤安装wget与tar命令,也可以在,下载模型时将链接复制到浏览器中下载,并解压放置在相应目录下;linux或者macOS用户可以右键点击,然后复制下载链接,即可通过`wget`命令下载。 -2. 如果macOS环境下没有安装`wget`命令,可以运行下面的命令进行安装。 -3. 轻量级通用识别模型的预测配置文件和构建索引的配置文件目前使用的是服务器端商品识别模型的配置,您可以自行修改模型的路径完成相应的索引构建和识别预测。 - -```shell -# 安装 homebrew -ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"; -# 安装wget -brew install wget -``` - -4. 如果希望在windows环境下安装wget,可以参考:[链接](https://www.cnblogs.com/jeshy/p/10518062.html);如果希望在windows环境中安装tar命令,可以参考:[链接](https://www.cnblogs.com/chooperman/p/14190107.html)。 - - -* 可以按照下面的命令下载并解压数据与模型 - -```shell -mkdir models -cd models -# 下载识别inference模型并解压 -wget {模型下载链接地址} && tar -xf {压缩包的名称} -cd .. - -# 下载demo数据并解压 -wget {数据下载链接地址} && tar -xf {压缩包的名称} -``` - - - -### 2.1 下载、解压inference 模型与demo数据 - -以商品识别为例,下载demo数据集以及通用检测、识别模型,命令如下。 - -```shell -mkdir models -cd models -# 下载通用检测inference模型并解压 -wget https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/rec/models/inference/ppyolov2_r50vd_dcn_mainbody_v1.0_infer.tar && tar -xf ppyolov2_r50vd_dcn_mainbody_v1.0_infer.tar -# 下载识别inference模型并解压 -wget https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/rec/models/inference/product_ResNet50_vd_aliproduct_v1.0_infer.tar && tar -xf product_ResNet50_vd_aliproduct_v1.0_infer.tar - -cd ../ -# 下载demo数据并解压 -wget https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/rec/data/recognition_demo_data_v1.1.tar && tar -xf recognition_demo_data_v1.1.tar -``` - -解压完毕后,`recognition_demo_data_v1.1`文件夹下应有如下文件结构: - -``` -├── recognition_demo_data_v1.1 -│ ├── gallery_cartoon -│ ├── gallery_logo -│ ├── gallery_product -│ ├── gallery_vehicle -│ ├── test_cartoon -│ ├── test_logo -│ ├── test_product -│ └── test_vehicle -├── ... -``` - -其中`gallery_xxx`文件夹中存放的是用于构建索引库的原始图像,`test_xxx`文件夹中存放的是用于测试识别效果的图像列表。 - - -`models`文件夹下应有如下文件结构: - -``` -├── product_ResNet50_vd_aliproduct_v1.0_infer -│ ├── inference.pdiparams -│ ├── inference.pdiparams.info -│ └── inference.pdmodel -├── ppyolov2_r50vd_dcn_mainbody_v1.0_infer -│ ├── inference.pdiparams -│ ├── inference.pdiparams.info -│ └── inference.pdmodel -``` - -**注意** -如果使用轻量级通用识别模型,Demo数据需要重新提取特征、够建索引,方式如下: - -```shell -python3.7 python/build_gallery.py -c configs/build_product.yaml -o Global.rec_inference_model_dir=./models/general_PPLCNet_x2_5_lite_v1.0_infer -``` - - -### 2.2 商品识别与检索 - -以商品识别demo为例,展示识别与检索过程(如果希望尝试其他方向的识别与检索效果,在下载解压好对应的demo数据与模型之后,替换对应的配置文件即可完成预测)。 - -注意,此部分使用了`faiss`作为检索库,安装方法如下: - -```python -pip install faiss-cpu==1.7.1post2 -``` - -若使用时,不能正常引用,则`uninstall` 之后,重新`install`,尤其是windows下。 - - - -#### 2.2.1 识别单张图像 - -运行下面的命令,对图像`./recognition_demo_data_v1.1/test_product/daoxiangcunjinzhubing_6.jpg`进行识别与检索 - -```shell -# 使用下面的命令使用GPU进行预测 -python3.7 python/predict_system.py -c configs/inference_product.yaml -# 使用下面的命令使用CPU进行预测 -python3.7 python/predict_system.py -c configs/inference_product.yaml -o Global.use_gpu=False -``` - -待检索图像如下所示。 - -
- -
- - -最终输出结果如下。 - -``` -[{'bbox': [287, 129, 497, 326], 'rec_docs': '稻香村金猪饼', 'rec_scores': 0.8309420943260193}, {'bbox': [99, 242, 313, 426], 'rec_docs': '稻香村金猪饼', 'rec_scores': 0.7245652079582214}] -``` - -其中bbox表示检测出的主体所在位置,rec_docs表示索引库中与检测框最为相似的类别,rec_scores表示对应的置信度。 - -检测的可视化结果也保存在`output`文件夹下,对于本张图像,识别结果可视化如下所示。 - -
- -
- - - -#### 2.2.2 基于文件夹的批量识别 - -如果希望预测文件夹内的图像,可以直接修改配置文件中的`Global.infer_imgs`字段,也可以通过下面的`-o`参数修改对应的配置。 - -```shell -# 使用下面的命令使用GPU进行预测,如果希望使用CPU预测,可以在命令后面添加-o Global.use_gpu=False -python3.7 python/predict_system.py -c configs/inference_product.yaml -o Global.infer_imgs="./recognition_demo_data_v1.1/test_product/" -``` - -终端中会输出该文件夹内所有图像的识别结果,如下所示。 - -``` -... -[{'bbox': [37, 29, 123, 89], 'rec_docs': '香奈儿包', 'rec_scores': 0.6163763999938965}, {'bbox': [153, 96, 235, 175], 'rec_docs': '香奈儿包', 'rec_scores': 0.5279821157455444}] -[{'bbox': [735, 562, 1133, 851], 'rec_docs': '香奈儿包', 'rec_scores': 0.5588355660438538}] -[{'bbox': [124, 50, 230, 129], 'rec_docs': '香奈儿包', 'rec_scores': 0.6980369687080383}] -[{'bbox': [0, 0, 275, 183], 'rec_docs': '香奈儿包', 'rec_scores': 0.5818190574645996}] -[{'bbox': [400, 1179, 905, 1537], 'rec_docs': '香奈儿包', 'rec_scores': 0.9814301133155823}] -[{'bbox': [544, 4, 1482, 932], 'rec_docs': '香奈儿包', 'rec_scores': 0.5143815279006958}] -[{'bbox': [29, 42, 194, 183], 'rec_docs': '香奈儿包', 'rec_scores': 0.9543638229370117}] -... -``` - -所有图像的识别结果可视化图像也保存在`output`文件夹内。 - - -更多地,可以通过修改`Global.rec_inference_model_dir`字段来更改识别inference模型的路径,通过修改`IndexProcess.index_dir`字段来更改索引库索引的路径。 - - - -## 3. 未知类别的图像识别体验 - -对图像`./recognition_demo_data_v1.1/test_product/anmuxi.jpg`进行识别,命令如下 - -```shell -# 使用下面的命令使用GPU进行预测,如果希望使用CPU预测,可以在命令后面添加-o Global.use_gpu=False -python3.7 python/predict_system.py -c configs/inference_product.yaml -o Global.infer_imgs="./recognition_demo_data_v1.1/test_product/anmuxi.jpg" -``` - -待检索图像如下所示。 - -
- -
- - -输出结果为空。 - -由于默认的索引库中不包含对应的索引信息,所以这里的识别结果有误,此时我们可以通过构建新的索引库的方式,完成未知类别的图像识别。 - -当索引库中的图像无法覆盖我们实际识别的场景时,即在预测未知类别的图像时,我们需要将对应类别的相似图像添加到索引库中,从而完成对未知类别的图像识别,这一过程是不需要重新训练的。 - - -### 3.1 准备新的数据与标签 - -首先需要将与待检索图像相似的图像列表拷贝到索引库原始图像的文件夹(`./recognition_demo_data_v1.1/gallery_product/gallery`)中,运行下面的命令拷贝相似图像。 - -```shell -cp -r ../docs/images/recognition/product_demo/gallery/anmuxi ./recognition_demo_data_v1.1/gallery_product/gallery/ -``` - -然后需要编辑记录了图像路径和标签信息的文本文件(`./recognition_demo_data_v1.1/gallery_product/data_file_update.txt`),这里基于原始标签文件,新建一个文件。命令如下。 - -```shell -# 复制文件 -cp recognition_demo_data_v1.1/gallery_product/data_file.txt recognition_demo_data_v1.1/gallery_product/data_file_update.txt -``` - -然后在文件`recognition_demo_data_v1.1/gallery_product/data_file_update.txt`中添加以下的信息, - -``` -gallery/anmuxi/001.jpg 安慕希酸奶 -gallery/anmuxi/002.jpg 安慕希酸奶 -gallery/anmuxi/003.jpg 安慕希酸奶 -gallery/anmuxi/004.jpg 安慕希酸奶 -gallery/anmuxi/005.jpg 安慕希酸奶 -gallery/anmuxi/006.jpg 安慕希酸奶 -``` - -每一行的文本中,第一个字段表示图像的相对路径,第二个字段表示图像对应的标签信息,中间用`tab`键分隔开(注意:有些编辑器会将`tab`自动转换为`空格`,这种情况下会导致文件解析报错)。 - - - -### 3.2 建立新的索引库 - -使用下面的命令构建index索引,加速识别后的检索过程。 - -```shell -python3.7 python/build_gallery.py -c configs/build_product.yaml -o IndexProcess.data_file="./recognition_demo_data_v1.1/gallery_product/data_file_update.txt" -o IndexProcess.index_dir="./recognition_demo_data_v1.1/gallery_product/index_update" -``` - -最终新的索引信息保存在文件夹`./recognition_demo_data_v1.1/gallery_product/index_update`中。 - - - -### 3.3 基于新的索引库的图像识别 - -使用新的索引库,对上述图像进行识别,运行命令如下。 - -```shell -# 使用下面的命令使用GPU进行预测,如果希望使用CPU预测,可以在命令后面添加-o Global.use_gpu=False -python3.7 python/predict_system.py -c configs/inference_product.yaml -o Global.infer_imgs="./recognition_demo_data_v1.1/test_product/anmuxi.jpg" -o IndexProcess.index_dir="./recognition_demo_data_v1.1/gallery_product/index_update" -``` - -输出结果如下。 - -``` -[{'bbox': [243, 80, 523, 522], 'rec_docs': '安慕希酸奶', 'rec_scores': 0.5570770502090454}] -``` - -最终识别结果为`安慕希酸奶`,识别正确,识别结果可视化如下所示。 - -
- -
diff --git a/docs/zh_CN/whl.md b/docs/zh_CN/whl.md deleted file mode 100644 index 2a138c7f..00000000 --- a/docs/zh_CN/whl.md +++ /dev/null @@ -1,237 +0,0 @@ -# PaddleClas wheel package使用说明 - -## 1. 安装 - -* pip安装 - -```bash -pip3 install paddleclas==2.2.1 -``` - -* 本地构建并安装 - -```bash -python3 setup.py bdist_wheel -pip3 install dist/* -``` - - -## 2. 快速开始 -* 使用`ResNet50`模型,以下图(`'docs/images/whl/demo.jpg'`)为例进行说明。 - -
- -
- - -* 在Python代码中使用 -```python -from paddleclas import PaddleClas -clas = PaddleClas(model_name='ResNet50') -infer_imgs='docs/images/whl/demo.jpg' -result=clas.predict(infer_imgs) -print(next(result)) -``` - -**注意**:`PaddleClas.predict()` 为可迭代对象(`generator`),因此需要使用 `next()` 函数或 `for` 循环对其迭代调用。每次调用将以 `batch_size` 为单位进行一次预测,并返回预测结果。返回结果示例如下: - -``` ->>> result -[{'class_ids': [8, 7, 136, 80, 84], 'scores': [0.79368, 0.16329, 0.01853, 0.00959, 0.00239], 'label_names': ['hen', 'cock', 'European gallinule, Porphyrio porphyrio', 'black grouse', 'peacock']}] -``` - -* 在命令行中使用 -```bash -paddleclas --model_name=ResNet50 --infer_imgs="docs/images/whl/demo.jpg" -``` - -``` ->>> result -filename: docs/images/whl/demo.jpg, top-5, class_ids: [8, 7, 136, 80, 84], scores: [0.79368, 0.16329, 0.01853, 0.00959, 0.00239], label_names: ['hen', 'cock', 'European gallinule, Porphyrio porphyrio', 'black grouse', 'peacock'] -Predict complete! -``` - - -## 3. 参数解释 -以下参数可在命令行方式使用中通过参数指定,或在Python代码中实例化PaddleClas对象时作为构造函数的参数使用。 -* model_name(str): 模型名称,使用PaddleClas提供的基于ImageNet1k的预训练模型。 -* inference_model_dir(str): 本地模型文件目录,当未指定 `model_name` 时该参数有效。该目录下需包含 `inference.pdmodel` 和 `inference.pdiparams` 两个模型文件。 -* infer_imgs(str): 待预测图片文件路径,或包含图片文件的目录,或网络图片的URL。 -* use_gpu(bool): 是否使用GPU,默认为 `True`。 -* gpu_mem(int): 使用的GPU显存大小,当 `use_gpu` 为 `True` 时有效,默认为8000。 -* use_tensorrt(bool): 是否开启TensorRT预测,可提升GPU预测性能,需要使用带TensorRT的预测库,默认为 `False`。 -* enable_mkldnn(bool): 是否开启MKLDNN,当 `use_gpu` 为 `False` 时有效,默认 `False`。 -* cpu_num_threads(int): cpu预测时的线程数,当 `use_gpu` 为 `False` 且 `enable_mkldnn` 为 `True` 时有效,默认值为 `10`。 -* batch_size(int): 预测时每个batch的样本数量,默认为 `1`。 -* resize_short(int): 按图像较短边进行等比例缩放,默认为 `256`。 -* crop_size(int): 将图像裁剪到指定大小,默认为 `224`。 -* topk(int): 打印(返回)预测结果的前 `topk` 个类别和对应的分类概率,默认为 `5`。 -* class_id_map_file(str): `class id` 与 `label` 的映射关系文件。默认使用 `ImageNet1K` 数据集的映射关系。 -* save_dir(str): 将预测结果作为预标注数据保存的路径,默认为 `None`,即不保存。 - -**注意**: 如果使用`Transformer`系列模型,如`DeiT_***_384`, `ViT_***_384`等,请注意模型的输入数据尺寸,需要设置参数`resize_short=384`, `crop_size=384`,如下所示。 - -* 命令行中 -```bash -from paddleclas import PaddleClas, get_default_confg -paddleclas --model_name=ViT_base_patch16_384 --infer_imgs='docs/images/whl/demo.jpg' --resize_short=384 --crop_size=384 -``` - -* Python代码中 -```python -from paddleclas import PaddleClas -clas = PaddleClas(model_name='ViT_base_patch16_384', resize_short=384, crop_size=384) -``` - - -## 4. 使用示例 - -PaddleClas提供两种使用方式: -1. Python代码中使用; -2. 命令行中使用。 - - -### 4.1 查看帮助信息 - -* CLI -```bash -paddleclas -h -``` - - -### 4.2 使用PaddleClas提供的预训练模型进行预测 -可以使用PaddleClas提供的预训练模型来预测,并通过参数`model_name`指定。此时PaddleClas会根据`model_name`自动下载指定模型,并保存在目录`~/.paddleclas/`下。 - -* Python -```python -from paddleclas import PaddleClas -clas = PaddleClas(model_name='ResNet50') -infer_imgs = 'docs/images/whl/demo.jpg' -result=clas.predict(infer_imgs) -print(next(result)) -``` - -* CLI -```bash -paddleclas --model_name='ResNet50' --infer_imgs='docs/images/whl/demo.jpg' -``` - - -### 4.3 使用本地模型文件预测 -可以使用本地的模型文件进行预测,通过参数`inference_model_dir`指定模型文件目录即可。需要注意,模型文件目录下必须包含`inference.pdmodel`和`inference.pdiparams`两个文件。 - -* Python -```python -from paddleclas import PaddleClas -clas = PaddleClas(inference_model_dir='./inference/') -infer_imgs = 'docs/images/whl/demo.jpg' -result=clas.predict(infer_imgs) -print(next(result)) -``` - -* CLI -```bash -paddleclas --inference_model_dir='./inference/' --infer_imgs='docs/images/whl/demo.jpg' -``` - - -### 4.4 批量预测 -当参数 `infer_imgs` 为包含图片文件的目录时,可以对图片进行批量预测,只需通过参数 `batch_size` 指定batch大小。 - -* Python -```python -from paddleclas import PaddleClas -clas = PaddleClas(model_name='ResNet50', batch_size=2) -infer_imgs = 'docs/images/' -result=clas.predict(infer_imgs) -for r in result: - print(r) -``` - -* CLI -```bash -paddleclas --model_name='ResNet50' --infer_imgs='docs/images/' --batch_size 2 -``` - - -### 4.5 对网络图片进行预测 -可以对网络图片进行预测,只需通过参数`infer_imgs`指定图片`url`。此时图片会下载并保存在`~/.paddleclas/images/`目录下。 - -* Python -```python -from paddleclas import PaddleClas -clas = PaddleClas(model_name='ResNet50') -infer_imgs = 'https://raw.githubusercontent.com/paddlepaddle/paddleclas/release/2.2/docs/images/whl/demo.jpg' -result=clas.predict(infer_imgs) -print(next(result)) -``` - -* CLI -```bash -paddleclas --model_name='ResNet50' --infer_imgs='https://raw.githubusercontent.com/paddlepaddle/paddleclas/release/2.2/docs/images/whl/demo.jpg' -``` - - -### 4.6 对`NumPy.ndarray`格式数据进行预测 -在Python中,可以对`Numpy.ndarray`格式的图像数据进行预测,只需通过参数`infer_imgs`指定即可。注意该图像数据必须为三通道图像数据。 - -* python -```python -import cv2 -from paddleclas import PaddleClas -clas = PaddleClas(model_name='ResNet50') -infer_imgs = cv2.imread("docs/images/whl/demo.jpg") -result=clas.predict(infer_imgs) -print(next(result)) -``` - - -### 4.7 保存预测结果 -可以指定参数`pre_label_out_dir='./output_pre_label/'`,将图片按其top1预测结果保存到`pre_label_out_dir`目录下对应类别的文件夹中。 - -* python -```python -from paddleclas import PaddleClas -clas = PaddleClas(model_name='ResNet50', save_dir='./output_pre_label/') -infer_imgs = 'docs/images/whl/' # it can be infer_imgs folder path which contains all of images you want to predict. -result=clas.predict(infer_imgs) -print(next(result)) -``` - -* CLI -```bash -paddleclas --model_name='ResNet50' --infer_imgs='docs/images/whl/' --save_dir='./output_pre_label/' -``` - - -### 4.8 指定label name -可以通过参数`class_id_map_file`指定`class id`与`lable`的对应关系。PaddleClas默认使用ImageNet1K的label_name(`ppcls/utils/imagenet1k_label_list.txt`)。 - -`class_id_map_file`文件内容格式应为: - -``` -class_idclass_name<\n> -``` - -例如: - -``` -0 tench, Tinca tinca -1 goldfish, Carassius auratus -2 great white shark, white shark, man-eater, man-eating shark, Carcharodon carcharias -...... -``` - -* Python -```python -from paddleclas import PaddleClas -clas = PaddleClas(model_name='ResNet50', class_id_map_file='./ppcls/utils/imagenet1k_label_list.txt') -infer_imgs = 'docs/images/whl/demo.jpg' -result=clas.predict(infer_imgs) -print(next(result)) -``` - -* CLI -```bash -paddleclas --model_name='ResNet50' --infer_imgs='docs/images/whl/demo.jpg' --class_id_map_file='./ppcls/utils/imagenet1k_label_list.txt' -``` diff --git a/docs/zh_CN_tmp/faq_series/faq_2020_s1.md b/docs/zh_CN_tmp/faq_series/faq_2020_s1.md deleted file mode 100644 index e0f3c98c..00000000 --- a/docs/zh_CN_tmp/faq_series/faq_2020_s1.md +++ /dev/null @@ -1,372 +0,0 @@ -# 图像分类常见问题汇总 - 2020 第1季 - - -## 目录 -* [第1期](#第1期)(2020.11.03) -* [第2期](#第2期)(2020.11.11) -* [第3期](#第3期)(2020.11.18) -* [第4期](#第4期)(2020.12.07) -* [第5期](#第5期)(2020.12.17) -* [第6期](#第6期)(2020.12.30) - - -## 第1期 - -### Q1.1: PaddleClas可以用来做什么? -**A**:PaddleClas是飞桨为工业界和学术界所准备的一个图像分类任务的工具集,助力使用者训练出更好的视觉模型和应用落地。PaddleClas提供了基于图像分类的模型训练、评估、预测、部署全流程的服务,方便大家更加高效地学习图像分类。具体地,PaddleClas中包含如下一些特性 。 - - -* PaddleClas提供了24个系列的分类网络结构(ResNet, ResNet_vd, MobileNetV3, Res2Net, HRNet等)和训练配置,122个预训练模型和性能评估与预测,供大家选择并使用。 -* PaddleClas提供了TensorRT预测、python inference、c++ inference、Paddle-Lite预测部署等多种预测部署推理方案,在方便在多种环境中进行部署推理。 -* PaddleClas提供了一种简单的SSLD知识蒸馏方案,基于该方案蒸馏模型的识别准确率普遍提升3%以上。 -* PaddleClas支持AutoAugment、Cutout、Cutmix等8种数据增广算法详细介绍、代码复现和在统一实验环境下的效果评估。 -* PaddleClas支持在Windows/Linux/MacOS环境中基于CPU/GPU进行使用。 - -### Q1.2: ResNet系列模型是什么?有哪些模型?为什么在服务器端如此推荐ResNet系列模型? -**A**: ResNet中创新性地引入了残差结构,通过堆叠多个残差结构从而构建了ResNet网络。实验表明使用残差块可以有效地提升收敛速度和精度,PaddleClas中,ResNet从小到达,依次有包含18、34、50、101、152、200层的ResNet结构,ResNet系列模型于2015年被提出,在不同的应用场景中,如分类、检测、分割等,都已经验证过其有效性,业界也早已对其进行了大量优化,该系列模型在速度和精度方面都有着非常明显的优势,对基于TensorRT以及FP16的预测支持得也很好,因而推荐大家使用ResNet系列模型;由于其模型所占存储相对较大,因此常用于服务器端。更多关于ResNet模型的介绍可以参考论文[Deep Residual Learning for Image Recognition](https://arxiv.org/abs/1512.03385)。 - -### Q1.3: ResNet_vd和ResNet、ResNet_vc结构有什么区别呢? -**A**: - -ResNet_va至vd的结构如下图所示,ResNet最早提出时为va结构,在降采样残差模块这个部分,在左边的特征变换通路中(Path A),第一个1x1卷积部分就行了降采样,从而导致信息丢失(卷积的kernel size为1,stride为2,输入特征图中 有部分特征没有参与卷积的计算);在vb结构中,把降采样的步骤从最开始的第一个1x1卷积调整到中间的3x3卷积中,从而避免了信息丢失的问题,PaddleClas中的ResNet模型默认就是ResNet_vb;vc结构则是将最开始这个7x7的卷积变成3个3x3的卷积,在感受野不变的情况下,计算量和存储大小几乎不变,而且实验证明精度相对于vb结构有所提升;vd结构是修改了降采样残差模块右边的特征通路(Path B)。把降采样的过程由平均池化这个操作去替代了,这一系列的改进(va->vd),几乎没有带来新增的预测耗时,结合适当的训练策略,比如说标签平滑以及mixup数据增广,精度可以提升高达2.7%。 - -
- -
- -### Q1.4 如果确定使用ResNet系列模型,怎么根据实际的场景需求选用不同的模型呢? -**A**: - -ResNet系列模型中,相比于其他模型,ResNet_vd模型在预测速度几乎不变的情况下,精度有非常明显的提升,因此推荐大家使用ResNet_vd系列模型。 -下面给出了batch size=4的情况下,在T4 GPU上,不同模型的的预测耗时、flops、params与精度的变化曲线,可以根据自己自己的实际部署场景中的需求,去选择合适的模型,如果希望模型存储大小尽可能小或者预测速度尽可能快,则可以使用ResNet18_vd模型,如果希望获得尽可能高的精度,则建议使用ResNet152_vd或者ResNet200_vd模型。更多关于ResNet系列模型的介绍可以参考文档:[ResNet及其vd系列模型文档](../models/ResNet_and_vd.md)。 - -* 精度-预测速度变化曲线 - -
- -
- -* 精度-params变化曲线 - -
- -
- -* 精度-flops变化曲线 - -
- -
- -### Q1.5 在网络中的block里conv-bn-relu是固定的形式吗? - -**A**: 在batch-norm出现之前,主流的卷积神经网络的固定形式是conv-relu。在现阶段的卷积神经网络中,conv-bn-relu是大部分网络中block的固定形式,这样的设计是相对鲁棒的结构,此外,DenseNet中的block选用的是bn-relu-conv的形式,ResNet-V2中也使用的是这种组合方式。在MobileNetV2中,为了不丢失信息,部分block中间的层没有使用relu激活函数,选用的是conv-bn的形式。 - -### Q1.6 ResNet34与ResNet50的区别? - -**A**: ResNet系列中有两种不同的block,分别是basic-block和bottleneck-block,堆叠较多这样的block组成了ResNet网络。basic-block是带有shortcut的两个3x3的卷积核的堆叠,bottleneck-block是带有shortcut的1x1卷积核、3x3卷积核、1x1卷积核的堆叠,所以basic-block中有两层,bottleneck-block有三层。ResNet34和ResNet50中堆叠的block数相同,但是堆叠的种类分别是basic-block和bottleneck-block。 - -### Q1.7 大卷积核一定可以带来正向收益吗? - -**A**: 不一定,将网络中的所有卷积核都增大未必会带来性能的提升,甚至会有有损性能,在论文[MixConv: Mixed Depthwise Convolutional Kernels](https://arxiv.org/abs/1907.09595) -中指出,在一定范围内提升卷积核大小对精度的提升有正向作用,但是超出后会有损精度。所以考虑到模型的大小、计算量等问题,一般不选用大的卷积核去设计网络。 - - -## 第2期 - -### Q2.1: PaddleClas如何训练自己的backbone? - -**A**:具体流程如下: -* 首先在ppcls/modeling/architectures/文件夹下新建一个自己的模型结构文件,即你自己的backbone,模型搭建可以参考resnet.py; -* 然后在ppcls/modeling/\_\_init\_\_.py中添加自己设计的backbone的类; -* 其次配置训练的yaml文件,此处可以参考configs/ResNet/ResNet50.yaml; -* 最后启动训练即可。 - - -### Q2.2: 如何利用已有的模型和权重对自己的分类任务进行迁移? - -**A**: 具体流程如下: -* 首先,好的预训练模型往往会有更好的迁移效果,所以建议选用精度较高的预训练模型,PaddleClas提供了一系列业界领先的预训练模型,建议使用; -* 其次,要根据迁移的数据集的规模来确定训练超参数,一般超参数需要调试才可以寻找到一个局部最优值,如果没有相关经验,建议先从learning rate开始调起,一般来说,规模较小的数据集使用较小的learning rate,如0.001,另外,建议学习率使用warmup策略,避免过大的学习率破坏预训练模型的权重。在迁移过程中,也可以设置backbone中不同层的学习率,往往从网络的头部到尾补学习率逐渐减小效果较好。在数据集规模较小的时候,也可以使用数据增强策略,PaddleClas提供了8中强有力的数据增强策略,为更高的精度保驾护航。 -* 训练结束后,可以反复迭代上述过程,直到寻找到局部最优值。 - -### Q2.3: PaddleClas中configs下的默认参数适合任何一个数据集吗? - -**A**: PaddleClas中的configs下的默认参数是ImageNet-1k的训练参数,这个参数并不适合所有的数据集,具体数据集需要在此基础上进一步调试,调试方法会在之后出一个单独的faq,敬请期待。 - - -### Q2.4 PaddleClas中的不同的模型使用了不同的分辨率,标配的应该是多少呢? - -**A**: PaddleClas严格遵循了论文作者的使用的分辨率。自2012年AlexNet以来,大多数的卷积神经网络在ImageNet上训练的分辨率为224x224,Google在设计InceptionV3的时候为了适应网络结构将分辨率调至299x299,之后其推出的Xception、InceptionV4也是使用的该分辨率。此外,在EfficeintNet中,作者分析了不同规模的网络应该使用不同的分辨率,所以该系列网络中每个不同大小的网络都使用了不同的分辨率。在实际使用场景中,推荐使用默认的分辨率,当然,层数较深或者宽度较大的网络也可以尝试使用更大的分辨率。 - - -### Q2.5 PaddleClas中提供了很多ssld模型,其应用的价值是? - -**A**: PaddleClas中提供了很多ssld预训练模型,其通过半监督知识蒸馏的方法获得了更好的预训练权重,在迁移任务或者下游视觉任务中,无须替换结构文件、只需要替换精度更高的ssld预训练模型即可提升精度,如在PaddleSeg中,[HRNet](https://github.com/PaddlePaddle/PaddleSeg/blob/release/v0.7.0/docs/model_zoo.md)使用了ssld预训练模型的权重后,精度大幅度超越业界同样的模型的精度,在PaddleDetection中,[PP-YOLO](https://github.com/PaddlePaddle/PaddleDetection/blob/release/0.4/configs/ppyolo/README_cn.md)使用了ssld预训练权重后,在较高的baseline上仍有进一步的提升。使用ssld预训练权重做分类的迁移表现也很抢眼,在[SSLD蒸馏策略](../advanced_tutorials/distillation/distillation.md)部分介绍了知识蒸馏对于分类任务迁移的收益。 - - - -## 第3期 - -### Q3.1: DenseNet模型相比于ResNet有什么改进呢?有哪些特点或者应用场景呢? - -**A**: DenseNet相比于ResNet,设计了一个更激进的密集连接机制,通过考虑特征重用和旁路的设置,进一步减少了参数量,而且从一定程度上缓解了梯度弥散的问题,因为引入了更加密集的连接,因此模型更容易训练,而且具有一定的正则化效果。在数据量不是很多的图像分类场景中,DenseNet是一个不错的选择。更多关于DenseNet的介绍与系列模型可以参考[DenseNet模型文档](../models/DPN_DenseNet.md)。 - - - -### Q3.2: DPN网络相比于DenseNet有哪些改进呢? - -**A**:DPN的全称是Dual Path Networks,即双通道网络。该网络是由DenseNet和ResNeXt结合的一个网络,其证明了DenseNet能从靠前的层级中提取到新的特征,而ResNeXt本质上是对之前层级中已提取特征的复用。作者进一步分析发现,ResNeXt对特征有高复用率,但冗余度低,DenseNet能创造新特征,但冗余度高。结合二者结构的优势,作者设计了DPN网络。最终DPN网络在同样FLOPS和参数量下,取得了比ResNeXt与DenseNet更好的结果。更多关于DPN的介绍与系列模型可以参考[DPN模型文档](../models/DPN_DenseNet.md)。 - - -### Q3.3: 怎么使用多个模型进行预测融合呢? - -**A** 使用多个模型进行预测的时候,建议首先将预训练模型导出为inference模型,这样可以摆脱对网络结构定义的依赖,可以参考[模型导出脚本](../../../tools/export_model.py)进行模型导出,之后再参考[inference模型预测脚本](../../../tools/infer/predict.py)进行预测即可,在这里需要根据自己使用模型的数量创建多个predictor。 - - -### Q3.4: PaddleClas中怎么增加自己的数据增广方法呢? - -**A**: - -* 对于单张图像的增广,可以参考[基于单张图片的数据增广脚本](../../../ppcls/data/preprocess/ops),参考`ResizeImage`或者`CropImage`等数据算子的写法,创建一个新的类,然后在`__call__`中,实现对应的增广方法即可。 -* 对于一个batch图像的增广,可以参考[基于batch数据的数据增广脚本](../../../ppcls/data/preprocess/batch_ops),参考`MixupOperator`或者`CutmixOperator`等数据算子的写法,创建一个新的类,然后在`__call__`中,实现对应的增广方法即可。 - - -## Q3.5: 怎么进一步加速模型训练过程呢? - -**A**: - -* 可以使用自动混合精度进行训练,这在精度几乎无损的情况下,可以有比较明显的速度收益,以ResNet50为例,PaddleClas中使用自动混合精度训练的配置文件可以参考:[ResNet50_fp16.yml](../../../ppcls/configs/ResNet/ResNet50_fp16.yml),主要就是需要在标准的配置文件中添加以下几行 - -``` -use_fp16: True -amp_scale_loss: 128.0 -use_dynamic_loss_scaling: True -``` - -* 可以开启dali,将数据预处理方法放在GPU上运行,在模型比较小时(reader耗时占比更高一些),开启dali会带来比较明显的精度收益,在训练的时候,添加`-o use_dali=True`即可使用dali进行训练,更多关于dali 安装与介绍可以参考:[dali安装教程](https://docs.nvidia.com/deeplearning/dali/user-guide/docs/installation.html#nightly-builds)。 - - -## 第4期 - -### Q4.1: PaddlePaddle 的模型文件都有哪几种? - -**A**: -* PaddlePaddle保存的模型相关文件有两类: -* 一类是用于*推理部署*的文件,包括后缀名为“`pdiparams`”、“`model`”的文件,其中“`pdiparams`”文件存储了模型参数信息,“`model`”文件存储了模型网络结构信息,对于推理部署文件,使用`paddle.jit.save`与`paddle.jit.load`接口进行保存、加载。 -* 另一类模型相关文件则是用于*训练调优*过程中,包括后缀名为“`pdparams`”和“`pdopt`”的文件,其中“`pdparams`”文件存储了训练过程中的模型参数信息,“`pdopt`”文件存储了模型训练过程中的优化器信息,对于训练调优文件,使用`paddle.save`与`paddle.load`接口进行保存、加载。 -* 利用推理部署文件,即可构建模型网络结构并加载模型参数,用于预测,利用训练调优文件,即可加载模型参数、优化器信息,用于恢复训练过程。 - -### Q4.2: HRNet的创新点体现在哪里? - -**A**: -* 在图像分类领域,大部分神经网络的设计思想是提取图像的高维特征,具体来说,通常输入图像的空间分辨率较高,通过多层卷积、池化,可以逐步得到空间分辨率更低,但是维度更高的特征图,然后可用于分类等场景。 -* 然而*HRNet*的作者认为这种逐步降低空间分辨率的设计思想并不适合目标检测(图像区域层次的分类任务)、语义分割(图像像素层次的分类任务)等场景,因为空间分辨率在逐步降低的过程中,会丢失很多信息,最终学习得到的特征难以表达原始图像在高空间分辨率的信息,而区域层次分类任务和像素层次分类任务都对空间精度十分敏感。 -* 因此*HRNet*的作者提出了并联不同空间分辨率特征图的思想,与此相对,*VGG*等神经网络则是通过不同的卷积池化层来串联不同空间分辨率的特征图。并且,*HRNet*通过连接同等深度、不同空间分辨率的特征图,使得不同空间分辨率特征图的信息可以得到充分交换,具体的网络结构如下图所示。 - -
- -
- -### Q4.3: 在HRNet中,对于不同空间分辨率的特征图之间,是如何建立连接的? - -**A**: -* 首先,在*HRNet*中,对特征图使用*stride*为*2*的*3 × 3*卷积,可以得到低空间分辨率但是为度更高的特征图;而对低空间分辨率特征图先使用*1 × 1*卷积进行通道数匹配,再使用最近邻插值的方式进行上采样,即可得到与高空间分辨率特征图相同空间分辨率、通道数的特征图;而对于相同空间分辨率的特征图,直接进行恒等映射即可。具体如下图所示。 - -
- -
- -### Q4.4: 模型中的“SE”表示什么意思? - -**A**: -* SE表示该模型使用了SE结构。SE结构来自于2017年ImageNet分类比赛的冠军方案*Squeeze-and-Excitation Networks(SENet)*,*SENet*提出的SE结构可以迁移到任何其他网络中。其创新点是通过额外学习*scale*向量作为权重作用到特征图上,*scale*向量维度与特征图通道数相同,学习到的*scale*向量中每个维度上的数值表示对该维度特征通道的增强或减弱的大小,以此达到对重要的特征通道进行增强,不重要特征通道减弱的效果,从而让提取的特征指向性更强。 - -### Q4.5: SE结构具体如何实现的? - -
- -
- -**A**: -* *SE*结构具体如上图所示,首先,*Ftr*表示常规的卷积操作,*X*和*U*则是*Ftr*的输入与输出的特征图,在得到特征图*U*后,使用*Fsq*和*Fex*操作求得*scale*向量,*scale*向量维度为*C*,与*U*通道数相同,因此可以通过乘积的方式作用到*U*上,进而得到*X~*。 -* 具体地,*Fsq*为*Global Average Pooling*操作,*SENet*作者将其称之为*Squeeze*,因为该操作可以将*U*从*C × H × W*压缩到*C × 1 × 1*,对*Fsq*的输出再做*Fex*操作。 -* *Fex*操作表示两次全连接,作者将该操作称为*Excitation*。其中第一次全连接将向量的维度从*1 × 1 × C*压缩到*1 × 1 × C/r*,然后使用*RELU*,再通过第二次全连接将向量的维度恢复到*C*,这样操作的目的是为了减小计算量,*SENet*作者通过实验得出结论:在*r=16*时可以获得增益与计算量之间的平衡。 -* 对于*Fsq*部分,关键是求得*C*维的向量,因此不局限于使用*Global Average Pooling*操作,*SENet*作者认为,最终求得的*scale*是按通道分别作用于*U*的,因此需要基于对应通道的信息计算对应的*scale*,故使用了最简单的*Global Average Pooling*操作,最终求得的*scale*向量表示了不同通道之间的分布关系,而忽略了同一个通道中的分布关系。 -* 对于*Fex*部分,其作用是为了在每一个*mini batch*上的训练来求得基于所有训练数据的分布。因为我们的训练是在*mini batch*上进行的,而基于全部训练数据求得的*scale*才是最佳的,使用*Fex*部分,可以通过在每个*mini batch*上的训练来求得更为逼近全部训练数据的*scale*。 - - -## 第5期 - -### Q5.1 如何选择优化器? - -**A**:自深度学习发展以来,就有很多关于优化器的研究者工作,优化器的目的是为了让损失函数尽可能的小,从而找到合适的权重来完成某项任务。目前业界主要用到的优化器有SGD、RMSProp、Adam、AdaDelt等,其中由于带momentum的SGD优化器广泛应用于学术界和工业界(此处仅限于分类任务),所以我们发布的模型也大都使用该优化器来实现损失函数的梯度下降。带momentum的SGD优化器有两个劣势,其一是收敛速度慢,其二是初始学习率的设置需要依靠大量的经验,然而如果初始学习率设置得当并且迭代轮数充足,该优化器也会在众多的优化器中脱颖而出,使得其在验证集上获得更高的准确率。一些自适应学习率的优化器如Adam、RMSProp等,收敛速度往往比较快,但是最终的收敛精度会稍差一些。如果追求更快的收敛速度,我们推荐使用这些自适应学习率的优化器,如果追求更高的收敛精度,我们推荐使用带momentum的SGD优化器。具体到数据集来说: - -- ImageNet-1k: 建议只使用带momentum的SGD优化器。 - -- 其他数据集(默认加载ImageNet-1k预训练): 加载预训练模型的时候可以考虑使用Adam等优化器(效果可能会更好),但使用带momentum的SGD优化器是绝对是比较不错的方案。 - -另外,为了进一步加速训练,Lookahead优化器也是一个不错的选择,在ImageNet-1k上,其可以保证在更快的收敛速度下拥有相同的收敛精度,但在部分数据集上表现不太稳定,需要进一步调参。 - -### Q5.2 如何设置初始学习率以及学习率下降策略? - -**A**:学习率的选择往往和优化器以及数据和任务有关系。学习率决定了网络种权重更新的速度。学习率越低,损失函数的变化速度就越慢。虽然使用低学习率可以确保不会错过任何局部极小值,但也意味着将花费更长的时间来进行收敛,特别是在被困在高原区域的情况下。 - -在整个训练过程中,我们不能使用同样的学习率来更新权重,否则无法到达最优点,所以需要在训练过程中调整学习率的大小。在训练初始阶段,由于权重处于随机初始化的状态,损失函数下降较快,所以可以设置一个较大的学习率。在训练后期,由于权重已经接近最优值,较大的学习率无法进一步寻找最优值,所以需要设置一个较小的学习率。至于学习率下降策略,很多研究者或者从业人员使用的学习率下降方式是piecewise_decay(step_decay),即阶梯式下降学习率,此外,很多研究者也提出了学习率的其他下降方式,如polynomial_decay(多项式下降)、exponential_decay(指数下降),cosine_decay(余弦下降)等,其中cosine_decay无需调整超参数,鲁棒性也比较高,所以成为现在提高模型精度首选的学习率下降方式。 - -Cosine_decay和piecewise_decay的学习率变化曲线如下图所示,容易观察到,在整个训练过程中,cosine_decay都保持着较大的学习率,所以其收敛较为缓慢,但是最终的收敛效果较peicewise_decay更好一些。 - -![](../../images/models/lr_decay.jpeg) - -另外,从图中我们也可以看到,cosine_decay中只有少数轮数使用了较小的学习率,这样会影响到最终的精度,所以为了使得cosine_decay发挥更好的效果,建议迭代更多的轮数。 - -最后,如果使用较大的batch_size训练神经网络时,建议您使用warmup策略。Warmup策略顾名思义就是让学习率先预热一下,在训练初期不直接使用最大的学习率,而是用一个逐渐增大的学习率去训练网络,当学习率增大到最高点时,再去衰减学习率的值。实验表明,在batch_size较大时,warmup可以稳定提升模型的精度。具体到数据集来说: - -- ImageNet-1k:建议batch-size大小为256、初始学习率为0.1,cosine-decay下降学习率。 - -- 其他数据集(默认加载ImageNet-1k预训练): 数据集规模越大,初始学习率也越大,但最好不要超过0.1(batch-size为256时候),数据集规模越小,初始学习率也越小,当数据集较小时,使用warmup也会带来一定的精度提升,学习率下降策略仍旧推荐cosine-decay。 - -### Q5.3 如何设置batch-size的大小? - -**A**:Batch_size是训练神经网络中的一个重要的超参数,该值决定了一次将多少数据送入神经网络中训练。之前有研究者通过实验发现,当batch_size的值与学习率的值呈线性关系时,收敛精度几乎不受影响。在训练ImageNet-1k数据时,大部分的神经网络选择的初始学习率为0.1,batch_size是256。具体到数据集来说: - -- ImageNet-1k: 学习率设置为0.1\*k,batch_size设置为256\*k。 - -- 其他数据集(默认加载ImageNet-1k预训练): 可以根据实际情况设置(如更小的学习率),但在调整学习率或者batch-size时,要同时调整另外一个值。 - -### Q5.4 weight_decay是什么?怎么设置? - -**A**:过拟合是机器学习中常见的一个名词,简单理解即为模型在训练数据上表现很好,但在测试数据上表现较差,在图像分类问题中,同样存在过拟合的问题,为了避免过拟合,很多正则方式被提出,其中,weight_decay是其中一个广泛使用的避免过拟合的方式。当使用SGD优化器时, weight_decay等价于在最终的损失函数后添加L2正则化,L2正则化使得网络的权重倾向于选择更小的值,最终整个网络中的参数值更趋向于0,模型的泛化性能相应提高。在各大深度学习框架的实现中,该值表达的含义是L2正则前的系数,在飞桨框架中,该值的名称是L2Decay,所以以下都称其为L2Decay。该系数越大,表示加入的正则越强,模型越趋于欠拟合状态。具体到数据集来说: - -- ImageNet-1k:大多数的网络将该参数值设置为1e-4,在一些小的网络如MobileNet系列网络中,为了避免网络欠拟合,该值设置为1e-5~4e-5之间。下表展示了MobileNetV1_x0_25在ImageNet-1k上使用不同L2Decay的精度情况。由于MobileNetV1_x0_25是一个比较小的网络,所以L2Decay过大会使网络趋向于欠拟合状态,所以在该网络中,相对1e-4,3e-5是更好的选择。 - -| 模型 | L2Decay | Train acc1/acc5 | Test acc1/acc5 | -|:--:|:--:|:--:|:--:| -| MobileNetV1_x0_25 | 1e-4 | 43.79%/67.61% | 50.41%/74.70% | -| MobileNetV1_x0_25 | 3e-5 | 47.38%/70.83% | 51.45%/75.45% | - -另外,该值的设置也和训练过程中是否使用其他正则化有关系。如果训练过程中的数据预处理比较复杂,相当于训练任务变的更难,可以将该值适当减小,下表展示了在ImageNet-1k上,ResNet50在使用RandAugment预处理方式后使用不同L2Decay的精度。容易观察到,在任务变难后,使用更小的l2_decay有助于模型精度的提升。 - -| 模型 | L2Decay | Train acc1/acc5 | Test acc1/acc5 | -|:--:|:--:|:--:|:--:| -| ResNet50 | 1e-4 | 75.13%/90.42% | 77.65%/93.79% | -| ResNet50 | 7e-5 | 75.56%/90.55% | 78.04%/93.74% | - -- 其他数据集(默认加载ImageNet-1k预训练):在做迁移任务的时候,最好不要改变训练ImageNet-1k时的L2Decay的值(即训练得到预训练时的L2Decay值,每个backbone对应的L2Decay值都在相应的训练yaml配置文件中),一般的数据集只改变学习率足够。 - - -### Q5.5 是否使用label_smoothing,如何设置其中的参数值? - -**A**:Label_smoothing是深度学习中的一种正则化方法,其全称是 Label Smoothing Regularization(LSR),即标签平滑正则化。在传统的分类任务计算损失函数时,是将真实的one hot标签与神经网络的输出做相应的交叉熵计算,而label_smoothing是将真实的one hot标签做一个标签平滑的处理,使得网络学习的标签不再是一个hard label,而是一个有概率值的soft label,其中在类别对应的位置的概率最大,其他位置概率是一个非常小的数。在label_smoothing中,epsilon参数描述了将标签软化的程度,该值越大,经过label smoothing后的标签向量的标签概率值越小,标签越平滑,反之,标签越趋向于hard label。具体到数据集来说: - -- ImageNet-1k:在训练ImageNet-1k的实验里通常将该值设置为0.1,ResNet50大小级别及其以上的模型在使用label_smooting后,精度有稳定的提升。下表展示了ResNet50_vd在使用label_smoothing前后的精度指标。 - -| 模型 | Use_label_smoothing(0.1) | Test acc1 | -|:--:|:--:|:--:| -| ResNet50_vd | 0 | 77.9% | -| ResNet50_vd | 1 | 78.4% | - -同时,由于label_smoohing相当于一种正则方式,在相对较小的模型上,精度提升不明显甚至会有所下降,下表展示了ResNet18在ImageNet-1k上使用label_smoothing前后的精度指标。可以明显看到,在使用label_smoothing后,精度有所下降。 - -| 模型 | Use_label_smoohing(0.1) | Train acc1/acc5 | Test acc1/acc5 | -|:--:|:--:|:--:|:--:| -| ResNet18 | 0 | 69.81%/87.70% | 70.98%/89.92% | -| ResNet18 | 1 | 68.00%/86.56% | 70.81%/89.89% | - -如何在较小的模型中也可以让label-smoothing有效,这里有一个技巧,即在Global-Average-Pool后接一个1000-2000大小的全连接层,该技巧可以与label-smoothing同时作用,发挥更好的效果。 - -- 其他数据集(默认加载ImageNet-1k预训练):使用label-smooth之后往往都会提升精度,规模越小的数据集epsilon值可以越大,在一些规模较小的细粒度图像中,最佳模型通常是在该值设置到0.4-0.5时获得的。 - -### Q5.6 默认的图像预处理中random-crop还可以调整吗?怎么调整? - -**A**:在ImageNet-1k数据的标准预处理中,random_crop函数中定义了scale和ratio两个值,两个值分别确定了图片crop的大小和图片的拉伸程度,其中scale的默认取值范围是0.08-1(lower_scale-upper_scale),ratio的默认取值范围是3/4-4/3(lower_ratio-upper_ratio)。在非常小的网络训练中,此类数据增强会使得网络欠拟合,导致精度有所下降。为了提升网络的精度,可以使其数据增强变的更弱,即增大图片的crop区域或者减弱图片的拉伸变换程度。可以分别通过增大lower_scale的值或缩小lower_ratio与upper_scale的差距来实现更弱的图片变换。具体到数据集来说: - -- ImageNet-1k:不是特别小的网络建议只用默认值,特别小的网络可以调大lower_scale的值(增大crop区域面积)或者缩小ratio值的范围(减弱图像伸缩变换),特别大的网络可以调小lower_scale的值(减小crop面积)或者增大ratio值的范围(增强图像伸缩变换)。下表列出了使用不同lower_scale训练MobileNetV2_x0_25的精度,可以看到,增大图片的crop区域面积后训练精度和验证精度均有提升。 - -| 模型 | Scale取值范围 | Train_acc1/acc5 | Test_acc1/acc5 | -|:--:|:--:|:--:|:--:| -| MobileNetV2_x0_25 | [0.08,1] | 50.36%/72.98% | 52.35%/75.65% | -| MobileNetV2_x0_25 | [0.2,1] | 54.39%/77.08% | 53.18%/76.14% | - -- 其他数据集(默认加载ImageNet-1k预训练):建议使用默认值,如果过拟合较严重,可以考虑调小lower_scale的值(减小crop面积)或者增大ratio值的范围(增强图像伸缩变换)。 - -### Q5.7 目前常用数据增广有哪些?如何选择? - -**A**:一般来说,数据集的规模对性能影响至关重要,但是图片的标注往往比较昂贵,所以有标注的图片数量往往比较稀少,在这种情况下,数据的增广尤为重要。在训练ImageNet-1k的标准数据增广中,主要使用了Random_Crop与Random_Flip两种数据增广方式,然而,近些年,越来越多的数据增广方式被提出,如cutout、mixup、cutmix、AutoAugment等。实验表明,这些数据的增广方式可以有效提升模型的精度。具体到数据集来说: - -- ImageNet-1k:下表列出了ResNet50在8种不同的数据增广方式的表现,可以看出,相比baseline,所有的数据增广方式均有收益,其中cutmix是目前最有效的数据增广。更多数据增广的介绍请参考[**数据增广章节**](../advanced_tutorials/image_augmentation/ImageAugment.md)。 - -| 模型 | 数据增广方式 | Test top-1 | -|:--:|:--:|:--:| -| ResNet50 | 标准变换 | 77.31% | -| ResNet50 | Auto-Augment | 77.95% | -| ResNet50 | Mixup | 78.28% | -| ResNet50 | Cutmix | 78.39% | -| ResNet50 | Cutout | 78.01% | -| ResNet50 | Gridmask | 77.85% | -| ResNet50 | Random-Augment | 77.70% | -| ResNet50 | Random-Erasing | 77.91% | -| ResNet50 | Hide-and-Seek | 77.43% | - -- 其他数据集(默认加载ImageNet-1k预训练):在其他数据集中除了使用Auto-Augment,一般都会有精度的提升,Auto-Augment会针对每一个数据集搜索的独立超参数,该超参数决定了数据如何处理,所以默认的ImageNet-1k的超参数并不适合所有的数据集,当然您可以使用Random-Augment来替代Auto-Augment。其他策略可以正常使用,对于比较难的任务或者比较小的网络,建议不要使用较强的数据增广。 - -此外,多种数据增广也可以叠加使用,当数据集较为简单或数据规模较小时,叠加数据增广可以进一步提升精度。 - -### Q5.8 如何通过train_acc和test_acc确定调优策略? - -**A**:在训练网络的过程中,通常会打印每一个epoch的训练集准确率和验证集准确率,二者刻画了该模型在两个数据集上的表现。通常来说,训练集的准确率反映了经过Random-Crop后的数据的精度,由于数据经过Random-Crop后,数据往往较难,所以训练集的准确率和验证集的准确率往往不是一个概念。 - -- ImageNet-1k:通常来说,训练集准确率比验证集准确率微高或者二者相当是比较不错的状态。如果发现训练集的准确率比验证集高很多,说明在这个任务上已经过拟合,需要在训练过程中加入更多的正则,如增大L2Decay的值,加入更多的数据增广策略,加入label_smoothing策略等;如果发现训练集的准确率比验证集低一些,说明在这个任务上可能欠拟合,需要在训练过程中减弱正则效果,如减小L2Decay的值,减少数据增广方式,增大图片crop区域面积,减弱图片拉伸变换,去除label_smoothing等。 - -- 其他数据集(默认加载ImageNet-1k预训练):基本和训练ImageNet-1k的调整策略相当,此外,在其他数据集上如果模型趋向于过拟合(train acc远大于test acc)状态,也可以使用更优的预训练权重,PaddleClas为常用的网络提供了SSLD的蒸馏预训练权重,其比ImageNet-1k的权重更优,您可以优先选择。 - -- **【备注】** 不太建议根据loss来重新调整训练策略,在使用不同的数据增广后,train loss的大小差异较大,如使用Cutmix或者RandAugment后,train loss会大于test loss,当数据增广策略减弱后,train loss会小于test loss,所以较难调整。 - -### Q5.9 如何通过预训练模型提升自己的数据集的精度? - -**A**:在现阶段图像识别领域中,加载预训练模型来训练自己的任务已成为普遍的做法,相比从随机初始化开始训练,加载预训练模型往往可以提升特定任务的精度。一般来说,业界广泛使用的预训练模型是通过训练128万张图片1000类的ImageNet-1k数据集得到的,该预训练模型的fc层权重是是一个k\*1000的矩阵,其中k是fc层以前的神经元数,在加载预训练权重时,无需加载fc层的权重。在学习率方面,如果您的任务训练的数据集特别小(如小于1千张),我们建议你使用较小的初始学习率,如0.001(batch_size:256,下同),以免较大的学习率破坏预训练权重。如果您的训练数据集规模相对较大(大于10万),我们建议你尝试更大的初始学习率,如0.01或者更大。如果目标数据集较小,也可以冻结一些浅层的权重。此外,如果训练一个特定垂类的小数据集,也可以先在相关的大的数据集上训练一个预训练权重,再在该权重上用较小的学习率微调模型。 - -### Q5.10 现有的策略已经让模型的精度趋于饱和,如何进一步提升特定模型的精度? - -**A**:如果现有的策略不能进一步提升模型的精度,说明在现有数据集和现有的策略下,模型几乎到达饱和状态,这里提供两种进一步提升模型精度的方法。 - -- 挖掘相关数据:用在现有数据集上训练饱和的模型去对相关的数据做预测,将置信度较高的数据打label后加入训练集进一步训练,如此循环操作,可进一步提升模型的精度。 - -- 知识蒸馏:可以先使用一个较大的模型在该数据集上训练一个精度较高的teacher model,然后使用该teacher model去教导一个Student model,其中,Student model即为目标模型。PaddleClas提供了百度自研的SSLD知识蒸馏方案,即使在ImageNet-1k这么有挑战的分类任务上,其也能稳定提升3%以上。SSLD知识蒸馏的的章节请参考[**SSLD知识蒸馏**](../advanced_tutorials/distillation/distillation.md)。 - - - -## 第6期 - -### Q6.1: PaddleClas的几个分支有什么区别?应该如何选择? - -**A**: PaddleClas目前共有3种分支: - -* 动态图分支:dygraph分支是PaddleClas的默认分支,也是更新最快的分支。所有的新功能、新改动都会先在dygraph分支上进行。如果想追踪PaddleClas的最新进展,可以关注这个分支。这个分支主要支持动态图,会跟着paddlepaddle的版本一起更新。 - -* 稳定版本分支:快速更新能够让关注者了解最新进展,但也会带来不稳定性。因此在一些关键的时间点,我们会从dygraph分支中拉出分支,提供稳定的版本。这些分支的名字与paddlepaddle的版本对应,如 2.0-beta 为支持paddlepaddle2.0-beta的稳定版本。这些分支一般只会修复bug,而不更新新的特性和模型。 - -* 静态图分支:master分支是使用静态图版本的分支,主要用来支持一些老用户的使用,也只进行一些简单维护,不会更新新的特性和模型。不建议新用户使用静态图分支。老用户如果有条件,也建议迁到动态图分支或稳定版本分支。 - -总的来说,如果想跟进PaddleClas的最新进展,建议选择dygraph分支,如果需要稳定版本,建议选择最新的稳定版本分支。 - -### Q6.2: 什么是静态图模式? - -**A**: 静态图模式即为声明式编程模式。许多深度学习框架如tensorflow,mxnet等最初都使用这种模式。在静态图模式中,需要先定义好模型结构,之后框架会根据模型结构进行编译和优化,构建"计算图"。可以简单的理解为,静态图模式是"计算图"静态不变的模式。静态图的优势在于编译器一般只需要构建一次计算图,效率相对较高,缺点在于不够灵活,调试麻烦。例如在paddle中运行一次静态图模型,需要完整所有的运算,之后根据特定的key来提取输出,无法实时得到结果。 - -### Q6.3: 什么是动态图模式? - -**A**: 动态图模式即为命令式编程模式,用户无需预先定义网络结构,每行代码都可以直接运行得到结果。相比静态图模式,动态图模式对用户更加友好,调试也更方便。此外,动态图模式的结构设计也更加灵活,可以在运行过程中随时调整结构。 - -PaddleClas目前持续更新的dygraph分支,主要采用动态图模式。如果您是新用户,建议使用动态图模式来进行开发和训练。如果推理预测时有性能需求,可以在训练完成后,将动态图模型转为静态图模型提高效率。 - -### Q6.4: 动态图模型的预测效率有时不如静态图,应该怎么办? - -**A**: 可以使用转换工具,将动态图模型转换为静态图模型,具体可以参考https://www.paddlepaddle.org.cn/documentation/docs/zh/2.0-rc1/guides/04_dygraph_to_static/index_cn.html。 - -### Q6.5: 构建分类数据集时,如何构建"背景"类别的数据? - -**A**: 实际使用中,常常需要自己构建一个分类数据集来进行训练。除了所需要的类别数据之外,还需要一个额外的类别,即"背景"类别。例如做一个猫狗分类,猫为一类,狗为一类,如果我们的分类器只有两类,那么输入一张兔子的图片,也会被强制的分到这两个类别中的一个。因此在训练时,应添加一些非目标类别的数据,作为"背景"类别的数据。 - -构建"背景"类别的数据时,首先应从实际需求的角度出发。还是以猫狗分类器为例,如果实际测试的数据都是动物,那么"背景"类别的数据就应该包含一些除猫狗之外的动物。而如果测试的数据还包含更多类别,例如一棵树,那么"背景"类别的数据就要设置的更加丰富。 -简单来说,"背景"类别的数据,要根据实际场景中可能出现的情况去收集。情况越多,需要涵盖的数据种类就越多,任务也会相应的越困难。因此实际处理中,最好能对问题进行限制,避免浪费资源和算力。 diff --git a/docs/zh_CN_tmp/faq_series/faq_2021_s1.md b/docs/zh_CN_tmp/faq_series/faq_2021_s1.md deleted file mode 100644 index ccf53f64..00000000 --- a/docs/zh_CN_tmp/faq_series/faq_2021_s1.md +++ /dev/null @@ -1,267 +0,0 @@ -# 图像分类常见问题汇总 - 2021 第1季 - - -## 目录 -* [第1期](#第1期)(2021.01.05) -* [第2期](#第2期)(2021.01.14) -* [第3期](#第3期)(2020.01.21) -* [第4期](#第4期)(2021.01.28) -* [第5期](#第5期)(2021.02.03) - - -## 第1期 - -### Q1.1: 在模型导出时,发现导出的inference model预测精度很低,这块是为什么呢? - -**A**:可以从以下几个方面排查 - -* 需要先排查下预训练模型路径是否正确。 -* 模型导出时,默认的类别数为1000,如果预训练模型是自定义的类别数,则在导出的时候需要指定参数`--class_num=k`,k是自定义的类别数。 -* 可以对比下`tools/infer/infer.py`和`tools/infer/predict.py`针对相同输入的输出class id与score,如果完全相同,则可能是预训练模型自身的精度很差。 - -### Q1.2: 训练样本的类别不均衡,这个该怎么处理呢? - -**A**:有以下几种比较常用的处理方法。 - -* 从采样的角度出发的话 - * 可以对样本根据类别进行动态采样,每个类别都设置不同的采样概率,保证不同类别的图片在同一个minibatch或者同一个epoch内,不同类别的训练样本数量基本一致或者符合自己期望的比例。 - * 可以使用过采样的方法,对图片数量较少的类别进行过采样。 -* 从损失函数的角度出发的话 - * 可以使用OHEM(online hard example miniing)的方法,对根据样本的loss进行筛选,筛选出hard example用于模型的梯度反传和参数更新。 - * 可以使用Focal loss的方法,对一些比较容易的样本的loss赋予较小的权重,对于难样本的loss赋予较大的权重,从而让容易样本的loss对网络整体的loss有贡献,但是又不会主导loss。 - - -### Q1.3 在docker中训练的时候,数据路径和配置均没问题,但是一直报错`SystemError: (Fatal) Blocking queue is killed because the data reader raises an exception`,这是为什么呢? - -**A**:这可能是因为docker中共享内存太小导致的。创建docker的时候,`/dev/shm`的默认大小为64M,如果使用多进程读取数据,共享内存可能不够,因此需要给`/dev/shm`分配更大的空间,在创建docker的时候,传入`--shm-size=8g`表示给`/dev/shm`分配8g的空间,一般是够用的。 - - -### Q1.4 PaddleClas提供的10W类图像分类预训练模型在哪里下载,应该怎么使用呢? - -**A**:基于ResNet50_vd, 百度开源了自研的大规模分类预训练模型,其中训练数据为10万个类别,4300万张图片。10万类预训练模型的下载地址:[下载地址](https://paddle-imagenet-models-name.bj.bcebos.com/ResNet50_vd_10w_pretrained.tar),在这里需要注意的是,该预训练模型没有提供最后的FC层参数,因此无法直接拿来预测;但是可以使用它作为预训练模型,在自己的数据集上进行微调。经过验证,该预训练模型相比于基于ImageNet1k数据集的ResNet50_vd预训练模型,在不同的数据集上均有比较明显的精度收益,最多可达30%,更多的对比实验可以参考:[图像分类迁移学习教程](../application/transfer_learning.md)。 - - -### Q1.5 使用C++进行预测部署的时候怎么进行加速呢? - -**A**:可以从以下几个方面加速预测过程。 - -1. 如果是CPU预测的话,可以开启mkldnn进行预测,同时适当增大运算的线程数(cpu_math_library_num_threads,在`tools/config.txt`中),一般设置为6~10比较有效。 -2. 如果是GPU预测的话,在硬件条件允许的情况下,可以开启TensorRT预测以及FP16预测,这可以进一步加快预测速度。 -3. 在内存或者显存足够的情况下,可以增大预测的batch size。 -4. 可以将图像预处理的逻辑(主要设计resize、crop、normalize等)放在GPU上运行,这可以进一步加速预测过程。 - -更多的预测部署加速技巧,也欢迎大家补充。 - - -## 第2期 - -### Q2.1: PaddleClas在设置标签的时候必须从0开始吗?class_num必须等于数据集的类别数吗? - -**A**:在PaddleClas中,标签默认是从0开始,所以,尽量从0开始设置标签,当然,从其他值开始设置也可以,这样会导致设置的class_num增大,进而导致分类的FC层参数量较大,权重文件会占用更多的存储空间。在数据集类别连续的情况下,设置的class_num要等于数据集类别数(当然大于数据集类别数也可以,在很多数据集上甚至可以获得更高的精度,但同样会使FC层参数量较大),在数据集类别数不连续的情况下,设置的class_num要等于数据集中最大的class_id+1。 - -### Q2.2: 当类别数特别多的时候,最后的FC特别大,导致权重文件占用较大的存储空间,该怎么解决? - -**A**:最终的FC的权重是一个大的矩阵,大小为C*class_num,其中C为FC前一层的神经单元个数,如ResNet50中的C为2048,可以通过降低C的值来进一步减小FC权重的大小,比如,可以在GAP之后加一层维数较小的FC层,这样可以大大缩小最终分类层的权重大小。 - -### Q2.3: 为什么使用PaddleClas在自定义的数据集上训练ssld蒸馏没有达到预期? - -首先,需要确保Teacher模型的精度是否存在问题,其次,需要确保Student模型是否成功加载了ImageNet-1k的预训练权重以及Teacher模型是否成功加载了训练自定义数据集的权重,最后,要确保初次学习率不应太大,至少保证初始学习率不要超过训练ImageNet-1k的值。 - -### Q2.4: 移动端或嵌入式端上哪些网络具有优势? - -建议使用移动端系列的网络,网络详情可以参考[移动端系列网络结构介绍](../models/Mobile.md)。如果任务的速度更重要,可以考虑MobileNetV3系列,如果模型大小更重要,可以根据移动端系列网络结构介绍中的StorageSize-Accuracy来确定具体的结构。 - -### Q2.5: 既然移动端网络非常快,为什么还要使用诸如ResNet这样参数量和计算量较大的网络? - -不同的网络结构在不同的设备上运行速度优势不同。在移动端,移动端系列的网络比服务器端的网络运行速度更快,但是在服务器端,相同精度下,ResNet等经过特定优化后的网络具有更大的优势,所以需要根据具体情况来选择具体的网络结构。 - - -## 第3期 - -### Q3.1: 双(多)分支结构与Plain结构,各自有什么特点? - -**A**: -以VGG为代表的Plain网络,发展到以ResNet系列(带有残差模块)、Inception系列(多卷积核并行)为代表的的多分支网络结构,人们发现多分支结构在模型训练阶段更为友好,更大的网络宽度可以带来更强的特征拟合能力,而残差结构则可以避免深度网络梯度消失的问题,但是在推理阶段,带有多分支结构的模型在速度上并无优势,即使多分支结构模型的FLOPs要更低,但多分支结构的模型计算密度也更低。例如VGG16模型的FLOPs远远大于EfficientNetB3,但是VGG16模型的推理速度却显著快于EfficientNetB3,因此多分支结构在模型训练阶段更为友好,而Plain结构模型则更适合于推理阶段,那么以此为出发点,可以在训练阶段使用多分支网络结构,以更大的训练时间成本换取特征拟合能力更强的模型,而在推理阶段,将多分支结构转为Plain结构,从而换取更短的推理时间。实现多分支结构到Plain结构的转换,可以通过结构重参数化(structural re-parameterization)技术实现。 - -另外,Plain结构对于剪枝操作也更为友好。 - -注:“Plain结构”与“结构重参数化(structural re-parameterization)技术”出自论文“RepVGG: Making VGG-style ConvNets Great Again”。Plain结构网络模型指整个网络不存在分支结构,也即网络中第`i`层layer的输入为第`i-1`层layer的输出,第`i`层layer的输出为第`i+1`层layer的输入。 - -### Q3.2: ACNet的创新点主要在哪里? -**A**: -ACNet意为“Asymmetric Convolution Block”,即为非对称卷积模块,该思想出自论文“ACNet: Strengthening the Kernel Skeletons for Powerful CNN via Asymmetric Convolution Blocks”,文章提出了以“ACB”结构的三个CNN卷积核为一组,用来在训练阶段替代现有卷积神经网络中的传统方形卷积核。 - -方形卷积核的尺寸为假设为`d*d`,即宽、高相等均为`d`,则用于替换该卷积核的ACB结构是尺寸为`d*d`、`1*d`、`d*1`的三个卷积核,然后再将三个卷积核的输出直接相加,可以得到与原有方形卷积核相同尺寸的计算结果。 -而在训练完成后,将ACB结构换回原有的方形卷积核,方形卷积核的参数则为ACB结构的三个卷积核的参数直接相加(见`Q3.4`,因此还是使用与之前相同的模型结构用于推理,ACB结构只是在训练阶段使用。 - -在训练中,通过ACB结构,模型的网络宽度得到了提高,利用`1*d`、`d*1`的两个非对称卷积核提取得到更多的特征用于丰富`d*d`卷积核提取的特征图的信息。而在推理阶段,这种设计思想并没有带来额外的参数与计算开销。如下图所示,分别是用于训练阶段和部署推理阶段的卷积核形式。 - -
- -
- -
- -
- -文章作者的实验表明,通过在原有网络模型训练中使用ACNet结构可以显著提高模型能力,原作者对此有如下解释: - -1. 实验表明,对于一个`d*d`的卷积核,相对于消除卷积核角落位置(如上图中卷积核的`corners`位置)的参数而言,消除骨架位置(如上图中卷积核的`skeleton`位置)的参数会给模型精度带来更大的影响,因此卷积核骨架位置的参数要更为重要,而ACB结构中的两个非对称卷积核增强了方形卷积核骨架位置参数的权重,使之作用更为显著。这种相加是否会因正负数抵消作用而减弱骨架位置的参数作用,作者通过实验发现,网络的训练总是会向着提高骨架位置参数作用的方向发展,并没有出现正负数抵消而减弱的现象。 -2. 非对称卷积核对于翻转的图像具有更强的鲁棒性,如下图所示,水平的非对称卷积核对于上下翻转的图像具有更强的鲁棒性。对于翻转前后图像中语义上的同一位置,非对称卷积核提取的特征图是相同的,这一点要强于方形卷积核。 - -
- -
- -### Q3.3: RepVGG的创新点主要在哪里? - -**A**: -通过Q3.1与Q3.2,我们可以大胆想到,是否可以借鉴ACNet将训练阶段与推理阶段解耦,并且训练阶段使用多分支结构,推理阶段使用Plain结构,这也就是RepVGG的创新点。下图为ResNet、RepVGG训练和推理阶段网络结构的对比。 - -
- -
- -首先训练阶段的RepVGG采用多分支结构,可以看作是在传统VGG网络的基础上,增加了`1*1`卷积和恒等映射的残差结构,而推理阶段的RepVGG则退化为VGG结构。训练阶段RepVGG到推理阶段RepVGG的网络结构转换使用“结构重参数化”技术实现。 - -对于恒等映射,可将其视为参数均为`1`的`1*1`卷积核作用在输入特征图的输出结果,因此训练阶段的RepVGG的卷积模块可以视为两个`1*1`卷积和一个`3*3`卷积,而`1*1`卷积的参数又可以直接相加到`3*3`卷积核中心位置的参数上(该操作类似于ACNet中,非对称卷积核参数相加到方形卷积核骨架位置参数的操作),通过上述操作,即可在推理阶段,将网络结构中的恒等映射、`1*1`卷积、`3*3`卷积三个分支合并为一个`3*3`卷积,详见`Q3.4`。 - -### Q3.4: ACNet与RepVGG中的struct re-parameters有何异同? - -**A**: -通过上面的了解,可以简单理解RepVGG是更为极端的ACNet。ACNet中的re-parameters操作如下图所示: - -
- -
- -观察上图,以其中的`conv2`为例,该非对称卷积可以视为`3*3`的方形卷积核,只不过该方形卷积核的上下六个参数为`0`,`conv3`同理。并且,`conv1`、`conv2`、`conv3`的结果相加,等同于三个卷积核相加再做卷积,以`Conv`表示卷积操作,`+`表示矩阵的加法操作,则:`Conv1(A)+Conv2(A)+Conv3(A) == Convk(A)`,其中`Conv1`、`Conv2`、`Conv3`的卷积核分别为`Kernel1`、`kernel2`、`kernel3`,而`Convk`的卷积核为`Kernel1 + kernel2 + kernel3`。 - -RepVGG网络与ACNet同理,只不过ACNet的`1*d`非对称卷积变成了`1*1`卷积,`1*1`卷积相加的位置变成了`3*3`卷积的中心。 - -### Q3.5: 影响模型计算速度的因素都有哪些?参数量越大的模型计算速度一定更慢吗? - -**A**: -影响模型计算速度的因素有很多,参数量只是其中之一。具体来说,在不考虑硬件差异的前提下,模型的计算速度可以参考以下几个方面: -1. 参数量:用于衡量模型的参数数量,模型的参数量越大,模型在计算时对内存(显存)的容量要求一般也更高。但内存(显存)占用大小不完全取决于参数量。如下图中,假设输入特征图内存占用大小为`1`个单位,对于左侧的残差结构而言,由于需要记录两个分支的运算结果,然后再相加,因此该结构在计算时的内存峰值占用是右侧Plain结构的两倍。 - -
- -
- -2. 浮点运算数量(FLOPs):注意与每秒浮点运算次数(FLOPS)相区分。FLOPs可以简单理解为计算量,通常用来衡量一个模型的计算复杂度。 -以常见的卷积操作为例,在不考虑batch size、激活函数、stride操作、bias的前提下,假设input future map尺寸为`Min*Min`,通道数为`Cin`,output future map尺寸为`Mout*Mout`,通道数为`Cout`,conv kernel尺寸为`K*K`,则进行一次卷积的FLOPs可以通过下述方式计算: - 1. 输出特征图包含特征点的数量为:`Cout * Mout * Mout`; - 2. 对于输出特征图中的每一个特征点的卷积操作而言: - 乘法计算数量为:`Cin * K * K`; - 加法计算数量为:`Cin * K * K - 1`; - 3. 因此计算总量为:`Cout * Mout * Mout * (Cin * K * K + Cin * K * K - 1)`,也即`Cout * Mout * Mout * (2Cin * K * K - 1)`。 -3. Memory Access Cost(MAC):内存访问成本,由于计算机在对数据进行运算(例如乘法、加法)前,需要将运算的数据从内存(此处泛指内存,包括显存)读取到运算器的Cache中,而内存的访问是十分耗时的。以分组卷积为例,假设分为`g`组,虽然分组后模型的参数量和FLOPs没有变化,但是分组卷积的内存访问次数成为之前的`g`倍(此处只是简单计算,未考虑多级Cache),因此MAC显著提高,模型的计算速度也相应变慢。 -4. 并行度:常说的并行度包括数据并行和模型并行两部分,此处是指模型并行。以卷积操作为例,一个卷积层的参数量通常十分庞大,如果将卷积层中的矩阵做分块处理,然后分别交由多个GPU进行运算,即可达到加速的目的。甚至有的网络层参数量过大,单张GPU显存无法容纳时,也可能将该层分由多个GPU计算,但是能否分由多个GPU并行运算,不仅取决于硬件条件,也受特定的运算形式所限制。当然,并行度越高的模型,其运行速度也越快。 - - - -## 第4期 - -### Q4.1: 图像分类任务中,有一部分合成数据,这一部分合成数据是否需要使用样本均衡? - -**A**: - -1. 不同类别的样本数如果差异过大,某类样本因合成数据集扩充至其他类的数倍以上,需要做适当减小该类的权值。 -2. 如果是有的类别是合成而有的类别半合成半真实,只要数量在一个量级可不做均衡,并尝试训练一下,测试该合成类别样本是否能够准确识别。 -3. 如果不同来源数据的类别因合成数据增大问题,造成性能衰减,需要考虑合成数据集是否有噪声或者难例样本,也可适当增加该类别权重,获得该类别更好的识别性能。 - -### Q4.2: 学术界将Vision Transformer(ViT)引入图像分类领域,将对图像分类带来什么新的机遇和挑战?相比于CNN的优势? - -论文地址[AN IMAGE IS WORTH 16X16 WORDS: TRANSFORMERS FOR IMAGE RECOGNITION AT SCALE](https://openreview.net/pdf?id=YicbFdNTTy) - -**A**: -1. 图像对CNN的依赖是不必要的,利用Transformer的计算效率和可伸缩性,可以训练很大模型,当模型和数据集增大的情形下,仍然不会存在饱和的情况。受到Transformer在NLP上的启发,在图像分类任务中使用时,将图片分成顺序排列的patches,并将这些patches输入一个线性单元嵌入到embedding作为transformer的输入。 - -2. 在中等规模数据集中如ImageNet,ImageNet21k,视觉Transformer模型低于相同规模尺寸的ResNet几个百分点。这是因为transformer缺少CNN平移和局限性,在数据量不够大的时候,不能超越卷积网络。 - -3. 在超大规模数据集14M-300M训练时,这种方式可以越过局部信息,建模更加长距离的依赖关系,而CNN能较好关注局部信息全局信息捕获能力较弱。 - -4. Transformer一度在NLP领域一统江湖,也一度被质疑不适用于CV领域,当前出来的几片视觉领域的文章,性能也是直逼CNN的SOTA。相信在未来能够提出Vision-Language联合或者多模态的模型,能够一并解决视觉和语言问题。 - - -### Q4.3: 对于Vision Transformer模型,是如何将图像转换成序列信息传给Encoder? - -**A**: - -1. 使用Transformer模型,主要是使用其中的注意力方法。我们希望构想一个适用语义embedding信息的场景,但是图像分类与序列的语义信息关联性不大,因此Vision Transformer有其独特的设计。ViT的目标也正是希望使用注意力机制来代替CNN。 - -2. 考虑Transformer中Encoder编码器的输入形式,如下图: - * (1)不定长度的顺序输入,因为它是RNN结构,一句话,单词数不一样。如果是NLP场景,换词的顺序不太过于影响语义,但是图像换了不同区域的位置,不同区域连接顺序不同,将造成极大理解偏差。 - * (2)单个patch位置信息通过变换成一个维度固定的向量,Encoder输入是patch像素信息embedding,与一些固定位置的向量concate, 合成一个维度固定的向量和位置信息在其中。 - -
- -
- -3. 考虑以下问题:怎样将一张图片怎么传给encoder? - -* 如下图所示。假设输入图片是[224,224,3],按照顺序从左到右,从上到下,切分成很多个patch,patch大小可以为[p,p,3](p取值可以是16,32),对其使用Linear Projection of Flattened Patches模块转成特征向量,并concat一个位置向量,传入Encoder中。 - -
- -
- -4. 如上图,给定一个`H×W×C`的图像以及区块大小P,可以把图像划分为`N`个`P×P×C`的区块,`N=H×W/(P×P)`。得到区块后要使用线性变换转为D维特征向量,再加上位置编码向量即可。和BERT类似,ViT 在序列之前也加入了一个分类标志位,记为`[CLS]`。ViT输入序列`z`如下面的公式所示,其中`x`表示一个图像区块。 - -
- -
- -5. ViT 模型和 Transformer 基本一样,输入序列传入 ViT,然后利用`[CLS]`标志位的最终输出特征进行分类。ViT主要由MSA(多头自注意力)和MLP(两层使用GELU激活函数的全连接网络) 组成,在MSA和MLP之前加上LayerNorm和残差连接。 - -### Q4.4: 如何理解归纳偏置Inductive Bias? - -**A**: -1. 在机器学习中,会对算需要应用的问题做一些假设,这个假设就称为归纳偏好。在现实生活中观察得到的现象中归纳出一定的先验规则,然后对模型做一定的约束,从而起到模型选择的作用。在CNN中,假设特征具有局部性(Locality)和空间不变性(Spatial Invariance)的特点,即把相邻的的特征有联系而远离的没有,将相邻特征融合在一起,更会容易产生“解”;还有attention机制,也是从人的直觉、生活经验归纳的规则。 - -2. Vision Transformer利用的归纳偏置是有序列能力Sequentiality和时间不变性Time Invariance,即序列顺序上的时间间隔的联系,因此也能得出在更大规模数据集上比CNN类的模型有更好的性能。文章Conclusion里的“Unlike prior works using self-attention in computer vision, we do not introduce any image-specific inductive biases into the architecture”和Introduction里的“We find that large scale training trumps inductive bias”,可以得出直观上inductive bias在大量数据的情况中的产生是衰减性能,应该尽可能丢弃。 - -### Q4.5: ViT为什么要增加一个[CLS]标志位? 为什么将[CLS]标志位对应的向量作为整个序列的语义表示? - -**A**: -1. 和BERT相类似,ViT在第一个patch前添加一个`[CLS]`标志位,最后一个结束标志位对应的向量可以作为整个图像的语义表示,从而用于下游的分类任务等。从而使得整个embedding组可以表征该图像不同位置的特征。 - -2. 将`[CLS]`标志位对应的向量作为整个图像的语义表示,是因为与图像中已有的其它patch块图像相比,这个无明显语义信息的符号会更“公平”地融合图像中各个patch的语义信息,从而更好的表示整个图像的语义。 - - -## 第5期 - -### Q5.1: PaddleClas训练配置文件中都包含了哪些内容?训练模型时如何进行修改? -**A**: -PaddleClas的模型包含6大模块的配置,分别为:全局配置,网络结构(ARCHITECTURE),学习率(LEARNING_RATE),优化器(OPTIMIZER),训练(TRAIN)和验证(VALID)。 - -全局配置主要包含了任务的配置信息,例如类别的数量,训练集内的数据量,训练的epoch数量,网络输入的尺寸等等。如果要训练自定义的任务,或是使用自己的训练集,需要关注这个部分。 - -网络结构的配置定义了要使用的网络。在实际使用时,首先要选择合适的配置文件,所以通常不会修改这部分配置。只有在自定义网络结构,或者对任务有特殊要求时才进行修改。 - -学习率和优化器的配置建议优先使用默认配置,这些参数是我们已经调过的。如果任务的改动比较大,也可以做微调。 - -训练和预测两个配置包含了batch_size,数据集,数据预处理(transforms),读数据进程数(num_workers)等比较重要的配置,这部分要根据实际环境适度修改。要注意的是,paddleclas中的batch_size是全局的配置,即不随卡数发生变化。而num_workers定义的是单卡的进程数,即如果num_workers是8,并且使用4卡训练,则实际有32个worker。 - -### Q5.2: 如何在命令行中快速的修改配置? -**A**: -在训练中,我们常常需要对个别配置不断进行微调,而不希望频繁的修改配置文件。这时可以使用-o来调整,修改是要先按层级写出要改的配置名称,层级之间用点分割,再写出要修改的值。例如我们想要修改batch_size,可以在训练的命令后加上-o TRAIN.batchsize=512。 - -### Q5.3: 如何根据PaddleClas的精度曲线选择合适的模型? -**A**: -PaddleClas提供了多个模型的benchmark,并绘制了性能曲线,主要有三种:准确率-预测时间曲线,准确率-参数量曲线和准确率-FLOPS曲线,纵轴为准确率,横轴分别为预测时间、参数量、FLOPS。一般来说,不同模型在三个图上的表现是一致的。同一个系列的模型在图上采用相同的符号来表示,并且用曲线连接。 - -以准确率-预测时间曲线为例,点越靠上表明准确率越高,约靠左表明速度越快。例如左上区域的模型为又快又准的模型,而最左侧贴近纵轴的点则为轻量级的模型。使用时,可以综合考虑准确率和时间因素,选择合适的模型。举个例子,我们希望模型的运行时间在10ms以下,选择最准确的模型。首先,在横轴的10ms出画一条垂直的线,之后在这条线的左侧找到最高的点,就是符合要求的模型。 - -实际使用中,模型的参数量和FLOPS是稳定不变的,而运算时间在不同的软硬件条件下均会有所变化。如果想更准确的选择模型,那么可以在自己的环境中运行测试,得到该环境下的性能图。 - -### Q5.4: 想在imagenet中增加两个类,能不能把现有全连接层的参数固定,只训练新的两个类别? -**A**: -这个想法理论上可行,但效果恐怕不会太好。如果只是固定全连接层,而前面的卷积层参数发生了变化,那么这些全连接层的作用也无法保证与开始一样。而如果保持整个网络的参数都不变,只训练全连接层的新增两个类别,也比较难训练处理想的结果。 - -如果实际使用中确实需要原有的1000个类别依然很准确,那么可以将新类别的数据加入到原有训练集中,再用预训练模型进行finetune。如果只需要1000个类中的几个类别,那么可以把这部分的数据挑出来,和新增数据混合再finetune。 - -### Q5.5: 使用分类模型做其他任务的预训练模型时,应该选择哪些层作为feature? -**A**: -使用分类模型做其他任务的backbone有很多策略,这里介绍一种较为基础的方法。首先,去掉最后的全连接层,这一层主要包含的是原始任务的分类信息。如果任务比较简单,只要将前一层的输出作为featuremap,并在此基础上添加与任务对应的结构即可。如果任务涉及多尺度,需要选取不同尺度的anchor,例如某些检测模型,那么可以选取每次下采样之前一层的输出作为featuremap。 \ No newline at end of file diff --git a/docs/zh_CN_tmp/faq_series/faq_2021_s2.md b/docs/zh_CN_tmp/faq_series/faq_2021_s2.md deleted file mode 100644 index be102b29..00000000 --- a/docs/zh_CN_tmp/faq_series/faq_2021_s2.md +++ /dev/null @@ -1,342 +0,0 @@ -# PaddleClas 相关常见问题汇总 - 2021 第2季 - -## 写在前面 - -* 我们收集整理了开源以来在issues和用户群中的常见问题并且给出了简要解答,旨在为广大用户提供一些参考,也希望帮助大家少走一些弯路。 - -* 图像分类、识别、检索领域大佬众多,模型和论文更新速度也很快,本文档回答主要依赖有限的项目实践,难免挂一漏万,如有遗漏和不足,也希望有识之士帮忙补充和修正,万分感谢。 - -## 目录 -* [近期更新](#近期更新)(2021.09.08) -* [精选](#精选) -* [1. 理论篇](#1.理论篇) - * [1.1 PaddleClas基础知识](#1.1PaddleClas基础知识) - * [1.2 骨干网络和预训练模型库](#1.2骨干网络和预训练模型库) - * [1.3 图像分类](#1.3图像分类) - * [1.4 通用检测模块](#1.4通用检测模块) - * [1.5 图像识别模块](#1.5图像识别模块) - * [1.6 检索模块](#1.6检索模块) -* [2. 实战篇](#2.实战篇) - * [2.1 训练与评估共性问题](#2.1训练与评估共性问题) - * [2.2 图像分类](#2.2图像分类) - * [2.3 通用检测模块](#2.3通用检测模块) - * [2.4 图像识别模块](#2.4图像识别模块) - * [2.5 检索模块](#2.5检索模块) - * [2.6 模型预测部署](#2.6模型预测部署) - - -## 近期更新 - -#### Q2.1.7: 在训练时,出现如下报错信息:`ERROR: Unexpected segmentation fault encountered in DataLoader workers.`,如何排查解决问题呢? -**A**:尝试将训练配置文件中的字段 `num_workers` 设置为 `0`;尝试将训练配置文件中的字段 `batch_size` 调小一些;检查数据集格式和配置文件中的数据集路径是否正确。 - -#### Q2.1.8: 如何在训练时使用 `Mixup` 和 `Cutmix` ? -**A**: -* `Mixup` 的使用方法请参考 [Mixup](https://github.com/PaddlePaddle/PaddleClas/blob/cf9fc9363877f919996954a63716acfb959619d0/ppcls/configs/ImageNet/DataAugment/ResNet50_Mixup.yaml#L63-L65);`Cuxmix` 请参考 [Cuxmix](https://github.com/PaddlePaddle/PaddleClas/blob/cf9fc9363877f919996954a63716acfb959619d0/ppcls/configs/ImageNet/DataAugment/ResNet50_Cutmix.yaml#L63-L65)。 - -* 在使用 `Mixup` 或 `Cutmix` 时,需要注意: - * 配置文件中的 `Loss.Tranin.CELoss` 需要修改为 `Loss.Tranin.MixCELoss`,可参考 [MixCELoss](https://github.com/PaddlePaddle/PaddleClas/blob/cf9fc9363877f919996954a63716acfb959619d0/ppcls/configs/ImageNet/DataAugment/ResNet50_Cutmix.yaml#L23-L26); - * 使用 `Mixup` 或 `Cutmix` 做训练时无法计算训练的精度(Acc)指标,因此需要在配置文件中取消 `Metric.Train.TopkAcc` 字段,可参考 [Metric.Train.TopkAcc](https://github.com/PaddlePaddle/PaddleClas/blob/cf9fc9363877f919996954a63716acfb959619d0/ppcls/configs/ImageNet/DataAugment/ResNet50_Cutmix.yaml#L125-L128)。 - -#### Q2.1.9: 训练配置yaml文件中,字段 `Global.pretrain_model` 和 `Global.checkpoints` 分别用于配置什么呢? -**A**: -* 当需要 `fine-tune` 时,可以通过字段 `Global.pretrain_model` 配置预训练模型权重文件的路径,预训练模型权重文件后缀名通常为 `.pdparams`; -* 在训练过程中,训练程序会自动保存每个epoch结束时的断点信息,包括优化器信息 `.pdopt` 和模型权重信息 `.pdparams`。在训练过程意外中断等情况下,需要恢复训练时,可以通过字段 `Global.checkpoints` 配置训练过程中保存的断点信息文件,例如通过配置 `checkpoints: ./output/ResNet18/epoch_18` 即可恢复18epoch训练结束时的断点信息,PaddleClas将自动加载 `epoch_18.pdopt` 和 `epoch_18.pdparams`,从19epoch继续训练。 - -#### Q2.6.3: 如何将模型转为 `ONNX` 格式? -**A**:Paddle支持两种转ONNX格式模型的方式,且依赖于 `paddle2onnx` 工具,首先需要安装 `paddle2onnx`: - -```shell -pip install paddle2onnx -``` - -* 从 inference model 转为 ONNX 格式模型: - - 以动态图导出的 `combined` 格式 inference model(包含 `.pdmodel` 和 `.pdiparams` 两个文件)为例,使用以下命令进行模型格式转换: - ```shell - paddle2onnx --model_dir ${model_path} --model_filename ${model_path}/inference.pdmodel --params_filename ${model_path}/inference.pdiparams --save_file ${save_path}/model.onnx --enable_onnx_checker True - ``` - 上述命令中: - * `model_dir`:该参数下需要包含 `.pdmodel` 和 `.pdiparams` 两个文件; - * `model_filename`:该参数用于指定参数 `model_dir` 下的 `.pdmodel` 文件路径; - * `params_filename`:该参数用于指定参数 `model_dir` 下的 `.pdiparams` 文件路径; - * `save_file`:该参数用于指定转换后的模型保存目录路径。 - - 关于静态图导出的非 `combined` 格式的 inference model(通常包含文件 `__model__` 和多个参数文件)转换模型格式,以及更多参数说明请参考 paddle2onnx 官方文档 [paddle2onnx](https://github.com/PaddlePaddle/Paddle2ONNX/blob/develop/README_zh.md#%E5%8F%82%E6%95%B0%E9%80%89%E9%A1%B9)。 - -* 直接从模型组网代码导出ONNX格式模型: - - 以动态图模型组网代码为例,模型类为继承于 `paddle.nn.Layer` 的子类,代码如下所示: - - ```python - import paddle - from paddle.static import InputSpec - - class SimpleNet(paddle.nn.Layer): - def __init__(self): - pass - def forward(self, x): - pass - - net = SimpleNet() - x_spec = InputSpec(shape=[None, 3, 224, 224], dtype='float32', name='x') - paddle.onnx.export(layer=net, path="./SimpleNet", input_spec=[x_spec]) - ``` - 其中: - * `InputSpec()` 函数用于描述模型输入的签名信息,包括输入数据的 `shape`、`type` 和 `name`(可省略); - * `paddle.onnx.export()` 函数需要指定模型组网对象 `net`,导出模型的保存路径 `save_path`,模型的输入数据描述 `input_spec`。 - - 需要注意,`paddlepaddle` 版本需大于 `2.0.0`。关于 `paddle.onnx.export()` 函数的更多参数说明请参考[paddle.onnx.export](https://www.paddlepaddle.org.cn/documentation/docs/zh/api/paddle/onnx/export_cn.html#export)。 - -#### Q2.5.4: 在 build 检索底库时,参数 `pq_size` 应该如何设置? -**A**:`pq_size` 是PQ检索算法的参数。PQ检索算法可以简单理解为“分层”检索算法,`pq_size` 是每层的“容量”,因此该参数的设置会影响检索性能,不过,在底库总数据量不太大(小于10000张)的情况下,这个参数对性能的影响很小,因此对于大多数使用场景而言,在构建底库时无需修改该参数。关于PQ检索算法的更多内容,可以查看相关[论文](https://lear.inrialpes.fr/pubs/2011/JDS11/jegou_searching_with_quantization.pdf)。 - - -## 精选 - - -## 1. 理论篇 - - -### 1.1 PaddleClas基础知识 - -#### Q1.1.1 PaddleClas和PaddleDetection区别 -**A**:PaddleClas是一个兼主体检测、图像分类、图像检索于一体的图像识别repo,用于解决大部分图像识别问题,用户可以很方便的使用PaddleClas来解决小样本、多类别的图像识别问题。PaddleDetection提供了目标检测、关键点检测、多目标跟踪等能力,方便用户定位图像中的感兴趣的点和区域,被广泛应用于工业质检、遥感图像检测、无人巡检等项目。 - -#### Q1.1.2 PaddleClas 2.2和PaddleClas 2.1完全兼容吗? -**A**:PaddleClas2.2相对PaddleClas2.1新增了metric learning模块,主体检测模块、向量检索模块。另外,也提供了商品识别、车辆识别、logo识别和动漫人物识别等4个场景应用示例。用户可以基于PaddleClas 2.2快速构建图像识别系统。在图像分类模块,二者的使用方法类似,可以参考[图像分类示例](../tutorials/getting_started.md)快速迭代和评估。新增的metric learning模块,可以参考[metric learning示例](../tutorials/getting_started_retrieval.md)。另外,新版本暂时还不支持fp16、dali训练,也暂时不支持多标签训练,这块内容将在不久后支持。 - -#### Q1.1.3: Momentum 优化器中的 momentum 参数是什么意思呢? -**A**: Momentum 优化器是在 SGD 优化器的基础上引入了“动量”的概念。在 SGD 优化器中,在 `t+1` 时刻,参数 `w` 的更新可表示为: -```latex -w_t+1 = w_t - lr * grad -``` -其中,`lr` 为学习率,`grad` 为此时参数 `w` 的梯度。在引入动量的概念后,参数 `w` 的更新可表示为: -```latex -v_t+1 = m * v_t + lr * grad -w_t+1 = w_t - v_t+1 -``` -其中,`m` 即为动量 `momentum`,表示累积动量的加权值,一般取 `0.9`,当取值小于 `1` 时,则越早期的梯度对当前的影响越小,例如,当动量参数 `m` 取 `0.9` 时,在 `t` 时刻,`t-5` 的梯度加权值为 `0.9 ^ 5 = 0.59049`,而 `t-2` 时刻的梯度加权值为 `0.9 ^ 2 = 0.81`。因此,太过“久远”的梯度信息对当前的参考意义很小,而“最近”的历史梯度信息对当前影响更大,这也是符合直觉的。 - -
- -
- -通过引入动量的概念,在参数更新时考虑了历史更新的影响,因此可以加快收敛速度,也改善了 `SGD` 优化器带来的损失(cost、loss)震荡问题。 - -#### Q1.1.4: PaddleClas 是否有 `Fixing the train-test resolution discrepancy` 这篇论文的实现呢? -**A**: 目前 PaddleClas 没有实现。如果需要,可以尝试自己修改代码。简单来说,该论文所提出的思想是使用较大分辨率作为输入,对已经训练好的模型最后的FC层进行fine-tune。具体操作上,首先在较低分辨率的数据集上对模型网络进行训练,完成训练后,对网络除最后的FC层外的其他层的权重设置参数 `stop_gradient=True`,然后使用较大分辨率的输入对网络进行fine-tune训练。 - - -### 1.2 骨干网络和预训练模型库 - - -### 1.3 图像分类 - -#### Q1.3.1: PaddleClas有提供调整图片亮度,对比度,饱和度,色调等方面的数据增强吗? -**A**:PaddleClas提供了多种数据增广方式, 可分为3类: -1. 图像变换类: AutoAugment, RandAugment; -2. 图像裁剪类: CutOut、RandErasing、HideAndSeek、GridMask; -3. 图像混叠类:Mixup, Cutmix. - -其中,Randangment提供了多种数据增强方式的随机组合,可以满足亮度、对比度、饱和度、色调等多方面的数据增广需求 - - -### 1.4 通用检测模块 - -#### Q1.4.1 主体检测是每次只输出一个主体检测框吗? -**A**:主体检测这块的输出数量是可以通过配置文件配置的。在配置文件中Global.threshold控制检测的阈值,小于该阈值的检测框被舍弃,Global.max_det_results控制最大返回的结果数,这两个参数共同决定了输出检测框的数量。 - -#### Q1.4.2 训练主体检测模型的数据是如何选择的?换成更小的模型会有损精度吗? -**A**:训练数据是在COCO、Object365、RPC、LogoDet等公开数据集中随机抽取的子集,小模型精度可能会有一些损失,后续我们也会尝试下更小的检测模型。关于主体检测模型的更多信息请参考[主体检测](../application/mainbody_detection.md)。 - -#### Q1.4.3: 目前使用的主体检测模型检测在某些场景中会有误检? -**A**:目前的主体检测模型训练时使用了COCO、Object365、RPC、LogoDet等公开数据集,如果被检测数据是类似工业质检等于常见类别差异较大的数据,需要基于目前的检测模型重新微调训练。 - - -### 1.5 图像识别模块 - -#### Q1.5.1 使用`circle loss`还需加`triplet loss`吗? -**A**:`circle loss`是统一了样本对学习和分类学习的两种形式,如果是分类学习的形式的话,可以增加`triplet loss`。 - -#### Q1.5.2 如果不是识别开源的四个方向的图片,该使用哪个识别模型? -**A**:建议使用商品识别模型,一来是因为商品覆盖的范围比较广,被识别的图片是商品的概率更大,二来是因为商品识别模型的训练数据使用了5万类别的数据,泛化能力更好,特征会更鲁棒一些。 - -#### Q1.5.3 最后使用512维的向量,为什么不用1024或者其他维度的呢? -**A**:使用维度小的向量,为了加快计算,在实际使用过程中,可能使用128甚至更小。一般来说,512的维度已经够大,能充分表示特征了。 - - -### 1.6 检索模块 - -#### Q1.6.1 PaddleClas目前使用的Möbius向量检索算法支持类似于faiss的那种index.add()的功能吗? 另外,每次构建新的图都要进行train吗?这里的train是为了检索加速还是为了构建相似的图? -**A**:Mobius提供的检索算法是一种基于图的近似最近邻搜索算法,目前支持两种距离计算方式:inner product和L2 distance. faiss中提供的index.add功能暂时不支持,如果需要增加检索库的内容,需要从头重新构建新的index. 在每次构建index时,检索算法内部执行的操作是一种类似于train的过程,不同于faiss提供的train接口,我们命名为build, 主要的目的是为了加速检索的速度。 - -#### Q1.6.2: PaddleClas 图像识别用于 Eval 的配置文件中,`Query` 和 `Gallery` 配置具体是用于做什么呢? -**A**: `Query` 与 `Gallery` 均为数据集配置,其中 `Gallery` 用于配置底库数据,`Query` 用于配置验证集。在进行 Eval 时,首先使用模型对 `Gallery` 底库数据进行前向计算特征向量,特征向量用于构建底库,然后模型对 `Query` 验证集中的数据进行前向计算特征向量,再与底库计算召回率等指标。 - - -## 2. 实战篇 - - -### 2.1 训练与评估共性问题 - -#### Q2.1.1 PaddleClas 的`train_log`文件在哪里? -**A**:在保存权重的路径中存放了`train.log`。 - -#### Q2.1.2 模型训练出nan,为什么? -**A**: -1.确保正确加载预训练模型, 最简单的加载方式添加参数`-o Arch.pretrained=True`即可; -2.模型微调时,学习率不要太大,如设置0.001就好。 - -#### Q2.1.3 可以对视频中每一帧画面进行逐帧预测吗? -**A**:可以,但目前PaddleClas并不支持视频输入。可以尝试修改一下PaddleClas代码,或者预先将视频逐帧转为图像存储,再使用PaddleClas进行预测。 - -#### Q2.1.4: 数据预处理中,不想对输入数据进行裁剪,该如何设置?或者如何设置剪裁的尺寸。 -**A**: PaddleClas 支持的数据预处理算子可在这里查看:`ppcls/data/preprocess/__init__.py`,所有支持的算子均可在配置文件中进行配置,配置的算子名称需要和算子类名一致,参数与对应算子类的构造函数参数一致。如不需要对图像裁剪,则可去掉 `CropImage`、`RandCropImage`,使用 `ResizeImage` 替换即可,可通过其参数设置不同的resize方式, 使用 `size` 参数则直接将图像缩放至固定大小,使用`resize_short` 参数则会维持图像宽高比进行缩放。设置裁剪尺寸时,可通过 `CropImage` 算子的 `size` 参数,或 `RandCropImage` 算子的 `size` 参数。 - -#### Q2.1.5: PaddlePaddle 安装后,使用报错,无法导入 paddle 下的任何模块(import paddle.xxx),是为什么呢? -**A**: 首先可以使用以下代码测试 Paddle 是否安装正确: -```python -import paddle -paddle.utils.install_check.run_check() -``` -正确安装时,通常会有如下提示: -``` -PaddlePaddle is installed successfully! Let's start deep learning with PaddlePaddle now. -``` -如未能安装成功,则会有相应问题的提示。 -另外,在同时安装CPU版本和GPU版本Paddle后,由于两个版本存在冲突,需要将两个版本全部卸载,然后重新安装所需要的版本。 - -#### Q2.1.6: 使用PaddleClas训练时,如何设置仅保存最优模型?不想保存中间模型。 -**A**: PaddleClas在训练过程中,会保存/更新以下三类模型: -1. 最新的模型(`latest.pdopt`, `latest.pdparams`,`latest.pdstates`),当训练意外中断时,可使用最新保存的模型恢复训练; -2. 最优的模型(`best_model.pdopt`,`best_model.pdparams`,`best_model.pdstates`); -3. 训练过程中,一个epoch结束时的断点(`epoch_xxx.pdopt`,`epoch_xxx.pdparams`,`epoch_xxx.pdstates`)。训练配置文件中 `Global.save_interval` 字段表示该模型的保存间隔。将该字段设置大于总epochs数,则不再保存中间断点模型。 - -#### Q2.1.7: 在训练时,出现如下报错信息:`ERROR: Unexpected segmentation fault encountered in DataLoader workers.`,如何排查解决问题呢? -**A**:尝试将训练配置文件中的字段 `num_workers` 设置为 `0`;尝试将训练配置文件中的字段 `batch_size` 调小一些;检查数据集格式和配置文件中的数据集路径是否正确。 - -#### Q2.1.8: 如何在训练时使用 `Mixup` 和 `Cutmix` ? -**A**: -* `Mixup` 的使用方法请参考 [Mixup](https://github.com/PaddlePaddle/PaddleClas/blob/cf9fc9363877f919996954a63716acfb959619d0/ppcls/configs/ImageNet/DataAugment/ResNet50_Mixup.yaml#L63-L65);`Cuxmix` 请参考 [Cuxmix](https://github.com/PaddlePaddle/PaddleClas/blob/cf9fc9363877f919996954a63716acfb959619d0/ppcls/configs/ImageNet/DataAugment/ResNet50_Cutmix.yaml#L63-L65)。 - -* 在使用 `Mixup` 或 `Cutmix` 时,需要注意: - * 配置文件中的 `Loss.Tranin.CELoss` 需要修改为 `Loss.Tranin.MixCELoss`,可参考 [MixCELoss](https://github.com/PaddlePaddle/PaddleClas/blob/cf9fc9363877f919996954a63716acfb959619d0/ppcls/configs/ImageNet/DataAugment/ResNet50_Cutmix.yaml#L23-L26); - * 使用 `Mixup` 或 `Cutmix` 做训练时无法计算训练的精度(Acc)指标,因此需要在配置文件中取消 `Metric.Train.TopkAcc` 字段,可参考 [Metric.Train.TopkAcc](https://github.com/PaddlePaddle/PaddleClas/blob/cf9fc9363877f919996954a63716acfb959619d0/ppcls/configs/ImageNet/DataAugment/ResNet50_Cutmix.yaml#L125-L128)。 - -#### Q2.1.9: 训练配置yaml文件中,字段 `Global.pretrain_model` 和 `Global.checkpoints` 分别用于配置什么呢? -**A**: -* 当需要 `fine-tune` 时,可以通过字段 `Global.pretrain_model` 配置预训练模型权重文件的路径,预训练模型权重文件后缀名通常为 `.pdparams`; -* 在训练过程中,训练程序会自动保存每个epoch结束时的断点信息,包括优化器信息 `.pdopt` 和模型权重信息 `.pdparams`。在训练过程意外中断等情况下,需要恢复训练时,可以通过字段 `Global.checkpoints` 配置训练过程中保存的断点信息文件,例如通过配置 `checkpoints: ./output/ResNet18/epoch_18` 即可恢复18epoch训练结束时的断点信息,PaddleClas将自动加载 `epoch_18.pdopt` 和 `epoch_18.pdparams`,从19epoch继续训练。 - - -### 2.2 图像分类 - -#### Q2.2.1 SSLD中,大模型在500M数据上预训练后蒸馏小模型,然后在1M数据上蒸馏finetune小模型? -**A**:步骤如下: -1. 基于facebook开源的`ResNeXt101-32x16d-wsl`模型 去蒸馏得到了`ResNet50-vd`模型; -2. 用这个`ResNet50-vd`,在500W数据集上去蒸馏`MobilNetV3`; -3. 考虑到500W的数据集的分布和100W的数据分布不完全一致,所以这块,在100W上的数据上又finetune了一下,精度有微弱的提升。 - -#### Q2.2.2 训练SwinTransformer,loss出现nan -**A**:训练SwinTransformer时,请使用版本大于等于 `2.1.1` 的 `Paddle`,并且加载我们提供的预训练模型,学习率也不宜过大。 - - -### 2.3 通用检测模块 - -#### Q2.3.1 为什么有一些图片检测出的结果就是原图? -**A**:主体检测模型会返回检测框,但事实上为了让后续的识别模型更加准确,在返回检测框的同时也返回了原图。后续会根据原图或者检测框与库中的图片的相似度排序,相似度最高的库中图片的标签即为被识别图片的标签。 - -#### Q2.3.2:在直播场景中,需要提供一个直播即时识别画面,能够在延迟几秒内找到特征目标物并用框圈起,这个可以实现吗? -**A**:要达到实时的检测效果,需要检测速度达到实时性的要求;PP-YOLO是Paddle团队提供的轻量级目标检测模型,检测速度和精度达到了很好的平衡,可以试试PP-YOLO来做检测. 关于PP-YOLO的使用,可以参照:[PaddleDetection](https://github.com/PaddlePaddle/PaddleDetection/blob/release/2.1/configs/ppyolo/README_cn.md)。 - -#### Q2.3.3: 对于未知的标签,加入gallery dataset可以用于后续的分类识别(无需训练),但是如果前面的检测模型对于未知的标签无法定位检测出来,是否还是要训练前面的检测模型? -**A**:如果检测模型在自己的数据集上表现不佳,需要在自己的检测数据集上再finetune下 - - -### 2.4 图像识别模块 - -#### Q2.4.1: 识别模块预测时报`Illegal instruction`错? -**A**:可能是编译生成的库文件与您的环境不兼容,导致程序报错,如果报错,推荐参考[向量检索教程](../../../deploy/vector_search/README.md)重新编译库文件。 - -#### Q2.4.2: 识别模型怎么在预训练模型的基础上进行微调训练? -**A**:识别模型的微调训练和分类模型的微调训练类似,识别模型可以加载商品的预训练模型,训练过程可以参考[识别模型训练](../tutorials/getting_started_retrieval.md),后续我们也会持续细化这块的文档。 - -#### Q2.4.3: 训练metric learning时,每个epoch中,无法跑完所有mini-batch,为什么? -**A**:在训练metric learning时,使用的Sampler是DistributedRandomIdentitySampler,该Sampler不会采样全部的图片,导致会让每一个epoch采样的数据不是所有的数据,所以无法跑完显示的mini-batch是正常现象。后续我们会优化下打印的信息,尽可能减少给大家带来的困惑。 - -#### Q2.4.4: 有些图片没有识别出结果,为什么? -**A**:在配置文件(如inference_product.yaml)中,`IndexProcess.score_thres`中会控制被识别的图片与库中的图片的余弦相似度的最小值。当余弦相似度小于该值时,不会打印结果。您可以根据自己的实际数据调整该值。 - - -### 2.5 检索模块 - -#### Q2.5.1: 添加图片后建索引报`assert text_num >= 2`错? -**A**:请确保data_file.txt中图片路径和图片名称中间的间隔为单个table,而不是空格。 - -#### Q2.5.2: 新增底库数据需要重新构建索引吗? -**A**:这一版需要重新构建索引,未来版本会支持只构建新增图片的索引。 - -#### Q2.5.3: Mac重新编译index.so时报错如下:clang: error: unsupported option '-fopenmp', 该如何处理? -**A**:该问题已经解决。可以参照[文档](../../../develop/deploy/vector_search/README.md)重新编译 index.so。 - -#### Q2.5.4: 在 build 检索底库时,参数 `pq_size` 应该如何设置? -**A**:`pq_size` 是PQ检索算法的参数。PQ检索算法可以简单理解为“分层”检索算法,`pq_size` 是每层的“容量”,因此该参数的设置会影响检索性能,不过,在底库总数据量不太大(小于10000张)的情况下,这个参数对性能的影响很小,因此对于大多数使用场景而言,在构建底库时无需修改该参数。关于PQ检索算法的更多内容,可以查看相关[论文](https://lear.inrialpes.fr/pubs/2011/JDS11/jegou_searching_with_quantization.pdf)。 - - -### 2.6 模型预测部署 - -#### Q2.6.1: hub serving方式启动某个模块,怎么添加该模块的参数呢? -**A**:具体可以参考[hub serving参数](../../../deploy/hubserving/clas/params.py)。 - -#### Q2.6.2: 导出inference模型进行预测部署,准确率异常,为什么呢? -**A**: 该问题通常是由于在导出时未能正确加载模型参数导致的,首先检查模型导出时的日志,是否存在类似下述内容: -``` -UserWarning: Skip loading for ***. *** is not found in the provided dict. -``` -如果存在,则说明模型权重未能加载成功,请进一步检查配置文件中的 `Global.pretrained_model` 字段,是否正确配置了模型权重文件的路径。模型权重文件后缀名通常为 `pdparams`,注意在配置该路径时无需填写文件后缀名。 - -#### Q2.6.3: 如何将模型转为 `ONNX` 格式? -**A**:Paddle支持两种转ONNX格式模型的方式,且依赖于 `paddle2onnx` 工具,首先需要安装 `paddle2onnx`: - -```shell -pip install paddle2onnx -``` - -* 从 inference model 转为 ONNX 格式模型: - - 以动态图导出的 `combined` 格式 inference model(包含 `.pdmodel` 和 `.pdiparams` 两个文件)为例,使用以下命令进行模型格式转换: - ```shell - paddle2onnx --model_dir ${model_path} --model_filename ${model_path}/inference.pdmodel --params_filename ${model_path}/inference.pdiparams --save_file ${save_path}/model.onnx --enable_onnx_checker True - ``` - 上述命令中: - * `model_dir`:该参数下需要包含 `.pdmodel` 和 `.pdiparams` 两个文件; - * `model_filename`:该参数用于指定参数 `model_dir` 下的 `.pdmodel` 文件路径; - * `params_filename`:该参数用于指定参数 `model_dir` 下的 `.pdiparams` 文件路径; - * `save_file`:该参数用于指定转换后的模型保存目录路径。 - - 关于静态图导出的非 `combined` 格式的 inference model(通常包含文件 `__model__` 和多个参数文件)转换模型格式,以及更多参数说明请参考 paddle2onnx 官方文档 [paddle2onnx](https://github.com/PaddlePaddle/Paddle2ONNX/blob/develop/README_zh.md#%E5%8F%82%E6%95%B0%E9%80%89%E9%A1%B9)。 - -* 直接从模型组网代码导出ONNX格式模型: - - 以动态图模型组网代码为例,模型类为继承于 `paddle.nn.Layer` 的子类,代码如下所示: - - ```python - import paddle - from paddle.static import InputSpec - - class SimpleNet(paddle.nn.Layer): - def __init__(self): - pass - def forward(self, x): - pass - - net = SimpleNet() - x_spec = InputSpec(shape=[None, 3, 224, 224], dtype='float32', name='x') - paddle.onnx.export(layer=net, path="./SimpleNet", input_spec=[x_spec]) - ``` - 其中: - * `InputSpec()` 函数用于描述模型输入的签名信息,包括输入数据的 `shape`、`type` 和 `name`(可省略); - * `paddle.onnx.export()` 函数需要指定模型组网对象 `net`,导出模型的保存路径 `save_path`,模型的输入数据描述 `input_spec`。 - - 需要注意,`paddlepaddle` 版本需大于 `2.0.0`。关于 `paddle.onnx.export()` 函数的更多参数说明请参考[paddle.onnx.export](https://www.paddlepaddle.org.cn/documentation/docs/zh/api/paddle/onnx/export_cn.html#export)。 diff --git a/docs/zh_CN_tmp/models/DLA.md b/docs/zh_CN_tmp/models/DLA.md deleted file mode 100644 index a2f7210e..00000000 --- a/docs/zh_CN_tmp/models/DLA.md +++ /dev/null @@ -1,21 +0,0 @@ -# DLA系列 - -## 概述 - -DLA (Deep Layer Aggregation)。 视觉识别需要丰富的表示形式,其范围从低到高,范围从小到大,分辨率从精细到粗糙。即使卷积网络中的要素深度很深,仅靠隔离层还是不够的:将这些表示法进行复合和聚合可改善对内容和位置的推断。尽管已合并了残差连接以组合各层,但是这些连接本身是“浅”的,并且只能通过简单的一步操作来融合。作者通过更深层的聚合来增强标准体系结构,以更好地融合各层的信息。Deep Layer Aggregation 结构迭代地和分层地合并了特征层次结构,以使网络具有更高的准确性和更少的参数。跨体系结构和任务的实验表明,与现有的分支和合并方案相比,Deep Layer Aggregation 可提高识别和分辨率。[论文地址](https://arxiv.org/abs/1707.06484)。 - - -## 精度、FLOPS和参数量 - -| Model | Params (M) | FLOPs (G) | Top-1 (%) | Top-5 (%) | -|:-----------------:|:----------:|:---------:|:---------:|:---------:| -| DLA34 | 15.8 | 3.1 | 76.03 | 92.98 | -| DLA46_c | 1.3 | 0.5 | 63.21 | 85.30 | -| DLA46x_c | 1.1 | 0.5 | 64.36 | 86.01 | -| DLA60 | 22.0 | 4.2 | 76.10 | 92.92 | -| DLA60x | 17.4 | 3.5 | 77.53 | 93.78 | -| DLA60x_c | 1.3 | 0.6 | 66.45 | 87.54 | -| DLA102 | 33.3 | 7.2 | 78.93 | 94.52 | -| DLA102x | 26.4 | 5.9 | 78.10 | 94.00 | -| DLA102x2 | 41.4 | 9.3 | 78.85 | 94.45 | -| DLA169 | 53.5 | 11.6 | 78.09 | 94.09 | \ No newline at end of file diff --git a/docs/zh_CN_tmp/models/DPN_DenseNet.md b/docs/zh_CN_tmp/models/DPN_DenseNet.md deleted file mode 100644 index 25f61476..00000000 --- a/docs/zh_CN_tmp/models/DPN_DenseNet.md +++ /dev/null @@ -1,69 +0,0 @@ -# DPN与DenseNet系列 - -## 概述 -DenseNet是2017年CVPR best paper提出的一种新的网络结构,该网络设计了一种新的跨层连接的block,即dense-block。相比ResNet中的bottleneck,dense-block设计了一个更激进的密集连接机制,即互相连接所有的层,每个层都会接受其前面所有层作为其额外的输入。DenseNet将所有的dense-block堆叠,组合成了一个密集连接型网络。密集的连接方式使得DenseNe更容易进行梯度的反向传播,使得网络更容易训练。 -DPN的全称是Dual Path Networks,即双通道网络。该网络是由DenseNet和ResNeXt结合的一个网络,其证明了DenseNet能从靠前的层级中提取到新的特征,而ResNeXt本质上是对之前层级中已提取特征的复用。作者进一步分析发现,ResNeXt对特征有高复用率,但冗余度低,DenseNet能创造新特征,但冗余度高。结合二者结构的优势,作者设计了DPN网络。最终DPN网络在同样FLOPS和参数量下,取得了比ResNeXt与DenseNet更好的结果。 - -该系列模型的FLOPS、参数量以及T4 GPU上的预测耗时如下图所示。 - -![](../../images/models/T4_benchmark/t4.fp32.bs4.DPN.flops.png) - -![](../../images/models/T4_benchmark/t4.fp32.bs4.DPN.params.png) - -![](../../images/models/T4_benchmark/t4.fp32.bs4.DPN.png) - -![](../../images/models/T4_benchmark/t4.fp16.bs4.DPN.png) - -目前PaddleClas开源的这两类模型的预训练模型一共有10个,其指标如上图所示,可以看到,在相同的FLOPS和参数量下,相比DenseNet,DPN拥有更高的精度。但是由于DPN有更多的分支,所以其推理速度要慢于DenseNet。由于DenseNet264的网络层数最深,所以该网络是DenseNet系列模型中参数量最大的网络,DenseNet161的网络的宽度最大,导致其是该系列中网络中计算量最大、精度最高的网络。从推理速度来看,计算量大且精度高的的DenseNet161比DenseNet264具有更快的速度,所以其比DenseNet264具有更大的优势。 - -对于DPN系列网络,模型的FLOPS和参数量越大,模型的精度越高。其中,由于DPN107的网络宽度最大,所以其是该系列网络中参数量与计算量最大的网络。 - -## 精度、FLOPS和参数量 - -| Models | Top1 | Top5 | Reference
top1 | Reference
top5 | FLOPS
(G) | Parameters
(M) | -|:--:|:--:|:--:|:--:|:--:|:--:|:--:| -| DenseNet121 | 0.757 | 0.926 | 0.750 | | 5.690 | 7.980 | -| DenseNet161 | 0.786 | 0.941 | 0.778 | | 15.490 | 28.680 | -| DenseNet169 | 0.768 | 0.933 | 0.764 | | 6.740 | 14.150 | -| DenseNet201 | 0.776 | 0.937 | 0.775 | | 8.610 | 20.010 | -| DenseNet264 | 0.780 | 0.939 | 0.779 | | 11.540 | 33.370 | -| DPN68 | 0.768 | 0.934 | 0.764 | 0.931 | 4.030 | 10.780 | -| DPN92 | 0.799 | 0.948 | 0.793 | 0.946 | 12.540 | 36.290 | -| DPN98 | 0.806 | 0.951 | 0.799 | 0.949 | 22.220 | 58.460 | -| DPN107 | 0.809 | 0.953 | 0.802 | 0.951 | 35.060 | 82.970 | -| DPN131 | 0.807 | 0.951 | 0.801 | 0.949 | 30.510 | 75.360 | - - - - -## 基于V100 GPU的预测速度 - -| Models | Crop Size | Resize Short Size | FP32
Batch Size=1
(ms) | -|-------------|-----------|-------------------|--------------------------| -| DenseNet121 | 224 | 256 | 4.371 | -| DenseNet161 | 224 | 256 | 8.863 | -| DenseNet169 | 224 | 256 | 6.391 | -| DenseNet201 | 224 | 256 | 8.173 | -| DenseNet264 | 224 | 256 | 11.942 | -| DPN68 | 224 | 256 | 11.805 | -| DPN92 | 224 | 256 | 17.840 | -| DPN98 | 224 | 256 | 21.057 | -| DPN107 | 224 | 256 | 28.685 | -| DPN131 | 224 | 256 | 28.083 | - - - -## 基于T4 GPU的预测速度 - -| Models | Crop Size | Resize Short Size | FP16
Batch Size=1
(ms) | FP16
Batch Size=4
(ms) | FP16
Batch Size=8
(ms) | FP32
Batch Size=1
(ms) | FP32
Batch Size=4
(ms) | FP32
Batch Size=8
(ms) | -|-------------|-----------|-------------------|------------------------------|------------------------------|------------------------------|------------------------------|------------------------------|------------------------------| -| DenseNet121 | 224 | 256 | 4.16436 | 7.2126 | 10.50221 | 4.40447 | 9.32623 | 15.25175 | -| DenseNet161 | 224 | 256 | 9.27249 | 14.25326 | 20.19849 | 10.39152 | 22.15555 | 35.78443 | -| DenseNet169 | 224 | 256 | 6.11395 | 10.28747 | 13.68717 | 6.43598 | 12.98832 | 20.41964 | -| DenseNet201 | 224 | 256 | 7.9617 | 13.4171 | 17.41949 | 8.20652 | 17.45838 | 27.06309 | -| DenseNet264 | 224 | 256 | 11.70074 | 19.69375 | 24.79545 | 12.14722 | 26.27707 | 40.01905 | -| DPN68 | 224 | 256 | 11.7827 | 13.12652 | 16.19213 | 11.64915 | 12.82807 | 18.57113 | -| DPN92 | 224 | 256 | 18.56026 | 20.35983 | 29.89544 | 18.15746 | 23.87545 | 38.68821 | -| DPN98 | 224 | 256 | 21.70508 | 24.7755 | 40.93595 | 21.18196 | 33.23925 | 62.77751 | -| DPN107 | 224 | 256 | 27.84462 | 34.83217 | 60.67903 | 27.62046 | 52.65353 | 100.11721 | -| DPN131 | 224 | 256 | 28.58941 | 33.01078 | 55.65146 | 28.33119 | 46.19439 | 89.24904 | diff --git a/docs/zh_CN_tmp/models/EfficientNet_and_ResNeXt101_wsl.md b/docs/zh_CN_tmp/models/EfficientNet_and_ResNeXt101_wsl.md deleted file mode 100644 index 3cbe4009..00000000 --- a/docs/zh_CN_tmp/models/EfficientNet_and_ResNeXt101_wsl.md +++ /dev/null @@ -1,79 +0,0 @@ -# EfficientNet与ResNeXt101_wsl系列 - -## 概述 -EfficientNet是Google于2019年发布的一个基于NAS的轻量级网络,其中EfficientNetB7刷新了当时ImageNet-1k的分类准确率。在该文章中,作者指出,传统的提升神经网络性能的方法主要是从网络的宽度、网络的深度、以及输入图片的分辨率入手,但是作者通过实验发现,平衡这三个维度对精度和效率的提升至关重要,于是,作者通过一系列的实验中总结出了如何同时平衡这三个维度的放缩,与此同时,基于这种放缩方法,作者在EfficientNet_B0的基础上,构建了EfficientNet系列中B1-B7共7个网络,并在同样FLOPS与参数量的情况下,精度达到了state-of-the-art的效果。 - -ResNeXt是facebook于2016年提出的一种对ResNet的改进版网络。在2019年,facebook通过弱监督学习研究了该系列网络在ImageNet上的精度上限,为了区别之前的ResNeXt网络,该系列网络的后缀为wsl,其中wsl是弱监督学习(weakly-supervised-learning)的简称。为了能有更强的特征提取能力,研究者将其网络宽度进一步放大,其中最大的ResNeXt101_32x48d_wsl拥有8亿个参数,将其在9.4亿的弱标签图片下训练并在ImageNet-1k上做finetune,最终在ImageNet-1k的top-1达到了85.4%,这也是迄今为止在ImageNet-1k的数据集上以224x224的分辨率下精度最高的网络。Fix-ResNeXt中,作者使用了更大的图像分辨率,针对训练图片和验证图片数据预处理不一致的情况下做了专门的Fix策略,并使得ResNeXt101_32x48d_wsl拥有了更高的精度,由于其用到了Fix策略,故命名为Fix-ResNeXt101_32x48d_wsl。 - - -该系列模型的FLOPS、参数量以及T4 GPU上的预测耗时如下图所示。 - -![](../../images/models/T4_benchmark/t4.fp32.bs4.EfficientNet.flops.png) - -![](../../images/models/T4_benchmark/t4.fp32.bs4.EfficientNet.params.png) - -![](../../images/models/T4_benchmark/t4.fp32.bs1.EfficientNet.png) - -![](../../images/models/T4_benchmark/t4.fp16.bs1.EfficientNet.png) - -目前PaddleClas开源的这两类模型的预训练模型一共有14个。从上图中可以看出EfficientNet系列网络优势非常明显,ResNeXt101_wsl系列模型由于用到了更多的数据,最终的精度也更高。EfficientNet_B0_Small是去掉了SE_block的EfficientNet_B0,其具有更快的推理速度。 - -## 精度、FLOPS和参数量 - -| Models | Top1 | Top5 | Reference
top1 | Reference
top5 | FLOPS
(G) | Parameters
(M) | -|:--:|:--:|:--:|:--:|:--:|:--:|:--:| -| ResNeXt101_
32x8d_wsl | 0.826 | 0.967 | 0.822 | 0.964 | 29.140 | 78.440 | -| ResNeXt101_
32x16d_wsl | 0.842 | 0.973 | 0.842 | 0.972 | 57.550 | 152.660 | -| ResNeXt101_
32x32d_wsl | 0.850 | 0.976 | 0.851 | 0.975 | 115.170 | 303.110 | -| ResNeXt101_
32x48d_wsl | 0.854 | 0.977 | 0.854 | 0.976 | 173.580 | 456.200 | -| Fix_ResNeXt101_
32x48d_wsl | 0.863 | 0.980 | 0.864 | 0.980 | 354.230 | 456.200 | -| EfficientNetB0 | 0.774 | 0.933 | 0.773 | 0.935 | 0.720 | 5.100 | -| EfficientNetB1 | 0.792 | 0.944 | 0.792 | 0.945 | 1.270 | 7.520 | -| EfficientNetB2 | 0.799 | 0.947 | 0.803 | 0.950 | 1.850 | 8.810 | -| EfficientNetB3 | 0.812 | 0.954 | 0.817 | 0.956 | 3.430 | 11.840 | -| EfficientNetB4 | 0.829 | 0.962 | 0.830 | 0.963 | 8.290 | 18.760 | -| EfficientNetB5 | 0.836 | 0.967 | 0.837 | 0.967 | 19.510 | 29.610 | -| EfficientNetB6 | 0.840 | 0.969 | 0.842 | 0.968 | 36.270 | 42.000 | -| EfficientNetB7 | 0.843 | 0.969 | 0.844 | 0.971 | 72.350 | 64.920 | -| EfficientNetB0_
small | 0.758 | 0.926 | | | 0.720 | 4.650 | - - -## 基于V100 GPU的预测速度 - -| Models | Crop Size | Resize Short Size | FP32
Batch Size=1
(ms) | -|-------------------------------|-----------|-------------------|--------------------------| -| ResNeXt101_
32x8d_wsl | 224 | 256 | 19.127 | -| ResNeXt101_
32x16d_wsl | 224 | 256 | 23.629 | -| ResNeXt101_
32x32d_wsl | 224 | 256 | 40.214 | -| ResNeXt101_
32x48d_wsl | 224 | 256 | 59.714 | -| Fix_ResNeXt101_
32x48d_wsl | 320 | 320 | 82.431 | -| EfficientNetB0 | 224 | 256 | 2.449 | -| EfficientNetB1 | 240 | 272 | 3.547 | -| EfficientNetB2 | 260 | 292 | 3.908 | -| EfficientNetB3 | 300 | 332 | 5.145 | -| EfficientNetB4 | 380 | 412 | 7.609 | -| EfficientNetB5 | 456 | 488 | 12.078 | -| EfficientNetB6 | 528 | 560 | 18.381 | -| EfficientNetB7 | 600 | 632 | 27.817 | -| EfficientNetB0_
small | 224 | 256 | 1.692 | - - - -## 基于T4 GPU的预测速度 - -| Models | Crop Size | Resize Short Size | FP16
Batch Size=1
(ms) | FP16
Batch Size=4
(ms) | FP16
Batch Size=8
(ms) | FP32
Batch Size=1
(ms) | FP32
Batch Size=4
(ms) | FP32
Batch Size=8
(ms) | -|---------------------------|-----------|-------------------|------------------------------|------------------------------|------------------------------|------------------------------|------------------------------|------------------------------| -| ResNeXt101_
32x8d_wsl | 224 | 256 | 18.19374 | 21.93529 | 34.67802 | 18.52528 | 34.25319 | 67.2283 | -| ResNeXt101_
32x16d_wsl | 224 | 256 | 18.52609 | 36.8288 | 62.79947 | 25.60395 | 71.88384 | 137.62327 | -| ResNeXt101_
32x32d_wsl | 224 | 256 | 33.51391 | 70.09682 | 125.81884 | 54.87396 | 160.04337 | 316.17718 | -| ResNeXt101_
32x48d_wsl | 224 | 256 | 50.97681 | 137.60926 | 190.82628 | 99.01698256 | 315.91261 | 551.83695 | -| Fix_ResNeXt101_
32x48d_wsl | 320 | 320 | 78.62869 | 191.76039 | 317.15436 | 160.0838242 | 595.99296 | 1151.47384 | -| EfficientNetB0 | 224 | 256 | 3.40122 | 5.95851 | 9.10801 | 3.442 | 6.11476 | 9.3304 | -| EfficientNetB1 | 240 | 272 | 5.25172 | 9.10233 | 14.11319 | 5.3322 | 9.41795 | 14.60388 | -| EfficientNetB2 | 260 | 292 | 5.91052 | 10.5898 | 17.38106 | 6.29351 | 10.95702 | 17.75308 | -| EfficientNetB3 | 300 | 332 | 7.69582 | 16.02548 | 27.4447 | 7.67749 | 16.53288 | 28.5939 | -| EfficientNetB4 | 380 | 412 | 11.55585 | 29.44261 | 53.97363 | 12.15894 | 30.94567 | 57.38511 | -| EfficientNetB5 | 456 | 488 | 19.63083 | 56.52299 | - | 20.48571 | 61.60252 | - | -| EfficientNetB6 | 528 | 560 | 30.05911 | - | - | 32.62402 | - | - | -| EfficientNetB7 | 600 | 632 | 47.86087 | - | - | 53.93823 | - | - | -| EfficientNetB0_small | 224 | 256 | 2.39166 | 4.36748 | 6.96002 | 2.3076 | 4.71886 | 7.21888 | diff --git a/docs/zh_CN_tmp/models/HRNet.md b/docs/zh_CN_tmp/models/HRNet.md deleted file mode 100644 index 6417f318..00000000 --- a/docs/zh_CN_tmp/models/HRNet.md +++ /dev/null @@ -1,64 +0,0 @@ -# HRNet系列 - -## 概述 -HRNet是2019年由微软亚洲研究院提出的一种全新的神经网络,不同于以往的卷积神经网络,该网络在网络深层仍然可以保持高分辨率,因此预测的关键点热图更准确,在空间上也更精确。此外,该网络在对分辨率敏感的其他视觉任务中,如检测、分割等,表现尤为优异。 - -该系列模型的FLOPS、参数量以及T4 GPU上的预测耗时如下图所示。 - -![](../../images/models/T4_benchmark/t4.fp32.bs4.HRNet.flops.png) - -![](../../images/models/T4_benchmark/t4.fp32.bs4.HRNet.params.png) - -![](../../images/models/T4_benchmark/t4.fp32.bs4.HRNet.png) - -![](../../images/models/T4_benchmark/t4.fp16.bs4.HRNet.png) - -目前PaddleClas开源的这类模型的预训练模型一共有7个,其指标如图所示,其中HRNet_W48_C指标精度异常的原因可能是因为网络训练的正常波动。 - - -## 精度、FLOPS和参数量 - -| Models | Top1 | Top5 | Reference
top1 | Reference
top5 | FLOPS
(G) | Parameters
(M) | -|:--:|:--:|:--:|:--:|:--:|:--:|:--:| -| HRNet_W18_C | 0.769 | 0.934 | 0.768 | 0.934 | 4.140 | 21.290 | -| HRNet_W18_C_ssld | 0.816 | 0.958 | 0.768 | 0.934 | 4.140 | 21.290 | -| HRNet_W30_C | 0.780 | 0.940 | 0.782 | 0.942 | 16.230 | 37.710 | -| HRNet_W32_C | 0.783 | 0.942 | 0.785 | 0.942 | 17.860 | 41.230 | -| HRNet_W40_C | 0.788 | 0.945 | 0.789 | 0.945 | 25.410 | 57.550 | -| HRNet_W44_C | 0.790 | 0.945 | 0.789 | 0.944 | 29.790 | 67.060 | -| HRNet_W48_C | 0.790 | 0.944 | 0.793 | 0.945 | 34.580 | 77.470 | -| HRNet_W48_C_ssld | 0.836 | 0.968 | 0.793 | 0.945 | 34.580 | 77.470 | -| HRNet_W64_C | 0.793 | 0.946 | 0.795 | 0.946 | 57.830 | 128.060 | -| SE_HRNet_W64_C_ssld | 0.847 | 0.973 | | | 57.830 | 128.970 | - - -## 基于V100 GPU的预测速度 - -| Models | Crop Size | Resize Short Size | FP32
Batch Size=1
(ms) | -|-------------|-----------|-------------------|--------------------------| -| HRNet_W18_C | 224 | 256 | 7.368 | -| HRNet_W18_C_ssld | 224 | 256 | 7.368 | -| HRNet_W30_C | 224 | 256 | 9.402 | -| HRNet_W32_C | 224 | 256 | 9.467 | -| HRNet_W40_C | 224 | 256 | 10.739 | -| HRNet_W44_C | 224 | 256 | 11.497 | -| HRNet_W48_C | 224 | 256 | 12.165 | -| HRNet_W48_C_ssld | 224 | 256 | 12.165 | -| HRNet_W64_C | 224 | 256 | 15.003 | - - - -## 基于T4 GPU的预测速度 - -| Models | Crop Size | Resize Short Size | FP16
Batch Size=1
(ms) | FP16
Batch Size=4
(ms) | FP16
Batch Size=8
(ms) | FP32
Batch Size=1
(ms) | FP32
Batch Size=4
(ms) | FP32
Batch Size=8
(ms) | -|-------------|-----------|-------------------|------------------------------|------------------------------|------------------------------|------------------------------|------------------------------|------------------------------| -| HRNet_W18_C | 224 | 256 | 6.79093 | 11.50986 | 17.67244 | 7.40636 | 13.29752 | 23.33445 | -| HRNet_W18_C_ssld | 224 | 256 | 6.79093 | 11.50986 | 17.67244 | 7.40636 | 13.29752 | 23.33445 | -| HRNet_W30_C | 224 | 256 | 8.98077 | 14.08082 | 21.23527 | 9.57594 | 17.35485 | 32.6933 | -| HRNet_W32_C | 224 | 256 | 8.82415 | 14.21462 | 21.19804 | 9.49807 | 17.72921 | 32.96305 | -| HRNet_W40_C | 224 | 256 | 11.4229 | 19.1595 | 30.47984 | 12.12202 | 25.68184 | 48.90623 | -| HRNet_W44_C | 224 | 256 | 12.25778 | 22.75456 | 32.61275 | 13.19858 | 32.25202 | 59.09871 | -| HRNet_W48_C | 224 | 256 | 12.65015 | 23.12886 | 33.37859 | 13.70761 | 34.43572 | 63.01219 | -| HRNet_W48_C_ssld | 224 | 256 | 12.65015 | 23.12886 | 33.37859 | 13.70761 | 34.43572 | 63.01219 | -| HRNet_W64_C | 224 | 256 | 15.10428 | 27.68901 | 40.4198 | 17.57527 | 47.9533 | 97.11228 | -| SE_HRNet_W64_C_ssld | 224 | 256 | 32.33651 | 69.31189 | 116.07245 | 31.69770 | 94.99546 | 174.45766 | diff --git a/docs/zh_CN_tmp/models/HarDNet.md b/docs/zh_CN_tmp/models/HarDNet.md deleted file mode 100644 index 5cb1d514..00000000 --- a/docs/zh_CN_tmp/models/HarDNet.md +++ /dev/null @@ -1,14 +0,0 @@ -# HarDNet系列 - -## 概述 - -HarDNet(Harmonic DenseNet)是 2019 年由国立清华大学提出的一种全新的神经网络,在低 MAC 和内存流量的条件下实现了高效率。与 FC-DenseNet-103,DenseNet-264,ResNet-50,ResNet-152 和SSD-VGG 相比,新网络的推理时间减少了 35%,36%,30%,32% 和 45%。我们使用了包括Nvidia Profiler 和 ARM Scale-Sim 在内的工具来测量内存流量,并验证推理延迟确实与内存流量消耗成正比,并且所提议的网络消耗的内存流量很低。[论文地址](https://arxiv.org/abs/1909.00948)。 - -## 精度、FLOPS和参数量 - -| Model | Params (M) | FLOPs (G) | Top-1 (%) | Top-5 (%) | -|:---------------------:|:----------:|:---------:|:---------:|:---------:| -| HarDNet68 | 17.6 | 4.3 | 75.46 | 92.65 | -| HarDNet85 | 36.7 | 9.1 | 77.44 | 93.55 | -| HarDNet39_ds | 3.5 | 0.4 | 71.33 | 89.98 | -| HarDNet68_ds | 4.2 | 0.8 | 73.62 | 91.52 | diff --git a/docs/zh_CN_tmp/models/Inception.md b/docs/zh_CN_tmp/models/Inception.md deleted file mode 100644 index e8118526..00000000 --- a/docs/zh_CN_tmp/models/Inception.md +++ /dev/null @@ -1,68 +0,0 @@ -# Inception系列 - -## 概述 - -GoogLeNet是2014年由Google设计的一种新的神经网络结构,其与VGG网络并列成为当年ImageNet挑战赛的双雄。GoogLeNet首次引入Inception结构,在网络中堆叠该结构使得网络层数达到了22层,这也是卷积网络首次超过20层的标志。由于在Inception结构中使用了1x1的卷积用于通道数降维,并且使用了Global-pooling代替传统的多fc层加工特征的方式,最终的GoogLeNet网络的FLOPS和参数量远小于VGG网络,成为当时神经网络设计的一道亮丽风景线。 - -InceptionV3是Google 对InceptionV2的一种改进。首先,InceptionV3 对 Inception模块进行了优化,同时设计和使用了更多种类的Inception模块,与此同时,InceptionV3中的部分Inception模块将较大的方形二维卷积拆成两个较小的非对称卷积,这样可以大幅度节省参数量。 - -Xception 是 Google 继 Inception 后提出的对 InceptionV3 的另一种改进。在Xception中,作者使用了深度可分离卷积代替了传统的卷积操作,该操作大大节省了网络的FLOPS和参数量,但是精度反而有所提升。在DeeplabV3+中,作者将Xception做了进一步的改进,同时增加了Xception的层数,设计出了Xception65和Xception71的网络。 - -InceptionV4是2016年由Google设计的新的神经网络,当时残差结构风靡一时,但是作者认为仅使用Inception 结构也可以达到很高的性能。InceptionV4使用了更多的Inception module,在ImageNet上的精度再创新高。 - - -该系列模型的FLOPS、参数量以及T4 GPU上的预测耗时如下图所示。 - -![](../../images/models/T4_benchmark/t4.fp32.bs4.Inception.flops.png) - -![](../../images/models/T4_benchmark/t4.fp32.bs4.Inception.params.png) - -![](../../images/models/T4_benchmark/t4.fp32.bs4.Inception.png) - -![](../../images/models/T4_benchmark/t4.fp16.bs4.Inception.png) - -上图反映了Xception系列和InceptionV4的精度和其他指标的关系。其中Xception_deeplab与论文结构保持一致,Xception是PaddleClas的改进模型,在预测速度基本不变的情况下,精度提升约0.6%。关于该改进模型的详细介绍正在持续更新中,敬请期待。 - - - -## 精度、FLOPS和参数量 - -| Models | Top1 | Top5 | Reference
top1 | Reference
top5 | FLOPS
(G) | Parameters
(M) | -|:--:|:--:|:--:|:--:|:--:|:--:|:--:| -| GoogLeNet | 0.707 | 0.897 | 0.698 | | 2.880 | 8.460 | -| Xception41 | 0.793 | 0.945 | 0.790 | 0.945 | 16.740 | 22.690 | -| Xception41
_deeplab | 0.796 | 0.944 | | | 18.160 | 26.730 | -| Xception65 | 0.810 | 0.955 | | | 25.950 | 35.480 | -| Xception65
_deeplab | 0.803 | 0.945 | | | 27.370 | 39.520 | -| Xception71 | 0.811 | 0.955 | | | 31.770 | 37.280 | -| InceptionV3 | 0.791 | 0.946 | 0.788 | 0.944 | 11.460 | 23.830 | -| InceptionV4 | 0.808 | 0.953 | 0.800 | 0.950 | 24.570 | 42.680 | - - - -## 基于V100 GPU的预测速度 - -| Models | Crop Size | Resize Short Size | FP32
Batch Size=1
(ms) | -|------------------------|-----------|-------------------|--------------------------| -| GoogLeNet | 224 | 256 | 1.807 | -| Xception41 | 299 | 320 | 3.972 | -| Xception41_
deeplab | 299 | 320 | 4.408 | -| Xception65 | 299 | 320 | 6.174 | -| Xception65_
deeplab | 299 | 320 | 6.464 | -| Xception71 | 299 | 320 | 6.782 | -| InceptionV4 | 299 | 320 | 11.141 | - - - -## 基于T4 GPU的预测速度 - -| Models | Crop Size | Resize Short Size | FP16
Batch Size=1
(ms) | FP16
Batch Size=4
(ms) | FP16
Batch Size=8
(ms) | FP32
Batch Size=1
(ms) | FP32
Batch Size=4
(ms) | FP32
Batch Size=8
(ms) | -|--------------------|-----------|-------------------|------------------------------|------------------------------|------------------------------|------------------------------|------------------------------|------------------------------| -| GoogLeNet | 299 | 320 | 1.75451 | 3.39931 | 4.71909 | 1.88038 | 4.48882 | 6.94035 | -| Xception41 | 299 | 320 | 2.91192 | 7.86878 | 15.53685 | 4.96939 | 17.01361 | 32.67831 | -| Xception41_
deeplab | 299 | 320 | 2.85934 | 7.2075 | 14.01406 | 5.33541 | 17.55938 | 33.76232 | -| Xception65 | 299 | 320 | 4.30126 | 11.58371 | 23.22213 | 7.26158 | 25.88778 | 53.45426 | -| Xception65_
deeplab | 299 | 320 | 4.06803 | 9.72694 | 19.477 | 7.60208 | 26.03699 | 54.74724 | -| Xception71 | 299 | 320 | 4.80889 | 13.5624 | 27.18822 | 8.72457 | 31.55549 | 69.31018 | -| InceptionV3 | 299 | 320 | 3.67502 | 6.36071 | 9.82645 | 6.64054 | 13.53630 | 22.17355 | -| InceptionV4 | 299 | 320 | 9.50821 | 13.72104 | 20.27447 | 12.99342 | 25.23416 | 43.56121 | diff --git a/docs/zh_CN_tmp/models/LeViT.md b/docs/zh_CN_tmp/models/LeViT.md deleted file mode 100644 index 19cdf289..00000000 --- a/docs/zh_CN_tmp/models/LeViT.md +++ /dev/null @@ -1,17 +0,0 @@ -# LeViT - -## 概述 -LeViT是一种快速推理的、用于图像分类任务的混合神经网络。其设计之初考虑了网络模型在不同的硬件平台上的性能,因此能够更好地反映普遍应用的真实场景。通过大量实验,作者找到了卷积神经网络与Transformer体系更好的结合方式,并且提出了attention-based方法,用于整合Transformer中的位置信息编码。[论文地址](https://arxiv.org/abs/2104.01136)。 - -## 精度、FLOPS和参数量 - -| Models | Top1 | Top5 | Reference
top1 | Reference
top5 | FLOPS
(M) | Params
(M) | -|:--:|:--:|:--:|:--:|:--:|:--:|:--:| -| LeViT-128S | 0.7598 | 0.9269 | 0.766 | 0.929 | 305 | 7.8 | -| LeViT-128 | 0.7810 | 0.9371 | 0.786 | 0.940 | 406 | 9.2 | -| LeViT-192 | 0.7934 | 0.9446 | 0.800 | 0.947 | 658 | 11 | -| LeViT-256 | 0.8085 | 0.9497 | 0.816 | 0.954 | 1120 | 19 | -| LeViT-384 | 0.8191 | 0.9551 | 0.826 | 0.960 | 2353 | 39 | - - -**注**:与Reference的精度差异源于数据预处理不同及未使用蒸馏的head作为输出。 diff --git a/docs/zh_CN_tmp/models/MixNet.md b/docs/zh_CN_tmp/models/MixNet.md deleted file mode 100644 index 60fbb937..00000000 --- a/docs/zh_CN_tmp/models/MixNet.md +++ /dev/null @@ -1,21 +0,0 @@ -# MixNet系列 - -## 概述 - -MixNet是谷歌出的一篇关于轻量级网络的文章,主要工作就在于探索不同大小的卷积核的组合。作者发现目前网络有以下两个问题: - -- 小的卷积核感受野小,参数少,但是准确率不高 -- 大的卷积核感受野大,准确率相对略高,但是参数也相对增加了很多 - -为了解决上面两个问题,文中提出一种新的混合深度分离卷积(MDConv)(mixed depthwise convolution),将不同的核大小混合在一个卷积运算中,并且基于AutoML的搜索空间,提出了一系列的网络叫做MixNets,在ImageNet上取得了较好的效果。[论文地址](https://arxiv.org/pdf/1907.09595.pdf) - - -## 精度、FLOPS和参数量 - -| Models | Top1 | Top5 | Reference
top1| FLOPS
(M) | Params
(M) | -|:--:|:--:|:--:|:--:|:--:|----| -| MixNet_S | 76.28 | 92.99 | 75.8 | 252.977 | 4.167 | -| MixNet_M | 77.67 | 93.64 | 77.0 | 357.119 | 5.065 | -| MixNet_L | 78.60 | 94.37 | 78.9 | 579.017 | 7.384 | - -关于Inference speed等信息,敬请期待。 diff --git a/docs/zh_CN_tmp/models/Mobile.md b/docs/zh_CN_tmp/models/Mobile.md deleted file mode 100644 index 1df0005e..00000000 --- a/docs/zh_CN_tmp/models/Mobile.md +++ /dev/null @@ -1,150 +0,0 @@ -# 移动端系列 - -## 概述 -MobileNetV1是Google于2017年发布的用于移动设备或嵌入式设备中的网络。该网络将传统的卷积操作替换深度可分离卷积,即Depthwise卷积和Pointwise卷积的组合,相比传统的卷积操作,该组合可以大大节省参数量和计算量。与此同时,MobileNetV1也可以用于目标检测、图像分割等其他视觉任务中。 - -MobileNetV2是Google继MobileNetV1提出的一种轻量级网络。相比MobileNetV1,MobileNetV2提出了Linear bottlenecks与Inverted residual block作为网络基本结构,通过大量地堆叠这些基本模块,构成了MobileNetV2的网络结构。最终,在FLOPS只有MobileNetV1的一半的情况下取得了更高的分类精度。 - -ShuffleNet系列网络是旷视提出的轻量化网络结构,到目前为止,该系列网络一共有两种典型的结构,即ShuffleNetV1与ShuffleNetV2。ShuffleNet中的Channel Shuffle操作可以将组间的信息进行交换,并且可以实现端到端的训练。在ShuffleNetV2的论文中,作者提出了设计轻量级网络的四大准则,并且根据四大准则与ShuffleNetV1的不足,设计了ShuffleNetV2网络。 - -MobileNetV3是Google于2019年提出的一种基于NAS的新的轻量级网络,为了进一步提升效果,将relu和sigmoid激活函数分别替换为hard_swish与hard_sigmoid激活函数,同时引入了一些专门减小网络计算量的改进策略。 - -GhostNet是华为于2020年提出的一种全新的轻量化网络结构,通过引入ghost module,大大减缓了传统深度网络中特征的冗余计算问题,使得网络的参数量和计算量大大降低。 - -![](../../images/models/mobile_arm_top1.png) - -![](../../images/models/mobile_arm_storage.png) - -![](../../images/models/T4_benchmark/t4.fp32.bs4.mobile_trt.flops.png) - -![](../../images/models/T4_benchmark/t4.fp32.bs4.mobile_trt.params.png) - - -目前PaddleClas开源的的移动端系列的预训练模型一共有35个,其指标如图所示。从图片可以看出,越新的轻量级模型往往有更优的表现,MobileNetV3代表了目前主流的轻量级神经网络结构。在MobileNetV3中,作者为了获得更高的精度,在global-avg-pooling后使用了1x1的卷积。该操作大幅提升了参数量但对计算量影响不大,所以如果从存储角度评价模型的优异程度,MobileNetV3优势不是很大,但由于其更小的计算量,使得其有更快的推理速度。此外,我们模型库中的ssld蒸馏模型表现优异,从各个考量角度下,都刷新了当前轻量级模型的精度。由于MobileNetV3模型结构复杂,分支较多,对GPU并不友好,GPU预测速度不如MobileNetV1。GhostNet于2020年提出,通过引入ghost的网络设计理念,大大降低了计算量和参数量,同时在精度上也超过前期最高的MobileNetV3网络结构。 - - -## 精度、FLOPS和参数量 - -| Models | Top1 | Top5 | Reference
top1 | Reference
top5 | FLOPS
(G) | Parameters
(M) | -|:--:|:--:|:--:|:--:|:--:|:--:|:--:| -| MobileNetV1_x0_25 | 0.514 | 0.755 | 0.506 | | 0.070 | 0.460 | -| MobileNetV1_x0_5 | 0.635 | 0.847 | 0.637 | | 0.280 | 1.310 | -| MobileNetV1_x0_75 | 0.688 | 0.882 | 0.684 | | 0.630 | 2.550 | -| MobileNetV1 | 0.710 | 0.897 | 0.706 | | 1.110 | 4.190 | -| MobileNetV1_ssld | 0.779 | 0.939 | | | 1.110 | 4.190 | -| MobileNetV2_x0_25 | 0.532 | 0.765 | | | 0.050 | 1.500 | -| MobileNetV2_x0_5 | 0.650 | 0.857 | 0.654 | 0.864 | 0.170 | 1.930 | -| MobileNetV2_x0_75 | 0.698 | 0.890 | 0.698 | 0.896 | 0.350 | 2.580 | -| MobileNetV2 | 0.722 | 0.907 | 0.718 | 0.910 | 0.600 | 3.440 | -| MobileNetV2_x1_5 | 0.741 | 0.917 | | | 1.320 | 6.760 | -| MobileNetV2_x2_0 | 0.752 | 0.926 | | | 2.320 | 11.130 | -| MobileNetV2_ssld | 0.7674 | 0.9339 | | | 0.600 | 3.440 | -| MobileNetV3_large_
x1_25 | 0.764 | 0.930 | 0.766 | | 0.714 | 7.440 | -| MobileNetV3_large_
x1_0 | 0.753 | 0.923 | 0.752 | | 0.450 | 5.470 | -| MobileNetV3_large_
x0_75 | 0.731 | 0.911 | 0.733 | | 0.296 | 3.910 | -| MobileNetV3_large_
x0_5 | 0.692 | 0.885 | 0.688 | | 0.138 | 2.670 | -| MobileNetV3_large_
x0_35 | 0.643 | 0.855 | 0.642 | | 0.077 | 2.100 | -| MobileNetV3_small_
x1_25 | 0.707 | 0.895 | 0.704 | | 0.195 | 3.620 | -| MobileNetV3_small_
x1_0 | 0.682 | 0.881 | 0.675 | | 0.123 | 2.940 | -| MobileNetV3_small_
x0_75 | 0.660 | 0.863 | 0.654 | | 0.088 | 2.370 | -| MobileNetV3_small_
x0_5 | 0.592 | 0.815 | 0.580 | | 0.043 | 1.900 | -| MobileNetV3_small_
x0_35 | 0.530 | 0.764 | 0.498 | | 0.026 | 1.660 | -| MobileNetV3_small_
x0_35_ssld | 0.556 | 0.777 | 0.498 | | 0.026 | 1.660 | -| MobileNetV3_large_
x1_0_ssld | 0.790 | 0.945 | | | 0.450 | 5.470 | -| MobileNetV3_large_
x1_0_ssld_int8 | 0.761 | | | | | | -| MobileNetV3_small_
x1_0_ssld | 0.713 | 0.901 | | | 0.123 | 2.940 | -| ShuffleNetV2 | 0.688 | 0.885 | 0.694 | | 0.280 | 2.260 | -| ShuffleNetV2_x0_25 | 0.499 | 0.738 | | | 0.030 | 0.600 | -| ShuffleNetV2_x0_33 | 0.537 | 0.771 | | | 0.040 | 0.640 | -| ShuffleNetV2_x0_5 | 0.603 | 0.823 | 0.603 | | 0.080 | 1.360 | -| ShuffleNetV2_x1_5 | 0.716 | 0.902 | 0.726 | | 0.580 | 3.470 | -| ShuffleNetV2_x2_0 | 0.732 | 0.912 | 0.749 | | 1.120 | 7.320 | -| ShuffleNetV2_swish | 0.700 | 0.892 | | | 0.290 | 2.260 | -| GhostNet_x0_5 | 0.668 | 0.869 | 0.662 | 0.866 | 0.082 | 2.600 | -| GhostNet_x1_0 | 0.740 | 0.916 | 0.739 | 0.914 | 0.294 | 5.200 | -| GhostNet_x1_3 | 0.757 | 0.925 | 0.757 | 0.927 | 0.440 | 7.300 | -| GhostNet_x1_3_ssld | 0.794 | 0.945 | 0.757 | 0.927 | 0.440 | 7.300 | - - -## 基于SD855的预测速度和存储大小 - -| Models | Batch Size=1(ms) | Storage Size(M) | -|:--:|:--:|:--:| -| MobileNetV1_x0_25 | 3.220 | 1.900 | -| MobileNetV1_x0_5 | 9.580 | 5.200 | -| MobileNetV1_x0_75 | 19.436 | 10.000 | -| MobileNetV1 | 32.523 | 16.000 | -| MobileNetV1_ssld | 32.523 | 16.000 | -| MobileNetV2_x0_25 | 3.799 | 6.100 | -| MobileNetV2_x0_5 | 8.702 | 7.800 | -| MobileNetV2_x0_75 | 15.531 | 10.000 | -| MobileNetV2 | 23.318 | 14.000 | -| MobileNetV2_x1_5 | 45.624 | 26.000 | -| MobileNetV2_x2_0 | 74.292 | 43.000 | -| MobileNetV2_ssld | 23.318 | 14.000 | -| MobileNetV3_large_x1_25 | 28.218 | 29.000 | -| MobileNetV3_large_x1_0 | 19.308 | 21.000 | -| MobileNetV3_large_x0_75 | 13.565 | 16.000 | -| MobileNetV3_large_x0_5 | 7.493 | 11.000 | -| MobileNetV3_large_x0_35 | 5.137 | 8.600 | -| MobileNetV3_small_x1_25 | 9.275 | 14.000 | -| MobileNetV3_small_x1_0 | 6.546 | 12.000 | -| MobileNetV3_small_x0_75 | 5.284 | 9.600 | -| MobileNetV3_small_x0_5 | 3.352 | 7.800 | -| MobileNetV3_small_x0_35 | 2.635 | 6.900 | -| MobileNetV3_small_x0_35_ssld | 2.635 | 6.900 | -| MobileNetV3_large_x1_0_ssld | 19.308 | 21.000 | -| MobileNetV3_large_x1_0_ssld_int8 | 14.395 | 10.000 | -| MobileNetV3_small_x1_0_ssld | 6.546 | 12.000 | -| ShuffleNetV2 | 10.941 | 9.000 | -| ShuffleNetV2_x0_25 | 2.329 | 2.700 | -| ShuffleNetV2_x0_33 | 2.643 | 2.800 | -| ShuffleNetV2_x0_5 | 4.261 | 5.600 | -| ShuffleNetV2_x1_5 | 19.352 | 14.000 | -| ShuffleNetV2_x2_0 | 34.770 | 28.000 | -| ShuffleNetV2_swish | 16.023 | 9.100 | -| GhostNet_x0_5 | 5.714 | 10.000 | -| GhostNet_x1_0 | 13.558 | 20.000 | -| GhostNet_x1_3 | 19.982 | 29.000 | -| GhostNet_x1_3_ssld | 19.982 | 29.000 | - - -## 基于T4 GPU的预测速度 - -| Models | FP16
Batch Size=1
(ms) | FP16
Batch Size=4
(ms) | FP16
Batch Size=8
(ms) | FP32
Batch Size=1
(ms) | FP32
Batch Size=4
(ms) | FP32
Batch Size=8
(ms) | -|-----------------------------|-----------------------|-----------------------|-----------------------|-----------------------|-----------------------|-----------------------| -| MobileNetV1_x0_25 | 0.68422 | 1.13021 | 1.72095 | 0.67274 | 1.226 | 1.84096 | -| MobileNetV1_x0_5 | 0.69326 | 1.09027 | 1.84746 | 0.69947 | 1.43045 | 2.39353 | -| MobileNetV1_x0_75 | 0.6793 | 1.29524 | 2.15495 | 0.79844 | 1.86205 | 3.064 | -| MobileNetV1 | 0.71942 | 1.45018 | 2.47953 | 0.91164 | 2.26871 | 3.90797 | -| MobileNetV1_ssld | 0.71942 | 1.45018 | 2.47953 | 0.91164 | 2.26871 | 3.90797 | -| MobileNetV2_x0_25 | 2.85399 | 3.62405 | 4.29952 | 2.81989 | 3.52695 | 4.2432 | -| MobileNetV2_x0_5 | 2.84258 | 3.1511 | 4.10267 | 2.80264 | 3.65284 | 4.31737 | -| MobileNetV2_x0_75 | 2.82183 | 3.27622 | 4.98161 | 2.86538 | 3.55198 | 5.10678 | -| MobileNetV2 | 2.78603 | 3.71982 | 6.27879 | 2.62398 | 3.54429 | 6.41178 | -| MobileNetV2_x1_5 | 2.81852 | 4.87434 | 8.97934 | 2.79398 | 5.30149 | 9.30899 | -| MobileNetV2_x2_0 | 3.65197 | 6.32329 | 11.644 | 3.29788 | 7.08644 | 12.45375 | -| MobileNetV2_ssld | 2.78603 | 3.71982 | 6.27879 | 2.62398 | 3.54429 | 6.41178 | -| MobileNetV3_large_x1_25 | 2.34387 | 3.16103 | 4.79742 | 2.35117 | 3.44903 | 5.45658 | -| MobileNetV3_large_x1_0 | 2.20149 | 3.08423 | 4.07779 | 2.04296 | 2.9322 | 4.53184 | -| MobileNetV3_large_x0_75 | 2.1058 | 2.61426 | 3.61021 | 2.0006 | 2.56987 | 3.78005 | -| MobileNetV3_large_x0_5 | 2.06934 | 2.77341 | 3.35313 | 2.11199 | 2.88172 | 3.19029 | -| MobileNetV3_large_x0_35 | 2.14965 | 2.7868 | 3.36145 | 1.9041 | 2.62951 | 3.26036 | -| MobileNetV3_small_x1_25 | 2.06817 | 2.90193 | 3.5245 | 2.02916 | 2.91866 | 3.34528 | -| MobileNetV3_small_x1_0 | 1.73933 | 2.59478 | 3.40276 | 1.74527 | 2.63565 | 3.28124 | -| MobileNetV3_small_x0_75 | 1.80617 | 2.64646 | 3.24513 | 1.93697 | 2.64285 | 3.32797 | -| MobileNetV3_small_x0_5 | 1.95001 | 2.74014 | 3.39485 | 1.88406 | 2.99601 | 3.3908 | -| MobileNetV3_small_x0_35 | 2.10683 | 2.94267 | 3.44254 | 1.94427 | 2.94116 | 3.41082 | -| MobileNetV3_small_x0_35_ssld | 2.10683 | 2.94267 | 3.44254 | 1.94427 | 2.94116 | 3.41082 | -| MobileNetV3_large_x1_0_ssld | 2.20149 | 3.08423 | 4.07779 | 2.04296 | 2.9322 | 4.53184 | -| MobileNetV3_small_x1_0_ssld | 1.73933 | 2.59478 | 3.40276 | 1.74527 | 2.63565 | 3.28124 | -| ShuffleNetV2 | 1.95064 | 2.15928 | 2.97169 | 1.89436 | 2.26339 | 3.17615 | -| ShuffleNetV2_x0_25 | 1.43242 | 2.38172 | 2.96768 | 1.48698 | 2.29085 | 2.90284 | -| ShuffleNetV2_x0_33 | 1.69008 | 2.65706 | 2.97373 | 1.75526 | 2.85557 | 3.09688 | -| ShuffleNetV2_x0_5 | 1.48073 | 2.28174 | 2.85436 | 1.59055 | 2.18708 | 3.09141 | -| ShuffleNetV2_x1_5 | 1.51054 | 2.4565 | 3.41738 | 1.45389 | 2.5203 | 3.99872 | -| ShuffleNetV2_x2_0 | 1.95616 | 2.44751 | 4.19173 | 2.15654 | 3.18247 | 5.46893 | -| ShuffleNetV2_swish | 2.50213 | 2.92881 | 3.474 | 2.5129 | 2.97422 | 3.69357 | -| GhostNet_x0_5 | 2.64492 | 3.48473 | 4.48844 | 2.36115 | 3.52802 | 3.89444 | -| GhostNet_x1_0 | 2.63120 | 3.92065 | 4.48296 | 2.57042 | 3.56296 | 4.85524 | -| GhostNet_x1_3 | 2.89715 | 3.80329 | 4.81661 | 2.81810 | 3.72071 | 5.92269 | diff --git a/docs/zh_CN_tmp/models/Others.md b/docs/zh_CN_tmp/models/Others.md deleted file mode 100644 index 76e3f1e1..00000000 --- a/docs/zh_CN_tmp/models/Others.md +++ /dev/null @@ -1,55 +0,0 @@ -# 其他模型 - -## 概述 -2012年,Alex等人提出的AlexNet网络在ImageNet大赛上以远超第二名的成绩夺冠,卷积神经网络乃至深度学习引起了广泛的关注。AlexNet使用relu作为CNN的激活函数,解决了sigmoid在网络较深时的梯度弥散问题。训练时使用Dropout随机丢掉一部分神经元,避免了模型过拟合。网络中使用重叠的最大池化代替了此前CNN中普遍使用的平均池化,避免了平均池化的模糊效果,提升了特征的丰富性。从某种意义上说,AlexNet引爆了神经网络的研究与应用热潮。 - -SqueezeNet在ImageNet-1k上实现了与AlexNet相同的精度,但只用了1/50的参数量。该网络的核心是Fire模块,Fire模块通过使用1x1的卷积实现通道降维,从而大大节省了参数量。作者通过大量堆叠Fire模块组成了SqueezeNet。 - -VGG由牛津大学计算机视觉组和DeepMind公司研究员一起研发的卷积神经网络。该网络探索了卷积神经网络的深度和其性能之间的关系,通过反复的堆叠3x3的小型卷积核和2x2的最大池化层,成功的构建了多层卷积神经网络并取得了不错的收敛精度。最终,VGG获得了ILSVRC 2014比赛分类项目的亚军和定位项目的冠军。 - -DarkNet53是YOLO作者在论文设计的用于目标检测的backbone,该网络基本由1x1与3x3卷积构成,共53层,取名为DarkNet53。 - - -## 精度、FLOPS和参数量 - -| Models | Top1 | Top5 | Reference
top1 | Reference
top5 | FLOPS
(G) | Parameters
(M) | -|:--:|:--:|:--:|:--:|:--:|:--:|:--:| -| AlexNet | 0.567 | 0.792 | 0.5720 | | 1.370 | 61.090 | -| SqueezeNet1_0 | 0.596 | 0.817 | 0.575 | | 1.550 | 1.240 | -| SqueezeNet1_1 | 0.601 | 0.819 | | | 0.690 | 1.230 | -| VGG11 | 0.693 | 0.891 | | | 15.090 | 132.850 | -| VGG13 | 0.700 | 0.894 | | | 22.480 | 133.030 | -| VGG16 | 0.720 | 0.907 | 0.715 | 0.901 | 30.810 | 138.340 | -| VGG19 | 0.726 | 0.909 | | | 39.130 | 143.650 | -| DarkNet53 | 0.780 | 0.941 | 0.772 | 0.938 | 18.580 | 41.600 | - - - -## 基于V100 GPU的预测速度 - - -| Models | Crop Size | Resize Short Size | FP32
Batch Size=1
(ms) | -|---------------------------|-----------|-------------------|----------------------| -| AlexNet | 224 | 256 | 1.176 | -| SqueezeNet1_0 | 224 | 256 | 0.860 | -| SqueezeNet1_1 | 224 | 256 | 0.763 | -| VGG11 | 224 | 256 | 1.867 | -| VGG13 | 224 | 256 | 2.148 | -| VGG16 | 224 | 256 | 2.616 | -| VGG19 | 224 | 256 | 3.076 | -| DarkNet53 | 256 | 256 | 3.139 | - - - -## 基于T4 GPU的预测速度 - -| Models | Crop Size | Resize Short Size | FP16
Batch Size=1
(ms) | FP16
Batch Size=4
(ms) | FP16
Batch Size=8
(ms) | FP32
Batch Size=1
(ms) | FP32
Batch Size=4
(ms) | FP32
Batch Size=8
(ms) | -|-----------------------|-----------|-------------------|------------------------------|------------------------------|------------------------------|------------------------------|------------------------------|------------------------------| -| AlexNet | 224 | 256 | 1.06447 | 1.70435 | 2.38402 | 1.44993 | 2.46696 | 3.72085 | -| SqueezeNet1_0 | 224 | 256 | 0.97162 | 2.06719 | 3.67499 | 0.96736 | 2.53221 | 4.54047 | -| SqueezeNet1_1 | 224 | 256 | 0.81378 | 1.62919 | 2.68044 | 0.76032 | 1.877 | 3.15298 | -| VGG11 | 224 | 256 | 2.24408 | 4.67794 | 7.6568 | 3.90412 | 9.51147 | 17.14168 | -| VGG13 | 224 | 256 | 2.58589 | 5.82708 | 10.03591 | 4.64684 | 12.61558 | 23.70015 | -| VGG16 | 224 | 256 | 3.13237 | 7.19257 | 12.50913 | 5.61769 | 16.40064 | 32.03939 | -| VGG19 | 224 | 256 | 3.69987 | 8.59168 | 15.07866 | 6.65221 | 20.4334 | 41.55902 | -| DarkNet53 | 256 | 256 | 3.18101 | 5.88419 | 10.14964 | 4.10829 | 12.1714 | 22.15266 | diff --git a/docs/zh_CN_tmp/models/PP-LCNet.md b/docs/zh_CN_tmp/models/PP-LCNet.md deleted file mode 100644 index e96dadee..00000000 --- a/docs/zh_CN_tmp/models/PP-LCNet.md +++ /dev/null @@ -1,143 +0,0 @@ -# PP-LCNet系列 - -## 摘要 - -在计算机视觉领域中,骨干网络的好坏直接影响到整个视觉任务的结果。在之前的一些工作中,相关的研究者普遍将FLOPs或者Params作为优化目的,但是在工业界真实落地的场景中,推理速度才是考量模型好坏的重要指标,然而,推理速度和准确性很难兼得。考虑到工业界有很多基于Intel CPU的应用,所以我们本次的工作旨在使骨干网络更好的适应Intel CPU,从而得到一个速度更快、准确率更高的轻量级骨干网络,与此同时,目标检测、语义分割等下游视觉任务的性能也同样得到提升。 - -## 介绍 - -近年来,有很多轻量级的骨干网络问世,尤其最近两年,各种NAS搜索出的网络层出不穷,这些网络要么主打FLOPs或者Params上的优势,要么主打ARM设备上的推理速度的优势,很少有网络专门针对Intel CPU做特定的优化,导致这些网络在Intel CPU端的推理速度并不是很完美。基于此,我们针对Intel CPU设备以及其加速库MKLDNN设计了特定的骨干网络PP-LCNet,比起其他的轻量级的SOTA模型,该骨干网络可以在不增加推理时间的情况下,进一步提升模型的性能,最终大幅度超越现有的SOTA模型。与其他模型的对比图如下。 -
- -## 方法 - -网络结构整体如下图所示。 -
- -我们经过大量的实验发现,在基于Intel CPU设备上,尤其当启用MKLDNN加速库后,很多看似不太耗时的操作反而会增加延时,比如elementwise-add操作、split-concat结构等。所以最终我们选用了结构尽可能精简、速度尽可能快的block组成我们的BaseNet(类似MobileNetV1)。基于BaseNet,我们通过实验,总结了四条几乎不增加延时但是可以提升模型精度的方法,融合这四条策略,我们组合成了PP-LCNet。下面对这四条策略一一介绍: - - -### 更好的激活函数 - -自从卷积神经网络使用了ReLU激活函数后,网络性能得到了大幅度提升,近些年ReLU激活函数的变体也相继出现,如Leaky-ReLU、P-ReLU、ELU等,2017年,谷歌大脑团队通过搜索的方式得到了swish激活函数,该激活函数在轻量级网络上表现优异,在2019年,MobileNetV3的作者将该激活函数进一步优化为H-Swish,该激活函数去除了指数运算,速度更快,网络精度几乎不受影响。我们也经过很多实验发现该激活函数在轻量级网络上有优异的表现。所以在PP-LCNet中,我们选用了该激活函数。 - -### 合适的位置添加SE模块 - -SE模块是SENet提出的一种通道注意力机制,可以有效提升模型的精度。但是在Intel CPU端,该模块同样会带来较大的延时,如何平衡精度和速度是我们要解决的一个问题。虽然在MobileNetV3等基于NAS搜索的网络中对SE模块的位置进行了搜索,但是并没有得出一般的结论,我们通过实验发现,SE模块越靠近网络的尾部对模型精度的提升越大。下表也展示了我们的一些实验结果: - -| SE Location | Top-1 Acc(\%) | Latency(ms) | -|-------------------|---------------|-------------| -| 1100000000000 | 61.73 | 2.06 | -| 0000001100000 | 62.17 | 2.03 | -| 0000000000011 | 63.14 | 2.05 | -| 1111111111111 | 64.27 | 3.80 | - -最终,PP-LCNet中的SE模块的位置选用了表格中第三行的方案。 - -### 更大的卷积核 - -在MixNet的论文中,作者分析了卷积核大小对模型性能的影响,结论是在一定范围内大的卷积核可以提升模型的性能,但是超过这个范围会有损模型的性能,所以作者组合了一种split-concat范式的MixConv,这种组合虽然可以提升模型的性能,但是不利于推理。我们通过实验总结了一些更大的卷积核在不同位置的作用,类似SE模块的位置,更大的卷积核在网络的中后部作用更明显,下表展示了5x5卷积核的位置对精度的影响: - -| SE Location | Top-1 Acc(\%) | Latency(ms) | -|-------------------|---------------|-------------| -| 1111111111111 | 63.22 | 2.08 | -| 1111111000000 | 62.70 | 2.07 | -| 0000001111111 | 63.14 | 2.05 | - - -实验表明,更大的卷积核放在网络的中后部即可达到放在所有位置的精度,与此同时,获得更快的推理速度。PP-LCNet最终选用了表格中第三行的方案。 - -### 3.4 GAP后使用更大的1x1卷积层 - -在GoogLeNet之后,GAP(Global-Average-Pooling)后往往直接接分类层,但是在轻量级网络中,这样会导致GAP后提取的特征没有得到进一步的融合和加工。如果在此后使用一个更大的1x1卷积层(等同于FC层),GAP后的特征便不会直接经过分类层,而是先进行了融合,并将融合的特征进行分类。这样可以在不影响模型推理速度的同时大大提升准确率。 -BaseNet经过以上四个方面的改进,得到了PP-LCNet。下表进一步说明了每个方案对结果的影响: - -| Activation | SE-block | Large-kernal | last-1x1-conv | Top-1 Acc(\%) | Latency(ms) | -|------------|----------|--------------|---------------|---------------|-------------| -| 0 | 1 | 1 | 1 | 61.93 | 1.94 | -| 1 | 0 | 1 | 1 | 62.51 | 1.87 | -| 1 | 1 | 0 | 1 | 62.44 | 2.01 | -| 1 | 1 | 1 | 0 | 59.91 | 1.85 | -| 1 | 1 | 1 | 1 | 63.14 | 2.05 | - - -## 实验部分 - -### 图像分类 - -图像分类我们选用了ImageNet数据集,相比目前主流的轻量级网络,PP-LCNet在相同精度下可以获得更快的推理速度。当使用百度自研的SSLD蒸馏策略后,精度进一步提升,在Intel cpu端约5ms的推理速度下ImageNet的Top-1 Acc超过了80%。 - -| Model | Params(M) | FLOPs(M) | Top-1 Acc(\%) | Top-5 Acc(\%) | Latency(ms) | -|-------|-----------|----------|---------------|---------------|-------------| -| PP-LCNet-0.25x | 1.5 | 18 | 51.86 | 75.65 | 1.74 | -| PP-LCNet-0.35x | 1.6 | 29 | 58.09 | 80.83 | 1.92 | -| PP-LCNet-0.5x | 1.9 | 47 | 63.14 | 84.66 | 2.05 | -| PP-LCNet-0.75x | 2.4 | 99 | 68.18 | 88.30 | 2.29 | -| PP-LCNet-1x | 3.0 | 161 | 71.32 | 90.03 | 2.46 | -| PP-LCNet-1.5x | 4.5 | 342 | 73.71 | 91.53 | 3.19 | -| PP-LCNet-2x | 6.5 | 590 | 75.18 | 92.27 | 4.27 | -| PP-LCNet-2.5x | 9.0 | 906 | 76.60 | 93.00 | 5.39 | -| PP-LCNet-0.25x\* | 1.9 | 47 | 66.10 | 86.46 | 2.05 | -| PP-LCNet-0.25x\* | 3.0 | 161 | 74.39 | 92.09 | 2.46 | -| PP-LCNet-0.25x\* | 9.0 | 906 | 80.82 | 95.33 | 5.39 | - -其中*表示使用SSLD蒸馏后的模型。 - -与其他轻量级网络的性能对比: - -| Model | Params(M) | FLOPs(M) | Top-1 Acc(\%) | Top-5 Acc(\%) | Latency(ms) | -|-------|-----------|----------|---------------|---------------|-------------| -| MobileNetV2-0.25x | 1.5 | 34 | 53.21 | 76.52 | 2.47 | -| MobileNetV3-small-0.35x | 1.7 | 15 | 53.03 | 76.37 | 3.02 | -| ShuffleNetV2-0.33x | 0.6 | 24 | 53.73 | 77.05 | 4.30 | -| PP-LCNet-0.25x | 1.5 | 18 | 51.86 | 75.65 | 1.74 | -| MobileNetV2-0.5x | 2.0 | 99 | 65.03 | 85.72 | 2.85 | -| MobileNetV3-large-0.35x | 2.1 | 41 | 64.32 | 85.46 | 3.68 | -| ShuffleNetV2-0.5x | 1.4 | 43 | 60.32 | 82.26 | 4.65 | -| PP-LCNet-0.5x | 1.9 | 47 | 63.14 | 84.66 | 2.05 | -| MobileNetV1-1x | 4.3 | 578 | 70.99 | 89.68 | 3.38 | -| MobileNetV2-1x | 3.5 | 327 | 72.15 | 90.65 | 4.26 | -| MobileNetV3-small-1.25x | 3.6 | 100 | 70.67 | 89.51 | 3.95 | -| PP-LCNet-1x | 3.0 | 161 | 71.32 | 90.03 | 2.46 | - - -### 目标检测 - -目标检测的方法我们选用了百度自研的PicoDet,该方法主打轻量级目标检测场景,下表展示了在COCO数据集上、backbone选用PP-LCNet与MobileNetV3的结果的比较,无论在精度还是速度上,PP-LCNet的优势都非常明显。 - -| Backbone | mAP(%) | Latency(ms) | -|-------|-----------|----------| -MobileNetV3-large-0.35x | 19.2 | 8.1 | -PP-LCNet-0.5x | 20.3 | 6.0 | -MobileNetV3-large-0.75x | 25.8 | 11.1 | -PP-LCNet-1x | 26.9 | 7.9 | - - -### 语义分割 - -语义分割的方法我们选用了DeeplabV3+,下表展示了在Cityscapes数据集上、backbone选用PP-LCNet与MobileNetV3的比较,在精度和速度方面,PP-LCNet的优势同样明显。 - -| Backbone | mIoU(%) | Latency(ms) | -|-------|-----------|----------| -MobileNetV3-large-0.5x | 55.42 | 135 | -PP-LCNet-0.5x | 58.36 | 82 | -MobileNetV3-large-0.75x | 64.53 | 151 | -PP-LCNet-1x | 66.03 | 96 | - -## 总结 - -PP-LCNet没有像学术界那样死扣极致的FLOPs与Params,而是着眼于分析如何添加对Intel CPU友好的模块来提升模型的性能,这样可以更好的平衡准确率和推理时间,其中的实验结论也很适合其他网络结构设计的研究者,同时也为NAS搜索研究者提供了更小的搜索空间和一般结论。最终的PP-LCNet在产业界也可以更好的落地和应用。 - -## 引用 - -如果你的论文用到了PP-LCNet的方法,请添加如下cite: -``` -@misc{cui2021pplcnet, - title={PP-LCNet: A Lightweight CPU Convolutional Neural Network}, - author={Cheng Cui and Tingquan Gao and Shengyu Wei and Yuning Du and Ruoyu Guo and Shuilong Dong and Bin Lu and Ying Zhou and Xueying Lv and Qiwen Liu and Xiaoguang Hu and Dianhai Yu and Yanjun Ma}, - year={2021}, - eprint={2109.15099}, - archivePrefix={arXiv}, - primaryClass={cs.CV} -} -``` diff --git a/docs/zh_CN_tmp/models/ReXNet.md b/docs/zh_CN_tmp/models/ReXNet.md deleted file mode 100644 index f1f6ddd7..00000000 --- a/docs/zh_CN_tmp/models/ReXNet.md +++ /dev/null @@ -1,18 +0,0 @@ -# ReXNet系列 - -## 概述 - -ReXNet是NAVER集团ClovaAI研发中心基于一种网络架构设计新范式而构建的网络。针对现有网络中存在的`Representational Bottleneck`问题,作者提出了一组新的设计原则。作者认为传统的网络架构设计范式会产生表达瓶颈,进而影响模型的性能。为研究此问题,作者研究了上万个随机网络生成特征的`matric rank`,同时进一步研究了网络层中通道配置方案。基于此,作者提出了一组简单而有效的设计原则,以消除表达瓶颈问题。[论文地址](https://arxiv.org/pdf/2007.00992.pdf) - - -## 精度、FLOPS和参数量 - -| Models | Top1 | Top5 | Reference
top1| FLOPS
(G) | Params
(M) | -|:--:|:--:|:--:|:--:|:--:|----| -| ReXNet_1_0 | 77.46 | 93.70 | 77.9 | 0.415 | 4.838 | -| ReXNet_1_3 | 79.13 | 94.64 | 79.5 | 0.683 | 7.611 | -| ReXNet_1_5 | 80.06 | 95.12 | 80.3 | 0.900 | 9.791 | -| ReXNet_2_0 | 81.22 | 95.36 | 81.6 | 1.561 | 16.449 | -| ReXNet_3_0 | 82.09 | 96.12 | 82.8 | 3.445 | 34.833 | - -关于Inference speed等信息,敬请期待。 diff --git a/docs/zh_CN_tmp/models/RedNet.md b/docs/zh_CN_tmp/models/RedNet.md deleted file mode 100644 index 904ee8cd..00000000 --- a/docs/zh_CN_tmp/models/RedNet.md +++ /dev/null @@ -1,16 +0,0 @@ -# RedNet系列 - -## 概述 - -在 ResNet 的 Backbone 和 Backbone 的所有 Bottleneck 位置上使用 Involution 替换掉了卷积,但保留了所有的卷积用于通道映射和融合。这些精心重新设计的实体联合起来,形成了一种新的高效 Backbone 网络,称为 RedNet。[论文地址](https://arxiv.org/abs/2103.06255)。 - - -## 精度、FLOPS和参数量 - -| Model | Params (M) | FLOPs (G) | Top-1 (%) | Top-5 (%) | -|:---------------------:|:----------:|:---------:|:---------:|:---------:| -| RedNet26 | 9.2 | 1.7 | 75.95 | 93.19 | -| RedNet38 | 12.4 | 2.2 | 77.47 | 93.56 | -| RedNet50 | 15.5 | 2.7 | 78.33 | 94.17 | -| RedNet101 | 25.7 | 4.7 | 78.94 | 94.36 | -| RedNet152 | 34.0 | 6.8 | 79.17 | 94.40 | \ No newline at end of file diff --git a/docs/zh_CN_tmp/models/RepVGG.md b/docs/zh_CN_tmp/models/RepVGG.md deleted file mode 100644 index 7b2d9b2e..00000000 --- a/docs/zh_CN_tmp/models/RepVGG.md +++ /dev/null @@ -1,23 +0,0 @@ -# RepVGG系列 - -## 概述 - -RepVGG(Making VGG-style ConvNets Great Again)系列模型是由清华大学(丁贵广团队)、旷视科技(孙剑等人)、港科大和阿伯里斯特威斯大学在2021年提出的一个简单但强大的卷积神经网络架构,该架构具有类似于VGG的推理时间主体,该主体仅由3x3卷积和ReLU的堆栈组成,而训练时间模型具有多分支拓扑。训练时间和推理时间架构的这种解耦是通过结构重新参数化(re-parameterization)技术实现的,因此该模型称为RepVGG。[论文地址](https://arxiv.org/abs/2101.03697)。 - - -## 精度、FLOPS和参数量 - -| Models | Top1 | Top5 | Reference
top1| FLOPS
(G) | -|:--:|:--:|:--:|:--:|:--:| -| RepVGG_A0 | 0.7131 | 0.9016 | 0.7241 | | -| RepVGG_A1 | 0.7380 | 0.9146 | 0.7446 | | -| RepVGG_A2 | 0.7571 | 0.9264 | 0.7648 | | -| RepVGG_B0 | 0.7450 | 0.9213 | 0.7514 | | -| RepVGG_B1 | 0.7773 | 0.9385 | 0.7837 | | -| RepVGG_B2 | 0.7813 | 0.9410 | 0.7878 | | -| RepVGG_B1g2 | 0.7732 | 0.9359 | 0.7778 | | -| RepVGG_B1g4 | 0.7675 | 0.9335 | 0.7758 | | -| RepVGG_B2g4 | 0.7881 | 0.9448 | 0.7938 | | -| RepVGG_B3g4 | 0.7965 | 0.9485 | 0.8021 | | - -关于Params、FLOPs、Inference speed等信息,敬请期待。 diff --git a/docs/zh_CN_tmp/models/ResNeSt_RegNet.md b/docs/zh_CN_tmp/models/ResNeSt_RegNet.md deleted file mode 100644 index 3e745354..00000000 --- a/docs/zh_CN_tmp/models/ResNeSt_RegNet.md +++ /dev/null @@ -1,25 +0,0 @@ -# ResNeSt与RegNet系列 - -## 概述 - -ResNeSt系列模型是在2020年提出的,在原有的resnet网络结构上做了改进,通过引入K个Group和在不同Group中加入类似于SEBlock的attention模块,使得精度相比于基础模型ResNet有了大幅度的提高,且参数量和flops与基础的ResNet基本保持一致。 - -RegNet是由facebook于2020年提出,旨在深化设计空间理念的概念,在AnyNetX的基础上逐步改进,通过加入共享瓶颈ratio、共享组宽度、调整网络深度与宽度等策略,最终实现简化设计空间结构、提高设计空间的可解释性、改善设计空间的质量,并保持设计空间的模型多样性的目的。最终设计出的模型在类似的条件下,性能还要优于EfficientNet,并且在GPU上的速度提高了5倍。 - - -## 精度、FLOPS和参数量 - -| Models | Top1 | Top5 | Reference
top1 | Reference
top5 | FLOPS
(G) | Parameters
(M) | -|:--:|:--:|:--:|:--:|:--:|:--:|:--:| -| ResNeSt50_fast_1s1x64d | 0.8035 | 0.9528| 0.8035 | -| 8.68 | 26.3 | -| ResNeSt50 | 0.8083 | 0.9542| 0.8113 | -| 10.78 | 27.5 | -| RegNetX_4GF | 0.7850 | 0.9416| 0.7860 | -| 8.0 | 22.1 | - - -## 基于T4 GPU的预测速度 - -| Models | Crop Size | Resize Short Size | FP16
Batch Size=1
(ms) | FP16
Batch Size=4
(ms) | FP16
Batch Size=8
(ms) | FP32
Batch Size=1
(ms) | FP32
Batch Size=4
(ms) | FP32
Batch Size=8
(ms) | -|--------------------|-----------|-------------------|------------------------------|------------------------------|------------------------------|------------------------------|------------------------------|------------------------------| -| ResNeSt50_fast_1s1x64d | 224 | 256 | 3.46466 | 5.56647 | 9.11848 | 3.45405 | 8.72680 | 15.48710 | -| ResNeSt50 | 224 | 256 | 7.05851 | 8.97676 | 13.34704 | 6.16248 | 12.0633 | 21.49936 | -| RegNetX_4GF | 224 | 256 | 6.69042 | 8.01664 | 11.60608 | 6.46478 | 11.19862 | 16.89089 | diff --git a/docs/zh_CN_tmp/models/ResNet_and_vd.md b/docs/zh_CN_tmp/models/ResNet_and_vd.md deleted file mode 100644 index 0b2a0c29..00000000 --- a/docs/zh_CN_tmp/models/ResNet_and_vd.md +++ /dev/null @@ -1,97 +0,0 @@ -# ResNet及其Vd系列 - -## 概述 - -ResNet系列模型是在2015年提出的,一举在ILSVRC2015比赛中取得冠军,top5错误率为3.57%。该网络创新性的提出了残差结构,通过堆叠多个残差结构从而构建了ResNet网络。实验表明使用残差块可以有效地提升收敛速度和精度。 - -斯坦福大学的Joyce Xu将ResNet称为「真正重新定义了我们看待神经网络的方式」的三大架构之一。由于ResNet卓越的性能,越来越多的来自学术界和工业界学者和工程师对其结构进行了改进,比较出名的有Wide-ResNet, ResNet-vc ,ResNet-vd, Res2Net等,其中ResNet-vc与ResNet-vd的参数量和计算量与ResNet几乎一致,所以在此我们将其与ResNet统一归为ResNet系列。 - -本次发布ResNet系列的模型包括ResNet50,ResNet50_vd,ResNet50_vd_ssld,ResNet200_vd等14个预训练模型。在训练层面上,ResNet的模型采用了训练ImageNet的标准训练流程,而其余改进版模型采用了更多的训练策略,如learning rate的下降方式采用了cosine decay,引入了label smoothing的标签正则方式,在数据预处理加入了mixup的操作,迭代总轮数从120个epoch增加到200个epoch。 - -其中,ResNet50_vd_v2与ResNet50_vd_ssld采用了知识蒸馏,保证模型结构不变的情况下,进一步提升了模型的精度,具体地,ResNet50_vd_v2的teacher模型是ResNet152_vd(top1准确率80.59%),数据选用的是ImageNet-1k的训练集,ResNet50_vd_ssld的teacher模型是ResNeXt101_32x16d_wsl(top1准确率84.2%),数据选用结合了ImageNet-1k的训练集和ImageNet-22k挖掘的400万数据。知识蒸馏的具体方法正在持续更新中。 - -该系列模型的FLOPS、参数量以及T4 GPU上的预测耗时如下图所示。 - -![](../../images/models/T4_benchmark/t4.fp32.bs4.ResNet.flops.png) - -![](../../images/models/T4_benchmark/t4.fp32.bs4.ResNet.params.png) - -![](../../images/models/T4_benchmark/t4.fp32.bs4.ResNet.png) - -![](../../images/models/T4_benchmark/t4.fp16.bs4.ResNet.png) - - -通过上述曲线可以看出,层数越多,准确率越高,但是相应的参数量、计算量和延时都会增加。ResNet50_vd_ssld通过用更强的teacher和更多的数据,将其在ImageNet-1k上的验证集top-1精度进一步提高,达到了82.39%,刷新了ResNet50系列模型的精度。 - - -## 精度、FLOPS和参数量 - -| Models | Top1 | Top5 | Reference
top1 | Reference
top5 | FLOPS
(G) | Parameters
(M) | -|:--:|:--:|:--:|:--:|:--:|:--:|:--:| -| ResNet18 | 0.710 | 0.899 | 0.696 | 0.891 | 3.660 | 11.690 | -| ResNet18_vd | 0.723 | 0.908 | | | 4.140 | 11.710 | -| ResNet34 | 0.746 | 0.921 | 0.732 | 0.913 | 7.360 | 21.800 | -| ResNet34_vd | 0.760 | 0.930 | | | 7.390 | 21.820 | -| ResNet34_vd_ssld | 0.797 | 0.949 | | | 7.390 | 21.820 | -| ResNet50 | 0.765 | 0.930 | 0.760 | 0.930 | 8.190 | 25.560 | -| ResNet50_vc | 0.784 | 0.940 | | | 8.670 | 25.580 | -| ResNet50_vd | 0.791 | 0.944 | 0.792 | 0.946 | 8.670 | 25.580 | -| ResNet50_vd_v2 | 0.798 | 0.949 | | | 8.670 | 25.580 | -| ResNet101 | 0.776 | 0.936 | 0.776 | 0.938 | 15.520 | 44.550 | -| ResNet101_vd | 0.802 | 0.950 | | | 16.100 | 44.570 | -| ResNet152 | 0.783 | 0.940 | 0.778 | 0.938 | 23.050 | 60.190 | -| ResNet152_vd | 0.806 | 0.953 | | | 23.530 | 60.210 | -| ResNet200_vd | 0.809 | 0.953 | | | 30.530 | 74.740 | -| ResNet50_vd_ssld | 0.824 | 0.961 | | | 8.670 | 25.580 | -| ResNet50_vd_ssld_v2 | 0.830 | 0.964 | | | 8.670 | 25.580 | -| Fix_ResNet50_vd_ssld_v2 | 0.840 | 0.970 | | | 17.696 | 25.580 | -| ResNet101_vd_ssld | 0.837 | 0.967 | | | 16.100 | 44.570 | - -* 注:`ResNet50_vd_ssld_v2`是在`ResNet50_vd_ssld`训练策略的基础上加上AutoAugment训练得到,`Fix_ResNet50_vd_ssld_v2`是固定`ResNet50_vd_ssld_v2`除FC层外所有的网络参数,在320x320的图像输入分辨率下,基于ImageNet1k数据集微调得到。 - - - -## 基于V100 GPU的预测速度 - -| Models | Crop Size | Resize Short Size | FP32
Batch Size=1
(ms) | -|------------------|-----------|-------------------|--------------------------| -| ResNet18 | 224 | 256 | 1.499 | -| ResNet18_vd | 224 | 256 | 1.603 | -| ResNet34 | 224 | 256 | 2.272 | -| ResNet34_vd | 224 | 256 | 2.343 | -| ResNet34_vd_ssld | 224 | 256 | 2.343 | -| ResNet50 | 224 | 256 | 2.939 | -| ResNet50_vc | 224 | 256 | 3.041 | -| ResNet50_vd | 224 | 256 | 3.165 | -| ResNet50_vd_v2 | 224 | 256 | 3.165 | -| ResNet101 | 224 | 256 | 5.314 | -| ResNet101_vd | 224 | 256 | 5.252 | -| ResNet152 | 224 | 256 | 7.205 | -| ResNet152_vd | 224 | 256 | 7.200 | -| ResNet200_vd | 224 | 256 | 8.885 | -| ResNet50_vd_ssld | 224 | 256 | 3.165 | -| ResNet101_vd_ssld | 224 | 256 | 5.252 | - - -## 基于T4 GPU的预测速度 - -| Models | Crop Size | Resize Short Size | FP16
Batch Size=1
(ms) | FP16
Batch Size=4
(ms) | FP16
Batch Size=8
(ms) | FP32
Batch Size=1
(ms) | FP32
Batch Size=4
(ms) | FP32
Batch Size=8
(ms) | -|-------------------|-----------|-------------------|------------------------------|------------------------------|------------------------------|------------------------------|------------------------------|------------------------------| -| ResNet18 | 224 | 256 | 1.3568 | 2.5225 | 3.61904 | 1.45606 | 3.56305 | 6.28798 | -| ResNet18_vd | 224 | 256 | 1.39593 | 2.69063 | 3.88267 | 1.54557 | 3.85363 | 6.88121 | -| ResNet34 | 224 | 256 | 2.23092 | 4.10205 | 5.54904 | 2.34957 | 5.89821 | 10.73451 | -| ResNet34_vd | 224 | 256 | 2.23992 | 4.22246 | 5.79534 | 2.43427 | 6.22257 | 11.44906 | -| ResNet34_vd_ssld | 224 | 256 | 2.23992 | 4.22246 | 5.79534 | 2.43427 | 6.22257 | 11.44906 | -| ResNet50 | 224 | 256 | 2.63824 | 4.63802 | 7.02444 | 3.47712 | 7.84421 | 13.90633 | -| ResNet50_vc | 224 | 256 | 2.67064 | 4.72372 | 7.17204 | 3.52346 | 8.10725 | 14.45577 | -| ResNet50_vd | 224 | 256 | 2.65164 | 4.84109 | 7.46225 | 3.53131 | 8.09057 | 14.45965 | -| ResNet50_vd_v2 | 224 | 256 | 2.65164 | 4.84109 | 7.46225 | 3.53131 | 8.09057 | 14.45965 | -| ResNet101 | 224 | 256 | 5.04037 | 7.73673 | 10.8936 | 6.07125 | 13.40573 | 24.3597 | -| ResNet101_vd | 224 | 256 | 5.05972 | 7.83685 | 11.34235 | 6.11704 | 13.76222 | 25.11071 | -| ResNet152 | 224 | 256 | 7.28665 | 10.62001 | 14.90317 | 8.50198 | 19.17073 | 35.78384 | -| ResNet152_vd | 224 | 256 | 7.29127 | 10.86137 | 15.32444 | 8.54376 | 19.52157 | 36.64445 | -| ResNet200_vd | 224 | 256 | 9.36026 | 13.5474 | 19.0725 | 10.80619 | 25.01731 | 48.81399 | -| ResNet50_vd_ssld | 224 | 256 | 2.65164 | 4.84109 | 7.46225 | 3.53131 | 8.09057 | 14.45965 | -| ResNet50_vd_ssld_v2 | 224 | 256 | 2.65164 | 4.84109 | 7.46225 | 3.53131 | 8.09057 | 14.45965 | -| Fix_ResNet50_vd_ssld_v2 | 320 | 320 | 3.42818 | 7.51534 | 13.19370 | 5.07696 | 14.64218 | 27.01453 | -| ResNet101_vd_ssld | 224 | 256 | 5.05972 | 7.83685 | 11.34235 | 6.11704 | 13.76222 | 25.11071 | diff --git a/docs/zh_CN_tmp/models/SEResNext_and_Res2Net.md b/docs/zh_CN_tmp/models/SEResNext_and_Res2Net.md deleted file mode 100644 index f2fd1c8f..00000000 --- a/docs/zh_CN_tmp/models/SEResNext_and_Res2Net.md +++ /dev/null @@ -1,117 +0,0 @@ -# SEResNeXt与Res2Net系列 - -## 概述 -ResNeXt是ResNet的典型变种网络之一,ResNeXt发表于2017年的CVPR会议。在此之前,提升模型精度的方法主要集中在将网络变深或者变宽,这样增加了参数量和计算量,推理速度也会相应变慢。ResNeXt结构提出了通道分组(cardinality)的概念,作者通过实验发现增加通道的组数比增加深度和宽度更有效。其可以在不增加参数复杂度的前提下提高准确率,同时还减少了参数的数量,所以是比较成功的ResNet的变种。 - -SENet是2017年ImageNet分类比赛的冠军方案,其提出了一个全新的SE结构,该结构可以迁移到任何其他网络中,其通过控制scale的大小,把每个通道间重要的特征增强,不重要的特征减弱,从而让提取的特征指向性更强。 - -Res2Net是2019年提出的一种全新的对ResNet的改进方案,该方案可以和现有其他优秀模块轻松整合,在不增加计算负载量的情况下,在ImageNet、CIFAR-100等数据集上的测试性能超过了ResNet。Res2Net结构简单,性能优越,进一步探索了CNN在更细粒度级别的多尺度表示能力。Res2Net揭示了一个新的提升模型精度的维度,即scale,其是除了深度、宽度和基数的现有维度之外另外一个必不可少的更有效的因素。该网络在其他视觉任务如目标检测、图像分割等也有相当不错的表现。 - -该系列模型的FLOPS、参数量以及T4 GPU上的预测耗时如下图所示。 - - -![](../../images/models/T4_benchmark/t4.fp32.bs4.SeResNeXt.flops.png) - -![](../../images/models/T4_benchmark/t4.fp32.bs4.SeResNeXt.params.png) - -![](../../images/models/T4_benchmark/t4.fp32.bs4.SeResNeXt.png) - -![](../../images/models/T4_benchmark/t4.fp16.bs4.SeResNeXt.png) - - -目前PaddleClas开源的这三类的预训练模型一共有24个,其指标如图所示,从图中可以看出,在同样Flops和Params下,改进版的模型往往有更高的精度,但是推理速度往往不如ResNet系列。另一方面,Res2Net表现也较为优秀,相比ResNeXt中的group操作、SEResNet中的SE结构操作,Res2Net在相同Flops、Params和推理速度下往往精度更佳。 - - - -## 精度、FLOPS和参数量 - -| Models | Top1 | Top5 | Reference
top1 | Reference
top5 | FLOPS
(G) | Parameters
(M) | -|:--:|:--:|:--:|:--:|:--:|:--:|:--:| -| Res2Net50_26w_4s | 0.793 | 0.946 | 0.780 | 0.936 | 8.520 | 25.700 | -| Res2Net50_vd_26w_4s | 0.798 | 0.949 | | | 8.370 | 25.060 | -| Res2Net50_vd_26w_4s_ssld | 0.831 | 0.966 | | | 8.370 | 25.060 | -| Res2Net50_14w_8s | 0.795 | 0.947 | 0.781 | 0.939 | 9.010 | 25.720 | -| Res2Net101_vd_26w_4s | 0.806 | 0.952 | | | 16.670 | 45.220 | -| Res2Net101_vd_26w_4s_ssld | 0.839 | 0.971 | | | 16.670 | 45.220 | -| Res2Net200_vd_26w_4s | 0.812 | 0.957 | | | 31.490 | 76.210 | -| Res2Net200_vd_26w_4s_ssld | **0.851** | 0.974 | | | 31.490 | 76.210 | -| ResNeXt50_32x4d | 0.778 | 0.938 | 0.778 | | 8.020 | 23.640 | -| ResNeXt50_vd_32x4d | 0.796 | 0.946 | | | 8.500 | 23.660 | -| ResNeXt50_64x4d | 0.784 | 0.941 | | | 15.060 | 42.360 | -| ResNeXt50_vd_64x4d | 0.801 | 0.949 | | | 15.540 | 42.380 | -| ResNeXt101_32x4d | 0.787 | 0.942 | 0.788 | | 15.010 | 41.540 | -| ResNeXt101_vd_32x4d | 0.803 | 0.951 | | | 15.490 | 41.560 | -| ResNeXt101_64x4d | 0.784 | 0.945 | 0.796 | | 29.050 | 78.120 | -| ResNeXt101_vd_64x4d | 0.808 | 0.952 | | | 29.530 | 78.140 | -| ResNeXt152_32x4d | 0.790 | 0.943 | | | 22.010 | 56.280 | -| ResNeXt152_vd_32x4d | 0.807 | 0.952 | | | 22.490 | 56.300 | -| ResNeXt152_64x4d | 0.795 | 0.947 | | | 43.030 | 107.570 | -| ResNeXt152_vd_64x4d | 0.811 | 0.953 | | | 43.520 | 107.590 | -| SE_ResNet18_vd | 0.733 | 0.914 | | | 4.140 | 11.800 | -| SE_ResNet34_vd | 0.765 | 0.932 | | | 7.840 | 21.980 | -| SE_ResNet50_vd | 0.795 | 0.948 | | | 8.670 | 28.090 | -| SE_ResNeXt50_32x4d | 0.784 | 0.940 | 0.789 | 0.945 | 8.020 | 26.160 | -| SE_ResNeXt50_vd_32x4d | 0.802 | 0.949 | | | 10.760 | 26.280 | -| SE_ResNeXt101_32x4d | 0.7939 | 0.9443 | 0.793 | 0.950 | 15.020 | 46.280 | -| SENet154_vd | 0.814 | 0.955 | | | 45.830 | 114.290 | - - - -## 基于V100 GPU的预测速度 - -| Models | Crop Size | Resize Short Size | FP32
Batch Size=1
(ms) | -|-----------------------|-----------|-------------------|--------------------------| -| Res2Net50_26w_4s | 224 | 256 | 4.148 | -| Res2Net50_vd_26w_4s | 224 | 256 | 4.172 | -| Res2Net50_14w_8s | 224 | 256 | 5.113 | -| Res2Net101_vd_26w_4s | 224 | 256 | 7.327 | -| Res2Net200_vd_26w_4s | 224 | 256 | 12.806 | -| ResNeXt50_32x4d | 224 | 256 | 10.964 | -| ResNeXt50_vd_32x4d | 224 | 256 | 7.566 | -| ResNeXt50_64x4d | 224 | 256 | 13.905 | -| ResNeXt50_vd_64x4d | 224 | 256 | 14.321 | -| ResNeXt101_32x4d | 224 | 256 | 14.915 | -| ResNeXt101_vd_32x4d | 224 | 256 | 14.885 | -| ResNeXt101_64x4d | 224 | 256 | 28.716 | -| ResNeXt101_vd_64x4d | 224 | 256 | 28.398 | -| ResNeXt152_32x4d | 224 | 256 | 22.996 | -| ResNeXt152_vd_32x4d | 224 | 256 | 22.729 | -| ResNeXt152_64x4d | 224 | 256 | 46.705 | -| ResNeXt152_vd_64x4d | 224 | 256 | 46.395 | -| SE_ResNet18_vd | 224 | 256 | 1.694 | -| SE_ResNet34_vd | 224 | 256 | 2.786 | -| SE_ResNet50_vd | 224 | 256 | 3.749 | -| SE_ResNeXt50_32x4d | 224 | 256 | 8.924 | -| SE_ResNeXt50_vd_32x4d | 224 | 256 | 9.011 | -| SE_ResNeXt101_32x4d | 224 | 256 | 19.204 | -| SENet154_vd | 224 | 256 | 50.406 | - - -## 基于T4 GPU的预测速度 - -| Models | Crop Size | Resize Short Size | FP16
Batch Size=1
(ms) | FP16
Batch Size=4
(ms) | FP16
Batch Size=8
(ms) | FP32
Batch Size=1
(ms) | FP32
Batch Size=4
(ms) | FP32
Batch Size=8
(ms) | -|-----------------------|-----------|-------------------|------------------------------|------------------------------|------------------------------|------------------------------|------------------------------|------------------------------| -| Res2Net50_26w_4s | 224 | 256 | 3.56067 | 6.61827 | 11.41566 | 4.47188 | 9.65722 | 17.54535 | -| Res2Net50_vd_26w_4s | 224 | 256 | 3.69221 | 6.94419 | 11.92441 | 4.52712 | 9.93247 | 18.16928 | -| Res2Net50_14w_8s | 224 | 256 | 4.45745 | 7.69847 | 12.30935 | 5.4026 | 10.60273 | 18.01234 | -| Res2Net101_vd_26w_4s | 224 | 256 | 6.53122 | 10.81895 | 18.94395 | 8.08729 | 17.31208 | 31.95762 | -| Res2Net200_vd_26w_4s | 224 | 256 | 11.66671 | 18.93953 | 33.19188 | 14.67806 | 32.35032 | 63.65899 | -| ResNeXt50_32x4d | 224 | 256 | 7.61087 | 8.88918 | 12.99674 | 7.56327 | 10.6134 | 18.46915 | -| ResNeXt50_vd_32x4d | 224 | 256 | 7.69065 | 8.94014 | 13.4088 | 7.62044 | 11.03385 | 19.15339 | -| ResNeXt50_64x4d | 224 | 256 | 13.78688 | 15.84655 | 21.79537 | 13.80962 | 18.4712 | 33.49843 | -| ResNeXt50_vd_64x4d | 224 | 256 | 13.79538 | 15.22201 | 22.27045 | 13.94449 | 18.88759 | 34.28889 | -| ResNeXt101_32x4d | 224 | 256 | 16.59777 | 17.93153 | 21.36541 | 16.21503 | 19.96568 | 33.76831 | -| ResNeXt101_vd_32x4d | 224 | 256 | 16.36909 | 17.45681 | 22.10216 | 16.28103 | 20.25611 | 34.37152 | -| ResNeXt101_64x4d | 224 | 256 | 30.12355 | 32.46823 | 38.41901 | 30.4788 | 36.29801 | 68.85559 | -| ResNeXt101_vd_64x4d | 224 | 256 | 30.34022 | 32.27869 | 38.72523 | 30.40456 | 36.77324 | 69.66021 | -| ResNeXt152_32x4d | 224 | 256 | 25.26417 | 26.57001 | 30.67834 | 24.86299 | 29.36764 | 52.09426 | -| ResNeXt152_vd_32x4d | 224 | 256 | 25.11196 | 26.70515 | 31.72636 | 25.03258 | 30.08987 | 52.64429 | -| ResNeXt152_64x4d | 224 | 256 | 46.58293 | 48.34563 | 56.97961 | 46.7564 | 56.34108 | 106.11736 | -| ResNeXt152_vd_64x4d | 224 | 256 | 47.68447 | 48.91406 | 57.29329 | 47.18638 | 57.16257 | 107.26288 | -| SE_ResNet18_vd | 224 | 256 | 1.61823 | 3.1391 | 4.60282 | 1.7691 | 4.19877 | 7.5331 | -| SE_ResNet34_vd | 224 | 256 | 2.67518 | 5.04694 | 7.18946 | 2.88559 | 7.03291 | 12.73502 | -| SE_ResNet50_vd | 224 | 256 | 3.65394 | 7.568 | 12.52793 | 4.28393 | 10.38846 | 18.33154 | -| SE_ResNeXt50_32x4d | 224 | 256 | 9.06957 | 11.37898 | 18.86282 | 8.74121 | 13.563 | 23.01954 | -| SE_ResNeXt50_vd_32x4d | 224 | 256 | 9.25016 | 11.85045 | 25.57004 | 9.17134 | 14.76192 | 19.914 | -| SE_ResNeXt101_32x4d | 224 | 256 | 19.34455 | 20.6104 | 32.20432 | 18.82604 | 25.31814 | 41.97758 | -| SENet154_vd | 224 | 256 | 49.85733 | 54.37267 | 74.70447 | 53.79794 | 66.31684 | 121.59885 | diff --git a/docs/zh_CN_tmp/models/SwinTransformer.md b/docs/zh_CN_tmp/models/SwinTransformer.md deleted file mode 100644 index 1d9561ba..00000000 --- a/docs/zh_CN_tmp/models/SwinTransformer.md +++ /dev/null @@ -1,22 +0,0 @@ -# SwinTransformer - -## 概述 -Swin Transformer 是一种新的视觉Transformer网络,可以用作计算机视觉领域的通用骨干网路。SwinTransformer由移动窗口(shifted windows)表示的层次Transformer结构组成。移动窗口将自注意计算限制在非重叠的局部窗口上,同时允许跨窗口连接,从而提高了网络性能。[论文地址](https://arxiv.org/abs/2103.14030)。 - - -## 精度、FLOPS和参数量 - -| Models | Top1 | Top5 | Reference
top1 | Reference
top5 | FLOPS
(G) | Params
(M) | -|:--:|:--:|:--:|:--:|:--:|:--:|:--:| -| SwinTransformer_tiny_patch4_window7_224 | 0.8069 | 0.9534 | 0.812 | 0.955 | 4.5 | 28 | -| SwinTransformer_small_patch4_window7_224 | 0.8275 | 0.9613 | 0.832 | 0.962 | 8.7 | 50 | -| SwinTransformer_base_patch4_window7_224 | 0.8300 | 0.9626 | 0.835 | 0.965 | 15.4 | 88 | -| SwinTransformer_base_patch4_window12_384 | 0.8439 | 0.9693 | 0.845 | 0.970 | 47.1 | 88 | -| SwinTransformer_base_patch4_window7_224[1] | 0.8487 | 0.9746 | 0.852 | 0.975 | 15.4 | 88 | -| SwinTransformer_base_patch4_window12_384[1] | 0.8642 | 0.9807 | 0.864 | 0.980 | 47.1 | 88 | -| SwinTransformer_large_patch4_window7_224[1] | 0.8596 | 0.9783 | 0.863 | 0.979 | 34.5 | 197 | -| SwinTransformer_large_patch4_window12_384[1] | 0.8719 | 0.9823 | 0.873 | 0.982 | 103.9 | 197 | - -[1]:基于ImageNet22k数据集预训练,然后在ImageNet1k数据集迁移学习得到。 - -**注**:与Reference的精度差异源于数据预处理不同。 diff --git a/docs/zh_CN_tmp/models/TNT.md b/docs/zh_CN_tmp/models/TNT.md deleted file mode 100644 index 13e86fd4..00000000 --- a/docs/zh_CN_tmp/models/TNT.md +++ /dev/null @@ -1,12 +0,0 @@ -# TNT系列 - -## 概述 - -TNT(Transformer-iN-Transformer)系列模型由华为诺亚于2021年提出,用于对 patch 级别和 pixel 级别的表示进行建模。在每个 TNT 块中,outer transformer block 用于处理 patch 嵌入,inner transformer block 从 pixel 嵌入中提取局部特征。通过线性变换层将 pixel 级特征投影到 patch 嵌入空间,然后加入到 patch 中。通过对 TNT 块的叠加,建立了用于图像识别的 TNT 模型。在ImageNet 基准测试和下游任务上的实验证明了该 TNT 体系结构的优越性和有效性。例如,在计算量相当的情况下 TNT 能在 ImageNet 上达到 81.3% 的 top-1 精度,比 DeiT 高 1.5%。[论文地址](https://arxiv.org/abs/2103.00112)。 - - -## 精度、FLOPS和参数量 - -| Model | Params (M) | FLOPs (G) | Top-1 (%) | Top-5 (%) | -|:---------------------:|:----------:|:---------:|:---------:|:---------:| -| TNT_small | 23.8 | 5.2 | 81.21 | 95.63 | diff --git a/docs/zh_CN_tmp/models/Tricks.md b/docs/zh_CN_tmp/models/Tricks.md deleted file mode 100644 index f964965d..00000000 --- a/docs/zh_CN_tmp/models/Tricks.md +++ /dev/null @@ -1,96 +0,0 @@ -# 训练技巧 - -## 1.优化器的选择 -自深度学习发展以来,就有很多关于优化器的研究者工作,优化器的目的是为了让损失函数尽可能的小,从而找到合适的参数来完成某项任务。目前业界主要用到的优化器有SGD、RMSProp、Adam、AdaDelt等,其中由于带momentum的SGD优化器广泛应用于学术界和工业界,所以我们发布的模型也大都使用该优化器来实现损失函数的梯度下降。带momentum的SGD优化器有两个劣势,其一是收敛速度慢,其二是初始学习率的设置需要依靠大量的经验,然而如果初始学习率设置得当并且迭代轮数充足,该优化器也会在众多的优化器中脱颖而出,使得其在验证集上获得更高的准确率。一些自适应学习率的优化器如Adam、RMSProp等,收敛速度往往比较快,但是最终的收敛精度会稍差一些。如果追求更快的收敛速度,我们推荐使用这些自适应学习率的优化器,如果追求更高的收敛精度,我们推荐使用带momentum的SGD优化器。 - -## 2.学习率以及学习率下降策略的选择 -学习率的选择往往和优化器以及数据和任务有关系。这里主要介绍以momentum+SGD作为优化器训练ImageNet-1k的学习率以及学习率下降的选择。 - -### 学习率的概念: -学习率是通过损失函数的梯度调整网络权重的超参数的速度。学习率越低,损失函数的变化速度就越慢。虽然使用低学习率可以确保不会错过任何局部极小值,但也意味着将花费更长的时间来进行收敛,特别是在被困在高原区域的情况下。 - -### 学习率下降策略: -在整个训练过程中,我们不能使用同样的学习率来更新权重,否则无法到达最优点,所以需要在训练过程中调整学习率的大小。在训练初始阶段,由于权重处于随机初始化的状态,损失函数相对容易进行梯度下降,所以可以设置一个较大的学习率。在训练后期,由于权重参数已经接近最优值,较大的学习率无法进一步寻找最优值,所以需要设置一个较小的学习率。在训练整个过程中,很多研究者使用的学习率下降方式是piecewise_decay,即阶梯式下降学习率,如在ResNet50标准的训练中,我们设置的初始学习率是0.1,每30epoch学习率下降到原来的1/10,一共迭代120epoch。除了piecewise_decay,很多研究者也提出了学习率的其他下降方式,如polynomial_decay(多项式下降)、exponential_decay(指数下降),cosine_decay(余弦下降)等,其中cosine_decay无需调整超参数,鲁棒性也比较高,所以成为现在提高模型精度首选的学习率下降方式。Cosine_decay和piecewise_decay的学习率变化曲线如下图所示,容易观察到,在整个训练过程中,cosine_decay都保持着较大的学习率,所以其收敛较为缓慢,但是最终的收敛效果较peicewise_decay更好一些。 - -![](../../images/models/lr_decay.jpeg) - -另外,从图中我们也可以看到,cosine_decay里学习率小的轮数较少,这样会影响到最终的精度,所以为了使得cosine_decay发挥更好的效果,建议迭代更多的轮数,如200轮。 - -### warmup策略 -如果使用较大的batch_size训练神经网络时,我们建议您使用warmup策略。Warmup策略顾名思义就是让学习率先预热一下,在训练初期我们不直接使用最大的学习率,而是用一个逐渐增大的学习率去训练网络,当学习率增大到最高点时,再使用学习率下降策略中提到的学习率下降方式衰减学习率的值。实验表明,在batch_size较大时,warmup可以稳定提升模型的精度。在训练MobileNetV3等batch_size较大的实验中,我们默认将warmup中的epoch设置为5,即先用5epoch将学习率从0增加到最大值,再去做相应的学习率衰减。 - -## 3.batch_size的选择 -batch_size是训练神经网络中的一个重要的超参数,该值决定了一次将多少数据送入神经网络参与训练。在论文[1]中,作者通过实验发现,当batch_size的值与学习率的值呈线性关系时,收敛精度几乎不受影响。在训练ImageNet数据时,大部分的神经网络选择的初始学习率为0.1,batch_size是256,所以根据实际的模型大小和显存情况,可以将学习率设置为0.1\*k,batch_size设置为256\*k。 - -## 4.weight_decay的选择 -过拟合是机器学习中常见的一个名词,简单理解即为模型在训练数据上表现很好,但在测试数据上表现较差,在卷积神经网络中,同样存在过拟合的问题,为了避免过拟合,很多正则方式被提出,其中,weight_decay是其中一个广泛使用的避免过拟合的方式。Weight_decay等价于在最终的损失函数后添加L2正则化,L2正则化使得网络的权重倾向于选择更小的值,最终整个网络中的参数值更趋向于0,模型的泛化性能相应提高。在各大深度学习框架的实现中,该值表达的含义是L2正则前的系数,在paddle框架中,该值的名称是l2_decay,所以以下都称其为l2_decay。该系数越大,表示加入的正则越强,模型越趋于欠拟合状态。在训练ImageNet的任务中,大多数的网络将该参数值设置为1e-4,在一些小的网络如MobileNet系列网络中,为了避免网络欠拟合,该值设置为1e-5~4e-5之间。当然,该值的设置也和具体的数据集有关系,当任务的数据集较大时,网络本身趋向于欠拟合状态,可以将该值适当减小,当任务的数据集较小时,网络本身趋向于过拟合状态,可以将该值适当增大。下表展示了MobileNetV1_x0_25在ImageNet-1k上使用不同l2_decay的精度情况。由于MobileNetV1_x0_25是一个比较小的网络,所以l2_decay过大会使网络趋向于欠拟合状态,所以在该网络中,相对1e-4,3e-5是更好的选择。 - -| 模型 | L2_decay | Train acc1/acc5 | Test acc1/acc5 | -|:--:|:--:|:--:|:--:| -| MobileNetV1_x0_25 | 1e-4 | 43.79%/67.61% | 50.41%/74.70% | -| MobileNetV1_x0_25 | 3e-5 | 47.38%/70.83% | 51.45%/75.45% | - -另外,该值的设置也和训练过程中是否使用其他正则化有关系。如果训练过程中的数据预处理比较复杂,相当于训练任务变的更难,可以将该值适当减小,下表展示了在ImageNet-1k上,ResNet50在使用randaugment预处理方式后使用不同l2_decay的精度。容易观察到,在任务变难后,使用更小的l2_decay有助于模型精度的提升。 - -| 模型 | L2_decay | Train acc1/acc5 | Test acc1/acc5 | -|:--:|:--:|:--:|:--:| -| ResNet50 | 1e-4 | 75.13%/90.42% | 77.65%/93.79% | -| ResNet50 | 7e-5 | 75.56%/90.55% | 78.04%/93.74% | - -综上所述,l2_decay可以根据具体的任务和模型去做相应的调整,通常简单的任务或者较大的模型,推荐使用较大的l2_decay,复杂的任务或者较小的模型,推荐使用较小的l2_decay。 - -## 5.label_smoothing的选择 -Label_smoothing是深度学习中的一种正则化方法,其全称是 Label Smoothing Regularization(LSR),即标签平滑正则化。在传统的分类任务计算损失函数时,是将真实的one hot标签与神经网络的输出做相应的交叉熵计算,而label_smoothing是将真实的one hot标签做一个标签平滑的处理,使得网络学习的标签不再是一个hard label,而是一个有概率值的soft label,其中在类别对应的位置的概率最大,其他位置概率是一个非常小的数。具体的计算方式参见论文[2]。在label_smoothing里,有一个epsilon的参数值,该值描述了将标签软化的程度,该值越大,经过label smoothing后的标签向量的标签概率值越小,标签越平滑,反之,标签越趋向于hard label,在训练ImageNet-1k的实验里通常将该值设置为0.1。 -在训练ImageNet-1k的实验中,我们发现,ResNet50大小级别及其以上的模型在使用label_smooting后,精度有稳定的提升。下表展示了ResNet50_vd在使用label_smoothing前后的精度指标。 - -| 模型 | Use_label_smoothing | Test acc1 | -|:--:|:--:|:--:| -| ResNet50_vd | 0 | 77.9% | -| ResNet50_vd | 1 | 78.4% | - -同时,由于label_smoohing相当于一种正则方式,在相对较小的模型上,精度提升不明显甚至会有所下降,下表展示了ResNet18在ImageNet-1k上使用label_smoothing前后的精度指标。可以明显看到,在使用label_smoothing后,精度有所下降。 - -| 模型 | Use_label_smoohing | Train acc1/acc5 | Test acc1/acc5 | -|:--:|:--:|:--:|:--:| -| ResNet18 | 0 | 69.81%/87.70% | 70.98%/89.92% | -| ResNet18 | 1 | 68.00%/86.56% | 70.81%/89.89% | - - -综上所述,较大的模型使用label_smoohing可以有效提升模型的精度,较小的模型使用label_smoohing可能会降低模型的精度,所以在决定是否使用label_smoohing前,需要评估模型的大小和任务的难易程度。 - -## 6.针对小模型更改图片的crop面积与拉伸变换程度 -在ImageNet-1k数据的标准预处理中,random_crop函数中定义了scale和ratio两个值,两个值分别确定了图片crop的大小和图片的拉伸程度,其中scale的默认取值范围是0.08-1(lower_scale-upper_scale),ratio的默认取值范围是3/4-4/3(lower_ratio-upper_ratio)。在非常小的网络训练中,此类数据增强会使得网络欠拟合,导致精度有所下降。为了提升网络的精度,可以使其数据增强变的更弱,即增大图片的crop区域或者减弱图片的拉伸变换程度。我们可以分别通过增大lower_scale的值或缩小lower_ratio与upper_scale的差距来实现更弱的图片变换。下表列出了使用不同lower_scale训练MobileNetV2_x0_25的精度,可以看到,增大图片的crop区域面积后训练精度和验证精度均有提升。 - -| 模型 | Scale取值范围 | Train_acc1/acc5 | Test_acc1/acc5 | -|:--:|:--:|:--:|:--:| -| MobileNetV2_x0_25 | [0.08,1] | 50.36%/72.98% | 52.35%/75.65% | -| MobileNetV2_x0_25 | [0.2,1] | 54.39%/77.08% | 53.18%/76.14% | - -## 7.使用数据增广方式提升精度 -一般来说,数据集的规模对性能影响至关重要,但是图片的标注往往比较昂贵,所以有标注的图片数量往往比较稀少,在这种情况下,数据的增广尤为重要。在训练ImageNet-1k的标准数据增广中,主要使用了random_crop与random_flip两种数据增广方式,然而,近些年,越来越多的数据增广方式被提出,如cutout、mixup、cutmix、AutoAugment等。实验表明,这些数据的增广方式可以有效提升模型的精度,下表列出了ResNet50在8种不同的数据增广方式的表现,可以看出,相比baseline,所有的数据增广方式均有收益,其中cutmix是目前最有效的数据增广。更多数据增广的介绍请参考[**数据增广章节**](https://paddleclas.readthedocs.io/zh_CN/latest/advanced_tutorials/image_augmentation/ImageAugment.html)。 - -| 模型 | 数据增广方式 | Test top-1 | -|:--:|:--:|:--:| -| ResNet50 | 标准变换 | 77.31% | -| ResNet50 | Auto-Augment | 77.95% | -| ResNet50 | Mixup | 78.28% | -| ResNet50 | Cutmix | 78.39% | -| ResNet50 | Cutout | 78.01% | -| ResNet50 | Gridmask | 77.85% | -| ResNet50 | Random-Augment | 77.70% | -| ResNet50 | Random-Erasing | 77.91% | -| ResNet50 | Hide-and-Seek | 77.43% | - -## 8. 通过train_acc和test_acc确定调优策略 -在训练网络的过程中,通常会打印每一个epoch的训练集准确率和验证集准确率,二者刻画了该模型在两个数据集上的表现。通常来说,训练集的准确率比验证集准确率微高或者二者相当是比较不错的状态。如果发现训练集的准确率比验证集高很多,说明在这个任务上已经过拟合,需要在训练过程中加入更多的正则,如增大l2_decay的值,加入更多的数据增广策略,加入label_smoothing策略等;如果发现训练集的准确率比验证集低一些,说明在这个任务上可能欠拟合,需要在训练过程中减弱正则效果,如减小l2_decay的值,减少数据增广方式,增大图片crop区域面积,减弱图片拉伸变换,去除label_smoothing等。 - -## 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. - -[2]C.Szegedy,V.Vanhoucke,S.Ioffe,J.Shlens,andZ.Wojna. Rethinking the inception architecture for computer vision. CoRR, abs/1512.00567, 2015. diff --git a/docs/zh_CN_tmp/models/Twins.md b/docs/zh_CN_tmp/models/Twins.md deleted file mode 100644 index 143dc6fe..00000000 --- a/docs/zh_CN_tmp/models/Twins.md +++ /dev/null @@ -1,17 +0,0 @@ -# Twins - -## 概述 -Twins网络包括Twins-PCPVT和Twins-SVT,其重点对空间注意力机制进行了精心设计,得到了简单却更为有效的方案。由于该体系结构仅涉及矩阵乘法,而目前的深度学习框架中对矩阵乘法有较高的优化程度,因此该体系结构十分高效且易于实现。并且,该体系结构在图像分类、目标检测和语义分割等多种下游视觉任务中都能够取得优异的性能。[论文地址](https://arxiv.org/abs/2104.13840)。 - -## 精度、FLOPs和参数量 - -| Models | Top1 | Top5 | Reference
top1 | Reference
top5 | FLOPs
(G) | Params
(M) | -|:--:|:--:|:--:|:--:|:--:|:--:|:--:| -| pcpvt_small | 0.8082 | 0.9552 | 0.812 | - | 3.7 | 24.1 | -| pcpvt_base | 0.8242 | 0.9619 | 0.827 | - | 6.4 | 43.8 | -| pcpvt_large | 0.8273 | 0.9650 | 0.831 | - | 9.5 | 60.9 | -| alt_gvt_small | 0.8140 | 0.9546 | 0.817 | - | 2.8 | 24 | -| alt_gvt_base | 0.8294 | 0.9621 | 0.832 | - | 8.3 | 56 | -| alt_gvt_large | 0.8331 | 0.9642 | 0.837 | - | 14.8 | 99.2 | - -**注**:与Reference的精度差异源于数据预处理不同。 diff --git a/docs/zh_CN_tmp/models/ViT_and_DeiT.md b/docs/zh_CN_tmp/models/ViT_and_DeiT.md deleted file mode 100644 index d14491d2..00000000 --- a/docs/zh_CN_tmp/models/ViT_and_DeiT.md +++ /dev/null @@ -1,36 +0,0 @@ -# ViT与DeiT系列 - -## 概述 - -ViT(Vision Transformer)系列模型是Google在2020年提出的,该模型仅使用标准的Transformer结构,完全抛弃了卷积结构,将图像拆分为多个patch后再输入到Transformer中,展示了Transformer在CV领域的潜力。[论文地址](https://arxiv.org/abs/2010.11929)。 - -DeiT(Data-efficient Image Transformers)系列模型是由FaceBook在2020年底提出的,针对ViT模型需要大规模数据集训练的问题进行了改进,最终在ImageNet上取得了83.1%的Top1精度。并且使用卷积模型作为教师模型,针对该模型进行知识蒸馏,在ImageNet数据集上可以达到85.2%的Top1精度。[论文地址](https://arxiv.org/abs/2012.12877)。 - - - - -## 精度、FLOPS和参数量 - -| Models | Top1 | Top5 | Reference
top1 | Reference
top5 | FLOPS
(G) | Params
(M) | -|:--:|:--:|:--:|:--:|:--:|:--:|:--:| -| ViT_small_patch16_224 | 0.7769 | 0.9342 | 0.7785 | 0.9342 | | | -| ViT_base_patch16_224 | 0.8195 | 0.9617 | 0.8178 | 0.9613 | | | -| ViT_base_patch16_384 | 0.8414 | 0.9717 | 0.8420 | 0.9722 | | | -| ViT_base_patch32_384 | 0.8176 | 0.9613 | 0.8166 | 0.9613 | | | -| ViT_large_patch16_224 | 0.8323 | 0.9650 | 0.8306 | 0.9644 | | | -| ViT_large_patch16_384 | 0.8513 | 0.9736 | 0.8517 | 0.9736 | | | -| ViT_large_patch32_384 | 0.8153 | 0.9608 | 0.815 | - | | | - - -| Models | Top1 | Top5 | Reference
top1 | Reference
top5 | FLOPS
(G) | Params
(M) | -|:--:|:--:|:--:|:--:|:--:|:--:|:--:| -| DeiT_tiny_patch16_224 | 0.718 | 0.910 | 0.722 | 0.911 | | | -| DeiT_small_patch16_224 | 0.796 | 0.949 | 0.799 | 0.950 | | | -| DeiT_base_patch16_224 | 0.817 | 0.957 | 0.818 | 0.956 | | | -| DeiT_base_patch16_384 | 0.830 | 0.962 | 0.829 | 0.972 | | | -| DeiT_tiny_distilled_patch16_224 | 0.741 | 0.918 | 0.745 | 0.919 | | | -| DeiT_small_distilled_patch16_224 | 0.809 | 0.953 | 0.812 | 0.954 | | | -| DeiT_base_distilled_patch16_224 | 0.831 | 0.964 | 0.834 | 0.965 | | | -| DeiT_base_distilled_patch16_384 | 0.851 | 0.973 | 0.852 | 0.972 | | | - -关于Params、FLOPs、Inference speed等信息,敬请期待。 diff --git a/docs/zh_CN_tmp/models/index.rst b/docs/zh_CN_tmp/models/index.rst deleted file mode 100644 index 1a64eb2b..00000000 --- a/docs/zh_CN_tmp/models/index.rst +++ /dev/null @@ -1,16 +0,0 @@ -模型库 -================================ - -.. toctree:: - :maxdepth: 1 - - models_intro.md - Tricks.md - ResNet_and_vd.md - Mobile.md - SEResNext_and_Res2Net.md - Inception.md - HRNet.md - DPN_DenseNet.md - EfficientNet_and_ResNeXt101_wsl.md - Others.md diff --git a/docs/zh_CN_tmp/models/models_intro.md b/docs/zh_CN_tmp/models/models_intro.md deleted file mode 100644 index 592893fb..00000000 --- a/docs/zh_CN_tmp/models/models_intro.md +++ /dev/null @@ -1,396 +0,0 @@ -# 模型库概览 - -## 概述 - -基于ImageNet1k分类数据集,PaddleClas支持的36种系列分类网络结构以及对应的175个图像分类预训练模型如下所示,训练技巧、每个系列网络结构的简单介绍和性能评估将在相应章节展现。 - -## 评估环境 -* CPU的评估环境基于骁龙855(SD855)。 -* Intel CPU的评估环境基于Intel(R) Xeon(R) Gold 6148。 -* GPU评估环境基于V100和TensorRT。 - - -![](../../images/models/T4_benchmark/t4.fp32.bs4.main_fps_top1.png) - -![](../../images/models/V100_benchmark/v100.fp32.bs1.main_fps_top1_s.jpg) - -![](../../images/models/mobile_arm_top1.png) - - -> 如果您觉得此文档对您有帮助,欢迎star我们的项目:[https://github.com/PaddlePaddle/PaddleClas](https://github.com/PaddlePaddle/PaddleClas) - - -## 预训练模型列表及下载地址 - -- ResNet及其Vd系列 - - ResNet系列[[1](#ref1)]([论文地址](http://openaccess.thecvf.com/content_cvpr_2016/html/He_Deep_Residual_Learning_CVPR_2016_paper.html)) - - [ResNet18](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/ResNet18_pretrained.pdparams) - - [ResNet34](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/ResNet34_pretrained.pdparams) - - [ResNet50](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/ResNet50_pretrained.pdparams) - - [ResNet101](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/ResNet101_pretrained.pdparams) - - [ResNet152](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/ResNet152_pretrained.pdparams) - - ResNet_vc、ResNet_vd系列[[2](#ref2)]([论文地址](https://arxiv.org/abs/1812.01187)) - - [ResNet50_vc](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/ResNet50_vc_pretrained.pdparams) - - [ResNet18_vd](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/ResNet18_vd_pretrained.pdparams) - - [ResNet34_vd](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/ResNet34_vd_pretrained.pdparams) - - [ResNet34_vd_ssld](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/ResNet34_vd_ssld_pretrained.pdparams) - - [ResNet50_vd](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/ResNet50_vd_pretrained.pdparams) - - [ResNet50_vd_v2](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/ResNet50_vd_v2_pretrained.pdparams) - - [ResNet101_vd](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/ResNet101_vd_pretrained.pdparams) - - [ResNet152_vd](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/ResNet152_vd_pretrained.pdparams) - - [ResNet200_vd](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/ResNet200_vd_pretrained.pdparams) - - [ResNet50_vd_ssld](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/ResNet50_vd_ssld_pretrained.pdparams) - - [Fix_ResNet50_vd_ssld_v2](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/Fix_ResNet50_vd_ssld_v2_pretrained.pdparams) - - [ResNet101_vd_ssld](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/ResNet101_vd_ssld_pretrained.pdparams) - - -- 轻量级模型系列 - - PP-LCNet系列[[28](#28)]([论文地址](https://arxiv.org/pdf/2109.15099.pdf)) - - [PPLCNet_x0_25](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/legendary_models/PPLCNet_x0_25_pretrained.pdparams) - - [PPLCNet_x0_35](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/legendary_models/PPLCNet_x0_35_pretrained.pdparams) - - [PPLCNet_x0_5](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/legendary_models/PPLCNet_x0_5_pretrained.pdparams) - - [PPLCNet_x0_75](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/legendary_models/PPLCNet_x0_75_pretrained.pdparams) - - [PPLCNet_x1_0](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/legendary_models/PPLCNet_x1_0_pretrained.pdparams) - - [PPLCNet_x1_5](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/legendary_models/PPLCNet_x1_5_pretrained.pdparams) - - [PPLCNet_x2_0](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/legendary_models/PPLCNet_x2_0_pretrained.pdparams) - - [PPLCNet_x2_5](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/legendary_models/PPLCNet_x2_5_pretrained.pdparams) - - [PPLCNet_x0_5_ssld](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/legendary_models/PPLCNet_x0_5__ssld_pretrained.pdparams) - - [PPLCNet_x1_0_ssld](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/legendary_models/PPLCNet_x1_0_ssld_pretrained.pdparams) - - [PPLCNet_x2_5_ssld](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/legendary_models/PPLCNet_x2_5__ssld_pretrained.pdparams) - - MobileNetV3系列[[3](#ref3)]([论文地址](https://arxiv.org/abs/1905.02244)) - - [MobileNetV3_large_x0_35](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/MobileNetV3_large_x0_35_pretrained.pdparams) - - [MobileNetV3_large_x0_5](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/MobileNetV3_large_x0_5_pretrained.pdparams) - - [MobileNetV3_large_x0_75](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/MobileNetV3_large_x0_75_pretrained.pdparams) - - [MobileNetV3_large_x1_0](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/MobileNetV3_large_x1_0_pretrained.pdparams) - - [MobileNetV3_large_x1_25](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/MobileNetV3_large_x1_25_pretrained.pdparams) - - [MobileNetV3_small_x0_35](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/MobileNetV3_small_x0_35_pretrained.pdparams) - - [MobileNetV3_small_x0_5](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/MobileNetV3_small_x0_5_pretrained.pdparams) - - [MobileNetV3_small_x0_75](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/MobileNetV3_small_x0_75_pretrained.pdparams) - - [MobileNetV3_small_x1_0](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/MobileNetV3_small_x1_0_pretrained.pdparams) - - [MobileNetV3_small_x1_25](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/MobileNetV3_small_x1_25_pretrained.pdparams) - - [MobileNetV3_large_x1_0_ssld](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/MobileNetV3_large_x1_0_ssld_pretrained.pdparams) - - [MobileNetV3_large_x1_0_ssld_int8]()(coming soon) - - [MobileNetV3_small_x1_0_ssld](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/MobileNetV3_small_x1_0_ssld_pretrained.pdparams) - - MobileNetV2系列[[4](#ref4)]([论文地址](https://arxiv.org/abs/1801.04381)) - - [MobileNetV2_x0_25](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/MobileNetV2_x0_25_pretrained.pdparams) - - [MobileNetV2_x0_5](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/MobileNetV2_x0_5_pretrained.pdparams) - - [MobileNetV2_x0_75](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/MobileNetV2_x0_75_pretrained.pdparams) - - [MobileNetV2](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/MobileNetV2_pretrained.pdparams) - - [MobileNetV2_x1_5](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/MobileNetV2_x1_5_pretrained.pdparams) - - [MobileNetV2_x2_0](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/MobileNetV2_x2_0_pretrained.pdparams) - - [MobileNetV2_ssld](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/MobileNetV2_ssld_pretrained.pdparams) - - MobileNetV1系列[[5](#ref5)]([论文地址](https://arxiv.org/abs/1704.04861)) - - [MobileNetV1_x0_25](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/MobileNetV1_x0_25_pretrained.pdparams) - - [MobileNetV1_x0_5](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/MobileNetV1_x0_5_pretrained.pdparams) - - [MobileNetV1_x0_75](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/MobileNetV1_x0_75_pretrained.pdparams) - - [MobileNetV1](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/MobileNetV1_pretrained.pdparams) - - [MobileNetV1_ssld](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/MobileNetV1_ssld_pretrained.pdparams) - - ShuffleNetV2系列[[6](#ref6)]([论文地址](https://arxiv.org/abs/1807.11164)) - - [ShuffleNetV2_x0_25](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/ShuffleNetV2_x0_25_pretrained.pdparams) - - [ShuffleNetV2_x0_33](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/ShuffleNetV2_x0_33_pretrained.pdparams) - - [ShuffleNetV2_x0_5](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/ShuffleNetV2_x0_5_pretrained.pdparams) - - [ShuffleNetV2](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/ShuffleNetV2_x1_0_pretrained.pdparams) - - [ShuffleNetV2_x1_5](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/ShuffleNetV2_x1_5_pretrained.pdparams) - - [ShuffleNetV2_x2_0](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/ShuffleNetV2_x2_0_pretrained.pdparams) - - [ShuffleNetV2_swish](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/ShuffleNetV2_swish_pretrained.pdparams) - - GhostNet系列[[23](#ref23)]([论文地址](https://arxiv.org/pdf/1911.11907.pdf)) - - [GhostNet_x0_5](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/GhostNet_x0_5_pretrained.pdparams) - - [GhostNet_x1_0](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/GhostNet_x1_0_pretrained.pdparams) - - [GhostNet_x1_3](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/GhostNet_x1_3_pretrained.pdparams) - - [GhostNet_x1_3_ssld](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/GhostNet_x1_3_ssld_pretrained.pdparams) - - MixNet系列[[29](#ref29)]([论文地址](https://arxiv.org/pdf/1907.09595.pdf)) - - [MixNet_S](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/MixNet_S_pretrained.pdparams) - - [MixNet_M](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/MixNet_M_pretrained.pdparams) - - [MixNet_L](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/MixNet_L_pretrained.pdparams) - - ReXNet系列[[30](#ref30)]([论文地址](https://arxiv.org/pdf/2007.00992.pdf)) - - [ReXNet_1_0](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/ReXNet_1_0_pretrained.pdparams) - - [ReXNet_1_3](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/ReXNet_1_3_pretrained.pdparams) - - [ReXNet_1_5](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/ReXNet_1_5_pretrained.pdparams) - - [ReXNet_2_0](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/ReXNet_2_0_pretrained.pdparams) - - [ReXNet_3_0](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/ReXNet_3_0_pretrained.pdparams) - - -- SEResNeXt与Res2Net系列 - - ResNeXt系列[[7](#ref7)]([论文地址](https://arxiv.org/abs/1611.05431)) - - [ResNeXt50_32x4d](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/ResNeXt50_32x4d_pretrained.pdparams) - - [ResNeXt50_64x4d](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/ResNeXt50_64x4d_pretrained.pdparams) - - [ResNeXt101_32x4d](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/ResNeXt101_32x4d_pretrained.pdparams) - - [ResNeXt101_64x4d](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/ResNeXt101_64x4d_pretrained.pdparams) - - [ResNeXt152_32x4d](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/ResNeXt152_32x4d_pretrained.pdparams) - - [ResNeXt152_64x4d](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/ResNeXt152_64x4d_pretrained.pdparams) - - ResNeXt_vd系列 - - [ResNeXt50_vd_32x4d](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/ResNeXt50_vd_32x4d_pretrained.pdparams) - - [ResNeXt50_vd_64x4d](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/ResNeXt50_vd_64x4d_pretrained.pdparams) - - [ResNeXt101_vd_32x4d](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/ResNeXt101_vd_32x4d_pretrained.pdparams) - - [ResNeXt101_vd_64x4d](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/ResNeXt101_vd_64x4d_pretrained.pdparams) - - [ResNeXt152_vd_32x4d](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/ResNeXt152_vd_32x4d_pretrained.pdparams) - - [ResNeXt152_vd_64x4d](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/ResNeXt152_vd_64x4d_pretrained.pdparams) - - SE_ResNet_vd系列[[8](#ref8)]([论文地址](https://arxiv.org/abs/1709.01507)) - - [SE_ResNet18_vd](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/SE_ResNet18_vd_pretrained.pdparams) - - [SE_ResNet34_vd](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/SE_ResNet34_vd_pretrained.pdparams) - - [SE_ResNet50_vd](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/SE_ResNet50_vd_pretrained.pdparams) - - SE_ResNeXt系列 - - [SE_ResNeXt50_32x4d](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/SE_ResNeXt50_32x4d_pretrained.pdparams) - - [SE_ResNeXt101_32x4d](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/SE_ResNeXt101_32x4d_pretrained.pdparams) - - SE_ResNeXt_vd系列 - - [SE_ResNeXt50_vd_32x4d](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/SE_ResNeXt50_vd_32x4d_pretrained.pdparams) - - [SENet154_vd](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/SENet154_vd_pretrained.pdparams) - - Res2Net系列[[9](#ref9)]([论文地址](https://arxiv.org/abs/1904.01169)) - - [Res2Net50_26w_4s](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/Res2Net50_26w_4s_pretrained.pdparams) - - [Res2Net50_vd_26w_4s](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/Res2Net50_vd_26w_4s_pretrained.pdparams) - - [Res2Net50_vd_26w_4s_ssld](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/Res2Net50_vd_26w_4s_ssld_pretrained.pdparams) - - [Res2Net50_14w_8s](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/Res2Net50_14w_8s_pretrained.pdparams) - - [Res2Net101_vd_26w_4s](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/Res2Net101_vd_26w_4s_pretrained.pdparams) - - [Res2Net101_vd_26w_4s_ssld](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/Res2Net101_vd_26w_4s_ssld_pretrained.pdparams) - - [Res2Net200_vd_26w_4s](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/Res2Net200_vd_26w_4s_pretrained.pdparams) - - [Res2Net200_vd_26w_4s_ssld](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/Res2Net200_vd_26w_4s_ssld_pretrained.pdparams) - - -- Inception系列 - - GoogLeNet系列[[10](#ref10)]([论文地址](https://arxiv.org/pdf/1409.4842.pdf)) - - [GoogLeNet](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/GoogLeNet_pretrained.pdparams) - - InceptionV3系列[[26](#ref26)]([论文地址](https://arxiv.org/abs/1512.00567)) - - [InceptionV3](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/InceptionV3_pretrained.pdparams) - - InceptionV4系列[[11](#ref11)]([论文地址](https://arxiv.org/abs/1602.07261)) - - [InceptionV4](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/InceptionV4_pretrained.pdparams) - - Xception系列[[12](#ref12)]([论文地址](http://openaccess.thecvf.com/content_cvpr_2017/html/Chollet_Xception_Deep_Learning_CVPR_2017_paper.html)) - - [Xception41](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/Xception41_pretrained.pdparams) - - [Xception41_deeplab](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/Xception41_deeplab_pretrained.pdparams) - - [Xception65](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/Xception65_pretrained.pdparams) - - [Xception65_deeplab](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/Xception65_deeplab_pretrained.pdparams) - - [Xception71](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/Xception71_pretrained.pdparams) - - -- HRNet系列 - - HRNet系列[[13](#ref13)]([论文地址](https://arxiv.org/abs/1908.07919)) - - [HRNet_W18_C](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/HRNet_W18_C_pretrained.pdparams) - - [HRNet_W18_C_ssld](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/HRNet_W18_C_ssld_pretrained.pdparams) - - [HRNet_W30_C](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/HRNet_W30_C_pretrained.pdparams) - - [HRNet_W32_C](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/HRNet_W32_C_pretrained.pdparams) - - [HRNet_W40_C](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/HRNet_W40_C_pretrained.pdparams) - - [HRNet_W44_C](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/HRNet_W44_C_pretrained.pdparams) - - [HRNet_W48_C](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/HRNet_W48_C_pretrained.pdparams) - - [HRNet_W48_C_ssld](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/HRNet_W48_C_ssld_pretrained.pdparams) - - [HRNet_W64_C](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/HRNet_W64_C_pretrained.pdparams) - - [SE_HRNet_W64_C_ssld](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/SE_HRNet_W64_C_ssld_pretrained.pdparams) - -- DPN与DenseNet系列 - - DPN系列[[14](#ref14)]([论文地址](https://arxiv.org/abs/1707.01629)) - - [DPN68](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/DPN68_pretrained.pdparams) - - [DPN92](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/DPN92_pretrained.pdparams) - - [DPN98](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/DPN98_pretrained.pdparams) - - [DPN107](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/DPN107_pretrained.pdparams) - - [DPN131](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/DPN131_pretrained.pdparams) - - DenseNet系列[[15](#ref15)]([论文地址](https://arxiv.org/abs/1608.06993)) - - [DenseNet121](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/DenseNet121_pretrained.pdparams) - - [DenseNet161](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/DenseNet161_pretrained.pdparams) - - [DenseNet169](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/DenseNet169_pretrained.pdparams) - - [DenseNet201](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/DenseNet201_pretrained.pdparams) - - [DenseNet264](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/DenseNet264_pretrained.pdparams) - - -- EfficientNet与ResNeXt101_wsl系列 - - EfficientNet系列[[16](#ref16)]([论文地址](https://arxiv.org/abs/1905.11946)) - - [EfficientNetB0_small](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/EfficientNetB0_small_pretrained.pdparams) - - [EfficientNetB0](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/EfficientNetB0_pretrained.pdparams) - - [EfficientNetB1](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/EfficientNetB1_pretrained.pdparams) - - [EfficientNetB2](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/EfficientNetB2_pretrained.pdparams) - - [EfficientNetB3](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/EfficientNetB3_pretrained.pdparams) - - [EfficientNetB4](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/EfficientNetB4_pretrained.pdparams) - - [EfficientNetB5](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/EfficientNetB5_pretrained.pdparams) - - [EfficientNetB6](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/EfficientNetB6_pretrained.pdparams) - - [EfficientNetB7](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/EfficientNetB7_pretrained.pdparams) - - ResNeXt101_wsl系列[[17](#ref17)]([论文地址](https://arxiv.org/abs/1805.00932)) - - [ResNeXt101_32x8d_wsl](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/ResNeXt101_32x8d_wsl_pretrained.pdparams) - - [ResNeXt101_32x16d_wsl](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/ResNeXt101_32x16d_wsl_pretrained.pdparams) - - [ResNeXt101_32x32d_wsl](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/ResNeXt101_32x32d_wsl_pretrained.pdparams) - - [ResNeXt101_32x48d_wsl](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/ResNeXt101_32x48d_wsl_pretrained.pdparams) - - [Fix_ResNeXt101_32x48d_wsl](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/Fix_ResNeXt101_32x48d_wsl_pretrained.pdparams) - -- ResNeSt与RegNet系列 - - ResNeSt系列[[24](#ref24)]([论文地址](https://arxiv.org/abs/2004.08955)) - - [ResNeSt50_fast_1s1x64d](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/ResNeSt50_fast_1s1x64d_pretrained.pdparams) - - [ResNeSt50](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/ResNeSt50_pretrained.pdparams) - - RegNet系列[[25](#ref25)]([paper link](https://arxiv.org/abs/2003.13678)) - - [RegNetX_4GF](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/RegNetX_4GF_pretrained.pdparams) - -- Transformer系列 - - Swin-transformer系列[[27](#ref27)]([论文地址](https://arxiv.org/pdf/2103.14030.pdf)) - - [SwinTransformer_tiny_patch4_window7_224](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/SwinTransformer_tiny_patch4_window7_224_pretrained.pdparams) - - [SwinTransformer_small_patch4_window7_224](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/SwinTransformer_small_patch4_window7_224_pretrained.pdparams) - - [SwinTransformer_base_patch4_window7_224](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/SwinTransformer_base_patch4_window7_224_pretrained.pdparams) - - [SwinTransformer_base_patch4_window12_384](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/SwinTransformer_base_patch4_window12_384_pretrained.pdparams) - - [SwinTransformer_base_patch4_window7_224_22k](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/SwinTransformer_base_patch4_window7_224_22k_pretrained.pdparams) - - [SwinTransformer_base_patch4_window7_224_22kto1k](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/SwinTransformer_base_patch4_window7_224_22kto1k_pretrained.pdparams) - - [SwinTransformer_large_patch4_window12_384_22k](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/SwinTransformer_large_patch4_window12_384_22k_pretrained.pdparams) - - [SwinTransformer_large_patch4_window12_384_22kto1k](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/SwinTransformer_large_patch4_window12_384_22kto1k_pretrained.pdparams) - - [SwinTransformer_large_patch4_window7_224_22k](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/SwinTransformer_large_patch4_window7_224_22k_pretrained.pdparams) - - [SwinTransformer_large_patch4_window7_224_22kto1k](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/SwinTransformer_large_patch4_window7_224_22kto1k_pretrained.pdparams) - - ViT系列[[31](#ref31)]([论文地址](https://arxiv.org/pdf/2010.11929.pdf)) - - [ViT_small_patch16_224](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/ViT_small_patch16_224_pretrained.pdparams) - - [ViT_base_patch16_224](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/ViT_base_patch16_224_pretrained.pdparams) - - [ViT_base_patch16_384](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/ViT_base_patch16_384_pretrained.pdparams) - - [ViT_base_patch32_384](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/ViT_base_patch32_384_pretrained.pdparams) - - [ViT_large_patch16_224](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/ViT_large_patch16_224_pretrained.pdparams) - - [ViT_large_patch16_384](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/ViT_large_patch16_384_pretrained.pdparams) - - [ViT_large_patch32_384](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/ViT_large_patch32_384_pretrained.pdparams) - - DeiT系列[[32](#ref32)]([论文地址](https://arxiv.org/pdf/2012.12877.pdf)) - - [DeiT_tiny_patch16_224](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/DeiT_tiny_patch16_224_pretrained.pdparams) - - [DeiT_small_patch16_224](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/DeiT_small_patch16_224_pretrained.pdparams) - - [DeiT_base_patch16_224](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/DeiT_base_patch16_224_pretrained.pdparams) - - [DeiT_base_patch16_384](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/DeiT_base_patch16_384_pretrained.pdparams) - - [DeiT_tiny_distilled_patch16_224](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/DeiT_tiny_distilled_patch16_224_pretrained.pdparams) - - [DeiT_small_distilled_patch16_224](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/DeiT_small_distilled_patch16_224_pretrained.pdparams) - - [DeiT_base_distilled_patch16_224](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/DeiT_base_distilled_patch16_224_pretrained.pdparams) - - [DeiT_base_distilled_patch16_384](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/DeiT_base_distilled_patch16_384_pretrained.pdparams) - - LeViT系列[[33](#ref33)]([论文地址](https://arxiv.org/pdf/2104.01136.pdf)) - - [LeViT_128S](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/LeViT_128S_pretrained.pdparams) - - [LeViT_128](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/LeViT_128_pretrained.pdparams) - - [LeViT_192](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/LeViT_192_pretrained.pdparams) - - [LeViT_256](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/LeViT_256_pretrained.pdparams) - - [LeViT_384](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/LeViT_384_pretrained.pdparams) - - Twins系列[[34](#ref43)]([论文地址](https://arxiv.org/pdf/2104.13840.pdf)) - - [pcpvt_small](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/pcpvt_small_pretrained.pdparams) - - [pcpvt_base](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/pcpvt_base_pretrained.pdparams) - - [pcpvt_large](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/pcpvt_large_pretrained.pdparams) - - [alt_gvt_small](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/alt_gvt_small_pretrained.pdparams) - - [alt_gvt_base](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/alt_gvt_base_pretrained.pdparams) - - [alt_gvt_large](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/alt_gvt_large_pretrained.pdparams) - - TNT系列[[35](#ref35)]([论文地址](https://arxiv.org/pdf/2103.00112.pdf)) - - [TNT_small](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/TNT_small_pretrained.pdparams) - -- 其他模型 - - AlexNet系列[[18](#ref18)]([论文地址](https://papers.nips.cc/paper/4824-imagenet-classification-with-deep-convolutional-neural-networks.pdf)) - - [AlexNet](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/AlexNet_pretrained.pdparams) - - SqueezeNet系列[[19](#ref19)]([论文地址](https://arxiv.org/abs/1602.07360)) - - [SqueezeNet1_0](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/SqueezeNet1_0_pretrained.pdparams) - - [SqueezeNet1_1](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/SqueezeNet1_1_pretrained.pdparams) - - VGG系列[[20](#ref20)]([论文地址](https://arxiv.org/abs/1409.1556)) - - [VGG11](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/VGG11_pretrained.pdparams) - - [VGG13](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/VGG13_pretrained.pdparams) - - [VGG16](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/VGG16_pretrained.pdparams) - - [VGG19](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/VGG19_pretrained.pdparams) - - DarkNet系列[[21](#ref21)]([论文地址](https://arxiv.org/abs/1506.02640)) - - [DarkNet53](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/DarkNet53_pretrained.pdparams) - - RepVGG系列[[36](#ref36)]([论文地址](https://arxiv.org/pdf/2101.03697.pdf)) - - [RepVGG_A0](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/RepVGG_A0_pretrained.pdparams) - - [RepVGG_A1](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/RepVGG_A1_pretrained.pdparams) - - [RepVGG_A2](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/RepVGG_A2_pretrained.pdparams) - - [RepVGG_B0](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/RepVGG_B0_pretrained.pdparams) - - [RepVGG_B1s](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/RepVGG_B1_pretrained.pdparams) - - [RepVGG_B2](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/RepVGG_B2_pretrained.pdparams) - - [RepVGG_B1g2](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/RepVGG_B1g2_pretrained.pdparams) - - [RepVGG_B1g4](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/RepVGG_B1g4_pretrained.pdparams) - - [RepVGG_B2g4](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/RepVGG_B2g4_pretrained.pdparams) - - [RepVGG_B3g4](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/RepVGG_B3g4_pretrained.pdparams) - - HarDNet系列[[37](#ref37)]([论文地址](https://arxiv.org/pdf/1909.00948.pdf)) - - [HarDNet39_ds](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/HarDNet39_ds_pretrained.pdparams) - - [HarDNet68_ds](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/HarDNet68_ds_pretrained.pdparams) - - [HarDNet68](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/HarDNet68_pretrained.pdparams) - - [HarDNet85](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/HarDNet85_pretrained.pdparams) - - DLA系列[[38](#ref38)]([论文地址](https://arxiv.org/pdf/1707.06484.pdf)) - - [DLA102](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/DLA102_pretrained.pdparams) - - [DLA102x2](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/DLA102x2_pretrained.pdparams) - - [DLA102x](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/DLA102x_pretrained.pdparams) - - [DLA169](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/DLA169_pretrained.pdparams) - - [DLA34](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/DLA34_pretrained.pdparams) - - [DLA46_c](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/DLA46_c_pretrained.pdparams) - - [DLA60](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/DLA60_pretrained.pdparams) - - [DLA60x_c](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/DLA60x_c_pretrained.pdparams) - - [DLA60x](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/DLA60x_pretrained.pdparams) - - RedNet系列[[39](#ref39)]([论文地址](https://arxiv.org/pdf/2103.06255.pdf)) - - [RedNet26](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/RedNet26_pretrained.pdparams) - - [RedNet38](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/RedNet38_pretrained.pdparams) - - [RedNet50](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/RedNet50_pretrained.pdparams) - - [RedNet101](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/RedNet101_pretrained.pdparams) - - [RedNet152](https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/RedNet152_pretrained.pdparams) - - - -**注意**:以上模型中EfficientNetB1-B7的预训练模型转自[pytorch版EfficientNet](https://github.com/lukemelas/EfficientNet-PyTorch),ResNeXt101_wsl系列预训练模型转自[官方repo](https://github.com/facebookresearch/WSL-Images),剩余预训练模型均基于飞桨训练得到的,并在configs里给出了相应的训练超参数。 - -## 参考文献 - - -[1] He K, Zhang X, Ren S, et al. Deep residual learning for image recognition[C]//Proceedings of the IEEE conference on computer vision and pattern recognition. 2016: 770-778. - -[2] He T, Zhang Z, Zhang H, et al. Bag of tricks for image classification with convolutional neural networks[C]//Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition. 2019: 558-567. - -[3] Howard A, Sandler M, Chu G, et al. Searching for mobilenetv3[C]//Proceedings of the IEEE International Conference on Computer Vision. 2019: 1314-1324. - -[4] Sandler M, Howard A, Zhu M, et al. Mobilenetv2: Inverted residuals and linear bottlenecks[C]//Proceedings of the IEEE conference on computer vision and pattern recognition. 2018: 4510-4520. - -[5] Howard A G, Zhu M, Chen B, et al. Mobilenets: Efficient convolutional neural networks for mobile vision applications[J]. arXiv preprint arXiv:1704.04861, 2017. - -[6] Ma N, Zhang X, Zheng H T, et al. Shufflenet v2: Practical guidelines for efficient cnn architecture design[C]//Proceedings of the European Conference on Computer Vision (ECCV). 2018: 116-131. - -[7] Xie S, Girshick R, Dollár P, et al. Aggregated residual transformations for deep neural networks[C]//Proceedings of the IEEE conference on computer vision and pattern recognition. 2017: 1492-1500. - - -[8] Hu J, Shen L, Sun G. Squeeze-and-excitation networks[C]//Proceedings of the IEEE conference on computer vision and pattern recognition. 2018: 7132-7141. - - -[9] Gao S, Cheng M M, Zhao K, et al. Res2net: A new multi-scale backbone architecture[J]. IEEE transactions on pattern analysis and machine intelligence, 2019. - -[10] Szegedy C, Liu W, Jia Y, et al. Going deeper with convolutions[C]//Proceedings of the IEEE conference on computer vision and pattern recognition. 2015: 1-9. - - -[11] Szegedy C, Ioffe S, Vanhoucke V, et al. Inception-v4, inception-resnet and the impact of residual connections on learning[C]//Thirty-first AAAI conference on artificial intelligence. 2017. - -[12] Chollet F. Xception: Deep learning with depthwise separable convolutions[C]//Proceedings of the IEEE conference on computer vision and pattern recognition. 2017: 1251-1258. - -[13] Wang J, Sun K, Cheng T, et al. Deep high-resolution representation learning for visual recognition[J]. arXiv preprint arXiv:1908.07919, 2019. - -[14] Chen Y, Li J, Xiao H, et al. Dual path networks[C]//Advances in neural information processing systems. 2017: 4467-4475. - -[15] Huang G, Liu Z, Van Der Maaten L, et al. Densely connected convolutional networks[C]//Proceedings of the IEEE conference on computer vision and pattern recognition. 2017: 4700-4708. - - -[16] Tan M, Le Q V. Efficientnet: Rethinking model scaling for convolutional neural networks[J]. arXiv preprint arXiv:1905.11946, 2019. - -[17] Mahajan D, Girshick R, Ramanathan V, et al. Exploring the limits of weakly supervised pretraining[C]//Proceedings of the European Conference on Computer Vision (ECCV). 2018: 181-196. - -[18] Krizhevsky A, Sutskever I, Hinton G E. Imagenet classification with deep convolutional neural networks[C]//Advances in neural information processing systems. 2012: 1097-1105. - -[19] Iandola F N, Han S, Moskewicz M W, et al. SqueezeNet: AlexNet-level accuracy with 50x fewer parameters and< 0.5 MB model size[J]. arXiv preprint arXiv:1602.07360, 2016. - -[20] Simonyan K, Zisserman A. Very deep convolutional networks for large-scale image recognition[J]. arXiv preprint arXiv:1409.1556, 2014. - -[21] Redmon J, Divvala S, Girshick R, et al. You only look once: Unified, real-time object detection[C]//Proceedings of the IEEE conference on computer vision and pattern recognition. 2016: 779-788. - -[22] Ding X, Guo Y, Ding G, et al. Acnet: Strengthening the kernel skeletons for powerful cnn via asymmetric convolution blocks[C]//Proceedings of the IEEE International Conference on Computer Vision. 2019: 1911-1920. - -[23] Han K, Wang Y, Tian Q, et al. GhostNet: More features from cheap operations[C]//Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition. 2020: 1580-1589. - -[24] Zhang H, Wu C, Zhang Z, et al. Resnest: Split-attention networks[J]. arXiv preprint arXiv:2004.08955, 2020. - -[25] Radosavovic I, Kosaraju R P, Girshick R, et al. Designing network design spaces[C]//Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition. 2020: 10428-10436. - -[26] C.Szegedy, V.Vanhoucke, S.Ioffe, J.Shlens, and Z.Wojna. Rethinking the inception architecture for computer vision. arXiv preprint arXiv:1512.00567, 2015. - -[27] Ze Liu, Yutong Lin, Yue Cao, Han Hu, Yixuan Wei, Zheng Zhang, Stephen Lin and Baining Guo. Swin Transformer: Hierarchical Vision Transformer using Shifted Windows. - -[28]Cheng Cui, Tingquan Gao, Shengyu Wei, Yuning Du, Ruoyu Guo, Shuilong Dong, Bin Lu, Ying Zhou, Xueying Lv, Qiwen Liu, Xiaoguang Hu, Dianhai Yu, Yanjun Ma. PP-LCNet: A Lightweight CPU Convolutional Neural Network. - -[29]Mingxing Tan, Quoc V. Le. MixConv: Mixed Depthwise Convolutional Kernels. - -[30]Dongyoon Han, Sangdoo Yun, Byeongho Heo, YoungJoon Yoo. Rethinking Channel Dimensions for Efficient Model Design. - -[31]Alexey Dosovitskiy, Lucas Beyer, Alexander Kolesnikov, Dirk Weissenborn, Xiaohua Zhai, Thomas Unterthiner, Mostafa Dehghani, Matthias Minderer, Georg Heigold, Sylvain Gelly, Jakob Uszkoreit, Neil Houlsby. AN IMAGE IS WORTH 16X16 WORDS: -TRANSFORMERS FOR IMAGE RECOGNITION AT SCALE. - -[32]Hugo Touvron, Matthieu Cord, Matthijs Douze, Francisco Massa, Alexandre Sablayrolles, Herve Jegou. Training data-efficient image transformers & distillation through attention. - -[33]Benjamin Graham, Alaaeldin El-Nouby, Hugo Touvron, Pierre Stock, Armand Joulin, Herve Jegou, Matthijs Douze. LeViT: a Vision Transformer in ConvNet’s Clothing for Faster Inference. - -[34]Xiangxiang Chu, Zhi Tian, Yuqing Wang, Bo Zhang, Haibing Ren, Xiaolin Wei, Huaxia Xia, Chunhua Shen. Twins: Revisiting the Design of Spatial Attention in Vision Transformers. - -[35]Kai Han, An Xiao, Enhua Wu, Jianyuan Guo, Chunjing Xu, Yunhe Wang. Transformer in Transformer. - -[36]Xiaohan Ding, Xiangyu Zhang, Ningning Ma, Jungong Han, Guiguang Ding, Jian Sun. RepVGG: Making VGG-style ConvNets Great Again. - -[37]Ping Chao, Chao-Yang Kao, Yu-Shan Ruan, Chien-Hsiang Huang, Youn-Long Lin. HarDNet: A Low Memory Traffic Network. - -[38]Fisher Yu, Dequan Wang, Evan Shelhamer, Trevor Darrell. Deep Layer Aggregation. - -[39]Duo Lim Jie Hu, Changhu Wang, Xiangtai Li, Qi She, Lei Zhu, Tong Zhang, Qifeng Chen. Involution: Inverting the Inherence of Convolution for Visual Recognition. \ No newline at end of file diff --git a/docs/zh_CN_tmp/models_training/.gitkeep b/docs/zh_CN_tmp/models_training/.gitkeep deleted file mode 100644 index e69de29b..00000000 diff --git a/docs/zh_CN_tmp/others/update_history.md b/docs/zh_CN_tmp/others/update_history.md deleted file mode 100644 index cd781a66..00000000 --- a/docs/zh_CN_tmp/others/update_history.md +++ /dev/null @@ -1,50 +0,0 @@ -# 更新日志 - - -- 2021.04.15 - - 添加`MixNet_L`和`ReXNet_3_0`系列模型,在ImageNet-1k上`MixNet` 模型Top1 Acc可达78.6%,`ReXNet`模型可达82.09% -- 2021.01.27 - * 添加ViT与DeiT模型,在ImageNet上,ViT模型Top-1 Acc可达81.05%,DeiT模型可达85.5%。 -- 2021.01.08 - * 添加whl包及其使用说明,直接安装paddleclas whl包,即可快速完成模型预测。 -- 2020.12.16 - * 添加对cpp预测的tensorRT支持,预测加速更明显。 -- 2020.12.06 - * 添加SE_HRNet_W64_C_ssld模型,在ImageNet上Top-1 Acc可达0.8475。 -- 2020.11.23 - * 添加GhostNet_x1_3_ssld模型,在ImageNet上Top-1 Acc可达0.7938。 -- 2020.11.09 - * 添加InceptionV3结构和模型,在ImageNet上Top-1 Acc可达0.791。 -- 2020.10.20 - * 添加Res2Net50_vd_26w_4s_ssld模型,在ImageNet上Top-1 Acc可达0.831;添加Res2Net101_vd_26w_4s_ssld模型,在ImageNet上Top-1 Acc可达0.839。 -- 2020.10.12 - * 添加Paddle-Lite demo。 -- 2020.10.10 - * 添加cpp inference demo。 - * 添加FAQ30问。 -- 2020.09.17 - * 添加HRNet_W48_C_ssld模型,在ImageNet上Top-1 Acc可达0.836;添加ResNet34_vd_ssld模型,在ImageNet上Top-1 Acc可达0.797。 - -* 2020.09.07 - * 添加HRNet_W18_C_ssld模型,在ImageNet上Top-1 Acc可达0.81162;添加MobileNetV3_small_x0_35_ssld模型,在ImageNet上Top-1 Acc可达0.5555。 - -* 2020.07.14 - * 添加Res2Net200_vd_26w_4s_ssld模型,在ImageNet上Top-1 Acc可达85.13%。 - * 添加Fix_ResNet50_vd_ssld_v2模型,,在ImageNet上Top-1 Acc可达84.0%。 - -* 2020.06.17 - * 添加英文文档。 - -* 2020.06.12 - * 添加对windows和CPU环境的训练与评估支持。 - -* 2020.05.17 - * 添加混合精度训练。 - -* 2020.05.09 - * 添加Paddle Serving使用文档。 - * 添加Paddle-Lite使用文档。 - * 添加T4 GPU的FP32/FP16预测速度benchmark。 - -* 2020.04.10: - * 第一次提交。 -- GitLab