人员计数器应用程序演示如何使用英特尔®硬件和软件工具创建智能视频物联网解决方案。该应用程序检测指定区域中的人,提供帧中的人数、帧中的人的平均持续时间和总计数。该项目是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
- 安装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/15/%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-2/