You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

README_CN.md 12 kB

5 years ago
4 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283
  1. # 目录
  2. - [目录](#目录)
  3. - [Tiny-DarkNet描述](#tiny-darknet描述)
  4. - [模型架构](#模型架构)
  5. - [数据集](#数据集)
  6. - [环境要求](#环境要求)
  7. - [快速入门](#快速入门)
  8. - [脚本描述](#脚本说明)
  9. - [脚本及样例代码](#脚本及样例代码)
  10. - [脚本参数](#脚本参数)
  11. - [训练过程](#训练过程)
  12. - [单机训练](#单机训练)
  13. - [分布式训练](#分布式训练)
  14. - [评估过程](#评估过程)
  15. - [评估](#评估)
  16. - [模型描述](#模型描述)
  17. - [性能](#性能)
  18. - [训练性能](#训练性能)
  19. - [评估性能](#评估性能)
  20. - [ModelZoo主页](#modelzoo主页)
  21. # [Tiny-DarkNet描述](#目录)
  22. Tiny-DarkNet是Joseph Chet Redmon等人提出的一个16层的针对于经典的图像分类数据集ImageNet所进行的图像分类网络模型。 Tiny-DarkNet作为作者为了满足用户对较小模型规模的需求而尽量降低模型的大小设计的简易版本的Darknet,具有优于AlexNet和SqueezeNet的图像分类能力,同时其只使用少于它们的模型参数。为了减少模型的规模,该Tiny-DarkNet网络没有使用全连接层,仅由卷积层、最大池化层、平均池化层组成。
  23. 更多Tiny-DarkNet详细信息可以参考[官方介绍](https://pjreddie.com/darknet/tiny-darknet/)
  24. # [模型架构](#目录)
  25. 具体而言, Tiny-DarkNet网络由**1×1 conv**, **3×3 conv**, **2×2 max**和全局平均池化层组成,这些模块相互组成将输入的图片转换成一个**1×1000**的向量。
  26. # [数据集](#目录)
  27. 以下将介绍模型中使用数据集以及其出处:
  28. <!-- Note that you can run the scripts based on the dataset mentioned in original paper or widely used in relevant domain/network architecture. In the following sections, we will introduce how to run the scripts using the related dataset below. -->
  29. <!-- Dataset used: [CIFAR-10](<http://www.cs.toronto.edu/~kriz/cifar.html>) -->
  30. <!-- Dataset used ImageNet can refer to [paper](<https://ieeexplore.ieee.org/abstract/document/5206848>)
  31. - Dataset size: 125G, 1250k colorful images in 1000 classes
  32. - Train: 120G, 1200k images
  33. - Test: 5G, 50k images
  34. - Data format: RGB images.
  35. - Note: Data will be processed in src/dataset.py -->
  36. 所使用的数据集可参考[论文](<https://ieeexplore.ieee.org/abstract/document/5206848>)
  37. - 数据集规模:125G,1250k张分别属于1000个类的彩色图像
  38. - 训练集: 120G,1200k张图片
  39. - 测试集: 5G, 50k张图片
  40. - 数据格式: RGB格式图片
  41. - 注意: 数据将会被 src/dataset.py 中的函数进行处理
  42. <!-- # [Features](#contents)
  43. ## [Distributed](#contents)
  44. <!-- 不同的机器有同一个模型的多个副本,每个机器分配到不同的数据,然后将所有机器的计算结果按照某种方式合并 -->
  45. <!-- 在深度学习中,当数据集和参数量的规模越来越大,训练所需的时间和硬件资源会随之增加,最后会变成制约训练的瓶颈。[分布式并行训练](<https://www.mindspore.cn/tutorial/training/zh-CN/master/advanced_use/distributed_training_tutorials.html>),可以降低对内存、计算性能等硬件的需求,是进行训练的重要优化手段。本模型使用了mindspore提供的自动并行模式AUTO_PARALLEL:该方法是融合了数据并行、模型并行及混合并行的1种分布式并行模式,可以自动建立代价模型,找到训练时间较短的并行策略,为用户选择1种并行模式。 -->
  46. # [环境要求](#目录)
  47. - 硬件(Ascend)
  48. - 请准备具有Ascend处理器的硬件环境.
  49. - 框架
  50. - [MindSpore](https://www.mindspore.cn/install/en)
  51. - 更多的信息请访问以下链接:
  52. - [MindSpore Tutorials](https://www.mindspore.cn/tutorial/training/en/master/index.html)
  53. - [MindSpore Python API](https://www.mindspore.cn/doc/api_python/en/master/index.html)
  54. # [快速入门](#目录)
  55. 根据官方网站成功安装MindSpore以后,可以按照以下步骤进行训练和测试模型:
  56. - 在Ascend资源上运行:
  57. ```python
  58. # 单卡训练
  59. bash ./scripts/run_standalone_train.sh 0
  60. # 分布式训练
  61. bash ./scripts/run_distribute_train.sh rank_table.json
  62. # 评估
  63. python eval.py > eval.log 2>&1 &
  64. OR
  65. bash ./script/run_eval.sh
  66. ```
  67. 进行并行训练时, 需要提前创建JSON格式的hccl配置文件。
  68. 请按照以下链接的指导进行设置:
  69. <https://gitee.com/mindspore/mindspore/tree/master/model_zoo/utils/hccl_tools.>
  70. 更多的细节请参考具体的script文件
  71. # [脚本描述](#目录)
  72. ## [脚本及样例代码](#目录)
  73. ```bash
  74. ├── tinydarknet
  75. ├── README.md // Tiny-Darknet英文说明
  76. ├── README_CN.md // Tiny-Darknet中文说明
  77. ├── scripts
  78. ├──run_standalone_train.sh // Ascend单卡训练shell脚本
  79. ├──run_distribute_train.sh // Ascend分布式训练shell脚本
  80. ├──run_eval.sh // Ascend评估shell脚本
  81. ├── src
  82. ├─lr_scheduler //学习率策略
  83. ├─__init__.py // 初始化文件
  84. ├─linear_warmup.py // linear_warmup策略
  85. ├─warmup_cosine_annealing_lr.py // warmup_cosine_annealing_lr策略
  86. ├─warmup_step_lr.py // warmup_step_lr策略
  87. ├──dataset.py // 创建数据集
  88. ├──CrossEntropySmooth.py // 损失函数
  89. ├──tinydarknet.py // Tiny-Darknet网络结构
  90. ├──config.py // 参数配置
  91. ├── train.py // 训练脚本
  92. ├── eval.py // 评估脚本
  93. ├── export.py // 导出checkpoint文件
  94. ├── mindspore_hub_conf.py // hub配置文件
  95. ```
  96. ## [脚本参数](#目录)
  97. 训练和测试的参数可在 config.py 中进行设置
  98. - Tiny-Darknet的配置文件
  99. ```python
  100. 'pre_trained': 'False' # 是否载入预训练模型
  101. 'num_classes': 1000 # 数据集中类的数量
  102. 'lr_init': 0.1 # 初始学习率
  103. 'batch_size': 128 # 训练的batch_size
  104. 'epoch_size': 500 # 总共的训练epoch
  105. 'momentum': 0.9 # 动量
  106. 'weight_decay': 1e-4 # 权重衰减率
  107. 'image_height': 224 # 输入图像的高度
  108. 'image_width': 224 # 输入图像的宽度
  109. 'data_path': './ImageNet_Original/train/' # 训练数据集的绝对路径
  110. 'val_data_path': './ImageNet_Original/val/' # 评估数据集的绝对路径
  111. 'device_target': 'Ascend' # 程序运行的设备
  112. 'keep_checkpoint_max': 10 # 仅仅保持最新的keep_checkpoint_max个checkpoint文件
  113. 'checkpoint_path': '/train_tinydarknet.ckpt' # 保存checkpoint文件的绝对路径
  114. 'onnx_filename': 'tinydarknet.onnx' # 用于export.py 文件中的onnx模型的文件名
  115. 'air_filename': 'tinydarknet.air' # 用于export.py 文件中的air模型的文件名
  116. 'lr_scheduler': 'exponential' # 学习率策略
  117. 'lr_epochs': [70, 140, 210, 280] # 学习率进行变化的epoch数
  118. 'lr_gamma': 0.3 # lr_scheduler为exponential时的学习率衰减因子
  119. 'eta_min': 0.0 # cosine_annealing策略中的eta_min
  120. 'T_max': 150 # cosine_annealing策略中的T-max
  121. 'warmup_epochs': 0 # 热启动的epoch数
  122. 'is_dynamic_loss_scale': 0 # 动态损失尺度
  123. 'loss_scale': 1024 # 损失尺度
  124. 'label_smooth_factor': 0.1 # 训练标签平滑因子
  125. 'use_label_smooth': True # 是否采用训练标签平滑
  126. ```
  127. 更多的细节, 请参考`config.py`.
  128. ## [训练过程](#目录)
  129. ### [单机训练](#目录)
  130. - 在Ascend资源上运行:
  131. ```python
  132. bash ./scripts/run_standalone_train.sh 0
  133. ```
  134. 上述的命令将运行在后台中,可以通过 `train.log` 文件查看运行结果.
  135. 训练完成后,默认情况下,可在script文件夹下得到一些checkpoint文件. 训练的损失值将以如下的形式展示:
  136. <!-- After training, you'll get some checkpoint files under the script folder by default. The loss value will be achieved as follows: -->
  137. ```python
  138. # grep "loss is " train.log
  139. epoch: 498 step: 1251, loss is 2.7798953
  140. Epoch time: 130690.544, per step time: 104.469
  141. epoch: 499 step: 1251, loss is 2.9261637
  142. Epoch time: 130511.081, per step time: 104.325
  143. epoch: 500 step: 1251, loss is 2.69412
  144. Epoch time: 127067.548, per step time: 101.573
  145. ...
  146. ```
  147. 模型checkpoint文件将会保存在当前文件夹下.
  148. <!-- The model checkpoint will be saved in the current directory. -->
  149. ### [分布式训练](#目录)
  150. - 在Ascend资源上运行:
  151. ```python
  152. bash scripts/run_distribute_train.sh rank_table.json
  153. ```
  154. 上述的脚本命令将在后台中进行分布式训练,可以通过`train_parallel[X]/log`文件查看运行结果. 训练的损失值将以如下的形式展示:
  155. ```python
  156. # grep "result: " train_parallel*/log
  157. epoch: 498 step: 1251, loss is 2.7798953
  158. Epoch time: 130690.544, per step time: 104.469
  159. epoch: 499 step: 1251, loss is 2.9261637
  160. Epoch time: 130511.081, per step time: 104.325
  161. epoch: 500 step: 1251, loss is 2.69412
  162. Epoch time: 127067.548, per step time: 101.573
  163. ...
  164. ```
  165. ## [评估过程](#目录)
  166. ### [评估](#目录)
  167. - 在Ascend资源上进行评估:
  168. 在运行如下命令前,请确认用于评估的checkpoint文件的路径.请将checkpoint路径设置为绝对路径,例如:"/username/imagenet/train_tinydarknet.ckpt"
  169. ```python
  170. python eval.py > eval.log 2>&1 &
  171. OR
  172. bash scripts/run_eval.sh
  173. ```
  174. 上述的python命令将运行在后台中,可以通过"eval.log"文件查看结果. 测试数据集的准确率将如下面所列:
  175. ```python
  176. # grep "accuracy: " eval.log
  177. accuracy: {'top_1_accuracy': 0.5871979166666667, 'top_5_accuracy': 0.8175280448717949}
  178. ```
  179. 请注意在并行训练后,测试请将checkpoint_path设置为最后保存的checkpoint文件的路径,准确率将如下面所列:
  180. ```python
  181. # grep "accuracy: " eval.log
  182. accuracy: {'top_1_accuracy': 0.5871979166666667, 'top_5_accuracy': 0.8175280448717949}
  183. ```
  184. # [模型描述](#目录)
  185. ## [性能](#目录)
  186. ### [训练性能](#目录)
  187. | 参数 | Ascend |
  188. | -------------------------- | ----------------------------------------------------------- |
  189. | 模型版本 | V1 |
  190. | 资源 | Ascend 910;CPU 2.60GHz,56cores;内存 314G;系统 Euler2.8 |
  191. | 上传日期 | 2020/12/22 |
  192. | MindSpore版本 | 1.1.0 |
  193. | 数据集 | 1200k张图片 |
  194. | 训练参数 | epoch=500, steps=1251, batch_size=128, lr=0.1 |
  195. | 优化器 | Momentum |
  196. | 损失函数 | Softmax Cross Entropy |
  197. | 速度 | 8卡: 104 ms/step |
  198. | 总时间 | 8卡: 17.8小时 |
  199. | 参数(M) | 4.0 |
  200. | 脚本 | [Tiny-Darknet脚本](https://gitee.com/mindspore/mindspore/tree/master/model_zoo/official/cv/tinydarknet) |
  201. ### [评估性能](#目录)
  202. | 参数 | Ascend |
  203. | ------------------- | --------------------------- |
  204. | 模型版本 | V1 |
  205. | 资源 | Ascend 910;系统 Euler2.8 |
  206. | 上传日期 | 2020/12/22 |
  207. | MindSpore版本 | 1.1.0 |
  208. | 数据集 | 200k张图片 |
  209. | batch_size | 128 |
  210. | 输出 | 分类概率 |
  211. | 准确率 | 8卡 Top-1: 58.7%; Top-5: 81.7% |
  212. | 推理模型 | 11.6M (.ckpt文件) |
  213. # [ModelZoo主页](#目录)
  214. 请参考官方[主页](https://gitee.com/mindspore/mindspore/tree/master/model_zoo).