无人机上仅使用CPU实时运行Yolov5?(OpenVINO帮你实现)(上篇)_阿木实验室的博客-程序员宅基地

Intel CPU在运行视觉导航等算法时实时性要优于Nvidia等平台,如Jetson Tx2,NX。而Nvidia平台在运行深度学习算法方面具有很大优势,两种平台各有利弊。但是,Intel OpenVINO的推出允许NUC平台实时运行深度学习模型,如目前最流行的目标检测程序Yolov5,这样就太好了,仅使用Intel无人机平台就可以完成各种任务。本教程将教你用Prometheus在Intel无人机平台部署Yolov5目标检测。

先来个速度测试,仅使用Intel CPU,没有模型压缩与剪枝等算法,也不依赖其他任何加速硬件。

Intel CPU Yolov5模型 输入分辨率 检测帧率
Intel i7-10710U (10代NUC) yolov5s 256 44.5Hz
Intel i7-10710U (10代NUC) yolov5s 320 27.7Hz
Intel i7-10710U (10代NUC) yolov5s 384 19.8Hz
Intel i7-10710U (10代NUC) yolov5s 512 10.1Hz
Intel i7-6700K (台式机) yolov5s 256 43.2Hz
Intel i7-6700K (台式机) yolov5s 320 27.1Hz
Intel i7-6700K (台式机) yolov5s 384 19.2Hz
Intel i7-6700K (台式机) yolov5s 512 10.0Hz

一、安装OpenVINO

官网教程:https://docs.openvinotoolkit.org/latest/openvino_docs_install_guides_installing_openvino_linux.html

1. 下载安装包

地址:

https://software.intel.com/content/www/us/en/develop/tools/openvino-toolkit/download.html?operatingsystem=linux&distributions=webdownload&version=2021%203%20(latest)&options=offline

image-20210402001238180

2. 如果之前安装过openvino,重命名或删除以下文件:

~/inference_engine_samples_build
~/openvino_models

3. 打开终端,解压安装包并进入解压路径

cd ~/Downloads/
tar -xvzf l_openvino_toolkit_p_<version>.tgz
cd l_openvino_toolkit_p_<version>

4. 安装OpenVINO

sudo ./install_GUI.sh

5. 安装软件依赖

cd /opt/intel/openvino_2021/install_dependencies
sudo -E ./install_openvino_dependencies.sh

6. 配置模型优化器

cd /opt/intel/openvino_2021/deployment_tools/model_optimizer/install_prerequisites
sudo ./install_prerequisites.sh

如果下载很慢,可以修改~/.pip/pip.conf,转到国内源

[global]
index-url = http://mirrors.aliyun.com/pypi/simple/
[install]
trusted-host = mirrors.aliyun.com

二、配置Yolov5,运行演示程序

1. 下载Prometheus子模块Yolov5,并配置

sudo apt install python3-pip
cd <path-to-Prometheus>/
./Scripts/install_detection_yolov5openvino.sh

2. 下载模型权重或训练自己的模型

以官方权重为例

cd <path-to-Prometheus>/Modules/object_detection_yolov5openvino/weights
wget https://github.com/ultralytics/yolov5/releases/download/v3.0/yolov5s.pt

3. 将.pt权重文件转换为.onnx文件

运行命令:

cd <path-to-Prometheus>/Modules/object_detection_yolov5openvino
python3 models/export.py --weights weights/yolov5s.pt --img 384 --batch 1

4. 将.onnx文件转换为IR文件

cd <path-to-Prometheus>/Modules/object_detection_yolov5openvino
python3 /opt/intel/openvino_2021/deployment_tools/model_optimizer/mo.py  --input_model weights/yolov5s.onnx --model_name weights/yolov5s -s 255 --reverse_input_channels --output Conv_487,Conv_471,Conv_455

5. 运行演示程序

cd <path-to-Prometheus>/
./Scripts/start_yolov5openvino_server.sh
# Ctrl+t 打开一个新的命令行页面,并运行:
roslaunch prometheus_detection yolov5_intel_openvino.launch

运行结果如下:

image-20210403230951069

6. 输入ROS-Launch参数

<path-to-Prometheus>/Modules/object_detection/launch/yolov5_intel_openvino.launch为例:

<launch>
    <node pkg="prometheus_detection" type="yolov5_openvino_client.py" name="yolov5_openvino_client" output="screen">
        <param name="output_topic" value="/prometheus/object_detection/yolov5_openvino_det"/>
        <param name="camera_parameters" type="string" value="$(find prometheus_detection)/shell/calib_webcam_640x480.yaml" />
        <param name="object_names_txt" value="coco"/>
    </node>
</launch>

其中:

  • output_topic:检测结果输出话题(消息类型:MultiDetectionInfo.msg

  • camera_parameters:相机参数文件(为了估计视线角误差、目标位置)

  • object_names_txt:目标类别描述txt问题(具体见:<path-to-Prometheus>/Modules/object_detection/py_nodes/yolov5_openvion_client/class_desc/coco.txt

7. 输出ROS话题解析

默认输出话题,消息类型:

##`MultiDetectionInfo.msg`
Header header
## 检测到的目标数量
int32 num_objs
## 每个目标的检测结果
DetectionInfo[] detection_infos
##`DetectionInfo.msg`
## 是否检测到目标
bool detected
## 目标类别名称
string object_name
## 类别ID
int32 category
## 0表示相机坐标系, 1表示机体坐标系, 2表示惯性坐标系
int32 frame
## 目标位置[相机系下:右方x为正,下方y为正,前方z为正]
float32[3] position
## 目标姿态-欧拉角-(z,y,x)
float32[3] attitude
## 目标姿态-四元数-(qx,qy,qz,qw)
float32[4] attitude_q
## 视线角度[相机系下:右方x角度为正,下方y角度为正]
float32[2] sight_angle
## 偏航角误差
float32 yaw_error

注意:默认情况下每个目标仅有detected, object_name, category, frame, sight_angle的输出。

如果想输出position,需要在类别描述文件(如<path-to-Prometheus>/Modules/object_detection/py_nodes/yolov5_openvion_client/class_desc/coco.txt)中填写目标的高度与宽度(单位:m)。

image-20210403231019265

如上图,以人(person)为例,设置宽度0.5m,高度1.8m

然后,需要修改源代码,这里以高度估计人距离摄像机的距离,并以此估计position

源代码位置:<path-to-Prometheus>/Modules/object_detection/py_nodes/yolov5_openvion_client/yolov5_openvion_client.py,(112-114行)

image-20210403231510904

cls==0用来判断是否为类别—person,cls_hs[cls]用来读取目标高度(读到的数就是我们写在coco.txt里的1.8m),camera_matrix[1][1]为垂直方向像素焦距(由相机标定参数文件决定),h物体的像素高度(为实时检测结果,并被归一化到0-1)

附:目标位置测量原理

image-20210404002310773

 

到此,各位看官们,上篇Yolov5-OpenVINO(X86)上面的环境部署到此结束,有感兴趣的看官们可以持续关注“阿木实验室”微信公众号,周周提供特别干货分享。也欢迎关注开源自主无人机项目“Prometheus”,在此附上链接 “https://github.com/amov-lab/Prometheus.git” 。

在下篇中,在不同处理器下的实验数据且如何训练自己的yolov5模型并部署会呈现给各位。

prometheus开源项目,链接地址:https://github.com/amov-lab/Prometheus.git

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/msq19895070/article/details/117323335

智能推荐

Python&R语言-机器学习算法速查表_weixin_30613727的博客-程序员宅基地

前言  Python编程灵活方便,R的模型方法众多,如何将两者结合起来,发挥更大的作用,值得探索。  以下是10个最常用的机器学习算法,这些算法使用了Python和R代码。考虑到机器学习在构建模型中的应用,这些速查表可以很好作为编码指南帮助你学好这些机器学习算法。Good Luck!速查表:译文源自:https://www.analyticsvidhya.com/blog/2015/09...

linux 移动设备显示不出来,Linux命令_我要当现充的博客-程序员宅基地

一、Linux 命令的基本使用01. 常用 Linux 命令的基本使用序号命令对应英文作用01lslist查看当前文件夹下的内容02pwdprint wrok directory查看当前所在文件夹03cd [目录名]change directory切换文件夹04touch [文件名]touch如果文件不存在,新建文件05mkdir [目录名]make directory创建目录06rm [文件名]...

python计算整商运算符_【干货分享】如何用python中的位运算符计算?_weixin_39647471的博客-程序员宅基地

python中的位运算符是按照二进制位对值进行操作的,因此在学习位运算之前,我们来看看二进制运算。二进制运算:整数转二进制:将正的十进制数除以二,得到的商再除以二,依次类推知道商为零或一时为止,然后在旁边标出各步的余数,最后倒着写出来,高位补零就OKimage负整数转换成二进制 :先是将对应的正整数转换成二进制后,对二进制取反,然后对结果再加一。还以42为例,负整数就是-42。image小数转换为...

爬虫Status Code: 304解决方案_简书动态页面爬取304_zhaojiafu666的博客-程序员宅基地

具体网页不公布了:问题:打印的结果:print(resp.status_code)print(111,resp.content.decode())304111 这让我很诧异,因为我也是第一次遇见304,不知道如何下手,就百度谷歌搜索结果,看看有没有解决方法:最后找到了一些304的原理文章https://blog.csdn.net/soonfly/article/details...

Linux VDA安装手册_weixin_34419326的博客-程序员宅基地

完整下载版:http://pan.baidu.com/s/1eQ2LnPKLinux VDA目前版本已经升级到1.1版本。(2015年10月)第1章 交付Linux VDA简述随着桌面虚拟化技术的发展,用户会希望除了交付Windows 桌面之外还希望能交付Linux操作系统。本文主要讲述如何交付Linux桌面至Citrix XenDesktop体系中。Linux相比Windo...

2018最有影响力的CRM系统排行榜_weixin_34183910的博客-程序员宅基地

1999年,Gartner Group Inc公司提出了CRM概念(Customer Relationship Management 客户关系管理)。所谓的客户关系管理就是为企业提供全方位的管理视角;赋予企业更完善的客户交流能力,最大化客户的收益率。 直到今天 ,云计算的全球化使得传统CRM 软件已逐渐被Web CRM(又称为“在线CRM”、“托管型CRM”和“按需CRM”)超越的杰...

随便推点

Java 中的 static 使用之静态方法_handsome_ZHANG的博客-程序员宅基地

与静态变量一样,我们也可以使用 static 修饰方法,称为静态方法或类方法。其实之前我们一直写的 main 方法就是静态方法。静态方法的使用如:public class Helloworld {//使用static关键字声明静态方法 public static void print(){ System.out.println("欢迎你!"); } publ

指定服务器文件同步_weixin_30853329的博客-程序员宅基地

此脚本用于同业务服务器新增节点,同步文件使用主要使用到的技巧为:Shell 脚本传递带有空格的参数(正常遇到空格自动断开)可以通过@命令来处理即将参数7换成echo${@:7},这样将自动识别到的第7个开始,全部获取到作为最后第7个参数以下为同步脚本:#!/bin/bashRSYNC_FILE(){ if [ $# -ge 3 ];then SOU...

数组的三种查找方法_weixin_30493321的博客-程序员宅基地

非计算机专业的我半路出家,对好多计算机语言基础性的知识都一知半解,今天看天猫的一个关于scrollView 子视图复用的Demo时看到了二分法的使用,所以总结学习一下数组的查找方法。弥补不足!1.简介数组的三种查找方法分别为,顺序查找,二分法查找(折半查找),分块查找顺序查找:不需要排序,遍历所有数组元素,查找时间较长。二分法查找:...

uhttpd启用php,LEDE 下部署安装MraiaDB+PHP7+UHTTPD环境_练多多的博客-程序员宅基地

LEDE MariaDb 编译过后的安装修改默认配置项 vim /etc/config/mysqldconfig mysqld 'general'option enabled '1' //这里的0改成1option log_stderr '1'option log_stdout '1'编辑my.cnf, 把data和tmp路径换成已经存在的路径,把bind-address改成0.0.0.0(如果...

Gridcontrol升级实录_weixin_34216107的博客-程序员宅基地

安装完Gridcontrol 10.2.0.3后,硬盘灯狂闪不止!I/O等待严重,CPU负载很高,这个估计应该是10.2.0.3的bug,所以升级下了gc,升级到10.2.0.5后;负载自然就下来了!升级包可以在oracle官方网站上下载,解压下载下来的GridControl_10205_part1of2.zip和GridControl_10205_part2of2.zip两个文件,解压后会出现一...

linux系统程序安装(二)yum工具1-yum的基本操作_weixin_33735077的博客-程序员宅基地

yum安装工具类似appstore,运用yum工具可以方便的下载所需的程序,同时yum工具会自动检查程序的依赖关系,并安装相应的依赖包,有点像windows的某些大型软件安装程序会自动检查帮你安装程序运行所需要的vc库、DiretX程序,实现安装即可用的目标。一、yum工具工具语法:yum [options] COMMAND +Pakage名较一般...

推荐文章

热门文章

相关标签