基于CPU-GPU异构多处理器片上系统的实时目标检测方法及系统与流程

文档序号:22430474发布日期:2020-10-02 10:11阅读:185来源:国知局
基于CPU-GPU异构多处理器片上系统的实时目标检测方法及系统与流程

本发明属于目标检测领域,尤其涉及一种基于cpu-gpu异构多处理器片上系统的实时目标检测方法及系统。



背景技术:

本部分的陈述仅仅是提供了与本发明相关的背景技术信息,不必然构成在先技术。

深度学习和计算机视觉技术的快速发展促使无人机在军事、安全、物流等领域有广泛的应用前景。基于深度学习的目标检测技术是现代无人机的研究热点之一,而近年来,深度学习在语音识别、计算机视觉等多类应用中取得突破性进展,将深度学习融入到无人机技术中,将会对多种场景下的应用产生巨大影响。深度学习通过大量数据集进行训练,得到适当的权值,可以检测到各类目标,例如人,船,车辆,建筑物等,是无人机目标检测技术重要的研究方向。随着技术的不断发展,人们对于基于深度学习的目标检测技术有了更高的要求,所以针对不同的问题涌现出了多种不同特征的神经网络模型,如yolo、ssd等。

发明人发现,目标检测技术在nvidiajetsontx2等嵌入式异构多处理器片上系统上搭建运行,由于硬件平台功率和资源受限,在进行大量数据处理时速度受限,增加了整个平台系统的功耗,最终降低了目标检测的实时性。



技术实现要素:

为了解决上述问题,本发明的第一个方面提供一种基于cpu-gpu异构多处理器片上系统的实时目标检测方法,其充分利用了cpu-gpu异构多处理器结构,降低了片上系统的功耗,提高了目标检测的实时性。

为了实现上述目的,本发明采用如下技术方案:

一种基于cpu-gpu异构多处理器片上系统的实时目标检测方法,包括:

实时接收图片序列并存储至缓存;

调取缓存中的图片序列并利用部署在cpu-gpu异构多处理器片上系统的yolov2网络进行处理,输出目标检测结果;

其中,yolov2网络包括卷积层和池化层,池化层部署在gpu上,最后一个卷积层部署在cpu上;对于其他卷积层,计算量大于或等于预设计算量阈值的卷积层部署在gpu上,计算量小于预设计算量阈值的卷积层部署在cpu或gpu上;计算量以bflops为单位。

为了解决上述问题,本发明的第二个方面提供一种用于实时目标检测的cpu-gpu异构多处理器片上系统,其充分利用了cpu-gpu异构多处理器结构,降低了片上系统的功耗,提高了目标检测的实时性。

为了实现上述目的,本发明采用如下技术方案:

一种用于实时目标检测的cpu-gpu异构多处理器片上系统,包括:

缓存模块,其用于实时接收图片序列并缓存存储;

目标检测模块,其用于调取缓存中的图片序列并利用部署在cpu-gpu异构多处理器片上系统的yolov2网络进行处理,输出目标检测结果;其中,yolov2网络包括卷积层和池化层,池化层部署在gpu上,最后一个卷积层部署在cpu上;对于其他卷积层,计算量大于或等于预设计算量阈值的卷积层部署在gpu上,计算量小于预设计算量阈值的卷积层部署在cpu或gpu上;计算量以bflops为单位。

本发明的有益效果是:

本发明利用部署在cpu-gpu异构多处理器片上系统的yolov2网络对图片序列进行处理,利用cpu的多线程并行预处理图片序列,缩短了图片预处理时间,进而缩短了整个目标检测过程所耗费的时间,能够实现目标检测的实时性;

本发明还比较卷积层的以bflops为单位的计算量与预设计算量阈值,计算量大于或等于预设计算量阈值的卷积层部署在gpu上,计算量小于预设计算量阈值的卷积层部署在cpu或gpu上;这样提高了cpu和gpu的并行性,提高了图片检测的速度,降低了整个cpu-gpu异构多处理器片上系统的功耗,提高了目标检测的实时性。

附图说明

构成本发明的一部分的说明书附图用来提供对本发明的进一步理解,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。

图1是本发明实施例的基于cpu-gpu异构多处理器片上系统的实时目标检测方法流程图;

图2是本发明实施例的yolov2网络结构;

图3是本发明实施例的用于实时目标检测的cpu-gpu异构多处理器片上系统结构示意图;

图4是本发明实施例的yolov2网络模型进行测试的过程。

具体实施方式

下面结合附图与实施例对本发明作进一步说明。

应该指出,以下详细说明都是例示性的,旨在对本发明提供进一步的说明。除非另有指明,本文使用的所有技术和科学术语具有与本发明所属技术领域的普通技术人员通常理解的相同含义。

需要注意的是,这里所使用的术语仅是为了描述具体实施方式,而非意图限制根据本发明的示例性实施方式。如在这里所使用的,除非上下文另外明确指出,否则单数形式也意图包括复数形式,此外,还应当理解的是,当在本说明书中使用术语“包含”和/或“包括”时,其指明存在特征、步骤、操作、器件、组件和/或它们的组合。

术语解释:

(1)yolov2是基于darknet深度学习框架上的目标检测算法。其思想是把图片输入到卷积神经网络中,通过计算得到物体的目标边框(boundingbox)和物体为该类别的概率,即用回归的方式解决目标检测问题。其算法结构特点为unifieddetection,即从图形全局出发,直接学习图像的全局信息,所以模型的检测速度较快,并且可以进行端到端训练。

传统的yolov2网络共32层,目标检测的iou(intersectionoverunion,交并比)较高但速度缓慢,实时性不高;而官方推出的tiny-yolo版本,速度快,可以实现较好的实时性,但准确率较低。其次,基于darknet的yolov2对于多张图片的检测是单张逐次进行的,cpu和gpu互相等待的时间很长导致并行程度很低,硬件利用率不高。最后,基于深度学习的目标检测技术而言,使用32位浮点数来进行计算精度过高,包含了很多无效信息,会造成计算时间的浪费。

(2)blops

blops描述某次卷积运算需要的多少个十亿次浮点运算,其全称是billionfloatoperations,将多次卷积等运算所耗费的blops加起来就可以来表示某个算法模型的复杂度。

bflops计算公式为:

bflops=(2.0*n*size*size*c*out_h*out_w)/1000000000;

其中:2.0表示一次乘法和一次加法浮点运算;n表示卷积核数目;(size*size)表示卷积核大小;c表示待卷积图像的个数;out_h和out_w表示卷积后图像的大小,也等于完成某个卷积核扫描完该图像所需要卷积次数。

为了解决上述问题,本发明提供了基于cpu-gpu异构多处理器片上系统的实时目标检测方法。如图1所示,本实施例的基于cpu-gpu异构多处理器片上系统的实时目标检测方法,包括:

步骤(1):实时接收图片序列并存储至缓存。

具体地,图片序列是按照采样时间依次获取的图片,图片序列以一个batch为单位从内存中读到缓存中,以一维数组的方式进行存储。

步骤(2):调取缓存中的图片序列并利用部署在cpu-gpu异构多处理器片上系统的yolov2网络进行处理,输出目标检测结果。

在本实施例中,其中,yolov2网络包括卷积层和池化层,池化层部署在gpu上,最后一个卷积层部署在cpu上;对于其他卷积层,计算量大于或等于预设计算量阈值的卷积层部署在gpu上,计算量小于预设计算量阈值的卷积层部署在cpu或gpu上;计算量以bflops为单位。

本实施例的检测部输出的结果为一个张量,该张量给出的信息包含图片划分的网格数、每个网格负责目标数、检测的类别数和每个网格对应每个类别的概率。

图2给出了本实施例的yolov2网络结构。在图2中,yolov2网络包含19个卷积层和4个池化层,对于输入图像进行卷积和最大池化的交替操作。图2中的yolov2网络,卷积运算中的滤波器数值为原来的一半,在输出为52×52×64和52×52×128之间删除了3个卷积层和一个最大池化层,在output为26×26×128和26×26×256之间删除了一个3×3卷积核的卷积层,而最终的output也由原来的13×13×18调整为26×26×18。这样通过减少所有层的维度并对层进行切割来尽可能地保留网络结构,在保障目标检测精度的前提下,缩短了yolov2网络的整个计算时间。

为了提升cpu和gpu的利用率,本实施例利用多线程并行预处理图片序列中每一张图片。对于单张图片而言,预处理和网络检测占总时间的比重较大,因此并行程度的提升使总体检测速度得到了极大的提升。

图3给出了本实施例的用于实时目标检测的cpu-gpu异构多处理器片上系统,其包括缓存模块和目标检测模块。

其中,缓存模块用于实时接收图片序列并存储至缓存;

目标检测模块用于调取缓存中的图片序列并利用部署在cpu-gpu异构多处理器片上系统的yolov2网络进行处理,输出目标检测结果。

在本实施例中,yolov2网络包括卷积层和池化层,池化层部署在gpu上,最后一个卷积层部署在cpu上;对于其他卷积层,计算量大于或等于预设计算量阈值的卷积层部署在gpu上,计算量小于预设计算量阈值的卷积层部署在cpu或gpu上;计算量以bflops为单位。

对于单张图片而言,预处理和网络检测占总时间的比重较大,为了提高总体检测速度,保障目标检测的实时性,本实施例在cpu上部署有预处理部,用于调取缓存中图片序列并利用多线程并行预处理图片序列中每一张图片。

同时,为了充分利用gpu和cpu的硬件资源,计算量大于或等于预设计算量阈值的卷积层部署在gpu上,cpu上部署有结果反馈部将检测的目标坐标位置返回并在对应图片上标注。

本实施例在cpu-gpu异构多处理器片上系统内置half和half2的数据类型转换函数。由于16位“半精度”浮点类型在应用程序中可以处理更大的数据集,也可以通过存储和操作更低精度的数据来获得性能。所以本实例中,采用半精度浮点数来代替32位浮点数进行运算就是降低精度,来获得较高的性能。

本实例中,在yolov2网络的detect测试过程的执行在gpu上的所有层次采用半精度浮点数执行。例如:yolov2网络的卷积层中,卷积层运算只有正向传播过程,所以在卷积层的核函数中,添加了使用半精度浮点数的正向传播运算函数,即原本使用float数据类型的运算均改为half数据类型进行运算。如图4所示是yolov2网络模型进行测试的过程,由于本实施例将不同类别的层的计算全部由单精度浮点数转换为半精度浮点数,所以数据在拷贝到gpu上之后,需要进行32位浮点数和16位浮点数的转换,才能在网络层次上进行下一步的运算,即在第一层之前和最后一个卷积层之后增加浮点数位数转换函数float2half和half2float。其中,float2half为从32位浮点数转换为16位浮点数,half2float为从16位浮点数转换为32位浮点数。这样就减少了计算时的数据量。

本实施例中,将yolov2网络的最后一层detection由gpu上移动到了cpu上进行运算,如图4所示,所以在移动层次之前需要将数据从half类型转换为float类型,即由半精度浮点数转换为单精度浮点数,然后才能执行其他操作。对这部分的调整主要集中在对两大数据结构network和layer上进行修改,在network上对网络层次的调用进行修改,在layer上重新定义一部分half类型的变量。将数据拷贝到gpu上转换成半精度浮点数之后,不需要将类型转换回来,而是直接使用半精度浮点数在使用gpu运算的各个层次上执行。

需要注意的一点是:由于矩阵运算的数据量较大,所以半精度浮点数矩阵运算的数据元素不能太大,半精度数的范围大约是5.96×10^-8~6.55×10^4,如果乘积结果太大,就会超出这一范围。

采用半精度浮点数后数据位数减少,所以改进后模型的准确度稍有下降,由于被舍弃的位数大多为0,所以准确度降低不明显,但矩阵乘运算所用的时间有明显的加快。

以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1