未验证 提交 22fefb8e 编写于 作者: littletomatodonkey's avatar littletomatodonkey 提交者: GitHub

add elc doc (#5376)

* add elc doc

* fix typo

* add paddlerec doc

* fix bug

* rename

* add thx

* fix link

* minor fix

* fix
上级 6f8726fc
...@@ -42,7 +42,7 @@ ...@@ -42,7 +42,7 @@
- **deploy:** 部署相关文件夹,目前包含PaddleInference推理文件夹以及PaddleServing服务部署文件夹 - **deploy:** 部署相关文件夹,目前包含PaddleInference推理文件夹以及PaddleServing服务部署文件夹
- **tools:** 工具类文件夹,包含训练、评估、预测、模型导出等代码文件 - **tools:** 工具类文件夹,包含训练、评估、预测、模型导出等代码文件
- **scripts:** 工具类文件夹,包含训练、评估、预测、模型导出等脚本文件 - **scripts:** 工具类文件夹,包含训练、评估、预测、模型导出等脚本文件
- **test_tipc:**练一体 (TIPC) 测试文件夹 - **test_tipc:**推一体 (TIPC) 测试文件夹,更多关于TIPC的介绍可以参考:[飞桨训推一体认证(TIPC)开发文档](https://github.com/PaddlePaddle/models/blob/tipc/docs/tipc_test/README.md)
- **README_en.md:** 中文版当前模型的使用说明,规范参考 README 内容要求 - **README_en.md:** 中文版当前模型的使用说明,规范参考 README 内容要求
- **README.md:** 英文版当前模型的使用说明,规范参考 README 内容要求 - **README.md:** 英文版当前模型的使用说明,规范参考 README 内容要求
- **LICENSE:** LICENSE文件 - **LICENSE:** LICENSE文件
......
...@@ -21,10 +21,14 @@ ...@@ -21,10 +21,14 @@
简单的介绍模型,以及模型的主要架构或主要功能,如果能给出效果图,可以在简介的下方直接贴上图片,展示模型效果。然后另起一行,按如下格式给出论文、参考代码及对应的链接。 简单的介绍模型,以及模型的主要架构或主要功能,如果能给出效果图,可以在简介的下方直接贴上图片,展示模型效果。然后另起一行,按如下格式给出论文、参考代码及对应的链接。
注意:在给出参考repo的链接之后,建议添加对参考repo的开发者的致谢。
**论文:** [title](url) **论文:** [title](url)
**参考repo:** [repo name](url) **参考repo:** [repo name](url)
在此非常感谢`$参考repo的 github id$`等人贡献的[repo name](url),提高了本repo复现论文的效率。
## 2. 复现精度 ## 2. 复现精度
给出论文中精度、参考代码的精度、本repo复现的精度、模型下载链接、模型大小,以表格的形式给出。如果超参数有差别,可以在表格中新增一列备注一下。 给出论文中精度、参考代码的精度、本repo复现的精度、模型下载链接、模型大小,以表格的形式给出。如果超参数有差别,可以在表格中新增一列备注一下。
......
# 论文复现指南 # 论文复现指南
## 目录 ## 目录
...@@ -8,6 +8,7 @@ ...@@ -8,6 +8,7 @@
- [2. 整体框图](#2) - [2. 整体框图](#2)
- [2.1 流程概览](#2.1) - [2.1 流程概览](#2.1)
- [2.2 reprod_log whl包](#2.2) - [2.2 reprod_log whl包](#2.2)
- [3. 论文复现理论知识及实战](#3) - [3. 论文复现理论知识及实战](#3)
- [3.1 模型结构对齐](#3.1) - [3.1 模型结构对齐](#3.1)
- [3.2 验证/测试集数据读取对齐](#3.2) - [3.2 验证/测试集数据读取对齐](#3.2)
...@@ -21,6 +22,7 @@ ...@@ -21,6 +22,7 @@
- [3.10 网络初始化对齐](#3.10) - [3.10 网络初始化对齐](#3.10)
- [3.11 模型训练对齐](#3.11) - [3.11 模型训练对齐](#3.11)
- [3.12 单机多卡训练](#3.12) - [3.12 单机多卡训练](#3.12)
- [3.13 TIPC基础链条测试接入](#3.13)
- [4. 论文复现注意事项与FAQ](#4) - [4. 论文复现注意事项与FAQ](#4)
- [4.1 通用注意事项](#4.0) - [4.1 通用注意事项](#4.0)
- [4.2 模型结构对齐](#4.1) - [4.2 模型结构对齐](#4.1)
...@@ -34,6 +36,7 @@ ...@@ -34,6 +36,7 @@
- [4.10 训练集数据读取对齐](#4.9) - [4.10 训练集数据读取对齐](#4.9)
- [4.11 网络初始化对齐](#4.10) - [4.11 网络初始化对齐](#4.10)
- [4.12 模型训练对齐](#4.11) - [4.12 模型训练对齐](#4.11)
- [4.13 TIPC基础链条测试接入](#4.13)
<a name="1"></a> <a name="1"></a>
## 1. 总览 ## 1. 总览
...@@ -59,7 +62,9 @@ ...@@ -59,7 +62,9 @@
* 在该步骤中,以AlexNet为例,生成fake data的脚本可以参考:[gen_fake_data.py](https://github.com/littletomatodonkey/AlexNet-Prod/blob/master/pipeline/fake_data/gen_fake_data.py) * 在该步骤中,以AlexNet为例,生成fake data的脚本可以参考:[gen_fake_data.py](https://github.com/littletomatodonkey/AlexNet-Prod/blob/master/pipeline/fake_data/gen_fake_data.py)
* 在特定设备(CPU/GPU)上,跑通参考代码的预测过程(前向)以及至少2轮(iteration)迭代过程,保证后续基于PaddlePaddle复现论文过程中可对比。 * 在特定设备(CPU/GPU)上,跑通参考代码的预测过程(前向)以及至少2轮(iteration)迭代过程,保证后续基于PaddlePaddle复现论文过程中可对比。
* 本文档基于 `AlexNet-Prod` 代码以及`reprod_log` whl包进行说明与测试。如果希望体验,建议参考[AlexNet-Reprod文档](https://github.com/littletomatodonkey/AlexNet-Prod/blob/master/README.md)进行安装与测试。 * 本文档基于 `AlexNet-Prod` 代码以及`reprod_log` whl包进行说明与测试。如果希望体验,建议参考[AlexNet-Reprod文档](https://github.com/littletomatodonkey/AlexNet-Prod/blob/master/README.md)进行安装与测试。
* 在复现的过程中,只需要将PaddlePaddle的复现代码以及打卡日志上传至github,不能在其中添加参考代码的实现,在验收通过之后,需要删除打卡日志。建议在初期复现的时候,就将复现代码与参考代码分成2个文件夹进行管理。 * 在复现的过程中,只需要将PaddlePaddle的复现代码以及打卡日志上传至github,不能在其中添加`参考代码的实现`,在验收通过之后,需要删除打卡日志。建议在初期复现的时候,就将**复现代码与参考代码分成2个文件夹进行管理**
* 飞桨训推一体认证 (Training and Inference Pipeline Certification, TIPC) 是一个针对飞桨模型的测试工具,方便用户查阅每种模型的训练推理部署打通情况,并可以进行一键测试。论文训练对齐之后,需要为代码接入TIPC基础链条测试文档与代码,关于TIPC基础链条测试接入规范的文档可以参考:[链接](https://github.com/PaddlePaddle/models/blob/tipc/docs/tipc_test/development_specification_docs/train_infer_python.md)。更多内容在`3.13`章节部分也会详细说明。
<a name="2"></a> <a name="2"></a>
## 2. 整体框图 ## 2. 整体框图
...@@ -69,9 +74,9 @@ ...@@ -69,9 +74,9 @@
面对一篇计算机视觉论文,复现该论文的整体流程如下图所示。 面对一篇计算机视觉论文,复现该论文的整体流程如下图所示。
![图片](images/framework.png) ![图片](images/framework_reprodcv.png)
总共包含11个步骤。为了高效复现论文,设置了5个验收节点。如上图中黄色框所示。后续章节会详细介绍上述步骤和验收节点,具体内容安排如下: 总共包含11个步骤。为了高效复现论文,设置了6个验收节点。如上图中黄色框所示。后续章节会详细介绍上述步骤和验收节点,具体内容安排如下:
* 第3章:介绍11个复现步骤的理论知识、实战以及验收流程。 * 第3章:介绍11个复现步骤的理论知识、实战以及验收流程。
* 第4章:针对复现流程过程中每个步骤可能出现的问题,本章会进行详细介绍。如果还是不能解决问题,可以提ISSUE进行讨论,提ISSUE地址:[https://github.com/PaddlePaddle/Paddle/issues/new/choose](https://github.com/PaddlePaddle/Paddle/issues/new/choose) * 第4章:针对复现流程过程中每个步骤可能出现的问题,本章会进行详细介绍。如果还是不能解决问题,可以提ISSUE进行讨论,提ISSUE地址:[https://github.com/PaddlePaddle/Paddle/issues/new/choose](https://github.com/PaddlePaddle/Paddle/issues/new/choose)
...@@ -144,8 +149,12 @@ log_reprod ...@@ -144,8 +149,12 @@ log_reprod
``` ```
上述文件的生成代码都需要开发者进行开发,验收时需要提供上面罗列的所有文件(不需要提供产生这些文件的可运行程序)以及完整的模型训练评估程序和日志。 上述文件的生成代码都需要开发者进行开发,验收时需要提供上面罗列的所有文件(不需要提供产生这些文件的可运行程序)以及完整的模型训练评估程序和日志。
AlexNet-Prod项目提供了基于reprod_log的5个验收点对齐验收示例,具体代码地址为:[https://github.com/littletomatodonkey/AlexNet-Prod/blob/master/pipeline/](https://github.com/littletomatodonkey/AlexNet-Prod/blob/master/pipeline/)
每个文件夹中的README.md文档提供了使用说明。 AlexNet-Prod项目提供了基于reprod_log的前5个验收点对齐验收示例,参考代码地址为:[https://github.com/littletomatodonkey/AlexNet-Prod/blob/master/pipeline/](https://github.com/littletomatodonkey/AlexNet-Prod/blob/master/pipeline/),每个文件夹中的README.md文档提供了使用说明。
InsightFace项目中提供了`TIPC基础链条验收点`的验收示例,参考代码地址为:[https://github.com/deepinsight/insightface/blob/master/recognition/arcface_paddle/test_tipc/readme.md](https://github.com/deepinsight/insightface/blob/master/recognition/arcface_paddle/test_tipc/readme.md),更多关于TIPC基础链条测试接入规范的代码可以参考:[https://github.com/PaddlePaddle/models/blob/tipc/docs/tipc_test/development_specification_docs/train_infer_python.md](https://github.com/PaddlePaddle/models/blob/tipc/docs/tipc_test/development_specification_docs/train_infer_python.md)
<a name="3"></a> <a name="3"></a>
## 3. 论文复现理论知识及实战 ## 3. 论文复现理论知识及实战
...@@ -571,6 +580,7 @@ random.seed(config.SEED) ...@@ -571,6 +580,7 @@ random.seed(config.SEED)
4. 提交内容:将`train_align_paddle.npy``train_align_benchmark.npy``train_align_diff_log.txt`文件备份到`3.1节验收环节`新建的文件夹中,最终一并打包上传即可。 4. 提交内容:将`train_align_paddle.npy``train_align_benchmark.npy``train_align_diff_log.txt`文件备份到`3.1节验收环节`新建的文件夹中,最终一并打包上传即可。
<a name="3.12"></a> <a name="3.12"></a>
### 3.12 单机多卡训练 ### 3.12 单机多卡训练
如果希望使用单机多卡提升训练效率,可以从以下几个过程对代码进行修改。 如果希望使用单机多卡提升训练效率,可以从以下几个过程对代码进行修改。
...@@ -658,12 +668,42 @@ python3.7 -m paddle.distributed.launch \ ...@@ -658,12 +668,42 @@ python3.7 -m paddle.distributed.launch \
本部分可以参考文档:[单机多卡训练脚本](https://github.com/littletomatodonkey/AlexNet-Prod/blob/master/pipeline/Step5/AlexNet_paddle/train_dist.sh) 本部分可以参考文档:[单机多卡训练脚本](https://github.com/littletomatodonkey/AlexNet-Prod/blob/master/pipeline/Step5/AlexNet_paddle/train_dist.sh)
<a name="3.13"></a>
### 3.13 TIPC基础链条测试接入
**【基本流程】**
* 完成模型的训练、导出inference、基于PaddleInference的推理过程的文档与代码。参考链接:
* [insightface训练预测使用文档](https://github.com/deepinsight/insightface/blob/master/recognition/arcface_paddle/README_cn.md)
* [PaddleInference使用文档](https://www.paddlepaddle.org.cn/documentation/docs/zh/guides/05_inference_deployment/inference/inference_cn.html)
* 基于[TIPC基础链条测试接入规范](https://github.com/PaddlePaddle/models/blob/tipc/docs/tipc_test/development_specification_docs/train_infer_python.md),完成该模型的TIPC基础链条开发以及测试文档/脚本,目录为`test_tipc`,测试脚本名称为`test_train_inference_python.sh`,该任务中只需要完成`少量数据训练模型,少量数据预测`的模式即可,用于测试TIPC流程的模型和少量数据需要放在当前repo中。
**【注意事项】**
* 基础链条测试接入时,只需要验证`少量数据训练模型,少量数据预测`的模式,只需要在Linux下验证通过即可。
* 在文档中需要给出一键测试的脚本与使用说明。
**【实战】**
TIPC基础链条测试接入用例可以参考:[InsightFace-paddle TIPC基础链条测试开发文档](https://github.com/deepinsight/insightface/blob/master/recognition/arcface_paddle/test_tipc/readme.md)
**【验收】**
* TIPC基础链条测试文档清晰,`test_train_inference_python.sh`脚本可以成功执行并返回正确结果。
<a name="4"></a> <a name="4"></a>
## 4. 论文复现注意事项与FAQ ## 4. 论文复现注意事项与FAQ
本部分主要总结大家在论文复现赛过程中遇到的问题,如果本章内容没有能够解决你的问题,欢迎给该文档提出优化建议或者给Paddle提[ISSUE](https://github.com/PaddlePaddle/Paddle/issues/new/choose) 本部分主要总结大家在论文复现赛过程中遇到的问题,如果本章内容没有能够解决你的问题,欢迎给该文档提出优化建议或者给Paddle提[ISSUE](https://github.com/PaddlePaddle/Paddle/issues/new/choose)
<a name="4.0"></a> <a name="4.0"></a>
### 4.1 通用注意事项 ### 4.1 通用注意事项
* 需要仔细对照PaddlePaddle与参考代码的优化器参数实现,确保优化器参数严格对齐。 * 需要仔细对照PaddlePaddle与参考代码的优化器参数实现,确保优化器参数严格对齐。
...@@ -846,3 +886,11 @@ w.backward() ...@@ -846,3 +886,11 @@ w.backward()
* 生成任务中,训练时经常需要固定一部分网络参数。对于一个参数`param`,可以通过`param.trainable = False`来固定。 * 生成任务中,训练时经常需要固定一部分网络参数。对于一个参数`param`,可以通过`param.trainable = False`来固定。
* 在训练GAN时,通常通过GAN的loss较难判断出训练是否收敛,建议每训练几次迭代保存一下训练生成的图像,通过可视化判断训练是否收敛。 * 在训练GAN时,通常通过GAN的loss较难判断出训练是否收敛,建议每训练几次迭代保存一下训练生成的图像,通过可视化判断训练是否收敛。
* 在训练GAN时,如果PaddlePaddle实现的代码已经可以与参考代码完全一致,参考代码和PaddlePaddle代码均难以收敛,则可以在训练的时候,可以判断一下loss,如果loss大于一个阈值或者直接为NAN,说明训崩了,就终止训练,使用最新存的参数重新继续训练。可以参考该链接的实现:[链接](https://github.com/JennyVanessa/Paddle-GI) * 在训练GAN时,如果PaddlePaddle实现的代码已经可以与参考代码完全一致,参考代码和PaddlePaddle代码均难以收敛,则可以在训练的时候,可以判断一下loss,如果loss大于一个阈值或者直接为NAN,说明训崩了,就终止训练,使用最新存的参数重新继续训练。可以参考该链接的实现:[链接](https://github.com/JennyVanessa/Paddle-GI)
<a name="4.13"></a>
### 4.13 TIPC基础链条测试接入
* 在接入时,建议将少量用于测试的数据打包(`tar -zcf lite_data.tar data/`),放在data目录下,后续在进行环境准备的时候,直接解压该压缩包即可。
* 接入过程中,需要依赖于inference模型,因此建议首先提供模型导出和基于inference模型的预测脚本,之后再接入TIPC测试代码与文档。
# 模型工程落地赛指南
- [1. 背景](#1)
- [2. 系统框图](#2)
- [2.1 任务概览](#2.1)
- [3. 模型合入官方套件](#3)
- [3.1 简介](#3.1)
- [3.3 具体内容](#3.2)
- [3.3 验收方法](#3.3)
- [4. 模型工程落地赛](#4)
- [4.1 增加TIPC基础链条支持](#4.1)
- [4.2 Paddle Serving服务化部署](#4.2)
- [4.3 模型轻量化骨干网络验证](#4.3)
- [5. 模型工程落地赛FAQ](#5)
- [5.1 通用问题](#5.1)
- [5.2 模型合入官方套件](#5.2)
- [5.3 TIPC基础链条预测](5.3)
- [5.4 Paddle Serving服务化部署](#5.4)
- [5.5 轻量化骨干网络验证](5.5)
<a name="1"></a>
## 1. 背景
飞桨除了基本的模型训练和预测,还提供了支持多端多平台的高性能推理部署工具。希望通过模型工程落地赛指南,完成以下2个目标。
* 保证飞桨训推一体这样一个复杂系统工程的可靠性:软件环境、硬件版本复杂多变,通过训推一体链条基础链条,保证模型基础训练预测功能的可靠性。
* 保证飞桨训推一体功能完备性:作为产业级深度学习平台,PaddlePaddle希望模型可以被更多的开发者在实际的使用场景中使用。提供了训推一体的pipeline,方便用户查询部署支持情况:python、C++、lite、serving、各种硬件,进而可以选择合适的部署方案。
<div align="center">
<img src="./images/framework_tipc.png" width = "1200" />
</div>
官网链接:[飞桨训练推理部署导航](https://www.paddlepaddle.org.cn/wholechain)
<a name="2"></a>
## 2. 系统框图
<a name="2.1"></a>
### 2.1 任务概览
工程落地赛包含以下2种方式。
1. 合入官方套件:按照规范,将模型合入官方套件。
2. 模型工程落地赛:需要完成下面3个任务中的若干项。
* 增加TIPC基础链条支持。
* PaddleServing服务化部署。
* 轻量化骨干网络验证。
对于每篇论文,需要根据特定要求的步骤完成要求的过程。
<a name="3"></a>
## 3. 模型合入官方套件
<a name="3.1"></a>
### 3.1 简介
将开发者经过整理且符合规范的代码合入到官方套件,可以进一步提升个人影响力以及代码文档的规范性,同时也可以增加官方套件的丰富性。
<a name="3.2"></a>
### 3.2 具体内容
按照官方套件的代码规范,将复现的论文适配到对应的套件中。各个repo的代码贡献指南以及参考PR如下所示。
| 官方套件 | 贡献代码指南 | 示例代码链接 |
|:---:|:---:|:---:|
| [PaddleClas](https://github.com/PaddlePaddle/PaddleClas) | [贡献指南](https://github.com/PaddlePaddle/PaddleClas/blob/develop/docs/zh_CN/advanced_tutorials/how_to_contribute.md) | [Swin Transformer PR](https://github.com/PaddlePaddle/PaddleClas/pull/685) |
| [PaddleDetection](https://github.com/PaddlePaddle/PaddleDetection) | PaddleDetection源码解析[1](https://aistudio.baidu.com/aistudio/projectdetail/1327454), [2](https://aistudio.baidu.com/aistudio/projectdetail/1422393), [3](https://aistudio.baidu.com/aistudio/projectdetail/1422430) | [CenterNet PR](https://github.com/PaddlePaddle/PaddleDetection/pull/4098) |
| [PaddleSeg](https://github.com/PaddlePaddle/PaddleSeg) | [PaddleSeg模型开发文档](https://github.com/PaddlePaddle/PaddleSeg/blob/release/2.3/docs/pr/pr/style_cn.md)[PaddleSeg代码提交流程与规范](https://github.com/PaddlePaddle/PaddleSeg/blob/release/2.3/docs/pr/pr/pr.md) | [SegNet PR](https://github.com/PaddlePaddle/PaddleSeg/pull/1416) |
| [PaddleOCR](https://github.com/PaddlePaddle/PaddleOCR) | [如何新增算法](https://github.com/PaddlePaddle/PaddleOCR/blob/dygraph/doc/doc_ch/add_new_algorithm.md) | [PseNet PR](https://github.com/PaddlePaddle/PaddleOCR/pull/3376/files) |
| [PaddleVideo](https://github.com/PaddlePaddle/PaddleVideo) | - | [PP-TSN PR](https://github.com/PaddlePaddle/PaddleVideo/pull/162) |
| [PaddleGAN](https://github.com/PaddlePaddle/PaddleGAN) | [贡献指南](https://github.com/PaddlePaddle/PaddleGAN/blob/develop/docs/en_US/contribute.md) | [PAN PR](https://github.com/PaddlePaddle/PaddleGAN/pull/426) |
| [PaddleRec](https://github.com/PaddlePaddle/PaddleRec) | [贡献指南](https://github.com/PaddlePaddle/PaddleRec/blob/master/doc/contribute.md) | [DeepFM PR](https://github.com/PaddlePaddle/PaddleRec/pull/321) |
<a name="3.3"></a>
### 3.3 验收方法
按照官方套件的代码贡献指南,提交代码,提供PR链接,由Paddle官方同学review,选手根据review意见进行修改与完善。代码合入后即认为验收通过。
<a name="4"></a>
## 4. 模型工程落地赛
<a name="4.1"></a>
### 4.1 增加TIPC基础链条支持
#### 4.1.1 简介
飞桨除了基本的模型训练和预测,还提供了支持多端多平台的高性能推理部署工具。本文档以Arcface为例,展示了 PaddlePaddle 模型的飞桨训推一体认证 (Training and Inference Pipeline Certification(TIPC)) 信息和测试工具,方便用户查阅每种模型的训练推理部署打通情况,并可以进行一键测试。
#### 4.1.2 具体内容
* 完成模型的训练、评估、预测、导出inference、基于PaddleInference的推理过程的文档与代码。参考链接:
* [insightface训练预测使用文档](https://github.com/deepinsight/insightface/blob/master/recognition/arcface_paddle/README_cn.md)
* [PaddleInference使用文档](https://www.paddlepaddle.org.cn/documentation/docs/zh/guides/05_inference_deployment/inference/inference_cn.html)
* 基于[TIPC基础链条测试接入规范](https://github.com/PaddlePaddle/models/blob/tipc/docs/tipc_test/development_specification_docs/train_infer_python.md),完成该模型的TIPC基础链条开发以及测试文档/脚本,目录为`test_tipc`,测试脚本名称为`test_train_inference_python.sh`,该任务中只需要完成`lite_train_lite_infer`模式即可,用于测试TIPC流程的少量数据需要放在当前repo中,同时明确注明来源。参考链接:
* [insightface TIPC基础链条测试开发文档](https://github.com/deepinsight/insightface/blob/master/recognition/arcface_paddle/test_tipc/readme.md)
#### 4.1.3 验收方法
* 根据文档流程,基于模型的训练、预测、评估、模型预测、导出inference、基于PaddleInference的推理过程,代码可执行。具体地,要求
* 按照文档操作步骤,训练可以跑通,前100轮loss收敛正常,并在`test_log`目录下提供`log_train.txt`的日志文件。
* 基于提供的模型,评估指标可以达到文档中所述精度,在README文档中给出模型评估方法和说明。
* 提供真实测试图像,基于预训练模型的预测与基于导出的inference模型的推理结果完全一致,并在README文档中给出二者的`使用说明、脚本、预测、推理结果`
* TIPC基础链条测试文档清晰,`test_train_inference_python.sh`脚本可以成功执行并返回正确结果。
<a name="4.2"></a>
### 4.2 Paddle Serving服务化部署
#### 4.2.1 简介
Paddle Serving 旨在帮助深度学习开发者轻易部署在线预测服务。目标是:当用户使用 Paddle 训练了一个深度神经网络,就同时拥有了该模型的预测服务。
#### 4.2.2 具体内容
* 完成基于该模型的Paddle Serving模型部署,提供相应的说明文档。参考链接:
* [PaddleServing官方文档](https://www.paddlepaddle.org.cn/tutorials/projectdetail/1975340)
* [InsightFace Paddle Serving部署教程](https://github.com/deepinsight/insightface/blob/master/recognition/arcface_paddle/deploy/pdserving/README_CN.md)
* 将Paddle Serving的功能添加到文件夹`test_tipc`中,编写`test_serving.sh`脚本文件与相应的Paddle Serving测试开发规范文档。参考链接:
* [Paddle Serving测试开发文档](https://github.com/PaddlePaddle/PaddleOCR/blob/dygraph/test_tipc/docs/test_serving.md)
#### 4.2.3 验收方法
* 该模型基于Paddle Serving的部署文档清晰可读,根据文档说明流程,可以成功完成:`启动服务``发送服务请求``获取返回结果`,返回结果与`章节4.1.3`中的模型推理结果完全相同。
* Paddle Serving测试开发规范文档清晰可读,`test_serving.sh`脚本可成功执行。
<a name="4.3"></a>
### 4.3 模型轻量化骨干网络验证
#### 4.3.1 简介
作为产业结合的深度学习框架,PaddlePaddle希望被更多用户在实际的场景中应用,但是大部分论文都是基于相对较大的骨干网络进行实验,如VGG、ResNet等,本部分希望通过更换骨干网络,让模型轻量化,方便实际部署过程。
#### 4.3.2 具体内容
* 更换骨干网络,进行模型训练,记录精度、预训练模型,保存日志文件。
* 将更换了骨干网络部分产出的模型接入`TIPC基础链条`,并将测试文档和测试脚本放置在`test_tipc`目录中。
#### 4.3.3 轻量化网络选型和特征抽取选型
* 网络选型
按照轻量化网络的性能和模型大小,选取了下面的五个轻量化网络,
|网络 | ImageNet TOP1 ACC | 模型大小 |
|:---:|:---:|:---:|
| GhostNet_x1_3 | 0.7579 | 42MB |
| PP-LCNet_x1_0 | 0.7132 | 11MB |
| MobileNetV1_x1_0 | 0.7099 | 24MB |
| MobileNetV3_large_x1_0 | 0.7530 | 32MB |
| ShuffleNetV2_x1_0 | 0.6880 | 12MB |
* 特征图抽取
对于检测,分割等CV任务,在backbone阶段一般输出`3~4`个特征图,分别在backbone输出shape为输入shape的`1/4`, `1/8`, `1/16``1/32` 处,在进行接入时,可以逐层打印网络的输出shape。
如PaddleDetection里MobileNetV3_large_x1_0,当输入为 `[1,3,640,640]` 时,输出的shape如下。
```
idx: 2 shape [1, 16, 320, 320]
idx: 3 shape [1, 24, 160, 160]
idx: 4 shape [1, 24, 160, 160]
idx: 5 shape [1, 40, 80, 80]
idx: 6 shape [1, 40, 80, 80]
idx: 7 shape [1, 40, 80, 80]
idx: 8 shape [1, 80, 40, 40]
idx: 9 shape [1, 80, 40, 40]
idx: 10 shape [1, 80, 40, 40]
idx: 11 shape [1, 80, 40, 40]
idx: 12 shape [1, 112, 40, 40]
idx: 13 shape [1, 112, 40, 40]
idx: 14 shape [1, 160, 20, 20]
idx: 15 shape [1, 160, 20, 20]
idx: 16 shape [1, 160, 20, 20]
```
各个阶段特征图和idx对应关系如下,各个特征图大小对应的idx分别有很多个,通常取最后一个idx即为传入网络的idx,这里为[4, 7, 13, 16]。
|特征图大小| 对应的idx |
|:---:|:---:|
|1/4 | [3,4] |
|1/8 | [5,6,7] |
| 1/16|[8,9,10,11,12,13] |
|1/32 | [14,15,16] |
示例代码:[PaddleDetection CenterNet文档和配置](https://github.com/PaddlePaddle/PaddleDetection/blob/develop/configs/centernet/README_cn.md)
#### 4.3.4 验收方法
* 更换骨干网络,填写上表中详细内容,提交训练代码、不同骨干网络下的训练日志以及结果表格。
|骨干网络 | 模型指标 | 模型训练超参(有变化时需要说明) |
|:---:|:---:|:---:|
| 原始论文 | 37.4 | - |
| GhostNet_x1_3 | 28.9 | batchsize=32 |
| PP-LCNet_x1_0 | 26.9 | batchsize=32 |
| MobileNetV1_x1_0 | 28.2 | batchsize=32 |
| MobileNetV3_large_x1_0 | 27.1 | batchsize=32 |
| ShuffleNetV2_x1_0 | 23.8| batchsize=32 |
* 文件夹`test_tipc`目录中,将不同骨干网络对应的模型接入基础链条测试规范并验证通过。
<a name="5"></a>
## 5. 模型工程落地赛注意事项与FAQ
<a name="5.1"></a>
### 5.1 通用问题
* 如果在任何阶段,报错信息提示为Paddle导致,可以给Paddle提[ISSUE](https://github.com/PaddlePaddle/Paddle/issues/new/choose),获得研发同学高优支持。
<a name="5.2"></a>
### 5.2 模型合入官方套件
* 合入的过程中,如果有代码方面的问题,可以在对应模型套件的repo下面新建ISSUE,注明目前的具体问题,标题中补充`【工程落地赛】`
<a name="5.3"></a>
### 5.3 TIPC基础链条预测
* 动转静遇到问题时的调试方法:[动态图转静态图调试方法教程](https://www.paddlepaddle.org.cn/documentation/docs/zh/develop/guides/04_dygraph_to_static/debugging_cn.html)
<a name="5.3"></a>
### 5.4 Paddle Serving服务化部署
* 如果发送请求后没有结果返回或者提示输出解码报错,可能是因为:
* 启动服务和发送请求时不能设置代理,可以在启动服务前和发送请求前关闭代理,关闭代理的命令是:
```
unset https_proxy
unset http_proxy
```
<a name="5.4"></a>
### 5.5 轻量化骨干网络验证
* 该工程落地项主要是为验证CV任务中的骨干网络,下面一些任务不需要验证该项。
* NLP任务
* 图像分类任务
* 非模型训练任务(模型可视化等)
* 对抗攻击网络
* 更多...
* 骨干网络的实现与预训练模型可以从[PaddleClas](https://github.com/PaddlePaddle/PaddleClas)中获得。
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册