[CPU+目标检测] openvino实现Robomaster自瞄

article/2025/8/19 4:49:49

这篇文章为大连理工大学Robomaster凌Bug战队的李乐恒同学成果!
他在CPU上利用openvino这样的深度学习算法实现了Robomaster的自瞄,大大提高了robomaster自瞄的上界,且达到了良好的检测效果。所有代码全部开源,
github主页如下:https://github.com/Len-Li/openvino-robomaster

文章目录

    • 0.introduction
    • 1 训练自己的模型
      • 1.1 使用的模型库
      • 1.2 数据集
      • 1.3 训练+评测
        • 1.3.1 安装TensorFlow Object Detection API
        • 1.3.2 修改配置文件
    • 2 Openvino模型转换
      • 2.1 安装openvino
      • 2.2 模型转换
    • 微信公众号

0.introduction

在Robomaster比赛中,选手往往使用颜色分离,提取轮廓,匹配轮廓的方式来识别装甲板,但往往会花费大量时间在现场调整参数,于是我们想:能否利用深度学习来做自瞄以提高其鲁棒性?但深度学习算法在实时性上通常表现不好,在1080ti这样的显卡才能达到实时,但没人会在机器人上带一个煤气灶吧。很多人会想到使用Tensor RT,或者模型剪枝/压缩,低比特推理的方式提高深度学习算法在GPU上的速度,但没有想到使用纯CPU也能实时运行神经网络。凭借Intel团队发布的openvino,我们可以在Intel CPU或者计算棒上实时运行目标检测算法。在这里我们以CPU+计算棒的方式介绍完整的实现步骤。
How it works?
分为三个步骤

  1. 训练自己的模型或者使用官方的demo
  2. 将模型转换至中间表示层
  3. 部署
    在这里插入图片描述
    根据官网上的信息,openvino对TensorFlow支持的最好,所以我们这里以谷歌的模型库为示例,走通上述的pipeline。
    在这里插入图片描述
检测demo

1 训练自己的模型

本节以robomaster数据集为例,利用TensorFlow Object Detection API训练自己的模型。

1.1 使用的模型库

链接:https://github.com/tensorflow/models/tree/master/research/object_detection

TensorFlow Object Detection API是谷歌爸爸开源的模型库,包含了完整的训练和评测代码。

模型包括主流的检测和分割网络,有SSD,Faster rcnn,mask rcnn,主干网包括mobilenet v1/v2/v3(看出谷歌爸爸的偏心了吧),inception v2,resnet 50/101。

在这里插入图片描述

SSD家族,map代表检测准确度,越大越好

1.2 数据集

大疆在2020年初开源了一个俯视视角的数据集,具体特征类似于大家看直播时的画面。分辨率是1920*1080。官方的用意应该是给雷达站做目标检测,放在自瞄这样的平视场景会存在一定的gap,同时分辨率也过大,增大计算负担。所以我们在官方数据集的基础上进行了魔改,改动如下:

  1. 检测红色装甲板和蓝色装甲板
  2. 为了方便评测,我们将原有的VOC数据集格式改为COCO格式
  3. 对原图进行crop操作。针对一张图的每一个物体,先给该物体中心点一个30个像素点以内的上下左右漂移,然后以此点为中心,扣取400*300的图像

在这里插入图片描述

装甲板非常小

在这里插入图片描述

装甲板可见
下载链接: https://pan.baidu.com/s/105vjTcDs6XZHtnXAgCx86g 提取码:v8yg

1.3 训练+评测

Prerequisite:显卡:最好1080ti以上。单卡v100两个小时训练完毕。

pip install tensorflow-gpu==1.14 最好使用1.14版本的TF

Linux系统

1.3.1 安装TensorFlow Object Detection API

请参考 官方安装指令:https://github.com/tensorflow/models/blob/master/research/object_detection/g3doc/installation.md

1.3.2 修改配置文件

  1. 将coco数据集转换为tfrecord格式
python object_detection/dataset_tools/create_coco_tf_record.py --logtostderr \--train_image_dir="data/roco_train" \--val_image_dir="data/roco_val" \--test_image_dir="data/roco_val" \--train_annotations_file="data/train.json" \--val_annotations_file="data/val.json" \--testdev_annotations_file="data/val.json" \--output_dir="models/research/save_dir"

目录根据自己的实际位置更改,其中test可以忽略

  1. 模型config

所有模型配置文件在models/research/object_detection/samples/configs目录下,以ssd_mobilenet_v2_coco.config为例。

需要修改的地方①num_classes: 2 ②image_resizer:height: 300 width: 400 ③fine_tune_checkpoint ④最后的数据位置
数据扩充:水平翻转,亮度,对比度,饱和度随机抖动

  data_augmentation_options {random_horizontal_flip {}}data_augmentation_options {random_adjust_brightness {max_delta: 0.2}}data_augmentation_options {random_adjust_contrast {min_delta: 0.7max_delta: 1.1}}data_augmentation_options {random_adjust_saturation {min_delta: 0.9max_delta: 1.1}}
  1. 数据config

在models/research/object_detection/data/*.pbtxt里记录了数据集的类别,这里我们是两类,所以将label_map_path中的文件替换为以下字段:(注意文件名对应)

item {name: "/m/01g317"id: 1display_name: "armor_blue"
}
item {name: "/m/0199g"id: 2display_name: "armor_red"
}

训练代码

export PYTHONPATH=$PYTHONPATH:`pwd`:`pwd`/slim
CUDA_VISIBLE_DEVICES=0 python object_detection/model_main.py \
--pipeline_config_path=object_detection/samples/configs/ssd_mobilenet_v2_coco.config \--model_dir='output_model' \--num_train_steps=500000 \--sample_1_of_n_eval_examples=10 \--alsologtostderr

v100训练2个小时就收敛了,1080ti可能三小时。训练过程中会边训练边评测。

这里我们关注的是mAP(0.5:0.95)和AP(0.5),可以看到mAP是0.537,AP是0.974,基本满足需求。

 Average Precision  (AP) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.537Average Precision  (AP) @[ IoU=0.50      | area=   all | maxDets=100 ] = 0.974Average Precision  (AP) @[ IoU=0.75      | area=   all | maxDets=100 ] = 0.531Average Precision  (AP) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.529Average Precision  (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.613Average Precision  (AP) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = -1.000 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=  1 ] = 0.220Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets= 10 ] = 0.618Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.619Average Recall     (AR) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.607Average Recall     (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.684Average Recall     (AR) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = -1.000

当然,我们也放出来了模型文件

下载链接:百度云:https://pan.baidu.com/s/1-m1ovofM_X9rh4rlQEicFg
提取码:4nra

2 Openvino模型转换

2.1 安装openvino

在Linux下的安装请参阅 官方文档(很简单):https://docs.openvinotoolkit.org/latest/_docs_install_guides_installing_openvino_linux.html

同时还可以查看 b站视频:https://www.bilibili.com/video/BV1fC4y1s7dt

2.2 模型转换

仍然在TensorFlow models文件夹下,先提取inference_graph

python object_detection/export_inference_graph.py \
--input_type=image_tensor \ 
--pipeline_config_path=object_detection/samples/configs/ssdlite_mobilenet_v2_coco.config \ --trained_checkpoint_prefix=models/research/output_model/model.ckpt-18723 \--output_directory=models/research/exported_model

将inference_graph转换为openvino接受的格式也就是intermediate representation。这里需要注意ssd mobilenetv2对应的是ssd_support_api_v1.15.json

python3 mo_tf.py --input_model=exported_model/frozen_inference_graph.pb --transformations_config /opt/intel/openvino/deployment_tools/model_optimizer/extensions/front/tf/ssd_support_api_v1.15.json --tensorflow_object_detection_api_pipeline_config exported_model/pipeline.config --reverse_input_channels 

Python测试模型

python3 object_detection_demo_ssd_async.py -m /home/lilelife/onnx/ssdv2/frozen_inference_graph.xml -i *.avi

C艹测试模型(记得先编译源码)

./object_detection_demo_ssd_async -i *.mp4 -m ssdv2/frozen_inference_graph.xml

结果就是开头的GIF啦。

微信公众号

欢迎大家关注我的个人公众号,现阶段主要总结Robomaster相关的计算机视觉知识:Qt,C++,CMake,OpenCV等等
公众号名称:三丰杂货铺
在这里插入图片描述


http://chatgpt.dhexx.cn/article/d77bpm5s.shtml

相关文章

基于C++的车辆装甲板检测自瞄系统

资源下载地址:https://download.csdn.net/download/sheziqiong/85773209 资源下载地址:https://download.csdn.net/download/sheziqiong/85773209 装甲板检测 由于在比赛过程中操作手是第一视角,很难用手动瞄准。通过装甲板检测就是自瞄系统…

CFAIyolo5自瞄源码分享

比市面上强的多 阿里云盘分享

FPS 游戏自瞄原理

了解FPS游戏自瞄漏洞 经常玩游戏的朋友,应该知道FPS游戏,例如:穿越火线,逆战等等,他们的特点就是以第一人称视角进行操作人物,屏幕中间会有一个准星,通过准星瞄准敌人进行攻击以达到击杀效果和…

FPS游戏通用自瞄与透视算法详解!!

自瞄算法与实现: 1:首先我们要找到一个敌人的三维坐标。 2:我们还要找到自己的三维坐标。 3:我们还要找到自己的鼠标坐标X与Y(这里的鼠标坐标X与Y是角度,X为360,Y正中间为0向上减少到负90度&…

Web前端技术HTML

HTML(Hyper Text Markup Language) 目录 一、什么是HTML? 二、为什么需要HTML? 三、HTML标签 四、HTML文档结构 五、HTML标签属性 1、标签的语法 2、注意事项 3、常用标签 一、什么是HTML? HTML指的是超文本…

前端技术概述

目录 一、开发框架 1、C/S架构(Client-Server) 2、B/S架构(Browser-Server) 二、前端术语 1、渲染 2、Front-end(前端开发) 3、Back-end(后端开发) 三、HTML的DOM结构 四、…

如何写前端技术方案文档?

大厂技术 高级前端 Node进阶 点击上方 程序员成长指北,关注公众号 回复1,加入高级Node交流群 前言 百度百科对计算机软件的的定义为:“计算机软件( Software,也称软件)是指计算机系统中的程序及其文档,程序是计算任务…

前端技术体系与发展计划

为什么会想起来整理这么一套东西 最近和很多已经工作了的同学聊天,发现大家都遇到了很多的问题或者说是烦恼。整理了一下,大体可以分为两个大的种类: 关于前端技术体系的问题关于技术能力发展的问题 从这些问题中,我抽出来几个…

前端技术发展历程

💂 个人网站:【海拥】【摸鱼游戏】【神级源码资源网】🤟 前端学习课程:👉【28个案例趣学前端】【400个JS面试题】💅 想寻找共同学习交流、摸鱼划水的小伙伴,请点击【摸鱼学习交流群】 随着互联网的不断发展…

前端技术简介

声明:本文转载自http://www.lvyestudy.com/les_hj/hj_1.1.aspx,如需要了解更多关于前端的知识,请查看该链接 在HTML入门教程学习之前,我们有必要跟大家讲一下网站开发的一些知识。了解这些知识,对你以后网站开发之路如…

2020 年前端技术发展盘点

2020 年已经结束,这一年里面因为疫情,生活和工作中大家都有受到一定的影响。但是在 2020 年里面前端技术的发展依然没有停止脚步。 而我们作为前端开发者,必定需要对技术的更新换代有所了解。虽然我们不需要去学习所有新出来的技术。但是时刻…

前端技术(html)

目录 一、HTML 1. 概念 2. 快速入门 3. 开发工具 HBuilder 3.1 HBuilder介绍 3.2 HBuilder下载 3.3 HBuilder的安装与使用 3.4 使用HBuilder创建项目 4. HTML文档的基本结构 4.1 基本结构 4.2 HTML注释 5. HTML中常用标签 5.1.文本标签 5.2 图片标签 5.3列表标签 5.4…

【狂神说Java】Vue学习笔记01:前端知识体系

本文根据B站【狂神说Java】vue系列视频整理,如需观看视频,请点击链接跳转 【狂神说Java】Vue视频 2、前端知识体系 想要成为真正的“互联网Java全栈工程师”还有很长的一段路要走,其中前端是绕不开的一门必修课。本阶段课程的主要目的就是带…

SUMO安装及环境变量设置

sumo安装 1.打开sumo官网,进入下载界面 2.解压安装包 3.打开bin文件,创建sumo-gui和netedit快捷方式 SUMO环境变量配置 1.右击我的电脑,点击属性 2.点击高级系统设置,环境变量 3.在用户变量的path,加入以下变量 4.…

Python pip保姆级环境变量设置

1.打开系统中的高级系统设置 2.点击环境变量 3.在系统变量区域,选中path,点击编辑进入编辑页面。 4.将python Scripts文件夹所在位置复制粘贴到变量值中,注意名称之间有分号。 5.winr cmd回车,输入pip出现以下页面说明设置成功。…

MySQL数据库环境变量设置

1、鼠标左键,点击设置 2、出现一个框,在框里,填写,高级系统设置,确定 3、打开了高级系统设置,点击红圈圈着的“环境变量” 4、出现一个新的小弹框,点击path,(路径的意思&…

Mac设置环境变量

环境变量是电脑操作系统中常用的一些变量,作用类似于将一些常用命令所在的文件夹位置预先告诉操作系统,当以后需要用到这些命令时,操作系统就自动来这些位置取。 例如,常见的Java开发中配置的相关环境变量:PATH&#…

python环境变量设置(win10为例)

C站发表的第一个文章啊,话就不多说了。 (PS:我也是小白,注册C站第一天,冒个泡) win10教程(只有win10电脑) 先放一张我自己总结的教程 (PS:应该够清楚了&a…

npm环境变量设置

使用npm命令提示: npm 不是内部或外部命令,也不是可运行的程序 在安装nodejs时候,有时候我们会把它安装在d盘或别的盘时,经常会遇到npm环境变量没有配好,需要自己手动去配置。 在安装完nodejs后输入node --version查看安装是否成功…