在华为云 ModelArts 上使用昇腾 910 计算卡训练 MindSpore 框架实现的 YOLOv4

教程 苍绮皓 ⋅ 于 2021-09-15 23:13:53 ⋅ 最后回复由 苍绮皓 2021-10-23 22:37:19 ⋅ 429 阅读

本文是使用华为云 ModelArts,使用第三方数据集训练 YOLOv4 目标检测模型的部署教程。我们将从前置准备、算法准备与 ModelArts 创建训练作业四个部分展开该教程。该教程默认读者已经注册华为云账号。


前置准备

该部分为教程的准备工作,主要需要完成以下工作:obs(对象存储服务)、数据下载与上传、模型代码下载与上传。

obs 准备与配置

该部分参考obs快速入门文档。

  1. 注册华为云并实名认证(教程默认完成,请参见步骤一:准备工作);
  2. 获取访问密钥(AK/SK)用以鉴权。获取的密钥文件为 csv文件,分别对应了用户名、AK(Access Key Id)、SK(Secret Access Key),妥善保存该文件,以上参数在工具初始化配置会用到;
  3. 获取终端节点(Endpoint)。例如,我们使用的是「华北-北京四」区域,那么查找到对应终端节点为obs.cn-north-4.myhuaweicloud.com,该参数在工具初始化配置会用到;
  4. 使用工具(OBS Browser+、obsutil)并进行初始化配置

文件处理与上传

  1. 桶是OBS中存储对象的容器,在上传对象前需要先创建桶;

  2. 将数据上传至 OBS 存储对象的桶内,以网页 GUI 操作为例:

    1. 登录控制台,创建OBS存储桶
    2. 登录控制台,进入「对象存储服务 OBS」,在「桶列表」中单击进入刚刚创建的桶
      file
    3. 进入桶后,在左侧菜单点选「对象」,为了方便管理桶内资源,我们选择在当前桶内创建「yolov4」文件夹
      file
    4. 进入「yolov4」文件夹,在该文件夹下创建「data」文件夹
      file
    5. 进入「data」文件夹,这里我们可以上传自己的数据集,例如一个完整的 COCO2017 目标检测数据集,上传操作如下
      file
      但由于完整的 COCO 目标检测数据集过大,此时应该使用OBS Browser+进行上传操作
      file
      或者使用obsutil进行上传操作
      ./obsutil cp /file-path obs://your-bucket/upload-path # 使用obsutil 复制 /本地文件 /目标位置

      最后上传结果如图
      file
      我们也可以在 AI Gallery 内检索可以用于 YOLO 训练,并且格式和 COCO 数据集一致的订阅数据,如一个COCO2017子集
      file
      点击下载后,在「下载详情」页面,将文件保存至你希望保存的位置
      file
      最后下载结果如图
      file
      经过以上操作,我们拥有了可以用于训练 YOLOv4模型的数据集。

    6. 将代码上传至 OBS 存储对象的桶内;

    7. 将 MindSpore 代码整个克隆/下载至本地,我们要用到的是其中「yolov4」的代码;
      file
    8. 单击进入刚刚创建的「yolov4」文件夹,在该文件夹下创建「code」文件夹,将「yolov4」整个上传;
      file
      经过以上操作,我们拥有了可以用于训练 YOLOv4模型的数据和代码。

适配算法代码

基于前置准备,我们已经拥有了数据和训练代码。本节我们将下载迁移学习所需的预训练模型,并以配置文件形式准备算法。该部分参考 MindSpore 的YOLOv4 说明文档

预训练文件处理与上传

  1. 前往 MindSpore 官网下载预训练模型,该文件原名为「yolov4_ascend_v120_coco2017_official_cv_bs8_acc43.ckpt」,我们需要将其重命名为「cspdarknet53_backbone.ckpt」;
  2. 登录控制台,进入「对象存储服务 OBS」,在「桶列表」中单击进入刚刚创建的桶;
  3. 进入单击进入「yolov4」文件夹,在该文件夹下创建「pretrain」文件夹,并将「cspdarknet53_backbone.ckpt」上传至该文件夹;
    file

使用配置文件方式准备算法

  1. 在任意代码编辑器打开「MindSpore/model_zoo/official/cv/yolov4」文件夹,打开其中「default_config.yaml」文件;
    file
  2. 按照 README_CN 文件修改以下参数;
    file
    file
    按照文件修改后,我们还需要进一步修改某些参数
    file
    总结以上步骤,我们需要修改的参数主要是文件路径的参数。ModelArts 首先会将数据文件从「data_url」复制到「data_path」下,如果需要解压,那么解压该文件夹中「modelarts_dataset_unzip_name」文件;其次,会将「checkpoint_url」下到权重文件复制到「pretrained_checkpoint」路径,此处要注意权重文件名应当保持一致。等到模型网络导入预训练权重后,训练脚步会导入数据,并开始训练;
  3. 将「default_config.yaml」文件上传至「code」文件夹下,根据最后修改时间确定当前版本是否为最新;
    file
  4. 基于对配置文件的修改,我们完成了算法的准备工作,最后只需要在 ModelArts 配置训练作业即可完成训练。

ModelArts 自定义算法创建训练作业

该部分为在 ModelArts 上训练 YOLOv4 的最后步骤。主要参考使用自定义算法在ModelArts上构建模型文档。

创建算法

  1. 在ModelArts管理控制台,进入「算法管理>我的算法」页面,单击左上角的「创建」;
  2. 在创建算法页面,填写相关信息,此处注意 AI 引擎应当选择 Ascend 与mindspore;
    file
  3. 确定无误后提交;
  4. 在「我的算法」页面,可单击算法名称,进入算法详情界面查看算法信息。

创建训练任务

  1. 在ModelArts管理控制台,进入「训练管理 > 训练作业(New)」页面,单击左上角的「创建」;
  2. 在「创建训练作业」页面,填写相关信息,在这里我们使用 coco2017子集合数据;
    file
    1. 训练输入:选择数据存储位置,然后选择数据集存储的OBS路径“test-modelarts/yolov4/data/coco-part
    2. 训练输出:在OBS路径创建输出文件夹,并将输出设置成该文件夹“test-modelarts/yolov4/output”
  3. 最后提交,即可在「训练管理/训练任务」中看到开始训练,单击进入可以查看训练日志;
  4. 总结以上步骤,我们首先要在 ModelArts 算法管理内创建算法,这里可以设置算法的各类参数,接着在训练任务中选择该算法进行训练。

日志分析

在最后,我们结合 ModelArts 生成日志分析一下其工作流程。

  1. Modelarts 服务初始化,将「创建算法」填写的「代码目录」整个复制到服务资源目录「user-job-dir」下,最后将这些路径加入脚本运行路径列表内;
    file
  2. 按照 default_config.yaml 设置的地址,拷贝数据集、预训练模型到服务资源目录,如果目录下为压缩文件,那么在这里解压;
    file
  3. 导入预训练参数
    file
  4. 开始训练
    file

以上是在华为云 ModelArts,使用第三方数据集训练 YOLOv4 目标检测模型的部署教程。通过实践我们发现,许多官方支持较好的算法上可以很方便的实现深度学习全部流程,但是在部署过程中,时常需要运行并从日志分析来解决 bug,这一点对更复杂的模型部署带来不便。

本帖已被设为精华帖!
本帖由 YX 于 1月前 加精
回复数量: 15
  • karb0n test
    2021-09-16 00:15:37

    沙发

  • 彬彬不冰
    2021-10-12 17:37:11

    file请问下遇到这个问题怎么解决呢

  • 苍绮皓
    2021-10-12 19:33:46

    @彬彬不冰 请问是否使用的是自己的数据集呢。
    只看报错应该是输入模型的张量尺寸有问题。

  • 彬彬不冰
    2021-10-13 09:51:37

    @苍绮皓 是的,使用了自己的数据集,那应该怎么去修改呢

  • 苍绮皓
    2021-10-13 10:15:00

    @彬彬不冰 只需要保证和例子里的数据集同规格就可以。

    可以找一下 coco 的说明问题,看一看他们预设的图像尺寸信息。在根据这个信息,对数据集先做一下变换就可以了。

  • 彬彬不冰
    2021-10-13 10:49:39

    @苍绮皓 这里是用的图片+一个json的格式,那是需要我json格式的数据集和coco的保持一样吗

  • 苍绮皓
    2021-10-13 10:52:40

    @彬彬不冰 是的,需要保持一致。

    目前主流数据集应该都有转换为 coco 格式的脚本。

  • 彬彬不冰
    2021-10-13 11:17:29

    @苍绮皓 我将数据集制作成coco格式,包含了iamges,annotations和categories三个字段,但是仍然是报这个错误

  • 苍绮皓
    2021-10-13 14:53:36

    @彬彬不冰 文件格式需要保持一致以外,图片的尺寸也要保持一致才可以。

  • Captain
    2021-10-13 15:04:03

    楼主,想问下,训练好的模型验证怎么验证,也是在modelarts上运行脚本吗。

  • 苍绮皓
    2021-10-13 15:21:13

    @Captain 对,mindspore 在仓库里也提供了验证脚本。可以按照教程思路试试~

  • 彬彬不冰
    2021-10-13 15:23:21

    @苍绮皓 我发现了是我的categories的类别输入和模型里设置的参数没对上,谢谢你

  • 苍绮皓
    2021-10-13 15:25:18

    @彬彬不冰 好的

  • Captain
    2021-10-14 11:41:20

    @彬彬不冰 您好,我也遇到了这个报错,请问能具体说下怎么解决的吗

  • 苍绮皓
    2021-10-23 22:37:19

    @Captain 修改 num_classes, 以及 out_channel 这两个参数

暂无评论~~
  • 请注意单词拼写,以及中英文排版,参考此页
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`, 更多语法请见这里 Markdown 语法
  • 支持表情,使用方法请见 Emoji 自动补全来咯,可用的 Emoji 请见 :metal: :point_right: Emoji 列表 :star: :sparkles:
  • 上传图片, 支持拖拽和剪切板黏贴上传, 格式限制 - jpg, png, gif
  • 发布框支持本地存储功能,会在内容变更时保存,「提交」按钮点击时清空
Ctrl+Enter