教你使用Pycharm搞定YOLOV5部署 BPU(版本: 6.2)

声明:本文参考链接:http://t.csdnimg.cn/CF6gw   (感谢玺哥)

yolov5的代码我用的是https://github.com/ultralytics/yolov5的master分支,目前应该是版本7.0,后续作者更新后,可以切换到6.2分支来使用。

本教程使用的一些文件参考1- BPU开发_免费高速下载|百度网盘-分享无限制 (baidu.com)

提取码:0a09

一 环境配置

  • 1.1 安装依赖包

    如果在当前python环境下能利用pip install onnx轻松安装onnx,那就直接配置yolov5的环境就行了。

直接根据requirements.txt文件配置yolov5虚拟环境

pip install -r requirements.txt

1.2 运行Yolov5
下载百度云中提供的文件,按照如下流程操作:

解压yolov5-master.zip。
将zidane.jpg放到yolov5-master文件夹中。
将yolov5s.pt放到yolov5-master/models文件夹中。
进入yolov5-master文件夹,输入python .\detect.py --weights .\models\yolov5s.pt --source zidane.jpg,代码会输出检测结果保存路径,比如我的就是Results saved to runs\detect\exp,检测结果如下所示。

我这里把文件夹命名为yolov5-bpu以区别于我之前的文件

1.3 pytorch的pt模型文件转onnx

在yolov5-bpu虚拟文件夹下输入

python .\export.py --weights .\models\yolov5s.pt --include onnx --opset 11

转换后,控制台会输出一些log信息,如图所示


二 ONNX模型转换

模型转换要在docker中转换,怎么安装docker,怎么进入OE,怎么挂载硬盘,我是参考http://t.csdnimg.cn/4A5Pc

进行部署的。

新建一个文件夹,我这里沿用前人叫bpucodes,把前面转好的yolov5s.onnx放进这个文件夹里,百度云里也提供了相关的代码。

这里提一点,docker默认的安装地点在C盘,如果有C盘和我一样爆满的朋友可以参考这篇文章

http://t.csdnimg.cn/RtbjC

注意如果显示:  系统找不到指定的路径。就需要在对应地方创建文件夹

docker pull openexplorer/ai_toolchain_centos_7:v1.13.6

报错案例:error during connect: In the default daemon configuration on Windows, the docker client must be run with elevated privileges to connect.: Post "http://%2F%2F.%2Fpipe%2Fdocker_engine/v1.24/images/create?fromImage=openexplorer%2Fai_toolchain_centos_7&tag=v1

解决方案:以管理员的身份打开cmd,运行下面两行代码,重启docker后在运行docker pull openexplorer/ai_toolchain_centos_7:v1.13.6即可成功

cd C:\Program Files\Docker\Docker
DockerCli.exe -SwitchDaemon

参考解决方案:http://t.csdnimg.cn/I92VW

之后打开docker就会看到对应镜像。

因为我是根据大佬的网盘直接下载的,需要进行软连接重构,在docker中运行以下两行代码

rm /open_explorer/ddk/samples/ai_toolchain/horizon_model_convert_sample/01_common/model_zoo

ln -s /open_explorer/ddk/samples/ai_toolchain/model_zoo /open_explorer/ddk/samples/ai_toolchain/horizon_model_convert_sample/01_common/model_zoo

按照要求安装完成后,在docker中,进入bpucodes文件夹,开始我们的模型转换。

按照教程,启动docker要执行run_docker.sh,我是点击了一下

在进入docker之前,先记录两个内容: 

天工开物OpenExplorer根目录:

我的环境是"D:\xurix3gongju\horizon_xj3_open_explorer_v2.2.3_20220617",记得加双引号防止出现空格,该目录要挂载在docker中/open_explorer目录下
dataset根目录:我的环境下是"D:\xurix3gongju\dataset",记得加双引号防止出现空格,该目录需要挂载在docker中的/data/horizon_x3/data目录下。
*辅助文件夹根目录:官方教程其实是没有这个过程的,我把这个挂载在docker里,就是充当个类似U盘的介质。比如在我的环境下是"D:\xurix3gongju\BPUCodes",我可以在windows里面往这个文件夹拷贝数据,这些数据就可以在docker中使用,在docker中的路径为/data/horizon_x3/codes。

由于cmd不支持换行,以下代码需按照图片中运行的把每行\删除并连成一行

docker run -it --rm -v "D:\xurix3gongju\horizon_xj3_open_explorer_v2.2.3_20220617":/open_explorer  -v "D:\xurix3gongju\dataset":/data/horizon_x3/data  -v "D:\xurix3gongju\bpucodes":/data/horizon_x3/codes  openexplorer/ai_toolchain_centos_7:v1.13.6

docker run -it --rm \
-v "D:\xurix3gongju\horizon_xj3_open_explorer_v2.2.3_20220617":/open_explorer \
-v "D:\xurix3gongju\dataset":/data/horizon_x3/data \
-v "D:\xurix3gongju\bpucodes":/data/horizon_x3/codes \
openexplorer/ai_toolchain_centos_7:v1.13.6

在cmd(管理员)中输入以下指令即可进入docker,记住要提前打开桌面的docker

三、模型检测

模型检测的目的是检测有没有不支持的算子,输入指令开始检查模型,显示如下内容表示模型检查通过。

hb_mapper checker --model-type onnx --march bernoulli2 --model yolov5s.onnx

出现下图所示结果即成功。

四、校准数据准备

官方示例:Yolov3部署

官方提供的yolov3放置在docker中 的路径如下:

/open_explorer/ddk/samples/ai_toolchain/horizon_model_convert_sample/04_detection/02_yolov3_darknet53/mapper

4.1模型准备

模型所需要的prototxt和caffemodel文件放置在docker中的/open_explorer/ddk/samples/ai_toolchain/model_zoo/mapper/detection/yolov3_darknet53路径下。

4.2验证模型

进入以下路径,并输入

/open_explorer/ddk/samples/ai_toolchain/horizon_model_convert_sample/04_detection/02_yolov3_darknet53/mapper

 ./01_check.sh

出现下面画面就是转换成功了。

4.3转换模型

转换模型之前我们需要准备校准数据,输入以下代码会自动从docker的open_explorer包中抽取数据。

./02_preprocess.sh

再输入以下代码,输出一大堆的命令行,等待一段时间之后会输出。这里我们可以发现每一层网络都要评估一个相似度。这就可以解释为什么要准备校准数据,因为BPU是INT8计算,所以注定会有精度损失。而且这些误差也是可以传递的,所以到后面精度是越来越低的。如果网络深度过高,也会导致整体精度的下降。

./03_build.sh

最终结果

为了更好的理解这些转换流程,大家可以去参考链接看看玺佬的博客:http://t.csdnimg.cn/mDsKR

4.4准备校准数据

     进入 prepare_calibration_data.py文件中修改一下两点,/data/horizon_x3/codes为固定路径,后面是你的文件夹位置


# 修改输入图像大小为640x640
img = imequalresize(img, (640, 640))
# 指定输出的校准图像根目录
dst_root = '/data/horizon_x3/codes/calibration_data

然后用下面这行代码运行该文件(切记要在该文件所在目录运行),如图则为校准数据成功

python3 ./prepare_calibration_data.py

4.5转换BPU模型

转换模型需要yaml参数文件,具体含义参考yolov3的教程,这里我直接使用网盘下载的convert_yolov5s.yaml文件。

随后在对应目录下输入命令,开始转换我们的模型!校准过后会输出每一层的量化损失。

转换成功后,得到model_output/yolov5s.bin,这个文件拿出来,拷贝到旭日X3派上使用,它也是我们上板运行所需要的模型文件。

hb_mapper makertbin --config convert_yolov5s.yaml --model-type onnx

如图所示,完美收官!

4.6 模型推理

可能有的友友怕文件不能使用,那么接下来可以验证一下,这里我就以官方的yolov3历程演示一下。

首先进入文件修改下面第十四行代码文件路径,改成

yolov3_darknet53_416x416_nv12_quantized_model.onnx

之后运行下面这行代码就可以实现检测图片

python3 ./inference_model.py

如下图生成了一个detected.png图片

运行之后,我们可以得到如下检测结果。

五、板载测试

5.1开发板部署

打开docker输入

cd /open_explorer/ddk/package/board/

bash install.sh 192.168.101.125

这时候再打开板子输入

hrt_model_exec

如果有如下输出,说明开发板部署完成。

5.2开发板运行(案例yolov3)

我们将下图所示的test_yolov3文件夹直接拖到旭日X3派开发板

下图即为拷贝完成

在执行前要安装一些包sudo pip3 install EasyDict pycocotools,切记要加sudo,这样安装的

路径不是用户目录,在运行BPU模型时候,也是必须要加sudo

随后在对应目录下运行inference_model_bpu.py文件

sudo python3 ./inference_model_bpu.py

BPU上的检测结果如下图所示,推理耗时178ms已经是相当快了。

5.3开发板运行(yolov5)

下载百度云的x3pcodes文件,直接拖拽拷贝到旭日X3派开发板中,其中yolov5s.bin就是我们转换后的模型

首先确保安装了opencv库

sudo apt-get install libopencv-dev

在转到文件目录下运行代码

python3 setup.py build_ext --inplace

最后在运行推理代码,推理结果保存为res.png

sudo python3 inference_model_bpu.py

相关结果如下所示,可以看出,后处理部分耗时为25ms,C++和Python混编有效提升了代码的运行速度。

 

  • 27
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ROS研究员

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值