智能监控场景下的大规模并行化视频分析:核心方法与实战全解析

你是否对海量监控视频的分析感到束手无策?机会来了!3月23日起,智东西联合NVIDIA推出「实战营」第一季,共计四期。第三期于4月13日晚8点在智东西「智能安防」系列社群开讲,由西安交通大学人工智能与机器人研究所博士陶小语、NVIDIA高级系统架构师易成联袂主讲,主题分别为《智能监控场景下的大规模并行化视频分析方法》和《NVIDIA DGX-2 驱动智能监控革命》。
深度学习在图像识别与视频分析领域的精度突破,让安防成为AI落地的前沿阵地。计算力的演进,则让大规模并行计算成为现实。西安交通大学人工智能与机器人研究所借助双路Tesla P100 GPU的强大并行能力,构建了智能视频分析系统,实现了对多路视频流的实时处理与大规模离线录像的高效分析,极大提升了处理效率。
本文为陶小语博士的主讲实录,共计7192字,预计13分钟读完。在深入阅读前,请先思考以下四个关键问题:
-如何正确认知基于深度学习的视频分析技术?
-如何通过多路视频流的数据并行或并发流水线方法实现视频分析系统的并行化?
-在大规模视频分析应用中如何合理、灵活的分配计算资源以实现资源利用最大化?
-如何利用跳帧采样技术避免计算资源浪费、提高资源利用率?
智东西「实战营」第一季第一期由图玛深维首席科学家陈韵强和NVIDIA高级系统架构师付庆平,分别就《深度学习如何改变医疗影像分析》、《DGX超算平台-驱动人工智能革命》两个主题在智东西旗下「智能医疗」社群进行了系统讲解。第二期由NVIDIA深度学习学院认证讲师侯宇涛主讲,主题为《手把手教你使用开源软件DIGITS实现目标检测》。第四期在智东西旗下「高性能计算」社群开讲,主题为《GPU加速的空间天气预报》,主讲老师为清华大学计算机系副教授都志辉、NVIDIA高级系统架构师易成。
主讲环节陶小语:大家晚上好!我是西安交通大学人工智能与机器人研究所博士陶小语,今天分享的主题是《智能监控场景下的大规模并行化视频分析方法》。这是我们实验室在合作项目中深度实践的应用方向。随着深度学习发展,对大规模视频图像进行智能分析,在安防领域拥有广阔前景。今天,我将为大家系统讲解我们实验室在智能监控并行化分析方面的核心方法。
本次演讲主要分为以下五部分:
1,智能监控领域的应用背景以及行业进展;
2,基于深度学习的视频分析技术;
3,视频分析系统的组成以及如何对一个视频分析系统进行并行化;
4,基于Tesla P100的视频分析加速平台;
5,P100视频硬解码加速与视频跳帧采样等一些工程化的应用技巧。
智能监控领域的应用背景以及行业进展

当前,智能安防是智慧城市的核心组成。智能安防主要包括视频监控、人脸识别等成熟商业应用,并与火热的无人驾驶领域紧密相关。

从这页PPT可以看出,视频监控占据安防行业50%份额,且持续增长。实体防护、出口控制、防盗报警等应用瓜分剩余市场。近年来,中国安防市场规模从2011年的2773亿跃升至2017年的6540亿,年增长率达15%到20%,应用场景极为丰富。

智能监控要做什么?传统监控仅录制视频,依赖人工分析。智能视频监控则通过视觉模式识别技术,自动识别分析视频中的目标、行为与事件。例如,检测场景中的人、车,分析目标行为,预警敏感事件等。

随着深度学习发展,智能监控涉及的检测、识别、跟踪等技术已达高精度。图中从上至下展示了人脸检测与识别、行人检测与跟踪、行人姿态估计、车辆检测、车型识别及交互识别等关键领域。视频监控需融合这些技术,实现多维度分析。
基于深度学习的视频分析技术
现在介绍基于深度学习的视频分析技术概览。本页PPT列出了几项核心技术:

首先是目标检测,这是视觉技术的基础任务,旨在定位并识别场景中的感兴趣物体,如行人、车辆等;
目标检测后,需计算每个目标的运动轨迹,涉及单目标/多目标跟踪、单摄像头/跨摄像头跟踪等;
人脸识别是成熟的商业应用,用于识别或验证场景中的人脸,包括人脸检测、关键点检测、属性分析、比对检索等;
行为识别旨在识别人体动作及人-物交互。简单任务可判断视频中是否发生特定动作;更难的则需检测动作时间段,甚至识别动作主体、客体及状态;
图像增强是另一快速发展的领域。监控视频常受环境与设备影响,存在噪声、模糊等问题,需进行超分、去模糊、去抖、去雾等增强处理。

下图是目标检测示例。目标检测需框出场景中所有感兴趣目标并识别类别,这是视频分析的第一步。在安防场景中,常需检测行人、车辆等目标,并准确定位边框,以便后续识别任务。

当前检测领域主要有两类方法:基于区域与基于回归的算法。基于区域的方法常采用两阶段:首先生成区域候选框(如Selective Search、RPN),再精细分类定位(如R-CNN系列)。基于回归的方法如YOLO、SSD,采用单阶段直接回归思路,速度极快,可实现实时检测,但定位精度通常略逊于区域方法。

此图展示了流行的Faster R-CNN检测算法流程。

检测后仅知目标位置,进一步分析需确定每个目标的ID并跟踪其运动轨迹。行人跟踪常需提取鲁棒的ID特征,通常用Person ReID数据集训练网络,再计算轨迹,常用方法如Sort和Deep Sort。

人脸识别技术已广为人知:先检测人脸,定位特征点,再进行属性分析、检索、比对等。人脸比对精度现已极高,完全满足商用需求。

当前人脸识别进展多由工业界推动。学术界主要采用主流网络结构及改进损失函数的方法(如center loss、sphereface)。工业界则依托自有数据,聚焦工程化调优。
视频分析系统的组成及并行化方案设计
接下来是核心部分——视频分析系统的组成及并行化方案设计。视频分析系统主要包括以下阶段:

第一步,视频采集,将模拟视频转换为数字视频并保存;
第二步,视频解码,解压缩原始视频,转化为深度学习模型可处理的图像序列;
第三步,视频分析,这是系统的核心算力阶段,包括目标检测、特征提取、目标跟踪和特征存储等模块;
视频检索,根据输入目标进行特征比对与轨迹匹配。

以行人监控视频分析为例,流程如下:获取监控视频流,解码后转码为单帧图片,对每帧进行行人检测,从检测框中提取行人特征,再根据特征计算行人轨迹。跟踪完成后,将特征与轨迹结构化存储以便检索。检索时,对待查图片提取行人特征,在数据库中比对,找出最相似特征对应的行人ID,从而定位目标出现的视频段。

若划分各算法模块的计算资源,视频解码可由CPU软解或GPU硬解;检测部分,GPU主算CNN推理,NMS可置于CPU或GPU;行人特征提取基本全在GPU完成;行人轨迹计算通常在CPU进行;最后将特征与轨迹存入数据库,IO占比较高。

当监控数据海量且计算资源充裕时,可将视频分析任务划分到不同GPU,通过数据并行加速。方案A:多路视频流的数据并行。视频解码、行人检测和特征提取对每路视频独立,可直接分片处理。行人轨迹计算因可能涉及跨摄像头跟踪,需在CPU进行,且需等待所有视频流的特征提取完成,才能计算完整轨迹并存储。

方案B:并发流水线。此方案中所有任务异步执行,采用流水线设计。系统各模块异步运行,通过任务槽调度,模块间数据共享依赖队列。例如,设置n个解码器处理n路视频,解码结果放入帧队列;检测器随时从帧队列取帧检测,结果送入检测框队列;特征提取器从检测框队列取框计算特征。各模块通过异步多进程与进程复用队列交换数据。此方案优点在于调度灵活。例如,当场景中行人目标较少时,可减少特征提取器,增加检测器,最大化利用资源。

这里用到任务槽或池化任务槽。即将GPU资源池划分为任务槽,每个槽预置挂起的GPU任务,根据任务算力需求及运行时状态动态更新。例如,图中D开头的槽用于检测进程,F开头的槽用于特征提取进程。可分配四个槽给检测,四个给特征。默认情况下,可激活三个检测槽、两个特征槽,因为检测通常比特征提取更耗算力。若遇密集场景,可动态调整槽位。此方法还能有效应对进程出错,例如若GPU 1上的F11进程挂掉,可立即启动F12接替,因进程间通过队列通信,极为灵活。
基于Tesla P100的视频分析加速平台

我们基于双路Tesla P100 GPU加速器搭建了视频分析并行加速平台,最高支持八路视频流实时解析,即每卡可解析四路。Tesla P100加速器采用NVIDIA Pascal架构,其HBM 2 CoWos技术将内存带宽提升至700GB/s以上,较Maxwell架构有显著飞跃。

我们采用方案A,基于双路P100加双路E5-2620v4硬件平台构建加速平台。监控视频流经P100硬解码模块转为图片,输入各路检测器。P100加速行人检测与特征提取,行人轨迹计算与存储则由CPU处理。

本页说明了视频分析模块所用模型。框架基于TensorFlow1.3;行人检测采用SSD-MobileNet-V1,在COCO上预训练后以内部行人数据集微调;行人特征提取使用自研8层ReID网络,在CUHK03+Market上预训练;行人轨迹采用流行的DeepSort方法;结构化存储直接使用SQLite实现。

本页展示了SSD-MobileNet-V1在不同芯片上的单帧计算时间。使用P100加速卡后,相较前代K80,单帧时间从80毫秒缩短至60毫秒,显著提升检测效率。值得注意的是,从1路到2路,单帧时间几乎不变;增至3路、4路后,计算时间明显增加,这是因为SSD-MobileNet模型未占满CUDA核心,4路内仍可保证加速效率。

本页为一段23分12秒离线行人监控视频的测试结果。检测与跟踪每秒采样6帧,累计8356帧。在P100上测试,GPU计算时长大幅缩短。使用双GPU节点,每节点运行两个任务时,加速效率接近90%,近乎线性加速。

此图对比了不同加速平台的加速比。使用双路P100后,视频处理时间缩短至数小时,并能实时处理监控数据分析。
P100视频硬解码加速与视频跳帧采样


此部分介绍视频软解与硬解。本次使用P100的视频硬解码功能,P100通过MVDEC支持MPEG-2和H.264主流格式,分辨率支持从4K提升至8K,进步显著。


使用P100硬解码非常简便,可直接调用FFMPEG库配合NVIDIA的H264 CUVID解码库。

最后讲解视频跳帧采样技术。视频分析平台常运用工程技巧。例如,监控录像的人流量时密时疏,计算需求随之波动。在人流稀疏时段(如上班前、下班后),逐帧检测会浪费资源。此时可通过跳帧检测优化。

举例:将整段时间划分为若干步长,步长为最小目标轨迹长度的一半,按此步长跳帧检测。例如,原为逐帧检测,现可间隔数秒检测一帧,直至某帧出现目标再启动连续检测。目标消失后,恢复跳帧检测。这可极大提升资源利用率,避免计算浪费。
以上就是本次演讲的核心内容。想亲手实践这些尖端技术?立即关注智东西「实战营」,获取更多AI安防实战秘籍!谢谢大家收听。
Q&A环节问题一
刘修综-纬创资通(昆山)有限公司
1,如何在不依靠开源平台下开发神经网路模型?
2,如何在开源平台下,对FP32/16做算法优化?
陶小语:1,开源平台的优势在于封装并优化了算法基元、计算逻辑、任务调度、存储管理等,便于开发、训练和部署模型。对于专用硬件平台下的模型,可以考虑针对硬件架构自己写算法,或移植开源平台的算法。
2,首先要考虑算法的权重、梯度和量级,很多算法的权重梯度有非常小的指数(如SSD 1e-60~1e-11),使用FP16导致梯度置0而显著降低精度,一般通过quantization [1],mixed precision key [2],loss-scaling等技术来解决精度损耗问题。目前开源平台普遍支持混合精度训练(MPT),感兴趣的朋友可以参考以下资料:http://docs.nvidia.com/deeplearning/sdk/mixed-precision-training/index.html
[1] Hubara I, Courbariaux M, Soudry D, et al. Quantized Neural Networks: Training Neural Networks with Low Precision Weights and Activations[J]. 2016.
[2] Micikevicius P, Narang S, Alben J, et al. Mixed Precision Training[J]. 2017.
问题二
彭达-商汤科技-技术总监
是否在单机环境测试过该系统,能否讲下具体流程与细节?
陶小语:我们分别在P100双卡和K80八卡环境下,用多个行人/车辆的离线视频文件模拟多路视频。平台基于tf-1.3搭建,使用ffmpeg + cuvid硬解并转码到内存中,检测基于SSD-MobileNet-V1(fast) / SSD-Inception-V2(normal) / FasterRCNN-Res101(acc),在COCO+kitti+内部数据上pretrain,NMS下沉到GPU上,行人特征基于ReID数据集上pretrain得到的模型,跟踪算法基于deep sort。单卡测了1~4路视频的处理,最多可以做到6路来保证实时性,但需要适当降低采样率。4 GPU近线性加速(加速效率88~98%),继续增加视频路数CPU算力逐渐跟不上(2620睿最高2.3G),16GPU会加速效率退化到34%左右。
问题三
陈凯韬-北京航空航天大学-深度学习博士
1,连续关键帧人物行为分析的特点
2,深度学习在视频编解码方面的应用
陶小语:1,单纯对行为识别而言,简化了问题,一段视频包含一段确定的动作,label唯一确定,缺少环境干扰。难点在于如何自动识别关键帧,如何得到具有判别力的特征,如何编码并融合temporal和spatial的信息,基本套路是two-stream (rgb+optical flow/motion vector),CNN-LSTM做长序列,video segment,detection proposal,3D conv,还有近期的non-local nn
2,深度学习在视频编解码方面主要做图片、视频的压缩。
问题四
王言君-力瀚科技-技术总监
想问下陶博士,视频分析领域有哪些有前景的算法?
陶小语:学术界的算法侧重精度,很多工作是对一些主流框架进行改进的。对工业应用而言,更看重速度、算力、能耗,很多场景下使用的还是成熟的传统方法,如DSP上做检测的DPM、手机上做人脸特征点定位的AMM、Dlib。基于CNN的方法,检测的话如Faster R-CNN/SSD 以及增强版FPN/RetinaNet/Mask R-CNN都是比较好的。分割的话,最近比较热的是Deeplab v3+,google已经放出了code。Tracking部分我们用的是DeepSort,行为识别,像比赛用的比较多的 TSN+I3D/C2D+TSN等,而FAIR去年出的Non-local NN也比较有意思。
问题五
焦超-天瞳威视-深度学习工程师
如何快速进行服务器并行架构环境搭建?有什么好的教程?
陶小语:1,最快就是做数据并行,对数据分片,系统直接做多个副本;
2,选取易用的DL框架,像mxnet-gluon / pytorch;
3,先写个串行系统,测算各模块存储、带宽、资源利用率等,再根据服务器硬件平台结构设计并行方案。关于教程可以参照各DL框架的并行API,主要部分还是要针对专用任务设计。
问题六
曹伟-安维尔信息技术-工程师
如何利用桌面显卡合理的搭建多视频实时深度网络分析系统
陶小语:消费卡(像txp, tv)在搭建分析平台时并无太大区别,需要事先测算视频分析系统各模块的资源占用情况,来设计并行方案。比如,选用tensorflow 自带的Faster R-CNN代码做推理,单卡GPU利用率大概只有40%,那么可以增加batch大小或视频路数把GPU利用率占满。同时要衡量CPU利用率和存储,来调整任务分配。不同的框架在存储和资源管理上是有差异的。像Caffe这种跑一个ResNet就会占满12G显存的,除非预先算好BN-scale-relu,否则多路是比较难的。轻量级的,像mxnet,单卡跑满8路没压力的,这个需要具体任务/具体框架具体分析。
问题七
郑少飞-安徽大学-计算机视觉方向
在什么情况下需要用到GPU并行计算,也即什么样的任务或者说什么量级的数据会需要用集群?我们平时是在高校做研究,对这个问题体会不深,希望您能通过具体例子解释一下。
陶小语:有很多场景都会用到大规模GPU并行集群,正如我在PPT中介绍的,比如百度的语音识别系统,网络模型有3亿个参数,需要20 亿亿次EFLOPS 计算量;谷歌的自然语言翻译系统,有87亿个参数,需要100亿亿次计算量。这些神经网络模型做训练,都需要GPU集群。
易成:这个问题,我也来补充下,做多GPU并行,主要针对算力要求非常高的场景,比如训练大规模数据集,像刷ImageNet,COCO等。或是处理大量的监控视频等。对于高校科研,在小数据集上调算法,几块卡就够了,除非是做网格式调参可能需要一个集群。
相关问答
为什么监控有几个摄像头在有人出现在镜头之中的时候不报警录像了呀?请问是什么原因?怎么解决?
首先该通道是否设置了移动录像功能,其次是否该通道的移动灵敏度是否合适。首先该通道是否设置了移动录像功能,其次是否该通道的移动灵敏度是否合适。