1. 磐创AI首页
  2. Medium

使用英特尔OpenVINO工具包在边缘部署人员计数器应用

人员计数器应用程序演示如何使用英特尔®硬件和软件工具创建智能视频物联网解决方案。该应用程序检测指定区域中的人,提供帧中的人数、帧中的人的平均持续时间和总计数。该项目是Udacity面向物联网开发人员的Intel Edge AI NanoDegree计划的一部分。Intel Edge AI for IOT Developers Nanodegree program by udacity

英特尔OpenVINO工具包

开放视觉推理和神经网络优化是英特尔提供的一个工具包,用于对深度学习模型进行更快的推理。它包括两个主要部分,即模型优化器和推理机。OpenVINO工具包可以在Edge部署多种类型的计算机视觉和深度学习模型。因此,主要依靠卷积神经网络和计算机视觉模型进行预测。

此外,OpenVINO还支持各种类型的设备,如CPU、GPU、TPU、神经计算棒和FPGA。在这个项目中,OpenVINO CPU工具包被用来识别视频中特定帧中的人。此外,评估特定人的平均持续时间并将其显示在输出视频中。Neural Compute Stick FPGA

模型优化器和推理机

OpenVINO工具包的两个主要组件是模型优化器和推理机。简而言之,Model Optimizer接受预先训练的模型,优化该模型并将其转换为其中间表示形式(.xml和.bin文件)。通常,预先训练的模型是以前在一些相似的问题集上使用的模型。从零开始建立模型将节省的时间将用于优化模型,以获得更好的结果和准确性。IR(中间表示)被送入推理机,该推理机是一个用C++编写的库,并提供了读取中间表示的API。另一方面,推理机有助于模型在不同设备上的正确执行。它管理在不同平台上正确运行代码所需的库。

应用程序是如何工作的?

计数器使用英特尔®发行版OpenVINO™工具包中包含的推理引擎。所使用的模型能够在视频帧中识别人物。该应用程序统计当前帧中的人数、一个人在帧中的持续时间(进入和退出帧之间经过的时间)和总人数。然后,它使用PAHO MQTT Python包将数据发送到本地Web服务器。Intel® Distribution of OpenVINO™ Toolkit Paho MQTT Python package

应用程序的架构图,包括Main、Mosca Server、UI和FFmpeg,清晰地显示在下面:

应用程序要求

硬件要求

  • 第6代至第10代英特尔®酷睿™处理器,采用IRIS®专业显卡或英特尔®高清显卡。
  • 或使用英特尔®神经计算棒2(NCS2)

软件要求

  • 英特尔®发行OpenVINO™工具包2019 R3版本
  • 节点v6.17.1
  • NPM v3.10.10
  • CMake
  • MQTT Mosca服务器
  • Python 3.5或3.6

  • 安装英特尔®发行版OpenVINO™工具包
  • 安装NodeJS及其依赖项
  • 安装NPM

要使此应用程序工作,需要在不同的终端中运行三个组件:

  • MQTT Mosca服务器
  • Node.js*Web服务器
  • FFmpeg服务器

要在单独的终端窗口中启动这三个服务器,应从主目录执行以下命令:

  • 对于MQTT/MOSCA服务器:

cd webservice/server
npm install

  • 对于Web服务器:

cd ../ui
npm install

  • 对于FFmpeg服务器:

sudo apt install ffmpeg

解释型号选择

TensorFlow对象检测模型动物园包含许多关于Coco数据集的预先训练的模型。对于这个项目,来自TensorFlow物体检测模型动物园的各种模型进行了测试。与模型中的睡觉相比,SSD_INSITION_v2_COCO和FAST_RCNN_INSITION_v2_COCO表现较好,但在本项目中使用了FASTER_RCNN_INSTIMATION_v2_COCO,在检测错误较少的人群时速度更快。英特尔openVINO已包含TensorFlow对象检测模型动物园中使用的自定义图层的扩展。TensorFlow Object Detection Model Zoo

通过以下命令从TensorFlow Object Detection Model Zoo的GitHub存储库下载模型:

wget http://download.tensorflow.org/models/object_detection/faster_rcnn_inception_v2_coco_2018_01_28.tar.gz

通过以下命令解压tar.gz文件:

tar -xvf faster_rcnn_inception_v2_coco_2018_01_28.tar.gz

将目录更改为下载模型的解压缩文件夹:

cd faster_rcnn_inception_v2_coco_2018_01_28

该型号不能是英特尔提供的现有型号,作为NanoDegree项目Udacity验收标准的一部分。因此,将TensorFlow模型转换为中间表示(IR)或OpenVINO IR格式。使用的命令如下:Udacity

python /opt/intel/openvino/deployment_tools/model_optimizer/mo.py --input_model faster_rcnn_inception_v2_coco_2018_01_28/frozen_inference_graph.pb --tensorflow_object_detection_api_pipeline_config pipeline.config --reverse_input_channels --tensorflow_use_custom_operations_config /opt/intel/openvino/deployment_tools/model_optimizer/extensions/front/tf/faster_rcnn_support.json

比较模型性能

型号1:SSD_Installation_v2_Coco_2018_01_28

使用以下命令将模型转换为中间表示。此外,这个模型缺乏准确性,因为它没有正确地检测到视频中的人。对阈值进行了一些修改,以提高其准确性,但结果并不丰硕。将阈值从0.6改为0.4,但结果未达到标准。

python /opt/intel/openvino/deployment_tools/model_optimizer/mo.py --input_model ssd_inception_v2_coco_2018_01_28/frozen_inference_graph.pb --tensorflow_object_detection_api_pipeline_config pipeline.config --reverse_input_channels --tensorflow_use_custom_operations_config /opt/intel/openvino/deployment_tools/model_optimizer/extensions/front/tf/ssd_v2_support.json

型号2:FASTER_rcnn_Installation_v2_Coco_2018_01_28

使用以下命令将模型转换为中间表示。模型2,即FETHER_RCNN_INSTIMATION_v2_COCO,在输出视频中表现得非常好。在使用了0.4的阈值后,该模型比以前的所有方法都要好。

python /opt/intel/openvino/deployment_tools/model_optimizer/mo.py --input_model faster_rcnn_inception_v2_coco_2018_01_28/frozen_inference_graph.pb --tensorflow_object_detection_api_pipeline_config pipeline.config --reverse_input_channels --tensorflow_use_custom_operations_config /opt/intel/openvino/deployment_tools/model_optimizer/extensions/front/tf/faster_rcnn_support.json

两种模式的比较

比较了SSD_INSITION_v2_COCO和FASTER_rcnn_INSINITION_v2_COCO这两种模型在延迟和内存方面的差异,得出了几点启示。可以清楚地看到,与普通的TensorFlow模型相比,OpenVINO的延迟(微秒)和内存(Mb)减少了,这在OpenVINO应用程序或边缘计算的情况下非常有用!

建模用例

这个应用程序可以对特定区域的人数进行检查,并且在特定区域的人数受到限制的情况下可能会很有帮助。此外,通过一些更新,这在目前的冠状病毒场景中也可能被证明是有帮助的,即保持对帧中的人数的检查。

运行主应用程序

将下载的模型转换为OpenVINO IR格式后,所有三个服务器都可以在单独的终端上启动,即

  • MQTT Mosca服务器
  • Node.js*Web服务器
  • FFmpeg服务器

设置环境

通过运行以下命令,将环境配置为在每个终端会话中使用英特尔®发行版OpenVINO™工具包一次:

source /opt/intel/openvino/bin/setupvars.sh -pyver 3.5

此外,在主目录中:

步骤1-启动Mosca服务器

cd webservice/server/node-server
node ./server.js

如果成功,将显示以下消息:

Mosca server started.

步骤2-启动GUI

打开新终端并执行以下命令:

cd webservice/ui
npm run dev

如果成功,将显示以下消息:

webpack: Compiled successfully

步骤3-FFmpeg服务器

打开新终端并执行以下命令:

sudo ffserver -f ./ffmpeg/server.conf

步骤4-运行代码

打开新终端并执行以下命令:

python main.py -i resources/Pedestrian_Detect_2_1_1.mp4 -m faster_rcnn_inception_v2_coco_2018_01_28/frozen_inference_graph.xml -l /opt/intel/openvino/deployment_tools/inference_engine/lib/intel64/libcpu_extension_sse4.so -d CPU -pt 0.4 | ffmpeg -v warning -f rawvideo -pixel_format bgr24 -video_size 768x432 -framerate 24 -i - http://0.0.0.0:3004/fac.ffm

在本地机器上实现

该项目是在Udacity的工作区上实现的。如果要在本地机器上实现相同的项目,则需要对位于项目根目录给定路径下的“constants.js”文件进行一些更改:

webservice/ui/src/constants/constants.js

在“constants.js”文件中,根据Udacity的工作区配置配置了“CAMERA_FEED_SERVER”和“MQTT_SERVER”。这两个属性的值应该更改为以下值才能正确实现:

CAMERA_FEED_SERVER: "http://localhost:3004"
...
MQTT_SERVER: "ws://localhost:3002"

参考文献

该项目借用了GitHub上Udacity的英特尔OpenVINO基础知识项目入门库中的样板代码,该库可在以下链接中找到。

要了解英特尔推出的其他激动人心的项目,请查看GitHub上的英特尔物联网开发工具包,其中包括来自英特尔的物联网库和代码示例。

该项目可以在我的GitHub存储库中找到,其中有详细的说明。py和inserence.py包含有关应用程序功能的详细代码。GitHub repository Main.py inference.py

到此为止,我们就到了这篇文章的末尾。感谢您的阅读!

我的公文包和LinkedIn:)Portfolio Linkedin

原创文章,作者:fendouai,如若转载,请注明出处:https://panchuang.net/2021/09/14/%e4%bd%bf%e7%94%a8%e8%8b%b1%e7%89%b9%e5%b0%94openvino%e5%b7%a5%e5%85%b7%e5%8c%85%e5%9c%a8%e8%be%b9%e7%bc%98%e9%83%a8%e7%bd%b2%e4%ba%ba%e5%91%98%e8%ae%a1%e6%95%b0%e5%99%a8%e5%ba%94%e7%94%a8/

联系我们

400-800-8888

在线咨询:点击这里给我发消息

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息