diff --git a/model_zoo/how_to_contribute/CONTRIBUTING.md b/model_zoo/how_to_contribute/CONTRIBUTING.md new file mode 100644 index 00000000000..20a0d94e5ff --- /dev/null +++ b/model_zoo/how_to_contribute/CONTRIBUTING.md @@ -0,0 +1,134 @@ +# 如何贡献MindSpore ModelZoo + + + +- [如何贡献MindSpore ModelZoo](#如何贡献mindspore-modelzoo) + - [准备工作](#准备工作) + - [了解贡献协议与流程](#了解贡献协议与流程) + - [确定自己贡献的目标](#确定自己贡献的目标) + - [代码提交](#代码提交) + - [CodeStyle](#codestyle) + - [目录结构](#目录结构) + - [ReadMe 说明](#readme-说明) + - [关于第三方引用](#关于第三方引用) + - [引用额外的python库](#引用额外的python库) + - [引用第三方开源代码](#引用第三方开源代码) + - [引用其他系统库](#引用其他系统库) + - [提交自检列表](#提交自检列表) + - [维护与交流](#维护与交流) + + + +本指导用于明确ModelZoo贡献规范,从而确保众多的开发者能够以一种相对统一的风格和流程参与到ModelZoo的建设中。 + +## 准备工作 + +### 了解贡献协议与流程 + +你应该优先参考MindSpore的[CONTRIBUTE.md](../CONTRIBUTING.md)说明来理解MindSpore的开源协议和运作方式,并确保自己已完成CLA的签署。 + + + +## 代码提交 + +### CodeStyle + +参考[CONTRIBUTE.md](../CONTRIBUTING.md)中关于CodeStyle的说明,你应该确保自己的代码与MindSpore的现有代码风格保持一致。 + +### 目录结构 + +为了保证ModelZoo中的实现能够提供一种相对统一的使用方法,我们提供了一种基础的**目录结构模板**,你应该基于此结构来组织自己的工程。 + +```shell +model_zoo +├── official # 官方支持模型 +│ └── XXX # 模型名 +│ ├── README.md # 模型说明文档 +│ ├── eval.py # 精度验证脚本 +│ ├── export.py # 推理模型导出脚本 +│ ├── scripts # 脚本文件 +│ │   ├── run_distributed_train.sh # 分布式训练脚本 +│ │   ├── run_eval.sh # 验证脚本 +│ │   └── run_standalone_train.sh # 单机训练脚本 +│ ├── src # 模型定义源码目录 +│ │   ├── XXXNet.py # 模型结构定义 +│ │   ├── callback.py # 回调函数定义 +│ │   ├── config.py # 模型配置参数文件 +│ │   └── dataset.py # 数据集处理定义 +│ ├── ascend_infer # (可选)用于在Ascend推理设备上进行离线推理的脚本 +│ ├── third_party # (可选)第三方代码 +│ │   └── XXXrepo # (可选)完整克隆自第三方仓库的代码 +│ └── train.py # 训练脚本 +├── research # 非官方研究脚本 +├── community # 合作方脚本链接 +└── utils # 模型通用工具 +``` + +你可以参照以下原则,根据自己的需要在模板基础上做一些适配自己实现的修改 + +1. 模型根目录下只放置带有`main方法`的可执行脚本,模型的定义文件统一放在`src`目录下,该目录下可以根据自己模型的复杂程度自行组织层次结构。 +2. 配置参数应当与网络定义分离,将所有可配置的参数抽离到`src/config.py`文件中统一定义。 +3. 上传内容应当只包含脚本、代码和文档,**不要上传**任何数据集或checkpoint之类的数据文件。 +4. third_party用于存放需要引用的第三方代码,但是不要直接将代码拷贝到目录下上传,而应该使用git链接的形式,在使用时下载。 +5. 每个模型的代码应当自成闭包,可以独立的迁移使用,不应当依赖模型目录以外的其他代码。utils内只是通用工具,并非通用函数库。 +6. 上传内容中**不要包含**任何你的个人信息,例如你的主机IP,个人密码,本地目录等。 + +### ReadMe 说明 + +每个AI模型都需要一个对应的`README.md`作为说明文档,对当前的模型实现进行介绍,从而向其他用户传递以下信息: + +1. 这是个什么模型?来源和参考是什么? +2. 当前的实现包含哪些内容? +3. 如何使用现有的实现? +4. 这个模型表现如何? + +对此,我们提供了一个基础的[README模版](./README_template.md),你应该参考此模版来完善自己的说明文档, 也可以参考其他现有模型的readme。 + +### 关于第三方引用 + +#### 引用额外的python库 + +确保将自己所需要的额外python库和对应版本(如果有明确要求)注明在`requirements.txt`文件。你应该优先选择和MindSpore框架兼容的第三方库。 + +#### 引用第三方开源代码 + +你应该保证所提交的代码是自己原创开发所完成的。 + +当你需要借助一些开源社区的力量,应当优先引用一些成熟可信的开源项目,同时确认自己所选择的开源项目所使用的开源协议是否符合要求。 + +当你使用开源代码时,正确的使用方式是通过git地址获取对应代码,并在使用中将对应代码归档在独立的`third_party`目录中,保持与自己的代码隔离。**切勿粗暴的拷贝对应代码片段到自己的提交中。** + +#### 引用其他系统库 + +你应该减少对一些独特系统库的依赖,因为这通常意味着你的提交在不同系统中难以复用。 + +当你确实需要使用一些独特的系统依赖来完成任务时,你需要在说明中指出对应的获取和安装方法。 + +### 提交自检列表 + +你所提交的代码应该经过充分的Review, 可以参考以下checklist进行自查 + +- [ ] 代码风格符合规范 +- [ ] 代码在必要的位置添加了注释 +- [ ] 文档已同步修改 +- [ ] 同步添加了必要的测试用例 +- [ ] 进行了代码自检 +- [ ] 工程组织结构符合[目录结构](#目录结构)中的要求。 + +## 维护与交流 + +我们十分感谢您对MindSpore社区的贡献,同时十分希望您能够在完成一次提交之后持续关注您所提交的代码。 您可以在所提交模型的README中标注您的署名与常用邮箱等联系方式,并持续关注您的gitee、github信息。 + +其他的开发者也许会用到您所提交的模型,使用期间可能会产生一些疑问,此时就可以通过issue、站内信息、邮件等方式与您进行详细的交流. diff --git a/model_zoo/how_to_contribute/README_template.md b/model_zoo/how_to_contribute/README_template.md new file mode 100644 index 00000000000..bf96899e0ab --- /dev/null +++ b/model_zoo/how_to_contribute/README_template.md @@ -0,0 +1,99 @@ + + +# Title, Model name + +> The Description of Model. The paper present this model. + +## Model Architecture + +> There could be various architecture about some model. Represent the architecture of your implementation. + +## Features(optional) + +> Represent the distinctive feature you used in the model implementation. Such as distributed auto-parallel or some special training trick. + +## Dataset + +> Provide the information of the dataset you used. Check the copyrights of the dataset you used, usually don't provide the hyperlink to download the dataset. + +## Requirements + +> Provide details of the software required, including: +> +> * The additional python package required. Add a `requirements.txt` file to the root dir of model for installing dependencies. +> * The necessary third-party code. +> * Some other system dependencies. +> * Some additional operations before training or prediction. + +## Quick Start + +> How to take a try without understanding anything about the model. + +## Script Description + +> The section provide the detail of implementation. + +### Scripts and Sample Code + +> Explain every file in your project. + +### Script Parameter + +> Explain every parameter of the model. Especially the parameters in `config.py`. + +## Training + +> Provide training information. + +### Training Process + +> Provide the usage of training scripts. + +e.g. Run the following command for distributed training on Ascend. + +```shell +bash run_distribute_train.sh [RANK_TABLE_FILE] [PRETRAINED_MODEL] +``` + +### Transfer Training(Optional) + +> Provide the guidelines about how to run transfer training based on an pretrained model. + +### Training Result + +> Provide the result of training. + +e.g. Training checkpoint will be stored in `XXXX/ckpt_0`. You will get result from log file like the following: + +``` +epoch: 11 step: 7393 ,rpn_loss: 0.02003, rcnn_loss: 0.52051, rpn_cls_loss: 0.01761, rpn_reg_loss: 0.00241, rcnn_cls_loss: 0.16028, rcnn_reg_loss: 0.08411, rcnn_mask_loss: 0.27588, total_loss: 0.54054 +epoch: 12 step: 7393 ,rpn_loss: 0.00547, rcnn_loss: 0.39258, rpn_cls_loss: 0.00285, rpn_reg_loss: 0.00262, rcnn_cls_loss: 0.08002, rcnn_reg_loss: 0.04990, rcnn_mask_loss: 0.26245, total_loss: 0.39804 +``` + +## Evaluation + +### Evaluation Process + +> Provide the use of evaluation scripts. + +### Evaluation Result + +> Provide the result of evaluation. + +## Performance + +### Training Performance + +> Provide the detail of training performance including finishing loss, throughput, checkpoint size and so on. + +### Inference Performance + +> Provide the detail of evaluation performance including latency, accuracy and so on. + +## Description of Random Situation + +> Explain the random situation in the project. + +## ModeZoo Homepage + +Please check the official [homepage](https://gitee.com/mindspore/mindspore/tree/master/model_zoo). \ No newline at end of file