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 31 kB

4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635
  1. # 目录
  2. <!-- TOC -->
  3. - [ResNet描述](#ResNet描述)
  4. - [模型架构](#模型架构)
  5. - [数据集](#数据集)
  6. - [特性](#特性)
  7. - [混合精度](#混合精度)
  8. - [环境要求](#环境要求)
  9. - [快速入门](#快速入门)
  10. - [脚本说明](#脚本说明)
  11. - [脚本及样例代码](#脚本及样例代码)
  12. - [脚本参数](#脚本参数)
  13. - [训练过程](#训练过程)
  14. - [评估过程](#评估过程)
  15. - [推理过程](#推理过程)
  16. - [导出MindIR](#导出mindir)
  17. - [在Ascend310执行推理](#在ascend310执行推理)
  18. - [结果](#结果)
  19. - [模型描述](#模型描述)
  20. - [性能](#性能)
  21. - [评估性能](#评估性能)
  22. - [随机情况说明](#随机情况说明)
  23. - [ModelZoo主页](#ModelZoo主页)
  24. <!-- /TOC -->
  25. # ResNet描述
  26. ## 概述
  27. 残差神经网络(ResNet)由微软研究院何凯明等五位华人提出,通过ResNet单元,成功训练152层神经网络,赢得了ILSVRC2015冠军。ResNet前五项的误差率为3.57%,参数量低于VGGNet,因此效果非常显著。传统的卷积网络或全连接网络或多或少存在信息丢失的问题,还会造成梯度消失或爆炸,导致深度网络训练失败,ResNet则在一定程度上解决了这个问题。通过将输入信息传递给输出,确保信息完整性。整个网络只需要学习输入和输出的差异部分,简化了学习目标和难度。ResNet的结构大幅提高了神经网络训练的速度,并且大大提高了模型的准确率。正因如此,ResNet十分受欢迎,甚至可以直接用于ConceptNet网络。
  28. 如下为MindSpore使用CIFAR-10/ImageNet2012数据集对ResNet18/ResNet50/ResNet101/SE-ResNet50进行训练的示例。ResNet50和ResNet101可参考[论文1](https://arxiv.org/pdf/1512.03385.pdf),SE-ResNet50是ResNet50的一个变体,可参考[论文2](https://arxiv.org/abs/1709.01507)和[论文3](https://arxiv.org/abs/1812.01187)。使用8卡Ascend 910训练SE-ResNet50,仅需24个周期,TOP1准确率就达到了75.9%(暂不支持用CIFAR-10数据集训练ResNet101以及用用CIFAR-10数据集训练SE-ResNet50)。
  29. ## 论文
  30. 1. [论文](https://arxiv.org/pdf/1512.03385.pdf):Kaiming He, Xiangyu Zhang, Shaoqing Ren, Jian Sun."Deep Residual Learning for Image Recognition"
  31. 2. [论文](https://arxiv.org/abs/1709.01507):Jie Hu, Li Shen, Samuel Albanie, Gang Sun, Enhua Wu."Squeeze-and-Excitation Networks"
  32. 3. [论文](https://arxiv.org/abs/1812.01187):Tong He, Zhi Zhang, Hang Zhang, Zhongyue Zhang, Junyuan Xie, Mu Li."Bag of Tricks for Image Classification with Convolutional Neural Networks"
  33. # 模型架构
  34. ResNet的总体网络架构如下:
  35. [链接](https://arxiv.org/pdf/1512.03385.pdf)
  36. # 数据集
  37. 使用的数据集:[CIFAR-10](<http://www.cs.toronto.edu/~kriz/cifar.html>)
  38. - 数据集大小:共10个类、60,000个32*32彩色图像
  39. - 训练集:50,000个图像
  40. - 测试集:10,000个图像
  41. - 数据格式:二进制文件
  42. - 注:数据在dataset.py中处理。
  43. - 下载数据集。目录结构如下:
  44. ```text
  45. ├─cifar-10-batches-bin
  46. └─cifar-10-verify-bin
  47. ```
  48. 使用的数据集:[ImageNet2012](http://www.image-net.org/)
  49. - 数据集大小:共1000个类、224*224彩色图像
  50. - 训练集:共1,281,167张图像
  51. - 测试集:共50,000张图像
  52. - 数据格式:JPEG
  53. - 注:数据在dataset.py中处理。
  54. - 下载数据集,目录结构如下:
  55. ```text
  56. └─dataset
  57. ├─ilsvrc # 训练数据集
  58. └─validation_preprocess # 评估数据集
  59. ```
  60. # 特性
  61. ## 混合精度
  62. 采用[混合精度](https://www.mindspore.cn/tutorial/training/en/master/advanced_use/enable_mixed_precision.html)的训练方法使用支持单精度和半精度数据来提高深度学习神经网络的训练速度,同时保持单精度训练所能达到的网络精度。混合精度训练提高计算速度、减少内存使用的同时,支持在特定硬件上训练更大的模型或实现更大批次的训练。
  63. 以FP16算子为例,如果输入数据类型为FP32,MindSpore后台会自动降低精度来处理数据。用户可打开INFO日志,搜索“reduce precision”查看精度降低的算子。
  64. # 环境要求
  65. - 硬件(Ascend/GPU)
  66. - 准备Ascend或GPU处理器搭建硬件环境。
  67. - 框架
  68. - [MindSpore](https://www.mindspore.cn/install/en)
  69. - 如需查看详情,请参见如下资源:
  70. - [MindSpore教程](https://www.mindspore.cn/tutorial/training/zh-CN/master/index.html)
  71. - [MindSpore Python API](https://www.mindspore.cn/doc/api_python/zh-CN/master/index.html)
  72. # 快速入门
  73. 通过官方网站安装MindSpore后,您可以按照如下步骤进行训练和评估:
  74. - Ascend处理器环境运行
  75. ```text
  76. # 分布式训练
  77. 用法:bash run_distribute_train.sh [resnet18|resnet50|resnet101|se-resnet50] [cifar10|imagenet2012] [RANK_TABLE_FILE] [DATASET_PATH] [PRETRAINED_CKPT_PATH](可选)
  78. # 单机训练
  79. 用法:bash run_standalone_train.sh [resnet18|resnet50|resnet101|se-resnet50] [cifar10|imagenet2012] [DATASET_PATH]
  80. [PRETRAINED_CKPT_PATH](可选)
  81. # 运行评估示例
  82. 用法:bash run_eval.sh [resnet18|resnet50|resnet101|se-resnet50] [cifar10|imagenet2012] [DATASET_PATH] [CHECKPOINT_PATH]
  83. ```
  84. - GPU处理器环境运行
  85. ```text
  86. # 分布式训练示例
  87. bash run_distribute_train_gpu.sh [resnet50|resnet101] [cifar10|imagenet2012] [DATASET_PATH] [PRETRAINED_CKPT_PATH](可选)
  88. # 单机训练示例
  89. bash run_standalone_train_gpu.sh [resnet50|resnet101] [cifar10|imagenet2012] [DATASET_PATH] [PRETRAINED_CKPT_PATH](可选)
  90. # 推理示例
  91. bash run_eval_gpu.sh [resnet50|resnet101] [cifar10|imagenet2012] [DATASET_PATH] [CHECKPOINT_PATH]
  92. ```
  93. # 脚本说明
  94. ## 脚本及样例代码
  95. ```shell
  96. .
  97. └──resnet
  98. ├── README.md
  99. ├── scripts
  100. ├── run_distribute_train.sh # 启动Ascend分布式训练(8卡)
  101. ├── run_parameter_server_train.sh # 启动Ascend参数服务器训练(8卡)
  102. ├── run_eval.sh # 启动Ascend评估
  103. ├── run_standalone_train.sh # 启动Ascend单机训练(单卡)
  104. ├── run_distribute_train_gpu.sh # 启动GPU分布式训练(8卡)
  105. ├── run_parameter_server_train_gpu.sh # 启动GPU参数服务器训练(8卡)
  106. ├── run_eval_gpu.sh # 启动GPU评估
  107. ├── run_standalone_train_gpu.sh # 启动GPU单机训练(单卡)
  108. └── cache_util.sh # 使用单节点緩存的帮助函数
  109. ├── src
  110. ├── config.py # 参数配置
  111. ├── dataset.py # 数据预处理
  112. ├─ eval_callback.py # 训练时推理回调函数
  113. ├── CrossEntropySmooth.py # ImageNet2012数据集的损失定义
  114. ├── lr_generator.py # 生成每个步骤的学习率
  115. └── resnet.py # ResNet骨干网络,包括ResNet50、ResNet101和SE-ResNet50
  116. ├── eval.py # 评估网络
  117. └── train.py # 训练网络
  118. ```
  119. ## 脚本参数
  120. 在config.py中可以同时配置训练参数和评估参数。
  121. - 配置ResNet18、ResNet50和CIFAR-10数据集。
  122. ```text
  123. "class_num":10, # 数据集类数
  124. "batch_size":32, # 输入张量的批次大小
  125. "loss_scale":1024, # 损失等级
  126. "momentum":0.9, # 动量
  127. "weight_decay":1e-4, # 权重衰减
  128. "epoch_size":90, # 此值仅适用于训练;应用于推理时固定为1
  129. "pretrain_epoch_size":0, # 加载预训练检查点之前已经训练好的模型的周期大小;实际训练周期大小等于epoch_size减去pretrain_epoch_size
  130. "save_checkpoint":True, # 是否保存检查点
  131. "save_checkpoint_epochs":5, # 两个检查点之间的周期间隔;默认情况下,最后一个检查点将在最后一步完成后保存
  132. "keep_checkpoint_max":10, # 只保留最后一个keep_checkpoint_max检查点
  133. "save_checkpoint_path":"./", # 检查点保存路径
  134. "warmup_epochs":5, # 热身周期数
  135. "lr_decay_mode":"poly” # 衰减模式可为步骤、策略和默认
  136. "lr_init":0.01, # 初始学习率
  137. "lr_end":0.0001, # 最终学习率
  138. "lr_max":0.1, # 最大学习率
  139. ```
  140. - 配置ResNet18、ResNet50和ImageNet2012数据集。
  141. ```text
  142. "class_num":1001, # 数据集类数
  143. "batch_size":256, # 输入张量的批次大小
  144. "loss_scale":1024, # 损失等级
  145. "momentum":0.9, # 动量优化器
  146. "weight_decay":1e-4, # 权重衰减
  147. "epoch_size":90, # 此值仅适用于训练;应用于推理时固定为1
  148. "pretrain_epoch_size":0, # 加载预训练检查点之前已经训练好的模型的周期大小;实际训练周期大小等于epoch_size减去pretrain_epoch_size
  149. "save_checkpoint":True, # 是否保存检查点
  150. "save_checkpoint_epochs":5, # 两个检查点之间的周期间隔;默认情况下,最后一个检查点将在最后一个周期完成后保存
  151. "keep_checkpoint_max":10, # 只保存最后一个keep_checkpoint_max检查点
  152. "save_checkpoint_path":"./", # 检查点相对于执行路径的保存路径
  153. "warmup_epochs":0, # 热身周期数
  154. "lr_decay_mode":"Linear", # 用于生成学习率的衰减模式
  155. "use_label_smooth":True, # 标签平滑
  156. "label_smooth_factor":0.1, # 标签平滑因子
  157. "lr_init":0, # 初始学习率
  158. "lr_max":0.8, # 最大学习率
  159. "lr_end":0.0, # 最小学习率
  160. ```
  161. - 配置ResNet101和ImageNet2012数据集。
  162. ```text
  163. "class_num":1001, # 数据集类数
  164. "batch_size":32, # 输入张量的批次大小
  165. "loss_scale":1024, # 损失等级
  166. "momentum":0.9, # 动量优化器
  167. "weight_decay":1e-4, # 权重衰减
  168. "epoch_size":120, # 训练周期大小
  169. "pretrain_epoch_size":0, # 加载预训练检查点之前已经训练好的模型的周期大小;实际训练周期大小等于epoch_size减去pretrain_epoch_size
  170. "save_checkpoint":True, # 是否保存检查点
  171. "save_checkpoint_epochs":5, # 两个检查点之间的周期间隔;默认情况下,最后一个检查点将在最后一个周期完成后保存
  172. "keep_checkpoint_max":10, # 只保存最后一个keep_checkpoint_max检查点
  173. "save_checkpoint_path":"./", # 检查点相对于执行路径的保存路径
  174. "warmup_epochs":0, # 热身周期数
  175. "lr_decay_mode":"cosine” # 用于生成学习率的衰减模式
  176. "use_label_smooth":True, # 标签平滑
  177. "label_smooth_factor":0.1, # 标签平滑因子
  178. "lr":0.1 # 基础学习率
  179. ```
  180. - 配置SE-ResNet50和ImageNet2012数据集。
  181. ```text
  182. "class_num":1001, # 数据集类数
  183. "batch_size":32, # 输入张量的批次大小
  184. "loss_scale":1024, # 损失等级
  185. "momentum":0.9, # 动量优化器
  186. "weight_decay":1e-4, # 权重衰减
  187. "epoch_size":28, # 创建学习率的周期大小
  188. "train_epoch_size":24 # 实际训练周期大小
  189. "pretrain_epoch_size":0, # 加载预训练检查点之前已经训练好的模型的周期大小;实际训练周期大小等于epoch_size减去pretrain_epoch_size
  190. "save_checkpoint":True, # 是否保存检查点
  191. "save_checkpoint_epochs":4, # 两个检查点之间的周期间隔;默认情况下,最后一个检查点将在最后一个周期完成后保存
  192. "keep_checkpoint_max":10, # 只保存最后一个keep_checkpoint_max检查点
  193. "save_checkpoint_path":"./", # checkpoint相对于执行路径的保存路径
  194. "warmup_epochs":3, # 热身周期数
  195. "lr_decay_mode":"cosine” # 用于生成学习率的衰减模式
  196. "use_label_smooth":True, # 标签平滑
  197. "label_smooth_factor":0.1, # 标签平滑因子
  198. "lr_init":0.0, # 初始学习率
  199. "lr_max":0.3, # 最大学习率
  200. "lr_end":0.0001, # 最终学习率
  201. ```
  202. ## 训练过程
  203. ### 用法
  204. #### Ascend处理器环境运行
  205. ```text
  206. # 分布式训练
  207. 用法:bash run_distribute_train.sh [resnet18|resnet50|resnet101|se-resnet50] [cifar10|imagenet2012] [RANK_TABLE_FILE] [DATASET_PATH] [PRETRAINED_CKPT_PATH](可选)
  208. # 单机训练
  209. 用法:bash run_standalone_train.sh [resnet18|resnet50|resnet101|se-resnet50] [cifar10|imagenet2012] [DATASET_PATH]
  210. [PRETRAINED_CKPT_PATH](可选)
  211. # 运行评估示例
  212. 用法:bash run_eval.sh [resnet18|resnet50|resnet101|se-resnet50] [cifar10|imagenet2012] [DATASET_PATH] [CHECKPOINT_PATH]
  213. ```
  214. 分布式训练需要提前创建JSON格式的HCCL配置文件。
  215. 具体操作,参见[hccn_tools](https://gitee.com/mindspore/mindspore/tree/master/model_zoo/utils/hccl_tools)中的说明。
  216. 训练结果保存在示例路径中,文件夹名称以“train”或“train_parallel”开头。您可在此路径下的日志中找到检查点文件以及结果,如下所示。
  217. 运行单卡用例时如果想更换运行卡号,可以通过设置环境变量 `export DEVICE_ID=x` 或者在context中设置 `device_id=x`指定相应的卡号。
  218. #### GPU处理器环境运行
  219. ```text
  220. # 分布式训练示例
  221. bash run_distribute_train_gpu.sh [resnet50|resnet101] [cifar10|imagenet2012] [DATASET_PATH] [PRETRAINED_CKPT_PATH](可选)
  222. # 单机训练示例
  223. bash run_standalone_train_gpu.sh [resnet50|resnet101] [cifar10|imagenet2012] [DATASET_PATH] [PRETRAINED_CKPT_PATH](可选)
  224. # 推理示例
  225. bash run_eval_gpu.sh [resnet50|resnet101] [cifar10|imagenet2012] [DATASET_PATH] [CHECKPOINT_PATH]
  226. ```
  227. #### 运行参数服务器模式训练
  228. - Ascend参数服务器训练示例
  229. ```text
  230. bash run_parameter_server_train.sh [resnet18|resnet50|resnet101] [cifar10|imagenet2012] [RANK_TABLE_FILE] [DATASET_PATH] [PRETRAINED_CKPT_PATH](可选)
  231. ```
  232. - GPU参数服务器训练示例
  233. ```text
  234. bash run_parameter_server_train_gpu.sh [resnet50|resnet101] [cifar10|imagenet2012] [DATASET_PATH] [PRETRAINED_CKPT_PATH](可选)
  235. ```
  236. #### 训练时推理
  237. ```bash
  238. # Ascend 分布式训练时推理示例:
  239. bash run_distribute_train.sh [resnet18|resnet50|resnet101|se-resnet50] [cifar10|imagenet2012] [RANK_TABLE_FILE] [DATASET_PATH] [RUN_EVAL](optional) [EVAL_DATASET_PATH](optional)
  240. # Ascend 单机训练时推理示例:
  241. bash run_standalone_train.sh [resnet18|resnet50|resnet101|se-resnet50] [cifar10|imagenet2012] [RANK_TABLE_FILE] [DATASET_PATH] [RUN_EVAL](optional) [EVAL_DATASET_PATH](optional)
  242. # GPU 分布式训练时推理示例:
  243. bash run_distribute_train_gpu.sh [resnet50|resnet101] [cifar10|imagenet2012] [DATASET_PATH] [RUN_EVAL](optional) [EVAL_DATASET_PATH](optional)
  244. # GPU 单机训练时推理示例:
  245. bash run_standalone_train_gpu.sh [resnet50|resnet101] [cifar10|imagenet2012] [DATASET_PATH] [RUN_EVAL](optional) [EVAL_DATASET_PATH](optional)
  246. ```
  247. 训练时推理需要在设置`RUN_EVAL`为True,与此同时还需要设置`EVAL_DATASET_PATH`。此外,当设置`RUN_EVAL`为True时还可为python脚本设置`save_best_ckpt`, `eval_start_epoch`, `eval_interval`等参数。
  248. 默认情况下我们将启动一个独立的缓存服务器将推理数据集的图片以tensor的形式保存在内存中以带来推理性能的提升。用户在使用缓存前需确保内存大小足够缓存推理集中的图片(缓存ImageNet2012的推理集大约需要30GB的内存,缓存CIFAR-10的推理集约需要使用6GB的内存)。
  249. 在训练结束后,可以选择关闭缓存服务器或不关闭它以继续为未来的推理提供缓存服务。
  250. ### 结果
  251. - 使用CIFAR-10数据集训练ResNet18
  252. ```text
  253. # 分布式训练结果(8P)
  254. epoch: 1 step: 195, loss is 1.5783054
  255. epoch: 2 step: 195, loss is 1.0682616
  256. epoch: 3 step: 195, loss is 0.8836588
  257. epoch: 4 step: 195, loss is 0.36090446
  258. epoch: 5 step: 195, loss is 0.80853784
  259. ...
  260. ```
  261. - 使用ImageNet2012数据集训练ResNet18
  262. ```text
  263. # 分布式训练结果(8P)
  264. epoch: 1 step: 625, loss is 4.757934
  265. epoch: 2 step: 625, loss is 4.0891967
  266. epoch: 3 step: 625, loss is 3.9131956
  267. epoch: 4 step: 625, loss is 3.5302577
  268. epoch: 5 step: 625, loss is 3.597817
  269. ...
  270. ```
  271. - 使用CIFAR-10数据集训练ResNet50
  272. ```text
  273. # 分布式训练结果(8P)
  274. epoch:1 step:195, loss is 1.9601055
  275. epoch:2 step:195, loss is 1.8555021
  276. epoch:3 step:195, loss is 1.6707983
  277. epoch:4 step:195, loss is 1.8162166
  278. epoch:5 step:195, loss is 1.393667
  279. ...
  280. ```
  281. - 使用ImageNet2012数据集训练ResNet50
  282. ```text
  283. # 分布式训练结果(8P)
  284. epoch:1 step:5004, loss is 4.8995576
  285. epoch:2 step:5004, loss is 3.9235563
  286. epoch:3 step:5004, loss is 3.833077
  287. epoch:4 step:5004, loss is 3.2795618
  288. epoch:5 step:5004, loss is 3.1978393
  289. ...
  290. ```
  291. - 使用ImageNet2012数据集训练ResNet101
  292. ```text
  293. # 分布式训练结果(8P)
  294. epoch:1 step:5004, loss is 4.805483
  295. epoch:2 step:5004, loss is 3.2121816
  296. epoch:3 step:5004, loss is 3.429647
  297. epoch:4 step:5004, loss is 3.3667371
  298. epoch:5 step:5004, loss is 3.1718972
  299. ...
  300. epoch:67 step:5004, loss is 2.2768745
  301. epoch:68 step:5004, loss is 1.7223864
  302. epoch:69 step:5004, loss is 2.0665488
  303. epoch:70 step:5004, loss is 1.8717369
  304. ...
  305. ```
  306. - 使用ImageNet2012数据集训练SE-ResNet50
  307. ```text
  308. # 分布式训练结果(8P)
  309. epoch:1 step:5004, loss is 5.1779146
  310. epoch:2 step:5004, loss is 4.139395
  311. epoch:3 step:5004, loss is 3.9240637
  312. epoch:4 step:5004, loss is 3.5011306
  313. epoch:5 step:5004, loss is 3.3501816
  314. ...
  315. ```
  316. ## 评估过程
  317. ### 用法
  318. #### Ascend处理器环境运行
  319. ```bash
  320. # 评估
  321. Usage: bash run_eval.sh [resnet18|resnet50|resnet101|se-resnet50] [cifar10|imagenet2012] [DATASET_PATH] [CHECKPOINT_PATH]
  322. ```
  323. ```bash
  324. # 评估示例
  325. bash run_eval.sh resnet50 cifar10 ~/cifar10-10-verify-bin ~/resnet50_cifar10/train_parallel0/resnet-90_195.ckpt
  326. ```
  327. > 训练过程中可以生成检查点。
  328. #### GPU处理器环境运行
  329. ```bash
  330. bash run_eval_gpu.sh [resnet50|resnet101] [cifar10|imagenet2012] [DATASET_PATH] [CHECKPOINT_PATH]
  331. ```
  332. ### 结果
  333. 评估结果保存在示例路径中,文件夹名为“eval”。您可在此路径下的日志找到如下结果:
  334. - 使用CIFAR-10数据集评估ResNet18
  335. ```bash
  336. result: {'acc': 0.9363061543521088} ckpt=~/resnet50_cifar10/train_parallel0/resnet-90_195.ckpt
  337. ```
  338. - 使用ImageNet2012数据集评估ResNet18
  339. ```bash
  340. result: {'acc': 0.7053685897435897} ckpt=train_parallel0/resnet-90_5004.ckpt
  341. ```
  342. - 使用CIFAR-10数据集评估ResNet50
  343. ```text
  344. result:{'acc':0.91446314102564111} ckpt=~/resnet50_cifar10/train_parallel0/resnet-90_195.ckpt
  345. ```
  346. - 使用ImageNet2012数据集评估ResNet50
  347. ```text
  348. result:{'acc':0.7671054737516005} ckpt=train_parallel0/resnet-90_5004.ckpt
  349. ```
  350. - 使用ImageNet2012数据集评估ResNet101
  351. ```text
  352. result:{'top_5_accuracy':0.9429417413572343, 'top_1_accuracy':0.7853513124199744} ckpt=train_parallel0/resnet-120_5004.ckpt
  353. ```
  354. - 使用ImageNet2012数据集评估SE-ResNet50
  355. ```text
  356. result:{'top_5_accuracy':0.9342589628681178, 'top_1_accuracy':0.768065781049936} ckpt=train_parallel0/resnet-24_5004.ckpt
  357. ```
  358. ## 推理过程
  359. ### [导出MindIR](#contents)
  360. ```shell
  361. python export.py --ckpt_file [CKPT_PATH] --file_name [FILE_NAME] --file_format [FILE_FORMAT]
  362. ```
  363. 参数ckpt_file为必填项,
  364. `EXPORT_FORMAT` 必须在 ["AIR", "MINDIR"]中选择。
  365. ### 在Ascend310执行推理
  366. 在执行推理前,mindir文件必须通过`export.py`脚本导出。以下展示了使用minir模型执行推理的示例。
  367. 目前仅支持batch_Size为1的推理。精度计算过程需要70G+的内存,否则进程将会因为超出内存被系统终止。
  368. ```shell
  369. # Ascend310 inference
  370. bash run_infer_310.sh [MINDIR_PATH] [DATA_PATH] [DEVICE_ID]
  371. ```
  372. - `DEVICE_ID` 可选,默认值为0。
  373. ### 结果
  374. 推理结果保存在脚本执行的当前路径,你可以在acc.log中看到以下精度计算结果。
  375. ```bash
  376. top1_accuracy:70.42, top5_accuracy:89.7
  377. ```
  378. # 模型描述
  379. ## 性能
  380. ### 评估性能
  381. #### CIFAR-10上的ResNet18
  382. | 参数 | Ascend 910 |
  383. | -------------------------- | -------------------------------------- |
  384. | 模型版本 | ResNet18 |
  385. | 资源 | Ascend 910;CPU 2.60GHz,192核;内存 755G;系统 Euler2.8 |
  386. | 上传日期 | 2021-02-25 |
  387. | MindSpore版本 | 1.1.1-alpha |
  388. | 数据集 | CIFAR-10 |
  389. | 训练参数 | epoch=90, steps per epoch=195, batch_size = 32 |
  390. | 优化器 | Momentum |
  391. | 损失函数 | Softmax交叉熵 |
  392. | 输出 | 概率 |
  393. | 损失 | 0.0002519517 |
  394. | 速度 | 13毫秒/步(8卡) |
  395. | 总时长 | 4分钟 |
  396. | 参数(M) | 11.2 |
  397. | 微调检查点 | 86(.ckpt文件) |
  398. | 脚本 | [链接](https://gitee.com/mindspore/mindspore/tree/master/model_zoo/official/cv/resnet) |
  399. #### ImageNet2012上的ResNet18
  400. | 参数 | Ascend 910 |
  401. | -------------------------- | -------------------------------------- |
  402. | 模型版本 | ResNet18 |
  403. | 资源 | Ascend 910;CPU 2.60GHz,192核;内存 755G;系统 Euler2.8 |
  404. | 上传日期 | 2020-04-01 ; |
  405. | MindSpore版本 | 1.1.1-alpha |
  406. | 数据集 | ImageNet2012 |
  407. | 训练参数 | epoch=90, steps per epoch=626, batch_size = 256 |
  408. | 优化器 | Momentum |
  409. | 损失函数 | Softmax交叉熵 |
  410. | 输出 | 概率 |
  411. | 损失 | 2.15702 |
  412. | 速度 | 110毫秒/步(8卡) (可能需要在datasetpy中增加set_numa_enbale绑核操作) |
  413. | 总时长 | 110分钟 |
  414. | 参数(M) | 11.7 |
  415. | 微调检查点| 90M(.ckpt文件) |
  416. | 脚本 | [链接](https://gitee.com/mindspore/mindspore/tree/master/model_zoo/official/cv/resnet) |
  417. #### CIFAR-10上的ResNet50
  418. | 参数 | Ascend 910 | GPU |
  419. | -------------------------- | -------------------------------------- |---------------------------------- |
  420. | 模型版本 | ResNet50-v1.5 |ResNet50-v1.5|
  421. | 资源 |Ascend 910;CPU 2.60GHz,192核;内存 755G;系统 Euler2.8 | GPU(Tesla V100 SXM2);CPU:2.1GHz,24核;内存:128G
  422. | 上传日期 | 2020-04-01 | 2020-08-01
  423. | MindSpore版本 | 0.1.0-alpha |0.6.0-alpha |
  424. | 数据集 | CIFAR-10 | CIFAR-10
  425. | 训练参数 | epoch=90, steps per epoch=195, batch_size = 32 |epoch=90, steps per epoch=195, batch_size = 32 |
  426. | 优化器 | Momentum |Momentum|
  427. | 损失函数 | Softmax交叉熵 | Softmax交叉熵 |
  428. | 输出 | 概率 | 概率 |
  429. | 损失 | 0.000356 | 0.000716 |
  430. | 速度 | 18.4毫秒/步(8卡) |69毫秒/步(8卡)|
  431. | 总时长 | 6分钟 | 20.2分钟|
  432. | 参数(M) | 25.5 | 25.5 |
  433. | 微调检查点 | 179.7M(.ckpt文件) | 179.7M(.ckpt文件) |
  434. | 脚本 | [链接](https://gitee.com/mindspore/mindspore/tree/master/model_zoo/official/cv/resnet) | [链接](https://gitee.com/mindspore/mindspore/tree/master/model_zoo/official/cv/resnet) |
  435. #### ImageNet2012上的ResNet50
  436. | 参数 | Ascend 910 | GPU |
  437. | -------------------------- | -------------------------------------- |---------------------------------- |
  438. | 模型版本 | ResNet50-v1.5 |ResNet50-v1.5|
  439. | 资源 | Ascend 910;CPU 2.60GHz,192核;内存 755G;系统 Euler2.8 | GPU(Tesla V100 SXM2);CPU:2.1GHz,24核;内存:128G
  440. | 上传日期 | 2020-04-01 ; | 2020-08-01
  441. | MindSpore版本 | 0.1.0-alpha |0.6.0-alpha |
  442. | 数据集 | ImageNet2012 | ImageNet2012|
  443. | 训练参数 | epoch=90, steps per epoch=626, batch_size = 256 |epoch=90, steps per epoch=5004, batch_size = 32 |
  444. | 优化器 | Momentum |Momentum|
  445. | 损失函数 | Softmax交叉熵 | Softmax交叉熵 |
  446. | 输出 | 概率 | 概率 |
  447. | 损失 | 1.8464266 | 1.9023 |
  448. | 速度 | 118毫秒/步(8卡) |67.1毫秒/步(8卡)|
  449. | 总时长 | 114分钟 | 500分钟|
  450. | 参数(M) | 25.5 | 25.5 |
  451. | 微调检查点| 197M(.ckpt文件) | 197M(.ckpt文件) |
  452. | 脚本 | [链接](https://gitee.com/mindspore/mindspore/tree/master/model_zoo/official/cv/resnet) | [链接](https://gitee.com/mindspore/mindspore/tree/master/model_zoo/official/cv/resnet) |
  453. #### ImageNet2012上的ResNet101
  454. | 参数 | Ascend 910 | GPU |
  455. | -------------------------- | -------------------------------------- |---------------------------------- |
  456. | 模型版本 | ResNet101 |ResNet101|
  457. | 资源 | Ascend 910;CPU 2.60GHz,192核;内存 755G;系统 Euler2.8 | GPU(Tesla V100 SXM2);CPU:2.1GHz,24核;内存:128G
  458. | 上传日期 | 2020-04-01 ; | 2020-08-01
  459. | MindSpore版本 | 0.1.0-alpha |0.6.0-alpha |
  460. | 数据集 | ImageNet2012 | ImageNet2012|
  461. | 训练参数 | epoch=120, steps per epoch=5004, batch_size = 32 |epoch=120, steps per epoch=5004, batch_size = 32 |
  462. | 优化器 | Momentum |Momentum|
  463. | 损失函数 | Softmax交叉熵 | Softmax交叉熵 |
  464. | 输出 |概率 | 概率 |
  465. | 损失 | 1.6453942 | 1.7023412 |
  466. | 速度 | 30.3毫秒/步(8卡) |108.6毫秒/步(8卡)|
  467. | 总时长 | 301分钟 | 1100分钟|
  468. | 参数(M) | 44.6 | 44.6 |
  469. | 微调检查点| 343M(.ckpt文件) | 343M(.ckpt文件) |
  470. |脚本 | [链接](https://gitee.com/mindspore/mindspore/tree/master/model_zoo/official/cv/resnet) | [链接](https://gitee.com/mindspore/mindspore/tree/master/model_zoo/official/cv/resnet) |
  471. #### ImageNet2012上的SE-ResNet50
  472. | 参数 | Ascend 910
  473. | -------------------------- | ------------------------------------------------------------------------ |
  474. | 模型版本 | SE-ResNet50 |
  475. | 资源 | Ascend 910;CPU 2.60GHz,192核;内存 755G;系统 Euler2.8 |
  476. | 上传日期 | 2020-08-16 ; |
  477. | MindSpore版本 | 0.7.0-alpha |
  478. | 数据集 | ImageNet2012 |
  479. | 训练参数 | epoch=24, steps per epoch=5004, batch_size = 32 |
  480. | 优化器 | Momentum |
  481. | 损失函数 | Softmax交叉熵 |
  482. | 输出 | 概率 |
  483. | 损失 | 1.754404 |
  484. | 速度 | 24.6毫秒/步(8卡) |
  485. | 总时长 | 49.3分钟 |
  486. | 参数(M) | 25.5 |
  487. | 微调检查点 | 215.9M (.ckpt文件) |
  488. |脚本 | [链接](https://gitee.com/mindspore/mindspore/tree/master/model_zoo/official/cv/resnet) |
  489. # 随机情况说明
  490. `dataset.py`中设置了“create_dataset”函数内的种子,同时还使用了train.py中的随机种子。
  491. # ModelZoo主页
  492. 请浏览官网[主页](https://gitee.com/mindspore/mindspore/tree/master/model_zoo)。