You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
mindspore/model_zoo/official/cv/ssd/README_CN.md

14 KiB

目录

SSD说明

SSD将边界框的输出空间离散成一组默认框每个特征映射位置具有不同的纵横比和尺度。在预测时网络对每个默认框中存在的对象类别进行评分并对框进行调整以更好地匹配对象形状。此外网络将多个不同分辨率的特征映射的预测组合在一起自然处理各种大小的对象。

论文 Wei Liu, Dragomir Anguelov, Dumitru Erhan, Christian Szegedy, Scott Reed, Cheng-Yang Fu, Alexander C. Berg.European Conference on Computer Vision (ECCV), 2016 (In press).

模型架构

SSD方法基于前向卷积网络该网络产生固定大小的边界框集合并针对这些框内存在的对象类实例进行评分然后通过非极大值抑制步骤进行最终检测。早期的网络层基于高质量图像分类的标准体系结构被称为基础网络。后来通过向网络添加辅助结构进行检测。

数据集

使用的数据集: COCO2017

  • 数据集大小19 GB
    • 训练集18 GB118000张图像
    • 验证集1 GB5000张图像
    • 标注241 MB实例字幕person_keypoints等
  • 数据格式图像和json文件
    • 注意数据在dataset.py中处理

环境要求

  • 安装MindSpore

  • 下载数据集COCO2017。

  • 本示例默认使用COCO2017作为训练数据集您也可以使用自己的数据集。

    1. 如果使用coco数据集。执行脚本时选择数据集coco。 安装Cython和pycocotool也可以安装mmcv进行数据处理。

      pip install Cython
      
      pip install pycocotools
      
      

      并在config.py中更改COCO_ROOT和其他您需要的设置。目录结构如下

      .
      └─cocodataset
        ├─annotations
          ├─instance_train2017.json
          └─instance_val2017.json
        ├─val2017
        └─train2017
      
      
    2. 如果使用自己的数据集。执行脚本时选择数据集为other。 将数据集信息整理成TXT文件每行如下

      train2017/0000001.jpg 0,259,401,459,7 35,28,324,201,2 0,30,59,80,2
      
      

      每行是按空间分割的图像标注,第一列是图像的相对路径,其余为[xmin,ymin,xmax,ymax,class]格式的框和类信息。我们从IMAGE_DIR(数据集目录)和ANNO_PATHTXT文件路径的相对路径连接起来的图像路径中读取图像。在config.py中设置IMAGE_DIRANNO_PATH

快速入门

通过官方网站安装MindSpore后您可以按照如下步骤进行训练和评估

  • Ascend处理器环境运行
# Ascend分布式训练
sh run_distribute_train.sh [DEVICE_NUM] [EPOCH_SIZE] [LR] [DATASET] [RANK_TABLE_FILE]
# Ascend处理器环境运行eval
sh run_eval.sh [DATASET] [CHECKPOINT_PATH] [DEVICE_ID]
  • GPU处理器环境运行
# GPU分布式训练
sh run_distribute_train_gpu.sh [DEVICE_NUM] [EPOCH_SIZE] [LR] [DATASET]
# GPU处理器环境运行eval
sh run_eval_gpu.sh [DATASET] [CHECKPOINT_PATH] [DEVICE_ID]

脚本说明

脚本及样例代码

.
└─ cv
  └─ ssd
    ├─ README.md                      ## SSD相关说明
    ├─ scripts
      ├─ run_distribute_train.sh      ## Ascend分布式shell脚本
      ├─ run_distribute_train_gpu.sh  ## GPU分布式shell脚本
      ├─ run_eval.sh                  ## Ascend评估shell脚本
      └─ run_eval_gpu.sh              ## GPU评估shell脚本
    ├─ src
      ├─ __init__.py                  ## 初始化文件
      ├─ box_util.py                  ## bbox工具
      ├─ coco_eval.py                 ## coco指标工具
      ├─ config.py                    ## 总配置
      ├─ dataset.py                   ## 创建并处理数据集
      ├─ init_params.py               ## 参数工具
      ├─ lr_schedule.py               ## 学习率生成器
      └─ ssd.py                       ## SSD架构
    ├─ eval.py                        ## 评估脚本
    ├─ train.py                       ## 训练脚本
    └─ mindspore_hub_conf.py          ## MindSpore Hub接口

脚本参数

train.py和config.py中主要参数如下

  "device_num": 1                            # 使用设备数量
  "lr": 0.05                                 # 学习率初始值
  "dataset": coco                            # 数据集名称
  "epoch_size": 500                          # 轮次大小
  "batch_size": 32                           # 输入张量的批次大小
  "pre_trained": None                        # 预训练检查点文件路径
  "pre_trained_epoch_size": 0                # 预训练轮次大小
  "save_checkpoint_epochs": 10               # 两个检查点之间的轮次间隔。默认情况下每10个轮次都会保存检查点。
  "loss_scale": 1024                         # 损失放大

  "class_num": 81                            # 数据集类数
  "image_shape": [300, 300]                  # 作为模型输入的图像高和宽
  "mindrecord_dir": "/data/MindRecord_COCO"  # MindRecord路径
  "coco_root": "/data/coco2017"              # COCO2017数据集路径
  "voc_root": ""                             # VOC原始数据集路径
  "image_dir": ""                            # 其他数据集图片路径如果使用coco或voc此参数无效。
  "anno_path": ""                            # 其他数据集标注路径如果使用coco或voc此参数无效。

训练过程

运行train.py训练模型。如果mindrecord_dir为空,则会通过coco_rootcoco数据集image_diranno_path(自己的数据集)生成MindRecord文件。注意如果mindrecord_dir不为空将使用mindrecord_dir代替原始图像。

Ascend上训练

  • 分布式
    sh run_distribute_train.sh [DEVICE_NUM] [EPOCH_SIZE] [LR] [DATASET] [RANK_TABLE_FILE] [PRE_TRAINED](optional) [PRE_TRAINED_EPOCH_SIZE](optional)

此脚本需要五或七个参数。

  • DEVICE_NUM:分布式训练的设备数。

  • EPOCH_NUM:分布式训练的轮次数。

  • LR:分布式训练的学习率初始值。

  • DATASET:分布式训练的数据集模式。

  • RANK_TABLE_FILErank_table.json的路径。最好使用绝对路径。

  • PRE_TRAINED:预训练检查点文件的路径。最好使用绝对路径。

  • PRE_TRAINED_EPOCH_SIZE:预训练的轮次数。

    训练结果保存在当前路径中,文件夹名称以"LOG"开头。 您可在此文件夹中找到检查点文件以及结果,如下所示。

epoch: 1 step: 458, loss is 3.1681802
epoch time: 228752.4654865265, per step time: 499.4595316299705
epoch: 2 step: 458, loss is 2.8847265
epoch time: 38912.93382644653, per step time: 84.96273761232868
epoch: 3 step: 458, loss is 2.8398118
epoch time: 38769.184827804565, per step time: 84.64887516987896
...

epoch: 498 step: 458, loss is 0.70908034
epoch time: 38771.079778671265, per step time: 84.65301261718616
epoch: 499 step: 458, loss is 0.7974688
epoch time: 38787.413120269775, per step time: 84.68867493508685
epoch: 500 step: 458, loss is 0.5548882
epoch time: 39064.8467540741, per step time: 85.29442522723602

GPU训练

  • 分布式
    sh run_distribute_train_gpu.sh [DEVICE_NUM] [EPOCH_SIZE] [LR] [DATASET] [PRE_TRAINED](optional) [PRE_TRAINED_EPOCH_SIZE](optional)

此脚本需要五或七个参数。

  • DEVICE_NUM:分布式训练的设备数。

  • EPOCH_NUM:分布式训练的轮次数。

  • LR:分布式训练的学习率初始值。

  • DATASET:分布式训练的数据集模式。

  • PRE_TRAINED:预训练检查点文件的路径。最好使用绝对路径。

  • PRE_TRAINED_EPOCH_SIZE:预训练的轮次数。

    训练结果保存在当前路径中,文件夹名称以"LOG"开头。 您可在此文件夹中找到检查点文件以及结果,如下所示。

epoch: 1 step: 1, loss is 420.11783
epoch: 1 step: 2, loss is 434.11032
epoch: 1 step: 3, loss is 476.802
...
epoch: 1 step: 458, loss is 3.1283689
epoch time: 150753.701, per step time: 329.157
...

评估过程

Ascend处理器环境评估

sh run_eval.sh [DATASET] [CHECKPOINT_PATH] [DEVICE_ID]

此脚本需要两个参数。

  • DATASET:评估数据集的模式。
  • CHECKPOINT_PATH:检查点文件的绝对路径。
  • DEVICE_ID: 评估的设备ID。

在训练过程中可以生成检查点。

推理结果保存在示例路径中文件夹名称以“eval”开头。您可以在日志中找到类似以下的结果。

Average Precision (AP) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.238
Average Precision (AP) @[ IoU=0.50 | area= all | maxDets=100 ] = 0.400
Average Precision (AP) @[ IoU=0.75 | area= all | maxDets=100 ] = 0.240
Average Precision (AP) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.039
Average Precision (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.198
Average Precision (AP) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.438
Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets= 1 ] = 0.250
Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets= 10 ] = 0.389
Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.424
Average Recall (AR) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.122
Average Recall (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.434
Average Recall (AR) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.697

========================================

mAP: 0.23808886505483504

GPU处理器环境评估

sh run_eval_gpu.sh [DATASET] [CHECKPOINT_PATH] [DEVICE_ID]

此脚本需要两个参数。

  • DATASET:评估数据集的模式。
  • CHECKPOINT_PATH:检查点文件的绝对路径。
  • DEVICE_ID: 评估的设备ID。

在训练过程中可以生成检查点。

推理结果保存在示例路径中文件夹名称以“eval”开头。您可以在日志中找到类似以下的结果。

Average Precision (AP) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.224
Average Precision (AP) @[ IoU=0.50 | area= all | maxDets=100 ] = 0.375
Average Precision (AP) @[ IoU=0.75 | area= all | maxDets=100 ] = 0.228
Average Precision (AP) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.034
Average Precision (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.189
Average Precision (AP) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.407
Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets= 1 ] = 0.243
Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets= 10 ] = 0.382
Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.417
Average Recall (AR) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.120
Average Recall (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.425
Average Recall (AR) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.686

========================================

mAP: 0.2244936111705981

模型描述

性能

评估性能

参数 Ascend GPU
模型版本 SSD V1 SSD V1
资源 Ascend 910CPU 2.60GHz192核内存755 GB NV SMX2 V100-16G
上传日期 2020-06-01 2020-09-24
MindSpore版本 0.3.0-alpha 1.0.0
数据集 COCO2017 COCO2017
训练参数 epoch = 500, batch_size = 32 epoch = 800, batch_size = 32
优化器 Momentum Momentum
损失函数 Sigmoid交叉熵SmoothL1Loss Sigmoid交叉熵SmoothL1Loss
速度 8卡90毫秒/步 8卡121毫秒/步
总时长 8卡4.81小时 8卡12.31小时
参数(M) 34 34
脚本 https://gitee.com/mindspore/mindspore/tree/master/model_zoo/official/cv/ssd https://gitee.com/mindspore/mindspore/tree/master/model_zoo/official/cv/ssd

推理性能

参数 Ascend GPU
模型版本 SSD V1 SSD V1
资源 Ascend 910 GPU
上传日期 2020-06-01 2020-09-24
MindSpore版本 0.3.0-alpha 1.0.0
数据集 COCO2017 COCO2017
batch_size 1 1
输出 mAP mAP
准确率 IoU=0.50: 23.8% IoU=0.50: 22.4%
推理模型 34M.ckpt文件 34M.ckpt文件

随机情况说明

dataset.py中设置了“create_dataset”函数内的种子同时还使用了train.py中的随机种子。

ModelZoo主页

请浏览官网主页