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

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223
  1. # ResNext101-64x4d
  2. 本仓库提供了ResNeXt101-64x4d模型的训练脚本和超参配置,以达到论文中的准确性。
  3. ## 模型概述
  4. 模型名称:ResNeXt101
  5. 论文:`"Aggregated Residual Transformations for Deep Neural Networks" <https://arxiv.org/pdf/1611.05431.pdf>`
  6. 这里提供的版本是ResNeXt101-64x4d
  7. ### 模型架构
  8. ResNeXt是ResNet网络的改进版本,比ResNet的网络多了块多了cardinality设置。ResNeXt101-64x4d的网络结构如下:
  9. | 网络层 | 输出 | 参数 |
  10. | ---------- | ------- | ------------------------------------------- |
  11. | conv1 | 112x112 | 7x7,64,stride 2 |
  12. | maxpooline | 56x56 | 3x3,stride 2 |
  13. | conv2 | 56x56 | [(1x1,64)->(3x3,64)->(1x1,256) C=64]x3 |
  14. | conv3 | 28x28 | [(1x1,256)->(3x3,256)->(1x1,512) C=64]x4 |
  15. | conv4 | 14x14 | [(1x1,512)->(3x3,512)->(1x1,1024) C=64]x23 |
  16. | conv5 | 7x7 | [(1x1,1024)->(3x3,1024)->(1x1,2048) C=64]x3 |
  17. | | 1x1 | average pool;1000-d fc;softmax |
  18. ### 默认设置
  19. 以下各节介绍ResNext50模型的默认配置和超参数。
  20. #### 优化器
  21. 本模型使用Mindspore框架提供的Momentum优化器,超参设置如下:
  22. - Momentum : 0.9
  23. - Learning rate (LR) : 0.05
  24. - LR schedule: cosine_annealing
  25. - LR epochs: [30, 60, 90, 120]
  26. - LR gamma: 0.1
  27. - Batch size : 64
  28. - Weight decay : 0.0001.
  29. - Label smoothing = 0.1
  30. - Eta_min: 0
  31. - Warmup_epochs: 1
  32. - Loss_scale: 1024
  33. - 训练轮次:
  34. - 150 epochs
  35. #### 数据增强
  36. 本模型使用了以下数据增强:
  37. - 对于训练脚本:
  38. - RandomResizeCrop, scale=(0.08, 1.0), ratio=(0.75, 1.333)
  39. - RandomHorizontalFlip, prob=0.5
  40. - Normalize, mean=(0.485, 0.456, 0.406), std=(0.229, 0.224, 0.225)
  41. - 对于验证(前向推理):
  42. - Resize to (256, 256)
  43. - CenterCrop to (224, 224)
  44. - Normalize, mean=(0.485, 0.456, 0.406), std=(0.229, 0.224, 0.225)
  45. ## 设定
  46. 以下各节列出了开始训练ResNext101-64x4d模型的要求。
  47. ## 快速入门指南
  48. 目录说明,代码参考了Modelzoo上的[ResNext50](https://gitee.com/mindspore/mindspore/tree/master/model_zoo/official/cv/resnext50)
  49. ```path
  50. .
  51. └─resnext101-64x4d-mindspore
  52. ├─README.md
  53. ├─scripts
  54. ├─run_standalone_train.sh # 启动Ascend单机训练(单卡)
  55. ├─run_distribute_train.sh # 启动Ascend分布式训练(8卡)
  56. ├─run_standalone_train_for_gpu.sh # 启动GPU单机训练(单卡)
  57. ├─run_distribute_train_for_gpu.sh # 启动GPU分布式训练(8卡)
  58. └─run_eval.sh # 启动评估
  59. ├─src
  60. ├─backbone
  61. ├─_init_.py # 初始化
  62. ├─resnext.py # ResNeXt101骨干
  63. ├─utils
  64. ├─_init_.py # 初始化
  65. ├─cunstom_op.py # 网络操作
  66. ├─logging.py # 打印日志
  67. ├─optimizers_init_.py # 获取参数
  68. ├─sampler.py # 分布式采样器
  69. ├─var_init_.py # 计算增益值
  70. ├─_init_.py # 初始化
  71. ├─config.py # 参数配置
  72. ├─crossentropy.py # 交叉熵损失函数
  73. ├─dataset.py # 数据预处理
  74. ├─head.py # 常见头
  75. ├─image_classification.py # 获取ResNet
  76. ├─linear_warmup.py # 线性热身学习率
  77. ├─warmup_cosine_annealing.py # 每次迭代的学习率
  78. ├─warmup_step_lr.py # 热身迭代学习率
  79. ├─eval.py # 评估网络
  80. ├──train.py # 训练网络
  81. ├──mindspore_hub_conf.py # MindSpore Hub接口
  82. ```
  83. ### 1. 仓库克隆
  84. ```shell
  85. git clone https://gitee.com/neoming/resnext101-64x4d-mindspore.git
  86. cd resnext101-64x4d-mindspore/
  87. ```
  88. ### 2. 数据下载和预处理
  89. 1. 下载ImageNet数据集
  90. 2. 解压训练数据集和验证数据
  91. 3. 训练和验证图像分别位于train /和val /目录下。 一个文件夹中的所有图像都具有相同的标签。
  92. ### 3. 训练(单卡)
  93. 可以通过python脚本开始训练:
  94. ```shell
  95. python train.py --data_dir ~/imagenet/train/ --platform Ascend --is_distributed
  96. ```
  97. 或通过shell脚本开始训练:
  98. ```shell
  99. Ascend:
  100. # 分布式训练示例(8卡)
  101. bash scripts/run_distribute_train.sh RANK_TABLE_FILE DATA_PATH
  102. # 单机训练
  103. bash scripts/run_standalone_train.sh DEVICE_ID DATA_PATH
  104. GPU:
  105. # 分布式训练示例(8卡)
  106. bash scripts/run_distribute_train_for_gpu.sh DATA_PATH
  107. # 单机训练
  108. bash scripts/run_standalone_train_for_gpu.sh DEVICE_ID DATA_PATH
  109. ```
  110. ### 4. 测试
  111. 您可以通过python脚本开始验证:
  112. ```shell
  113. python eval.py --data_dir ~/imagenet/val/ --platform Ascend --pretrained resnext.ckpt
  114. ```
  115. 或通过shell脚本开始训练:
  116. ```shell
  117. # 评估
  118. bash scripts/run_eval.sh DEVICE_ID DATA_PATH PRETRAINED_CKPT_PATH PLATFORM
  119. ```
  120. ## 模型导出
  121. ```shell
  122. python export.py --device_target [PLATFORM] --ckpt_file [CKPT_PATH] --file_format [EXPORT_FORMAT]
  123. ```
  124. `EXPORT_FORMAT` 可选 ["AIR", "ONNX", "MINDIR"].
  125. ## 高级设置
  126. ### 超参设置
  127. 通过`src/config.py`文件进行设置,下面是ImageNet单卡实验的设置
  128. ```python
  129. "image_size": '224,224',
  130. "num_classes": 1000,
  131. "lr": 0.05,
  132. "lr_scheduler": 'cosine_annealing',
  133. "lr_epochs": '30,60,90,120',
  134. "lr_gamma": 0.1,
  135. "eta_min": 0,
  136. "T_max": 150,
  137. "max_epoch": 150,
  138. "backbone": 'resnext101',
  139. "warmup_epochs": 1,
  140. "weight_decay": 0.0001,
  141. "momentum": 0.9,
  142. "is_dynamic_loss_scale": 0,
  143. "loss_scale": 1024,
  144. "label_smooth": 1,
  145. "label_smooth_factor": 0.1,
  146. "ckpt_interval": 1250,
  147. "ckpt_path": 'outputs/',
  148. "is_save_on_master": 1,
  149. "rank": 0,
  150. "group_size": 1
  151. ```
  152. ### 训练过程
  153. 训练的所有结果将存储在用--ckpt_path参数指定的目录中。
  154. 训练脚本将会存储:
  155. - checkpoints.
  156. - log.
  157. ## 性能
  158. ### 结果
  159. 通过运行训练脚本获得了以下结果。 要获得相同的结果,请遵循快速入门指南中的步骤。
  160. #### 准确度
  161. | **epochs** | Top1/Top5 |
  162. | :--------: | :-----------: |
  163. | 150 | 79.56%(TOP1)/94.68%(TOP5) |
  164. #### 训练性能结果
  165. | **NPUs** | train performance |
  166. | :------: | :---------------: |
  167. | 1 | 196.33image/sec |