基于GPU的SLAM控制方法、设备及存储介质

文档序号:24549703发布日期:2021-04-06 12:02阅读:292来源:国知局
基于GPU的SLAM控制方法、设备及存储介质

本发明涉及人工智能技术领域,特别是涉及一种基于gpu的slam控制方法、设备及存储介质。



背景技术:

同步定位与建图(simultaneouslocalizationandmapping,slam)技术是机器人在未知环境中根据自己的运动状态确定自身位置并构建环境的实时地图。slam系统既要实现高精度定位效果,又要保证实时性运行,但是由于slam计算量庞大,对硬件平台的算力要求很高,大多数slam算法只能在高性能的计算平台(如图形处理器gpu)实时运行而无法在嵌入式平台实现实时性。

gpu采用单指令流多线程(singleinstructionmultiplethread,simt)模式运行。流处理器计算单元(streamingmultiprocessor,sm)是gpu的基本控制指令执行单元,每个sm中含有多个线程(thread),gpu在工作时会将sm下的线程组织成多个warp,通常每个warp为32个线程,每个warp内的所有线程执行相同的指令但是每个线程执行的数据流不同。

由于slam系统中通常会存在较多的分支判断代码,在gpu平台运行这些分支判断代码(如if-else语句或者switch语句)时,执行不同分支路径的线程只能串行执行。这种因不一致分支行为引起的串行执行现象被称为branchdivergence,它的出现严重影响了gpu的执行效率,降低了程序性能,对slam算法运行速度的提升有限。



技术实现要素:

有鉴于此,本发明的目的在于提供一种基于gpu的slam控制方法、设备及存储介质,可以减少冗余计算,提升slam算法的运行速度。其具体方案如下:

一种基于gpu的slam控制方法,包括:

对输入的每一帧图像信息进行误差的预测,得到预测值;

判断所述预测值是否小于设定阈值;

若是,则在运行slam算法的过程中,只启动多个代表性warp,记录所述代表性warp内所有线程的分支方向,并将记录的分支方向传给与之相邻的warp。

优选地,在本发明实施例提供的上述基于gpu的slam控制方法中,在只启动具有代表性的warp之前,还包括:

在建图之前,对输入的每一帧图像进行目标识别,只保留识别到的物体所占据的像素区域,并将保留的所述像素区域中的像素信息传递至slam系统,其余通过判断语句舍弃。

优选地,在本发明实施例提供的上述基于gpu的slam控制方法中,采只启动多个代表性warp的同时,还包括:

为代表性warp的每个线程在共享内存中创建一个256位的bool型数组,以容纳由该线程执行的256个体素的分支信息。

优选地,在本发明实施例提供的上述基于gpu的slam控制方法中,在将记录的分支方向传给与之相邻的warp之后,还包括:

在建图时,在程序编译期间跳过最后二十到三十次的迭代运算。

优选地,在本发明实施例提供的上述基于gpu的slam控制方法中,在程序编译期间跳过最后二十到三十次的迭代运算之后,还包括:

在当前图像帧信息融合进tsdf地图后,在从所述tsdf地图中提取表面信息时,只启动部分线程,并让启动的部分线程正常执行,待执行完毕后将结果拷贝到共享内存中。

本发明实施例还提供了一种电子设备,包括处理器和存储器,其中,所述处理器执行所述存储器中保存的计算机程序时实现如本发明实施例提供的上述基于gpu的slam控制方法。

本发明实施例还提供了一种计算机可读存储介质,用于存储计算机程序,其中,所述计算机程序被处理器执行时实现如本发明实施例提供的上述基于gpu的slam控制方法。

从上述技术方案可以看出,本发明所提供的一种基于gpu的slam控制方法,包括:对输入的每一帧图像信息进行误差的预测,得到预测值;判断预测值是否小于设定阈值;若是,则在运行slam算法的过程中,只启动多个代表性warp,记录代表性warp内所有线程的分支方向,并将记录的分支方向传给与之相邻的warp。

本发明从slam算法自身或从其在gpu上运行的特点入手,在slam或其他应用中通过记录一个warp的分支方向来替代其他warp的分支方向来做近似计算处理,解决了branchdivergence现象,减少了冗余计算,提升了slam的运行速度,且实现了对slam误差的精细化控制使其一直保持在可接受的最大误差值之下,并探索了近似计算技术应用于slam这种高精度应用的前景和机会。此外,本发明还针对基于gpu的slam控制方法提供了相应的设备及计算机可读存储介质,进一步使得上述方法更具有实用性,该设备及计算机可读存储介质具有相应的优点。

附图说明

为了更清楚地说明本发明实施例或相关技术中的技术方案,下面将对实施例或相关技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。

图1为本发明实施例提供的slam控制方法的流程图之一;

图2为本发明实施例提供的slam控制方法的流程图之二;

图3为本发明实施例提供的应用于integrate核函数的近似计算示意图;

图4为本发明实施例提供的应用于raycast核函数的近似计算示意图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

本发明提供一种基于gpu的slam控制方法,如图1所示,包括以下步骤:

s101、对输入的每一帧图像信息进行误差的预测,得到预测值;

可以理解的是,由于slam系统对定位精度具有很高的要求,slam算法自身就会产生一定的误差。为了衡量slam算法的精确性,一般要求出计算算法得到的运行轨迹与实际运行轨迹偏差的绝对值,该值也称为平均轨迹误差绝对值(meanabsolutelytrajectoryerror,meanate)。近似计算技术(approximatecomputingtechnique)是一种通过近似计算在目标应用的运算结果保持在可接受范围内的同时实现运算速度显著提升的方法。gpu作为一种重要的slam部署平台,在slam运行过程中存在大量的近似计算机会,因此本发明针对slam在gpu上运行的特点设计对应的近似计算方法,这样可以显著的提升slam的运行速度,在嵌入式gpu平台这种算力较少的设备上也可以实现实时性。但是如果slam算法自身产生的误差超过了规定要求那么就不适合采用近似计算技术,这是因为近似计算会使误差进一步增大。因此在采用近似计算方法之前需要对系统的原始误差做预测;

s102、判断预测值是否小于设定阈值;

若否,则正常运行slam算法;若是,则执行步骤s103;

s103、在运行slam算法的过程中,只启动多个代表性warp,记录代表性warp内所有线程的分支方向,并将记录的分支方向传给与之相邻的warp。需要强调的是,该步骤可以称之为为冗余分支消除法(redundantbranchelimination,简称rbe)。

需要说明的是,如果预测值大于设定阈值,那么对于该帧则不做任何处理,正常运行slam算法即可。如果预测值小于规定值那么说明可以采用近似计算方法,步骤s103中的近似计算方法指的是冗余分支消除法rbe。相应的,近似计算的设计空间就为规定值减去预测值,这里采用rbe做进一步的近似计算处理,目的就是保证系统维持在允许误差范围内的同时实现slam的快速运行。rbe利用了slam在gpu平台运行时相邻warp的分支方向高度相似的特点,在gpu执行时只需要启动几个代表性warp,记录这些warp内所有线程的分支方向,将这些方向传给与之相邻的warp。因此相邻的warp就不需要做分支判断,它们的分支方向与代表性warp一致。

在本发明实施例提供的上述基于gpu的slam控制方法中,从slam算法自身或从其在gpu上运行的特点入手,将冗余分支消除法应用于slam算法的核函数,在slam或其他应用中通过记录一个warp的分支方向来替代其他warp的分支方向来做近似计算处理,解决了branchdivergence问题,进而解决了slam算法自身的运算瓶颈,减少了冗余计算,提升了slam的运行速度,且实现了对slam误差的精细化控制使其一直保持在可接受的最大误差值之下,并探索了近似计算技术应用于slam这种高精度应用的前景和机会。

进一步地,在具体实施时,在本发明实施例提供的上述基于gpu的slam控制方法中,如图2所示,在执行步骤s103只启动具有代表性的warp之前,还可以包括以下步骤:

s104、在建图之前,对输入的每一帧图像进行目标识别,只保留识别到的物体所占据的像素区域,并将保留的像素区域中的像素信息传递至slam系统,其余通过判断语句舍弃。需要强调的是,该步骤可以称之为关键数据识别方法(criticaldataidentification,简称cdi)。

需要说明的是,视觉slam采用相机来完成对环境的感知工作,因此所有的定位和建图工作都要依靠相机所拍摄的照片内的像素信息,由于图像本身含有大量的噪声信息和无关物体的信息,这些信息不仅增加了计算量还会影响slam的定位精度与建图效果。为了解决这一问题,本发明通过cdi这种近似计算技术,利用目标识别算法(例如mobilenet、yolo)对slam系统的输入图像做处理(过滤图像信息),只保留需要建图的物体/目标所占据的像素区域并将保留的区域像素信息传递给slam系统。cdi的具体工作流程可以为:对于相机拍摄的rgb图像或带有深度值的rgb-d图像,先采用yolov3做目标识别,将识别到的物体也就是需要保留的物体的坐标信息保存,该信息即为物体所在目标识别矩形框的对角线上两个点的坐标值。之后的建图步骤在读取图像时,只提供各识别框内像素的信息,其余通过判断语句舍弃。需要识别的物体区域通常很小大约只占图像面积的百分之三十,该方法理论上可以减少百分之七十的计算量。

在具体实施时,在本发明实施例提供的上述基于gpu的slam控制方法中,步骤s103只启动多个代表性warp的同时,还可以包括:为代表性warp的每个线程在共享内存中创建一个256位的bool型数组,以容纳由该线程执行的256个体素的分支信息。

在具体实施时,在本发明实施例提供的上述基于gpu的slam控制方法中,如图2所示,在执行步骤s103将记录的分支方向传给与之相邻的warp之后,还可以包括以下步骤:

s105、在建图时,在程序编译期间跳过最后二十到三十次的迭代运算。需要强调的是,该步骤可以称之为循环跳过法(loopskipping,简称ls)。

需要说明的是,slam在建图过程中多会采用tsdf(truncatedsigneddistancefunction)地图来存储重建得到的表面信息。该结构由大量的小方格(voxel)组成,每个方格代表了真实空间中的一个点。在建图过程中需要对每一个小方格进行操作,具体根据相机位姿矩阵和获取到的图像判断该方格对应的实际物理空间内有没有要重建的物体信息,这通常需要一个迭代次数很大的循环操作来完成。在这些循环操作中,最后的二十到三十次迭代往往是不必要的因为这些迭代判断的voxel中并不会存储任何要重建表面的信息。ls利用了这一特点,在程序编译期间跳过最后二十到三十次的迭代运算。

进一步地,在具体实施时,ls法的近似计算程度为d1时,即跳过的次数为d1时,经过ls法处理后的主循环迭代次数为256-d1。

在具体实施时,在本发明实施例提供的上述基于gpu的slam控制方法中,如图2所示,在执行步骤s105在程序编译期间跳过最后二十到三十次的迭代运算之后,还可以包括以下步骤:

s106、在当前图像帧信息融合进tsdf地图后,在从tsdf地图中提取表面信息时,只启动部分线程,并让启动的部分线程正常执行,待执行完毕后将结果拷贝到共享内存中。需要强调的是,该步骤可以称之为线程替代法(threadapproximation,简称ta)。

需要说明的是,在当前图像信息已经融合进tsdf地图之后,slam需要从更新后的tsdf地图中提取新的表面信息,slam采用raycast作为提取表面信息的方法,该方法的基本原理:从相机处沿着当前相机位姿方向向tsdf地图发射多条光线,沿着每条光线的发射方向搜索即可找到表面信息。tsdf地图中的voxel中存有表述表面信息的数据,该数据变化范围为-1到1,0则代表存储有表面信息。如果光线遇到的voxel中存储了0那么就停止搜索,并将表面信息保存。gpu在执行上述过程时每条光线由一个线程负责,由于光线数量多,相邻的光线间找到的表面信息也相似即相邻线程的执行结果相似,基于上述原理和发现,本发明提出了ta法对这一过程做近似计算。ta法的原理就是只启动一部分线程并让其正常执行,待执行完毕后将结果拷贝到共享内存中,与这些线程相邻的线程从内存中取走对应的执行结果即可。

具体地,在具体实施时,在执行步骤s103、s105、s106之前,还可以包括:调整rbe法、ls法、ta法各自的近似计算比重,以使slam算法具有最优加速比。

需要说明的是,由于近似计算会造成误差,在应用的时候不可能对每一种方法都做最大程度的近似处理那样会使得结果超过容忍范围,只使用一种方法也不能实现更好的加速性能,不同方法对slam的加速程度也不同。因此需要一种优化方案来合理分配四种方法的近似计算比重,使得slam实现最大的总体加速比。cdi方法识别了关键数据从而降低图像的总体噪声并且排除了光强较大的区域或深度图像中深度值无法探测的区域,因此cdi方法对比原始算法只会多产生微小的误差,对于cdi方法不用调整它的比重,也就是说cdi方法会一直应用,它造成的误差十分微小并不影响结果。对于rbe它的近似计算强度即为相邻warp的数量,例如用一个warp的方向传递给相邻的两个warp时rbe的近似强度为2。对于ls,近似计算强度定义为循环跳过的迭代次数,例如跳过了for循环最后的三十次迭代计算,那么近似计算强度即为30。对于ta,近似计算强度定义为一个正常执行线程要替代的相邻线程数量。

较佳地,本发明采用迭代的方法来搜索最优加速比,近似计算程度用d来表示,相应的,rbe、ls、ta的近似计算程度定义为dr、dl、dt,它们的初值都设置为1。根据slam算法具体应用的场景,首先运行一次原始slam算法即可知道基础误差有多大;近似计算空间即为最大允许误差减去基础误差。之后再分别运行单独采用rbe、ls、ta的slam算法以获得各自方法在不同近似计算程度应用下的加速曲线和误差曲线。将每种方法的加速比值与产生的错误值做除法得到单位误差增加带来的加速比值,该值用字母x表示。现在可以采用迭代的方式来搜索最优加速比了。迭代步长的设置:rbe迭代步长设置为10,ls迭代步长设置为3,ta迭代步长设置为1。首先选取三种方法中x值最大的方法进行调整,其余两种方法不动,该方法的d增加一个迭代步长,误差的设计空间相应的减去该方法此时近似程度对应产生的误差值,继续比较三种方法此时的x值,如此迭代下去直到误差的设计空间为0,这时三种方法各自对应的近似计算程度也就是d值即为最优解,对于每一帧,都采用这种优化方案最终就可以实现对slam算法的精密控制使得误差可控的同时实现最大程度的算法加速。

kinectfusion是一种经典的视觉slam算法,该算法侧重于构建场景的稠密地图。下面将本发明提供的上述slam控制方法应用于kinectfusion,将近似处理后的kinectfusion应用于一个室内场景中,进行具体说明:

kinectfusion算法的gpu代码可分为十几个核函数,不同的核函数执行不同的功能。如图3和图4所示,integrate和raycast这两个核函数具备应用近似计算方法的特点。integrate将相机获取的每一帧图像信息融合进tsdf地图中从而完成了建图相关的工作,raycast从integrate中构建的tsdf地图提取表面信息来获取相机位姿。对于integrate,采用分别cdi、rbe、ls三种算法。

首先使用cdi对相机拍摄的图片做识别之后只保留识别的物体所在的像素块其余抛弃,也就是说后续的地图重建只重建了识别到的区域。

在这之后代码进入integrate中的四个连续的if-else语句,由于过多的if-else会造成branchdivergence现象,因此对于这块语句,本发明采用rbe法进行处理。rbe具体的部署流程为:为代表性warp的每个线程(32个线程组成一个warp)在gpu的共享内存中创建一个256位的bool型数组,以容纳由该线程执行的256个体素的分支信息。本发明选择共享内存来实现bds,因为它可以被所有线程快速访问,而且它比全局内存快得多。本发明选择了代表性warp并使其正常运行。当它完成时,每个warp中的代表性线程的数据内容类似于:000010011111000…,1表示该体素直到第四个分支指令才执行,是需要找到的体素,该体素将参与下一步的运算,而标号为0则表示不需要继续判断下去了是无用的体素,代表性warp得到的结果将直接转递给接下来的其余warp,这将会消除掉其余warp的branchdivergence现象。

然后,将ls法应用于integrate中的主循环中,该循环原始迭代次数为256,采用ls处理,此处ls的近似计算程度为dl,所以经过ls处理处理后的主循环迭代次数为256-dl。

最后,将ta法应用于raycast,raycast为图像的每个像素点分配了一个线程,每个线程代表了一条光线,ta方法按图像像素的标号启动线程,例如,对于执行像素横轴坐标为0的线程们,它们将正常启动,得到结果后将结果直接写入横坐标在1-dt范围内的线程存储结果的内存中,代表像素横坐标在1-dt范围内的线程就不需要启动了。raycast和integrate的输入是同样的图像,因此对于raycast,可以直接应用integrate中cdi的结果只处理cdi识别到的图像区域。

综上,针对kinectfusion,将cdi、rbe、ls、ta四种方法应用于两个最耗时的核函数(integrate、raycast),相比现有技术通过控制slam算法的一些初始参数达到速度提升的目标,从slam算法自身的计算瓶颈入手,可大幅度地提高slam的运行速度。

相应的,本发明实施例还公开了一种电子设备,包括处理器和存储器;其中,处理器执行存储器中保存的计算机程序时实现前述实施例公开的基于gpu的slam控制方法。

关于上述方法更加具体的过程可以参考前述实施例中公开的相应内容,在此不再进行赘述。

进一步地,本发明还公开了一种计算机可读存储介质,用于存储计算机程序;计算机程序被处理器执行时实现前述公开的基于gpu的slam控制方法。

关于上述方法更加具体的过程可以参考前述实施例中公开的相应内容,在此不再进行赘述。

本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其它实施例的不同之处,各个实施例之间相同或相似部分互相参见即可。对于实施例公开的设备、存储介质而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。

专业人员还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。

结合本文中所公开的实施例描述的方法或算法的步骤可以直接用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(ram)、内存、只读存储器(rom)、电可编程rom、电可擦除可编程rom、寄存器、硬盘、可移动磁盘、cd-rom、或技术领域内所公知的任意其它形式的存储介质中。

本发明实施例提供的一种基于gpu的slam控制方法,包括:对输入的每一帧图像信息进行误差的预测,得到预测值;判断预测值是否小于设定阈值;若是,则在运行slam算法的过程中,只启动多个代表性warp,记录代表性warp内所有线程的分支方向,并将记录的分支方向传给与之相邻的warp。本发明从slam算法自身或从其在gpu上运行的特点入手,将冗余分支消除法这种近似计算技术应用于slam算法的核函数,通过控制slam算法的一些初始参数达到速度提升的目标,从根本上解决了branchdivergence现象,进而解决了slam算法自身的运算瓶颈,减少了冗余计算,提升了slam的运行速度,且实现了对slam误差的精细化控制使其一直保持在可接受的最大误差值之下,并探索了近似计算技术应用于slam这种高精度应用的前景和机会。此外,本发明还针对基于gpu的slam控制方法提供了相应的设备及计算机可读存储介质,进一步使得上述方法更具有实用性,该设备及计算机可读存储介质具有相应的优点。

最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。

以上对本发明所提供的基于gpu的slam控制方法、设备及存储介质进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。

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