微软Rocket视频分析平台学习(1)

代码地址https://github.com/microsoft/Microsoft-Rocket-Video-Analytics-Platform

        一个高度可扩展的软件堆栈,使每个人都能建立实际的实时视频分析应用程序,使用先进的机器学习算法进行目标检测和警报。该存储库具有一个混合边缘云视频分析管道(构建在C#.NET核心之上),它允许TensorFlow DNN模型插件、GPU/FPGA加速、docker containerization/Kubernetes编排和事后分析的交互式查询。

步骤1:设置环境

在Windows上安装

Microsoft Visual Studio(首选VS 2017)是Windows 10上Rocket的推荐IDE。在安装VisualStudio的同时,也请将C++ 2015.3 V1400(V140)工具集添加到本地机器上。下面的快照演示了如何从VisualStudioStudioC中包含C++ 2015.3 V1400。

按照说明安装.NET Core 2.2(首选2.2.102)。

要启用GPU支持,请安装CUDA工具包和cuDNN。请确保您的NVIDIA驱动程序是最新的。

对于Darknet(例如YOLO)模型,需要CUDA 8.0(例如CUDA_8.0.61_win10_network.exe)。

安装后,请确保C:\ Program files\NVIDIA GPU Computing Toolkit\CUDA\v8.0\extras\visual studio\U integration\MSBuildExtensions中的文件已复制到C:\ Program files(x86)\ Microsoft visual studio\2017\Enterprise\Common7\IDE\VC\VCTargets\BuildCustomizations

为了支持TensorFlow模型,需要CUDA 9.1(例如,CUDA_9.1.85_win10_network.exe)。

建议使用cuDNN 8.0(例如,cuDNN-8.0-windows10-x64-v7.2.1.38.zip)。

Copy <installpath>\cuda\bin\cudnn64_7.dll to C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0\bin.
Copy <installpath>\cuda\ include\cudnn.h to C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0\include.
Copy <installpath>\cuda\lib\x64\cudnn.lib to C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0\lib\x64.
增加变量名: CUDA_PATH with Variable Value: C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0 into Environment Variables.

重启电脑

在Linux上安装

建议Docker在Linux上运行Rocket。下面我们以Ubuntu16.04为例来介绍构建RocketDocker图像的步骤,并使用GPU加速来运行它。

安装.NET Core 2.2 SDK(首选2.2.301)。

安装docker ce(首选版本18.09.7)。

根据您的GPU型号安装NVIDIA驱动程序(例如,418.67用于Tesla GPU)。

安装nvidia-docker2。NVIDIA容器工具包允许用户构建和运行GPU加速的Docker容器。注意,您不需要在主机上安装CUDA工具包,但需要安装GPU驱动程序。

步骤2:运行pilpeline

查看存储库。

准备视频源和线路配置

准备视频源。Rocket可以被输入实时视频流(例如,rtsp://<url>:<port>/)或本地视频文件(应放入\media\)。示例视频文件sample.mp4已包含在媒体中。

准备一个用于以线为基础触发和级联DNN调用的配置文件(应放入\cfg\)。文件中的每一行都用下面的格式定义了一个感兴趣的线。

<line_name><line_id><x_1><y_1><x_><y_2><overlap_threshold>

基于sample.mp4手动创建的线的配置文件sample.txt也包含在文件夹\cfg\中。

在Windows上生成

在第一次运行Rocket下载预编译的OpenCV和TensorFlow二进制文件以及Darknet YOLO weights文件之前运行Config.bat。可能需要几分钟,具体取决于您的网络状态。仅在所有下载完成后继续。YOLOv3和微小的YOLOv3已经包含在火箭中。你可以按你的意愿插入其他的YOLO模型。

从Visual Studio启动src\VAP\中的VAP.sln。

在VideoPipelineCore-App.config中设置管道配置PplConfig。我们在代码中预编译了六个配置。管道描述也包含在memoRocket-features-and-pipelines.pdf中。

0:  基于线的警报

1: 每帧上的Darknet Yolo v3(幻灯片7)

2: 每帧上的TensorFlow FastRCNN(幻灯片#8)

3: 基于背景减法(BGS)的预过滤->Darknet  Tiny Yolo->Darknet Yolo v3(幻灯片#9)

4: BGS预过滤->Darknet Tiny Yolo->数据库(Azure上的ArangoDB和blob存储)(幻灯片10)

5: BGS预过滤->TensorFlow Fast R-CNN->Azure机器学习(云)(幻灯片11)

(可选)如果PplConfig设置为4或5,请设置您自己的数据库和Azure机器学习服务。

Azure数据库:

通过创建虚拟机在Azure上部署SQL数据库(如MySQL)或NoSQL数据库(如ArangoDB)。

在App.Config中为Rocket提供数据库设置(如服务器名、用户名、凭据等)。

您还可以设置云存储(例如,Azure Blob存储)来存储图像/视频。在管道4中,Rocket将检测图像发送到Azure存储帐户,并将元数据发送到Azure数据库。

Azure机器学习:

将您的深度学习模型部署到Azure(例如,使用Azure Kubernetes服务或AKS)以使用GPU或FPGA进行推理。

将模型部署为web服务后,请在App.Config中向VAP提供主机URL、密钥和服务ID。Rocker将处理本地模块和云服务之间的通信。

建立解决方案。

运行代码。

使用Visual Studio:设置VideoPipelineCore-Property-Debug-Application参数<video_file/camera_url><line_detection_config_file><sampling_factor><resolution_factor><object_category>。例如,要在示例视频上运行Rocket,参数可以设置为sample.mp4 sample.txt 1 1 car。

使用命令行(CMD或PowerShell):运行dotnet。\VideoPipelineCore.dll<src\VAP\VideoPipelineCore\bin\Debug\netcoreapp2.2中的<video_file/camera_url><Line_detection_config_file><sampling_factor><resolution_factor><object_category>。例如,dotnet.\VideoPipelineCore.dll sample.mp4 sample.txt 1 1 car

在Linux上构建

我们已经从docker分支预先构建了一个Rocket docker镜像,只进行本地处理(幻灯片12没有云部分)。该映像托管在Docker Hub上,Docker Hub是一个公共库和容器映像社区,您将被要求在拉/推映像之前登录(如果您没有帐户,请先注册)。

要测试预建的rocket平台镜像,运行

docker pull ycshu086/rocket-sample-edgeonly:0.1

拉取下来后,运行下面的命令,用NVIDIA GPU启动rocket。

docker run--runtime=nvidia-v<local directory>:/app/output ycshu086/rocket-sample-edgeonly:0.1 sample.mp4 sample.txt 1 1 car

在Linux上构建自己的Rocket pipeline

拉取基于CUDA工具包和OpenCV的docker基本镜像。这个镜像需要建立rocket容器镜像。pull ycshu086/ubuntu-dotnetcore-opencv-opencvsharp-cuda-cudnn:v0.1(注意,原文这缺少这个版本号)

Git clone docker分支,用于在Linux上装载Rocket的源代码。

在cfg中创建行配置文件。如果您正在预录制的视频上运行Rocket,请将视频文件复制到媒体。

(可选)更新\src\VAP\VideoPipelineCore\App.Config以设置数据库和Azure机器学习服务连接的正确参数。

在第一次构建Rocket镜像以下载预编译的TensorFlow二进制文件之前,运行sudo chmod 744 Config.sh和sudo./Config.sh。

运行docker build以使用Dockerfile.VAP生成rocket镜像。

docker build-t<repository>/<image>:<version>-f Dockerfile.VAP。

(可选)如果需要在其他地方运行Rocket镜像,请将其推送到云存储库(例如docker hub、Azure容器注册表等)。

docker push -t<repository>/<image>:<version>

在Linux上运行Rocket镜像

将预先构建的Rocket镜像拉到本地计算机上。您可以使用docker images检查现有图像。

docker pull-t<repository>/<image>:<version>

将卷装入容器并使用NVIDIA GPU运行火箭映像。

docker run--runtime=nvidia-v<local directory>:/app/output<repository>/<image>:<version>sample.mp4 sample.txt 1 1car

步骤3:结果

输出图像在\src\VAP\VideoPipelineCore\bin\(Windows)中的文件夹中生成,或者在Linux上运行docker时装入的本地目录中生成。来自不同模块的结果被发送到不同的目录(例如,output_bgsline用于基于背景差减的检测),而output_all都有来自所有模块的图像。每个文件的名称由帧ID、模块名和置信度得分组成。下面是在sample.mp4上运行管道3和管道5的几个示例结果。您还应该在运行期间在控制台中看到打印的结果。

管道3上的上图显示,在第2679帧处,背景差减法检测到一个物体,微小的Yolo DNN确认它是一辆置信度为0.24的汽车,而厚重的Yolo v3则确认它的置信度为0.92。同样,对于管道5,TensorFlow FastRNN模型的置信度为0.55,AzureML(在云中)的置信度为0.76。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值