多路监控视频人工智能分析的处理方法及系统
技术领域
本发明实施方式涉及人工智能技术领域,尤其涉及一种多路监控视频人工智能分析的处理方法及系统。
背景技术
在一些应用场合,比如安防领域,传统的视频监控系统并不具备自主分析的能力,需要采用一些深度学习算法对传统的监控视频进行分析。在许多时候,监控视频多达成百上千路(每一路表示一个监控摄像头的监控视频流),实际中是需要采用服务器计算集群提供算力上的支持。在这种情况下,设计一种合理的、适用于大规模视频监控的软硬件架构,既能够得到合理的架构,也能在同等硬件配置下监控更多的视频,从而才能有效降低硬件成本,提高性价比。
对于深度学习的运算主要采用GPU实现的,GPU里面常用的技术指标主要有CUDA核数量、显存大小、读取速度等。
因此,充分利用显卡的显存、带宽提高运算速度,是设计高性能架构需要重点考虑的。
在业界已有的方案中,考虑的是将每路视频直接输出到GPU显卡直接进行处理,再将输出的视频,通过网络连接传输到数据库服务器。
发明人发现现有技术中至少存在如下问题:
1.将单路视频直接传输到GPU服务器处理,无法充分利用显存和CUDA处理器的处理能力,GPU利用率不高;
2.系统设计需要满足可维可测。如果进行大规模视频监控网络,需要具备GPU处理完毕后,传输给数据库服务器。但是,如果出现故障,数据库服务器需要无法直接检测定位出故障,导致难以维护和测量。
应该注意,上面对技术背景的介绍只是为了方便对本发明的技术方案进行清楚、完整的说明,并方便本领域技术人员的理解而阐述的。不能仅仅因为这些方案在本发明的背景技术部分进行了阐述而认为上述技术方案为本领域技术人员所公知。
发明内容
本发明实施方式的目的在于提供一种多路监控视频人工智能分析的处理方法和系统,能够有效地提高GPU的处理效率,而且能够快速定位故障的监控视频流,从而实现系统的可维可测。
为解决上述技术问题,本发明的实施方式提供了一种多路监控视频人工智能分析的处理方法,包括以下步骤:将多路监控视频流读入系统缓存中;根据每D帧抽取一帧,对读入的监控视频流进行下抽取处理;针对下抽取处理后的监控视频流,将每M帧图像封装成为一个Batch;将每J个批处理传输给同一个GPU服务器进行处理;将GPU的运算结果传输给数据库服务器,并给每一路监控视频流分配一个逻辑端口。
本发明的实施方式还提供了一种多路监控视频人工智能分析的处理系统,包括:任务调度服务器,用于读入多路监控视频流,根据每D帧抽取一帧,对监控视频流进行下抽取处理,并针对下抽取处理后的监控视频流,将每M帧图像封装成为一个Batch;多GPU并行计算服务器,包括多个GPU,用于并行接收来自任务调度服务器的Batch,其中每一个GPU服务器接收J个批处理;数据库服务器,用于接收来自多GPU并行计算服务器的运算结果,并给每一路监控视频流分配一个逻辑端口。
本发明实施方式相对于现有技术而言,在软件架构上,配合不同硬件服务器的功能分工,采用了:多路监控视频流分别降帧、封装多个batch、多batch并行异步处理,服务器端口与不同路视频映射传输实现可维可测的目的。在硬件架构上,提出了一种适用于多路视频监控的组织形式,分为任务调度服务器,多GPU并行计算服务器和数据库服务器,分工处理监控问题,如此容易定位问题,和模块化开发,做到各个功能模块高内聚低耦合。
另外,本发明实施例中,根据每D帧抽取一帧,对读入的多路监控视频流进行D倍降帧的下抽取处理,经过下抽取处理后的监控视频流的帧数为:监控视频视频流帧数÷D;针对下抽取处理后的监控视频流的帧数,每M帧图像封装成为一个批处理,则所述监控视频流中Batch的数量为:(监控视频视频流帧数÷D)÷M。如此,减少了需要处理的每一路监控视频的帧数,在服务器处理能力固定的基础上,能够处理更多路监控视频。
另外,将Batch的图像类型指定为计算统一设备体系结构CUDA类型,采用多路并行及异步传输的方式将Batch传输给多GPU,其中每J个批处理传输给同一个GPU服务器进行处理。通常视频处理中,有一部分运算在CPU上,有一部分在GPU上。如果按照完全一个循环做完,再做下一个循环,则会造成CPU计算时,GPU闲置,而GPU运算时,CPU闲置。采用异步的方式执行不同Batch的计算。通常是采用多线程或者进程的方式相互独立的进行各Batch各自的计算,若干个batch异步的进行CPU和GPU的计算,让计算机自动调度运算,使得总能有任务在CPU和GPU中运行,从而能够充分利用CPU和GPU的处理能力。
另外,将多GPU运算结果通过TCP/IP协议传输给数据库服务器,选取空余的逻辑端口,将监控视频流的视频编号和逻辑端口的端口号一一映射。如此,能够确保当数据库服务器端显示异常时,能够快速定位出问题。
附图说明
一个或多个实施例通过与之对应的附图中的图片进行示例性说明,这些示例性说明并不构成对实施例的限定,附图中具有相同参考数字标号的元件表示为类似的元件,除非有特别申明,附图中的图不构成比例限制。
图1是本发明提供的多路监控视频人工智能分析的处理方法的流程示意图;
图2是本发明提供的多路监控视频人工智能分析的处理方法的运行示意图;
图3是本发明提供的多路监控视频人工智能分析的处理系统的结构示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合附图对本发明的各实施方式进行详细的阐述。然而,本领域的普通技术人员可以理解,在本发明各实施方式中,为了使读者更好地理解本申请而提出了许多技术细节。但是,即使没有这些技术细节和基于以下各实施方式的种种变化和修改,也可以实现本申请所要求保护的技术方案。
本发明的第一实施方式涉及一种支持多路监控视频人工智能分析的处理方法,具体流程如图1所示。
步骤1:将多路监控视频流读入系统缓存中;
步骤2:根据每D帧抽取一帧,对读入的监控视频流进行下抽取处理;
步骤3:将下抽取后的监控视频流,根据每M帧图像封装成为一个Batch;
步骤4:将每J个批处理传输给同一个GPU服务器进行处理;
步骤5:将GPU的运算结果传输给数据库服务器,并给每一路监控视频流分配一个逻辑端口。
本发明的第二实施方式对多路监控视频人工智能分析的处理方法进行了详述,具体流程如图2所示。
针对上述的步骤1,将多路监控视频流读入调度服务器的系统缓存中,以高速缓存该多路监控视频流。
针对上述的步骤2,监控视频流通常是30fps和25fps,即每秒25帧或者30帧的一组图片集合。对于用于安防应用的监控视频流,通常并不需要对每帧都做检测处理。根据每D帧抽取一帧,对读入的监控视频流进行下抽取,经过下抽取处理后的监控视频流的帧数为:监控视频视频流帧数÷D。比如下抽取率是D=5时,得到是编号为1、6、11、16…..的帧保留下来,这样原来监控视频流就完成了5倍的下抽取。
如此,减少了需要处理的单路监控视频流的帧数,在服务器处理能力固定的基础上,可以处理多路监控视频流。因为对多路监控视频流进行D倍降帧处理。例如原来服务器的处理能力是一个GPU每秒处理5帧图片,而在本发明实施例中,要求每路监控视频流每秒处理一帧就可以了,所以可以通过D=5倍降帧,使得每路监控视频流是每秒实际输出1帧图像,从而提高了服务器对多路监控视频流的实际处理能力。
针对上述的步骤3,对多路监控视频流进行D倍降帧的下抽取后,根据每M帧图像封装成为一个Batch,例如图2中所示的第1路监控视频流、第2路监控视频流……第M路监控视频流封装成Batch1,第M+1路监控视频流、第M+2路监控视频流……第2M路监控视频流封装成Batch2……,则封装后的Batch的数量为:(监控视频视频流帧数÷D)÷M。
一个大小合适的Batch能够充分利用图形处理器(Graphics Processing Unit,GPU)的显存和计算统一设备体系结构(Compute Unified Device Architecture,CUDA)运算资源,从而提高GPU的利用率,缩短了监控视频流的等待时间。
针对上述的步骤4,将每J个Batch传输给同一个GPU服务器进行处理,例如图2中所示的GPU1中将会处理多个Batch,比如Batch1,Batch2……BatchJ。优选地,将采用异步的方式传输给GPU进行处理,这些不同的Batch在同一个GPU里异步处理。
在步骤3和步骤4中,M和J的选择有关联,而且会受显卡的显存大小影响,具体地,M和J选择的依据为:单张图片的大小×M×J小于显存的大小。优选地,单张图片的大小×M×J=70%显存。
降帧后的监控视频流拼成Batch,一个Batch可以把他看成是封装好的一个批次的若干张图像的集合。比如来自于5路的图像拼成一个Batch。通常情况,比如GPU的处理能力是每秒10帧图像,如果封装的Batch是5幅图像,则封装两个Batch。
将所有Batch的图像类型指定为CUDA类型,采用多路并行及异步传输的方式输送到多GPU里面处理,即将Batch1、BatchJ+1、Batch2J+1…….采用多线程或者进程并行方式传输给多GPU1、GPU2、GPU3……,然后Batch2、BatchJ+2、Batch2J+2…….在显存中等待处理。如此多路并行及异步传输的方式充分利用了CPU和GPU的处理能力。
此外,本发明实施例中的D、M和J都是正整数。上述举例的数值,都可以采用其他,并不为上述举例数值所限制。
针对上述的步骤5,在电脑中,通常有65535个逻辑端口,而其中1000以内是留给系统使用。多GPU处理完毕后,将GPU运算结果,传输给数据库服务器。给每一路监控视频流分配一个逻辑端口,选取空余的逻辑端口,从端口号P开始,端口号P+1分给第一路监控视频流使用,端口号P+N分给第N路监控视频流使用。在数据库服务器中保存监控视频流和逻辑端口的对应关系。
比如共有1000路监控视频流,可以从第20000端口开始,占用21000个端口。GPU服务器处理完的第一路视频从20001端口,通过TCP/IP协议传输给数据库服务器。其中的逻辑端口是一个逻辑概念,并不是真的有这个物理端口。传输通常采用的是套接字传输,每次TCP/IP连接,套接字的标号都会发生变化。采用监控视频流的视频编号和逻辑端口的端口号一一映射的方式,是为了确保当数据库服务器端显示异常时,能够快速定位出问题。如果传输问题的话,通过查询套接字是否仍在连接状态就知道是否传输问题。通过不同的端口传输不同路的监控视频。这样,当第k个套接字传输出现问题,我们能马上查出是哪一路监控视频出现问题。如此,如果出现了错误,则很容易判断出是:(1)哪一路视频出现问题;(2)是GPU服务器出现问题还是视频信号源本身就出现问题,从而直接检测定位出故障。
上面各种方法的步骤划分,只是为了描述清楚,实现时可以合并为一个步骤或者对某些步骤进行拆分,分解为多个步骤,只要包括相同的逻辑关系,都在本专利的保护范围内;对算法中或者流程中添加无关紧要的修改或者引入无关紧要的设计,但不改变其算法和流程的核心设计都在该专利的保护范围内。
即,本领域技术人员可以理解,实现上述实施例方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,该程序存储在一个存储介质中,包括若干指令用以使得一个设备(可以是单片机,芯片等)或处理器(processor)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-OnlyMemory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
本发明的第三实施方式提供了一种多路监控视频人工智能分析的处理系统,具体如图3所示,包括:
任务调度服务器,用于读入多路监控视频流,根据每D帧抽取一帧,对监控视频流进行下抽取处理,并针对下抽取处理后的监控视频流,将每M帧图像封装成为一个Batch;
多GPU并行计算服务器,包括多个GPU,用于并行接收来自任务调度服务器的Batch,其中每一个GPU服务器接收J个批处理;
数据库服务器,用于接收来自多GPU并行计算服务器的运算结果,并给每一路监控视频流分配一个逻辑端口。
其中,所述任务调度服务器,具体用于:
根据每D帧抽取一帧,对读入的多路监控视频流进行D倍降帧的下抽取处理,经过下抽取处理后的监控视频流的帧数为:监控视频视频流帧数÷D;
针对下抽取处理后的监控视频流的帧数,每M帧图像封装成为一个批处理,则所述监控视频流中Batch的数量为:(监控视频视频流帧数÷D)÷M;
将Batch的图像类型指定为CUDA类型,采用多路并行及异步传输的方式将Batch传输给多GPU并行计算服务器。
其中,所述M和J取值的依据为:单张图片的大小×M×J小于系统显卡的显存的大小。
其中,所述数据库服务器,具体用于:
接收来自多GPU并行计算服务器的运算结果;
选取空余的逻辑端口,将监控视频流的视频编号和逻辑端口的端口号一一映射。
不难发现,本实施方式为与第一和第二实施方式相对应的系统实施例,本实施方式可与第一和第二实施方式互相配合实施。第一和第二实施方式中提到的相关技术细节在本实施方式中依然有效,为了减少重复,这里不再赘述。相应地,本实施方式中提到的相关技术细节也可应用在第一和第二实施方式中。
值得一提的是,本实施方式中所涉及到的各模块均为逻辑模块,在实际应用中,一个逻辑单元可以是一个物理单元,也可以是一个物理单元的一部分,还可以以多个物理单元的组合实现。此外,为了突出本发明的创新部分,本实施方式中并没有将与解决本发明所提出的技术问题关系不太密切的单元引入,但这并不表明本实施方式中不存在其它的单元。
本领域的普通技术人员可以理解,上述各实施方式是实现本发明的具体实施例,而在实际应用中,可以在形式上和细节上对其作各种改变,而不偏离本发明的精神和范围。