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/yolov3_resnet18/README_CN.md

10 KiB

目录

YOLOv3_ResNet18描述

基于ResNet-18的YOLOv3网络支持训练和评估。

论文: Joseph Redmon, Ali Farhadi. arXiv preprint arXiv:1804.02767, 2018.2, 4, 7, 11.

模型架构

YOLOv3整体网络架构如下

我们使用ResNet18作为YOLOv3_ResNet18的主干。ResNet18架构分为四个阶段。ResNet架构分别使用大小为7×7和3×3的内核执行初始卷积和最大池化。此后每个阶段的网络都有不同的残差模块2, 2, 2, 2包含两个3×3的卷积层。最后是一个平均池化层和一个全连接层。

数据集

使用的数据集:COCO 2017

  • 数据集大小19 GB

    • 训练集18 GB118000张图片
    • 验证集1GB5000张图片
    • 标注241 MB包含实例字幕person_keypoints等
  • 数据格式图片和json文件

    • 标注数据在dataset.py中处理。
  • 数据集

    1. 目录结构如下:

      .
      ├── annotations  # 标注jsons
      ├── train2017    # 训练数据集
      └── val2017      # 推理数据集
      
    2. 将数据集信息整理成TXT文件每行如下

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

      每行是按空间分割的图像标注,第一列是图像的相对路径,其余为[xmin,ymin,xmax,ymax,class]格式的框和类信息。dataset.py是解析脚本,我们从image_dir(数据集目录)和anno_pathTXT文件路径的相对路径连接起来的图像路径中读取图像。image_diranno_path为外部输入。

环境要求

  • 硬件Ascend处理器
    • 准备Ascend处理器搭建硬件环境。如需试用Ascend处理器请发送申请表至ascend@huawei.com审核通过即可获得资源。
  • 框架
  • 如需查看详情,请参见如下资源:

快速入门

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

  • Ascend处理器环境运行

    # 运行单机训练示例
    sh run_standalone_train.sh [DEVICE_ID] [EPOCH_SIZE] [MINDRECORD_DIR] [IMAGE_DIR] [ANNO_PATH]
    # 运行分布式训练示例
    sh run_distribute_train.sh [DEVICE_NUM] [EPOCH_SIZE] [MINDRECORD_DIR] [IMAGE_DIR] [ANNO_PATH] [RANK_TABLE_FILE]
    # 运行评估示例
    sh run_eval.sh [DEVICE_ID] [CKPT_PATH] [MINDRECORD_DIR] [IMAGE_DIR] [ANNO_PATH]
    

脚本说明

脚本及样例代码

└── cv
    ├── README.md                           // 所有模型相关说明
    ├── mindspore_hub_conf.md               // Mindspore Hub配置
    └── yolov3_resnet18
        ├── README.md                       // yolov3_resnet18相关说明
        ├── scripts
            ├── run_distribute_train.sh     // Ascend上分布式shell脚本
            ├── run_standalone_train.sh     // Ascend上分布式shell脚本
            └── run_eval.sh                 // Ascend上评估的shell脚本
        ├── src
            ├── dataset.py                  // 创建数据集
            ├── yolov3.py                   // yolov3架构
            ├── config.py                   // 参数配置
            └── utils.py                    // 工具函数
        ├── train.py                        // 训练脚本
        └── eval.py                         // 评估脚本  

脚本参数

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

  device_num: 使用设备编号默认为1。
  lr: 学习率默认为0.001。
  epoch_size: 轮次大小默认为50。
  batch_size: 批次大小默认为32。
  pre_trained: 预训练的检查点文件路径。
  pre_trained_epoch_size: 预训练的轮次大小。
  mindrecord_dir: Mindrecord目录。
  image_dir: 数据集路径。
  anno_path: 标注路径。

  img_shape: 输入到模型的图像高度和宽度。

训练过程

Ascend上训练

训练模型运行train.py,使用数据集image_diranno_pathmindrecord_dir。如果mindrecord_dir为空,则通过image_diranno_path(图像绝对路径由image_diranno_path中的相对路径连接)生成MindRecord文件。注意,如果mindrecord_dir不为空,将使用mindrecord_dir而不是image_diranno_path

  • 单机模式

    sh run_standalone_train.sh 0 50 ./Mindrecord_train ./dataset ./dataset/train.txt
    

    输入变量为设备编号、轮次大小、MindRecord目录路径、数据集目录路径、训练TXT文件路径。

  • 分布式模式

    sh run_distribute_train.sh 8 150 /data/Mindrecord_train /data /data/train.txt /data/hccl.json
    

    输入变量为设备编号、轮次大小、MindRecord目录路径、数据集目录路径、训练TXT文件路径和hccl_tools配置文件最好使用绝对路径。

每步的损失值和时间如下:

epoch:145 step:156, loss is 12.202981
epoch time:25599.22742843628, per step time:164.0976117207454
epoch:146 step:156, loss is 16.91706
epoch time:23199.971675872803, per step time:148.7177671530308
epoch:147 step:156, loss is 13.04007
epoch time:23801.95164680481, per step time:152.57661312054364
epoch:148 step:156, loss is 10.431475
epoch time:23634.241580963135, per step time:151.50154859591754
epoch:149 step:156, loss is 14.665991
epoch time:24118.8325881958, per step time:154.60790120638333
epoch:150 step:156, loss is 10.779521
epoch time:25319.57221031189, per step time:162.30495006610187

注意结果为两类人与脸使用了我们自己的标注与COCO 2017您可以更改config.py中的num_classes来训练您的数据集。我们将在COCO 2017中支持80个分类。

评估过程

Ascend评估

运行eval.py,数据集为image_diranno_path(评估TXT)、mindrecord_dirckpt_pathckpt_path检查点文件的路径。

sh run_eval.sh 0 yolo.ckpt ./Mindrecord_eval ./dataset ./dataset/eval.txt

输入变量为设备编号、检查点路径、MindRecord目录路径、数据集目录路径、训练TXT文件路径。

您将获得每类的精度和召回值:

class 0 precision is 88.18%, recall is 66.00%
class 1 precision is 85.34%, recall is 79.13%

注意精度和召回值是使用我们自己的标注和COCO 2017的两种分类人与脸的结果。

模型描述

性能

评估性能

参数 Ascend
模型版本 YOLOv3_Resnet18 V1
资源 Ascend 910 CPU 2.60GHz192核内存755G
上传日期 2020-06-01
MindSpore版本 0.2.0-alpha
数据集 COCO2017
训练参数 epoch = 150, batch_size = 32, lr = 0.001
优化器 Adam
损失函数 Sigmoid交叉熵
输出 概率
速度 1pc120毫秒/步; 8卡160毫秒/步
总时长 1pc150分钟; 8卡: 70分钟
参数(M) 189
脚本 yolov3_resnet18脚本

推理性能

参数 Ascend
模型版本 YOLOv3_Resnet18 V1
资源 Ascend 910
上传日期 2020-06-01
MindSpore版本 0.2.0-alpha
数据集 COCO2017
batch_size 1
输出 精度和召回
准确性 class 0: 88.18%/66.00%; class 1: 85.34%/79.13%

随机情况说明

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

ModelZoo主页

请浏览官网主页