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.md 11 kB

4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296
  1. # Contents
  2. - [FCN 介绍](#FCN-介绍)
  3. - [模型架构](#模型架构)
  4. - [数据集](#数据集)
  5. - [环境要求](#环境要求)
  6. - [快速开始](#快速开始)
  7. - [脚本介绍](#脚本介绍)
  8. - [脚本以及简单代码](#脚本以及简单代码)
  9. - [脚本参数](#脚本参数)
  10. - [训练步骤](#训练步骤)
  11. - [训练](#训练)
  12. - [评估步骤](#评估步骤)
  13. - [评估](#评估)
  14. - [模型介绍](#模型介绍)
  15. - [性能](#性能)
  16. - [评估性能](#评估性能)
  17. - [如何使用](#如何使用)
  18. - [教程](#教程)
  19. - [随机事件介绍](#随机事件介绍)
  20. - [ModelZoo 主页](#ModelZoo-主页)
  21. # [FCN 介绍](#contents)
  22. FCN主要用用于图像分割领域,是一种端到端的分割方法。FCN丢弃了全连接层,使得其能够处理任意大小的图像,且减少了模型的参数量,提高了模型的分割速度。FCN在编码部分使用了VGG的结构,在解码部分中使用反卷积/上采样操作恢复图像的分辨率。FCN-8s最后使用8倍的反卷积/上采样操作将输出分割图恢复到与输入图像相同大小。
  23. [Paper]: Long, Jonathan, Evan Shelhamer, and Trevor Darrell. "Fully convolutional networks for semantic segmentation." Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition. 2015.
  24. # [模型架构](#contents)
  25. FCN-8s使用丢弃全连接操作的VGG16作为编码部分,并分别融合VGG16中第3,4,5个池化层特征,最后使用stride=8的反卷积获得分割图像。
  26. # [数据集](#contents)
  27. Dataset used:
  28. [PASCAL VOC 2012](<http://host.robots.ox.ac.uk/pascal/VOC/voc2012/index.html>)
  29. [SBD](<http://www.eecs.berkeley.edu/Research/Projects/CS/vision/grouping/semantic_contours/benchmark.tgz>)
  30. # [环境要求](#contents)
  31. - 硬件(Ascend/GPU)
  32. - 需要准备具有Ascend或GPU处理能力的硬件环境. 如需使用Ascend,可以发送 [application form](https://obs-9be7.obs.cn-east-2.myhuaweicloud.com/file/other/Ascend%20Model%20Zoo%E4%BD%93%E9%AA%8C%E8%B5%84%E6%BA%90%E7%94%B3%E8%AF%B7%E8%A1%A8.docx) 到ascend@huawei.com。一旦批准,你就可以使用此资源
  33. - 框架
  34. - [MindSpore](https://www.mindspore.cn/install/en)
  35. - 如需获取更多信息,请查看如下链接:
  36. - [MindSpore Tutorials](https://www.mindspore.cn/tutorial/training/en/master/index.html)
  37. - [MindSpore Python API](https://www.mindspore.cn/doc/api_python/en/master/index.html)
  38. # [快速开始](#contents)
  39. 在通过官方网站安装MindSpore之后,你可以通过如下步骤开始训练以及评估:
  40. - running on Ascend with default parameters
  41. ```python
  42. # run training example
  43. python train.py --device_id device_id
  44. # run evaluation example with default parameters
  45. python eval.py --device_id device_id
  46. ```
  47. # [脚本介绍](#contents)
  48. ## [脚本以及简单代码](#contents)
  49. ```python
  50. ├── model_zoo
  51. ├── README.md // descriptions about all the models
  52. ├── FCN8s
  53. ├── README.md // descriptions about FCN
  54. ├── scripts
  55. ├── run_train.sh
  56. ├── run_eval.sh
  57. ├── build_data.sh
  58. ├── src
  59. │ ├──data
  60. │ ├──build_seg_data.py // creating dataset
  61. │ ├──dataset.py // loading dataset
  62. │ ├──nets
  63. │ ├──FCN8s.py // FCN-8s architecture
  64. │ ├──loss
  65. │ ├──loss.py // loss function
  66. │ ├──utils
  67. │ ├──lr_scheduler.py // getting learning_rateFCN-8s
  68. ├── train.py // training script
  69. ├── eval.py // evaluation script
  70. ```
  71. ## [脚本参数](#contents)
  72. 训练以及评估的参数可以在config.py中设置
  73. - config for FCN8s
  74. ```python
  75. # dataset
  76. 'data_file': '/data/workspace/mindspore_dataset/FCN/FCN/dataset/MINDRECORED_NAME.mindrecord', # path and name of one mindrecord file
  77. 'batch_size': 32,
  78. 'crop_size': 512,
  79. 'image_mean': [103.53, 116.28, 123.675],
  80. 'image_std': [57.375, 57.120, 58.395],
  81. 'min_scale': 0.5,
  82. 'max_scale': 2.0,
  83. 'ignore_label': 255,
  84. 'num_classes': 21,
  85. # optimizer
  86. 'train_epochs': 500,
  87. 'base_lr': 0.015,
  88. 'loss_scale': 1024.0,
  89. # model
  90. 'model': 'FCN8s',
  91. 'ckpt_vgg16': '/data/workspace/mindspore_dataset/FCN/FCN/model/0-150_5004.ckpt',
  92. 'ckpt_pre_trained': '/data/workspace/mindspore_dataset/FCN/FCN/model_new/FCN8s-500_82.ckpt',
  93. # train
  94. 'save_steps': 330,
  95. 'keep_checkpoint_max': 500,
  96. 'train_dir': '/data/workspace/mindspore_dataset/FCN/FCN/model_new/',
  97. ```
  98. 如需获取更多信息,请查看`config.py`.
  99. ## [生成数据步骤](#contents)
  100. ### 训练数据
  101. - build mindrecord training data
  102. ```python
  103. sh build_data.sh
  104. or
  105. python src/data/build_seg_data.py --data_root=/home/sun/data/Mindspore/benchmark_RELEASE/dataset \
  106. --data_lst=/home/sun/data/Mindspore/benchmark_RELEASE/dataset/trainaug.txt \
  107. --dst_path=dataset/MINDRECORED_NAME.mindrecord \
  108. --num_shards=1 \
  109. --shuffle=True
  110. data_root: 训练数据集的总目录包含两个子目录img和cls_png,img目录下存放训练图像,cls_png目录下存放标签mask图像,
  111. data_lst: 存放训练样本的名称列表文档,每行一个样本。
  112. dst_path: 生成mindrecord数据的目标位置
  113. ```
  114. ## [训练步骤](#contents)
  115. ### 训练
  116. - running on Ascend with default parameters
  117. ```python
  118. python train.py --device_id device_id
  119. ```
  120. 训练时,训练过程中的epch和step以及此时的loss和精确度会呈现在终端上:
  121. ```python
  122. epoch: * step: **, loss is ****
  123. ...
  124. ```
  125. 此模型的checkpoint会在默认路径下存储
  126. ## [评估步骤](#contents)
  127. ### 评估
  128. - 在Ascend上使用PASCAL VOC 2012 验证集进行评估
  129. 在使用命令运行前,请检查用于评估的checkpoint的路径。请设置路径为到checkpoint的绝对路径,如 "/data/workspace/mindspore_dataset/FCN/FCN/model_new/FCN8s-500_82.ckpt"。
  130. ```python
  131. python eval.py
  132. ```
  133. 以上的python命令会在终端上运行,你可以在终端上查看此次评估的结果。测试集的精确度会以如下方式呈现:
  134. ```python
  135. mean IoU 0.6467
  136. ```
  137. # [模型介绍](#contents)
  138. ## [性能](#contents)
  139. ### 评估性能
  140. #### FCN8s on PASCAL VOC 2012
  141. | Parameters | Ascend
  142. | -------------------------- | -----------------------------------------------------------
  143. | Model Version | FCN-8s
  144. | Resource | Ascend 910 ;CPU 2.60GHz,192cores;Memory,755G
  145. | uploaded Date | 12/30/2020 (month/day/year)
  146. | MindSpore Version | 1.1.0-alpha
  147. | Dataset | PASCAL VOC 2012 and SBD
  148. | Training Parameters | epoch=500, steps=330, batch_size = 32, lr=0.015
  149. | Optimizer | Momentum
  150. | Loss Function | Softmax Cross Entropy
  151. | outputs | probability
  152. | Loss | 0.038
  153. | Speed | 1pc: 564.652 ms/step;
  154. | Scripts | [FCN script](https://gitee.com/mindspore/mindspore/tree/master/model_zoo/official/cv/FCN8s)
  155. ### Inference Performance
  156. #### FCN8s on PASCAL VOC
  157. | Parameters | Ascend
  158. | ------------------- | ---------------------------
  159. | Model Version | FCN-8s
  160. | Resource | Ascend 910
  161. | Uploaded Date | 10/29/2020 (month/day/year)
  162. | MindSpore Version | 1.1.0-alpha
  163. | Dataset | PASCAL VOC 2012
  164. | batch_size | 16
  165. | outputs | probability
  166. | mean IoU | 64.67
  167. ## [如何使用](#contents)
  168. ### 教程
  169. 如果你需要在不同硬件平台(如GPU,Ascend 910 或者 Ascend 310)使用训练好的模型,你可以参考这个 [Link](https://www.mindspore.cn/tutorial/training/en/master/advanced_use/migrate_3rd_scripts.html)。以下是一个简单例子的步骤介绍:
  170. - Running on Ascend
  171. ```
  172. # Set context
  173. context.set_context(mode=context.GRAPH_MODE, device_target=args_opt.device_target, save_graphs=False)
  174. context.set_auto_parallel_context(device_num=device_num,parallel_mode=ParallelMode.DATA_PARALLEL)
  175. init()
  176. # Load dataset
  177. dataset = data_generator.SegDataset(image_mean=cfg.image_mean,
  178. image_std=cfg.image_std,
  179. data_file=cfg.data_file,
  180. batch_size=cfg.batch_size,
  181. crop_size=cfg.crop_size,
  182. max_scale=cfg.max_scale,
  183. min_scale=cfg.min_scale,
  184. ignore_label=cfg.ignore_label,
  185. num_classes=cfg.num_classes,
  186. num_readers=2,
  187. num_parallel_calls=4,
  188. shard_id=args.rank,
  189. shard_num=args.group_size)
  190. dataset = dataset.get_dataset(repeat=1)
  191. # Define model
  192. net = FCN8s(n_class=cfg.num_classes)
  193. loss_ = loss.SoftmaxCrossEntropyLoss(cfg.num_classes, cfg.ignore_label)
  194. # optimizer
  195. iters_per_epoch = dataset.get_dataset_size()
  196. total_train_steps = iters_per_epoch * cfg.train_epochs
  197. lr_scheduler = CosineAnnealingLR(cfg.base_lr,
  198. cfg.train_epochs,
  199. iters_per_epoch,
  200. cfg.train_epochs,
  201. warmup_epochs=0,
  202. eta_min=0)
  203. lr = Tensor(lr_scheduler.get_lr())
  204. # loss scale
  205. manager_loss_scale = FixedLossScaleManager(cfg.loss_scale, drop_overflow_update=False)
  206. optimizer = nn.Momentum(params=net.trainable_params(), learning_rate=lr, momentum=0.9, weight_decay=0.0001,
  207. loss_scale=cfg.loss_scale)
  208. model = Model(net, loss_fn=loss_, loss_scale_manager=manager_loss_scale, optimizer=optimizer, amp_level="O3")
  209. # callback for saving ckpts
  210. time_cb = TimeMonitor(data_size=iters_per_epoch)
  211. loss_cb = LossMonitor()
  212. cbs = [time_cb, loss_cb]
  213. if args.rank == 0:
  214. config_ck = CheckpointConfig(save_checkpoint_steps=cfg.save_steps,
  215. keep_checkpoint_max=cfg.keep_checkpoint_max)
  216. ckpoint_cb = ModelCheckpoint(prefix=cfg.model, directory=cfg.train_dir, config=config_ck)
  217. cbs.append(ckpoint_cb)
  218. model.train(cfg.train_epochs, dataset, callbacks=cbs)
  219. # [随机事件介绍](#contents)
  220. 我们在train.py中设置了随机种子
  221. # [ModelZoo 主页](#contents)
  222. 请查看官方网站 [homepage](https://gitee.com/mindspore/mindspore/tree/master/model_zoo).