引言
在本文中,我将向您展示如何使用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