MindSpore应用系列:树莓派上运行YOLOv5进行实时目标检测(二)

上一篇主要介绍了YOLOv5的一些基本知识,包括网络,数据集等,本篇主要是实际运行。

最近更新树莓派到4B 4G, 后续均在该设备下进行测试。

首先是下载模型。

模型地址:

这里就不进行实际训练了,太耗费时间和机器了。就直接用现成的预训练权重。

预训练权重地址:

https://download.mindspore.cn/models/r1.10/yolov5shape640_ascend_v1100_coco2017_official_cv_acc36.6.ckpt

下载完上面的文件后进行mindir导出。

导出MindIR

python export.py --ckpt_file [CKPT_PATH] --file_name [FILE_NAME] --file_format [FILE_FORMAT]

export.py --ckpt_file yolov5shape640_ascend_v1100_coco2017_official_cv_acc36.6.ckpt --file_name yolov5.mindir --file_format MINDIR

上面的file_name设置的不对,应该是不带后缀的名称,如果设置如上面的一样的话,最终生成的文件是yolov5.mindir_yolov5s.mindir

cke_3058.png

缺少依赖,不是所有的模块名安装也是一样的名称。

pip install pyyaml

安装后运行还是报错,报错是device target不对。去看下目录下的default_config.yaml

里面默认配置的是Ascend,修改为CPU继续。

导出成功。

接下来就是推理了。文件夹下面有个cpp_infer, 先跑跑看吧。

首先是编译。

报错提示有点奇怪,先看下build.sh怎么写的吧。

上面的最终修改后的代码。代码的本意的如果不是ascend环境就获取cpu环境。但是最新的mindspore已经三合一了,而且realpath 在部分系统上不是返回空,而是返回异常。

所以直接注释掉相关代码就可以了。

cke_16272.png

cmake没安装,运行如下命令进行安装。

sudo apt install -y cmake

缺少相关头文件。查看相关文档。

在开发一个新的模型时,需要把这几个文件拷到执行目录下,并编写对应模型的main.cc执行。

有的模型cpp_infer下面没有common_inc文件夹,在执行的时候需要将这个文件夹拷到main.cc同目录下

main.cc里面是做模型推理的脚本文件,一般包括:

  • 模型加载及构建
  • 数据集构建/bin文件加载
  • 模型推理
  • 推理结果保存

然后在如下地址拷贝common_inc到build.sh的同目录下。上面的文档写的main.cc同目录,但是不同项目makefile写的不一样。

编译成功,然后就可以运行了。

运行报错。提升不支持CPU.

于是去看源码,源码里面创建的设备类型是Ascend310, 所以会报错。这个推理代码只能运行在310上。但是文档没说明。

那只能自己写推理了

import mindspore_lite as mslite
import numpy as np
import cv2 as cv
model = mslite.Model()
#default context's target is cpu
model.build_from_file("yolov5s.mindir", mslite.ModelType.MINDIR)
inputs = model.get_inputs()

in_data = cv.imread("/home/ai/YOLOv5/cpp_infer/out/data/000000000139.jpg")
inputs[0].set_data_from_numpy(in_data)
outputs = model.predict(inputs)
print(outputs)

复制

先这么写着调试下看看。

通过mindspore lite的云端推理。然后去下载mindspore lite。

尽然只有python3.7 可选。

未完待续~