Press "Enter" to skip to content

基于OpenVINO的目标检测

 

引言

 

在本文中,我将向您展示如何使用OpenVINO进行对象检测。我将使用带有Python API的英特尔OpenVINO发行版和PIP来安装所需的Python软件包。

 

如果您想自己尝试一下,可以在GitHub上找到本文中的所有代码。 GitHub

 

要求

 

如果您还没有安装OpenVINO,您可以前往官方文档站点获取安装指南。 installation guide

 

NumPy是使用阵列所必需的,可以使用以下命令进行安装:

 

pip install numpy

 

图像处理需要OpenCV,可以使用以下命令进行安装:

 

pip install opencv-python

 

型号

 

用于目标检测的模型是OpenVINO Model Zoo提供的SSD MobileNet V2,它已经在Coco数据集上进行了培训。 SSD MobileNet V2 COCO dataset

 

可以使用OpenVINO下载器工具通过以下命令下载该模型:

 

python3 
<omz_dir>
 /tools/downloader/downloader.py --name  ssd_mobilenet_v2_coco
</omz_dir>

 

其中是open_model_zoo的目录,在我的示例中是:

 

/opt/intel/openvino_2021/deployment_tools/open_model_zoo

 

下载模型后,需要将其转换为中间表示。这可以使用OpenVINO转换器工具来完成:

 

python3 
<omz_dir>
 /tools/downloader/converter.py --name ssd_mobilenet_v2_coco --mo=
 <mo_path>
   --output_dir=
  <out_dir></out_dir>
 </mo_path>
</omz_dir>

 

其中是OpenVINO模型优化器的路径,在My中为:

 

/opt/intel/openvino_2021/deployment_tools/model_optimizer/mo.py

 

而 是您想要放置转换后模型的文件的目录。文件将放在 /public/中。

 

除了模型本身,您还需要类id和类名之间的映射。您可以在此处下载包含类ID和名称的键值对的.json文件。 here

 

实施

 

首先,使用模型.xml和.bin读取网络:

 

在读取网络之后,提取关于输入的形状、布局和大小的信息:

 

包含此步骤很好,因为信息是动态提取的,稍后将使用它。

 

读取网络并提取信息后,可以将网络加载到设备上:

 

其中DEVICE是一个字符串,指定应该加载到的型号的设备的名称。“CPU”指定模型应该加载到CPU上,而“myriad”指定设备应该加载到神经计算棒上。为简单起见,参数num_request设置为1,这意味着一次只处理一个推理请求。

 

接下来,类id和类名之间的映射作为字典从.json文件加载:

 

在将数据传输到网络之前,需要对其进行准备,使其具有正确的形状和布局。这可以使用函数PREPARE_IMAGE()来完成:

 

在准备好数据后,可以将其传递给网络进行推断:

 

网络的输出是形状为[1,1,N,7]的斑点,其中N是检测到的边界框数。每个检测的格式为:[image_id,label,conf,x_min,y_min,x_max,y_max]

 

其中,label是预测类的id,conf是预测类的置信度,(x_min,y_min)是左上角边界框角的坐标,(x_max,y_max)是右下角边界框角的坐标。请注意,坐标以归一化格式存储在0-1范围内。

 

要使检测可视化,可以使用函数Draw_Bound_Box()将每个检测的边框和类名绘制到图像上:

 

该参数阈值用于基于检测置信度的过滤检测。

 

结果

 

下面是几个检测示例。这些图像是从COCO数据集中选择的。

消息来源

[1]:https://github.com/openvinotoolkit

Be First to Comment

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注