姿态识别方法、装置、系统、存储介质及设备
技术领域
本申请涉及图像识别技术领域,特别是涉及姿态识别方法、装置、系统、存储介质及设备。
背景技术
随着科技水平的提高,整个社会都向着智能化、自动化的方向发展。
但是应该看到,当遇到遮挡情况,比如机械手抓取目标物后对目标物的遮挡,物体因为拍摄的视觉角度造成的遮挡,或者物体在摆放过程中由其它物体对其造成的真实遮挡等等。
在发生上述遮挡情况发生的过程中,往往会影响智能体的姿态识别的精度。
发明内容
基于此,本发明提供一种姿态识别方法、装置、系统、存储介质及设备。
本发明第一方面提供一种姿态识别方法,所述姿态识别方法包括:
获取目标物的图像数据;其中,所述目标物的部分被遮挡;
获取姿态识别模型;
将所述图像数据输入所述姿态识别模型中,输出识别结果。
优选的,所述识别结果为所述目标物的姿态识别结果。
优选的,所述识别结果为所述图像数据中目标物关联的特征信息的识别结果。
优选的,所述特征信息为:关键点和/或关键线。
优选的,所述输出识别结果之后还包括:
获取所述识别结果;
根据所述识别结果,生成所述目标物的姿态识别结果。
优选的,所述识别结果为所述目标物的第一部分姿态识别结果和预处理识别结果。
优选的,所述输出姿态识别结果之后还包括:
获取所述预处理识别结果;
根据所述预处理识别结果,确定所述目标物的第二部分姿态识别结果;
结合所述第一部分姿态识别结果和所述第二部分姿态识别结果,得到所述目标物的姿态识别结果。
优选的,所述姿态识别方法还包括:
优化所述目标物的姿态识别结果,得到优化结果。
优选的,所述获取目标物的图像数据之前还包括:
获取初始图像数据;其中,所述初始图像数据包括所述目标物和复杂背景;
提取所述初始图像数据中的目标物,生成只包括目标物或背景单一的目标物的图像数据。
本发明第二方面提供一种姿态识别训练方法,所述姿态识别训练方法包括:
获取训练样本集;其中,所述训练样本集包括原始样本和标注样本;
获取姿态识别模型的初始模型;
基于所述训练样本集,对所述初始模型进行训练,得到所述姿态识别模型;其中,所述姿态识别模型,用于对输入的目标物的图像数据,输出识别结果。
优选的,所述识别结果为:目标物的姿态识别结果;所述图像数据中目标物关联的特征信息的识别结果;或目标物的第一部分姿态识别结果和预处理识别结果。
本发明第三方面提供一种姿态识别装置,所述姿态识别装置包括:
目标图像获取模块,用于获取目标物的图像数据;其中,所述目标物的部分被遮挡;
识别模型获取模块,用于获取姿态识别模型;
识别结果输出模块,用于将所述图像数据输入所述姿态识别模型中,输出识别结果。
优选的,所述识别结果为所述目标物的姿态识别结果。
优选的,所述识别结果为所述图像数据中目标物关联的特征信息的识别结果;所述姿态识别装置还包括:
识别结果获取模块,用于获取所述识别结果;
目标结果确定模块,用于根据所述识别结果,生成所述目标物的姿态识别结果。
优选的,所述识别结果为所述目标物的第一部分姿态识别结果和预处理识别结果;所述姿态识别装置还包括:
预处理结果获取模块,用于辅助获取所述预处理识别结果;
识别结果确定模块,用于根据所述预处理识别结果,确定所述目标物的第二部分姿态识别结果;
目标结果得到模块,用于结合所述第一部分姿态识别结果和所述第二部分姿态识别结果,得到所述目标物的姿态识别结果。
优选的,所述姿态识别装置还包括:
目标结果优化模块,用于优化所述目标物的姿态识别结果,得到优化结果。
优选的,所述姿态识别装置还包括:
初始图像获取模块,获取初始图像数据;其中,所述初始图像数据包括所述目标物和复杂背景;
目标图像生成模块,用于提取所述初始图像数据中的目标物,生成只包括目标物或背景单一的目标物的图像数据。
本发明第四方面提供一种姿态识别训练装置,所述姿态识别训练装置包括:
训练样本获取模块,用于获取训练样本集;其中,所述训练样本集包括原始样本和标注样本;
初始模型获取模块,用于获取姿态识别模型的初始模型;
模型训练模块,用于基于所述训练样本集,对所述初始模型进行训练,得到所述姿态识别模型;其中,所述姿态识别模型,用于对输入的目标物的图像数据,输出识别结果。
本发明第五方面提供一种姿态识别系统,所述姿态识别系统包括图像传感器和控制装置;
所述图像传感器,用于采集包括所述目标物和复杂背景的初始图像数据;其中,所述初始图像数据作为目标物的图像数据;所述目标物的部分被遮挡;
所述控制装置,用于获取所述目标物的图像数据;获取姿态识别模型;将所述目标物的图像数据输入姿态识别模型中,输出识别结果;或
所述图像传感器,用于采集包括所述目标物和复杂背景的初始图像数据;其中,所述目标物的部分被遮挡;
所述控制装置,用于获取所述初始图像数据:提取所述初始图像数据中的目标物,生成只包括所述目标物或背景单一的所述目标物的图像数据;获取所述目标物的图像数据;获取姿态识别模型;将所述目标物的图像数据输入姿态识别模型中,输出识别结果。
本发明第六方面提供一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时实现上面任一项所述的姿态识别方法;和/或上面任一项所述的姿态识别训练方法。
本发明第七方面提供一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现上面任一项所述的姿态识别方法;和/或上面任一项所述的姿态识别训练方法。
本发明第八方面提供一种上面第四方面所述的姿态识别训练方法中所述的训练样本集的生成方法,所述训练样本集的生成方法包括:
建立多个视角类别和目标物的姿态的对应关系;
获取每个视角对应的图像数据集,并记录所述图像数据集、所述视角类别和所述姿态的对应关系,生成所述图像数据集的标注;
将所述图像数据集粘贴至背景图像中,生成更新图像数据集;
以所述更新图像数据集和所述标注作为所述训练样本集;或
建立多个视角类别和目标物的姿态的对应关系;
获取每个视角对应的图像数据集,并记录所述图像数据集、所述视角类别和所述姿态的对应关系,生成所述图像数据集的标注;
以所述图像数据集和所述标注作为所述训练样本集;或
获取目标物的图像数据集;其中,图像数据集中的每个图像数据对应一个目标物的姿态;
获取包括3d特征信息的目标物的3D模型;
按照每个图像数据对应的所述姿态,将所述3d特征信息投影至对应的图像数据中,生成2d特征信息的标注;
以所述图像数据集和所述标注作为所述训练样本集;或
获取目标物的图像数据集;其中,图像数据集中的每个图像数据对应一个目标物姿态;
获取包括3d特征信息的目标物的3D模型;
按照每个图像数据对应的所述姿态将所述3d特征信息投影至对应的图像数据中,生成2d特征信息;
根据所述2d特征信息,生成预测图的标注;
以所述图像数据集和所述标注作为所述训练样本集。
采用本发明的技术方案,通过基于人工智能的方法,进行被遮挡物体的姿态识别,可以提高姿态识别的精度。
附图说明
图1为一个实施例中姿态识别方法的第一流程示意图;
图2为一个实施例中姿态识别方法的第二流程示意图;
图3为一个实施例中姿态识别方法的第三流程示意图;
图4为一个实施例中姿态识别方法的第四流程示意图;
图5为一个实施例中姿态识别方法的第五流程示意图;
图6为一个实施例中姿态识别方法的第六流程示意图;
图7为一个实施例中训练样本集生成方法的第一流程示意图;
图8为一个实施例中训练样本集生成方法的第二流程示意图;
图9为一个实施例中训练样本集生成方法的第二流程示意图;
图10为一个实施例中姿态识别训练方法的第六流程示意图;
图11为一个实施例中姿态识别装置的第一结构框图;
图12为一个实施例中姿态识别装置的第二结构框图;
图13为一个实施例中姿态识别装置的第三结构框图;
图14为一个实施例中姿态识别装置的第四结构框图;
图15为一个实施例中姿态识别装置的第五结构框图;
图16为一个实施例中姿态识别装置的第六结构框图;
图17为一个实施例中姿态识别训练装置的第一结构框图;
图18为一个实施例中态识别系统的第一结构框图;
图19为一个实施例中姿态识别方法应用环境的第一结构示意图;
图20为一个实施例中计算机设备的第一结构框图;
图21为一个实施例中姿态分类的第一示意图;
图22为一个实施例中关键点转换的第一示意图;
图23A为一个实施例中第一预测图;图23B为一个实施例中预测图的变形示意图。
图24为一个实施例中第二预测图;
图25为一个实施例中第三预测图;
图26为一个实施例的关键线的示意图。
具体实施方式
为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。
本申请提供的姿态识别方法,可以应用于如图19所示的应用环境中,应用环境中可以包括终端600和/或服务器700,终端600通过网络与服务器700进行通信。该方法既可以应用在终端600,也可以应用于服务器700。其中,终端600可以但不限于是各种工业计算机、个人计算机、笔记本电脑、智能手机和平板电脑。服务器700可以用独立的服务器或者是多个服务器组成的服务器集群来实现。
在一个实施例中,如图1所示,提供一种姿态识别方法,以该方法应用于图19中的终端为例,该方法包括以下步骤:
步骤S101获取目标物的图像数据;其中,目标物的部分被遮挡;
具体的,可以获取图像传感器采集并实时发送的图像数据,或者从存储器或者服务器等获取上述图像数据。
需要说明的是,由于目标物体的部分被其它物体遮挡,因此获取到的目标物体的图像中只能显示部分目标物体。另外,获取的图像数据中除包括目标物体外还可以包括其它物体或背景。
在一个实施例中,该目标物的图像数据可以为包括目标物和复杂背景的图像数据;除此之外,在另一个实施例中,该图像数据也可以为只包括目标物、或者包括目标物和单一背景的图像数据,如图2所示,则在步骤S110之前还可以包括如下方法步骤:
步骤S104获取初始图像数据;其中初始图像数据包括目标物和复杂背景;
步骤S105提取初始图像数据中的目标物,生成只包括目标物或背景单一的目标物的图像数据。
具体的,背景单一是指背景采用单一的图案或者颜色。
具体的,图像数据可以是各种类型的2D图像数据(比如:RGB图像、灰度或黑白图像)。图像传感器可以包括但不限于:照相机、摄像机、扫描仪或其他带有相关功能的设备(手机、电脑)等等。
需要说明的,由于目标物被遮挡,就算将前景提取出来,前景中可能依然会带有一些遮挡物。
具体的,提取可以包括但不限于如下方法:
在一个实施例中,可以是将前景按照外部轮廓从初始图像中抠出;比如:基于传统的各种图像的处理方法(比如:二值化、边缘检测、连通域等等)识别出初始图像中的前景部分,然后将前景部分抠出;或者
进一步,在一个实施例中,也可以将上述抠出的前景映射到一个单一背景的预设大小的矩形图像上,从而生成单一背景的目标图像;或者
在一个实施例中,将原本一定大小的初始图像进行一定的裁剪,使得裁剪后的图像为包围目标物外框的最小截面图像(比如:初始图像为一张100*200的图像,而裁剪后的图像为50*80大小,则可以将该裁剪后的图像看作上述只包括前景的目标图像);进一步,在一个实施例中,也可以将上述裁剪后的图像映射到一个单一背景的预设大小的矩形图像上,从而生成单一背景的目标图像;或者
在一个实施例中,对初始图像进行处理使得处理后的图像只包括前景和单一的背景等等,比如:基于传统视觉的方法或者基于人工智能的方法。
步骤S102获取姿态识别模型;
从存储器或者服务器等获取预先经过训练的姿态识别模型。
步骤S103将图像数据输入姿态识别模型中,输出识别结果。
通过基于人工智能的方法,进行被遮挡物体的姿态识别,可以提高姿态识别的精度。
另外,在保证精度的前提下,可以提高识别的泛化能力。
具体的,上述步骤S103中可以根据姿态识别模型设计的不同,输出不同的识别结果。
在一个实施例中,识别结果可以但不限于:目标物的姿态识别结果;图像数据中目标物关联的特征信息的识别结果;或目标物的第一部分姿态识别结果和预处理识别结果的结合。
在一个实施例中,模型输出的识别结果除上述姿态识别相关的结果外,还可以包括目标物的类别、掩码等等辅助识别结果。比如:目标物的类别是告诉你这个物体是个什么东西,掩码通常就是告诉你图像中某块区域是你感兴趣的物体。
其中,目标物的姿态识别结果是指通过模型直接得到目标物的三维姿态信息;图像数据中目标物关联的特征信息的识别结果,还需要后续进一步的处理方法(比如:结合目标物的3D模型),才能根据图像中的二维的特征信息结果得到最终目标物的姿态识别结果;目标物的第一部分姿态识别结果和预处理识别结果的结合是指通过模型直接输出部分目标物的姿态识别结果,另外一部分为预处理识别结果,需要对预处理识别结果进行进一步的处理,才能得到最终的目标物的整体的姿态识别结果;下面会对上述三种识别结果和对应的识别方法进行进一步详细的描述。
在一个实施例中,识别结果为目标物的姿态识别结果,即通过模型直接输出目标物的姿态识别结果。即该识别结果可以直接为目标物的三维姿态信息;
具体的,三维姿态信息可以为针对目标物的预设坐标系的3d坐标;刚体在3维空间的运动可以用3d坐标(共6个自由度)描述,具体的,可以分为旋转和平移,各为3个自由度。刚体在3维空间的平移是普通的线性变换,可以使用一个3x1的向量描述平移位置;而旋转姿态常用的描述方式包括但不限于:旋转矩阵、旋转向量、四元数、欧拉角和李代数。
在一个实施例中,如图10所示,提供一种姿态识别模型的训练方法,另外,也以该方法应用于图19中的终端为例,该方法包括如下方法步骤:
步骤S401获取训练样本集;
具体的,提供目标物被遮挡的训练样本集,该训练样本集可以是通过图像传感器实际采集得到的,也可以是通过对未遮挡图像的处理,对未遮挡图像进行抠除,得到目标物被遮挡的各种虚拟图像。
步骤S402获取姿态识别模型的初始模型;
步骤S403基于所述训练样本集,对所述初始模型进行训练,得到所述姿态识别模型。
在一个实施例中,所述姿态识别模型,用于对输入的目标物的图像数据,输出识别结果。
具体的,网络模型可以包括但不限于卷积神经网络(CNN),常见的CNN模型可以包括但不限于:LeNet,AlexNet,ZFNet,VGG,GoogLeNet,Residual Net,DenseNet,R-CNN,SPP-NET,Fast-RCNN,Faster-RCNN,YOLO,SSD,BB8,YOLO-6D,Deep-6dPose,PoseCNN,Hourglass,CPN以及其他现在已知或将来开发的网络模型结构。
具体的,训练方法可以采用监督学习、半监督学习或无监督学习等等现在已有或者将来开发的训练方法,以监督学习为例,以图像数据集作为输入,以三维姿态信息作为标注,对姿态识别模型的初始模型进行训练,从而得到姿态识别模型。
在一个实施例中,识别结果为图像数据中目标物关联的特征信息的识别结果。
具体的,该特征信息可以但不限于:关键点和/或关键线(其中,关键线可以看作多个连续关键点的组合)。
具体的,该特征信息的识别结果可以但不限于:关键点和/或关键线的2d坐标,其中,关键线的2d坐标是由多个连续的关键点的2d坐标组合而成;或为叠加关键点和/或关键线标注后的图像数据;或为用于提取上述关键点和/或关键线的预测图。
具体的,该关键点可以为归属目标物上的关键点;或者为归属包围目标物的包围框的关键点,下面对上述两种情况分别进行详细描述:
在一个实施例中,该关键点识别结果为归属包围目标物的包围框的关键点的姿态识别结果。具体的,可以为包围目标物的3d包围框的8个顶点在2d图像上的投影点的2d坐标,或者模型可以直接输出叠加投影点标注后的图像数据(如图22中的右侧图所示);在一个实施例中,除上述8个顶点外还可以加上目标物的中心点(即一共9个关键点)。
在一个实施例中,该关键点的姿态识别结果为归属目标物上的关键点的姿态识别结果。后面会有进一步详细的说明。
具体的,网络模型可以包括但不限于卷积神经网络(CNN),常见的CNN模型可以包括但不限于:LeNet,AlexNet,ZFNet,VGG,GoogLeNet,Residual Net,DenseNet,R-CNN,SPP-NET,Fast-RCNN,Faster-RCNN,YOLO,SSD,BB8,YOLO-6D以及其他现在已知或将来开发的网络模型结构。
具体的,有关模型的训练方法,参见图10所示的实施例中的姿态识别训练方法的步骤,在此不再赘述。
具体的,训练方法可以采用监督学习、半监督学习或无监督学习等等现在已有或者将来开发的训练方法,以监督学习为例,以图像数据集作为输入,以2d关键点和/或关键线作为标注,对姿态识别模型的初始模型进行训练,从而得到姿态识别模型。
在一个实施例中,如图8所示,提供一种归属目标物上的关键点的训练样本集中包括关键点标注的样本集的生成方法:
步骤S301获取目标物的图像数据集;其中,图像数据集中的每个图像数据对应一个目标物的姿态;
步骤S302获取包括3d关键点的目标物的3D模型;
具体的,该3d特征信息(关键点和/或关键线)可以根据用于输入的指令预定义,或者3D模型(比如:CAD模型)根据某些特征提取算法自动生成。
步骤S303按照每个图像数据对应的目标物姿态将3D模型上的3d关键点投影至对应的图像数据中,生成包括2d关键点标注的图像数据集。
步骤S304将图像数据集和对应的标注作为训练样本集。
进一步,在一个实施例中,上述关键点和/或关键线的识别结果为预测图,即对图像数据的每一个像素都进行预测,模型输出预测图(如图23A所示),再根据预测图提取关键点和/或关键线。
具体的,可以根据预测图的颜色、亮度等等特征信息的不同代表不同的含义,比如:关键点的概率、关键点所处方位;或者,预测图也可以为等高线图等等任何的图像表达方式。
在一个实施例中,每一个像素点都会预测一个关键点相对于这个像素本身的方向,热度图(如图23A中)所示的颜色的不同就代表了不同的方向。
在另一个例子中,每一个像素点都会预测当前像素是关键点的可能性/概率。可能性越大,预测值就越高(比如:图像的亮度越高(如图25所示),或等高线的高度越大(如图24所示))。需要注意的是,通常在关键点附近的像素点的预测值都会很高。
具体的,根据预测图,确定关键点和/或关键线方法可以包括但不不限于如下方法:
在获得预测图之后,需要将预测图转换为关键点和/或关键线。将预测图转换为关键点和/或关键线的方法与上述预测图的含义相关。当预测图的预测为方向时,可以采用投票的方式,以指向某位置的像素点的数量最多的位置为该图像数据的关键点(如图23B所示);当预测图的预测为关键点可能性时,我们可以取预测值最高的那个像素点作为关键点,或者对预测值很高的那个区域求一个加权平均。具体的,模型可以输出多张预测图,根据每个预测图预测一个关键点;或者模型输出一张预测图,每个预测图上预测多个关键点。
由于基于预测图的方法进行目标物的姿态识别,这种方法相对直接输出关键点和/或关键线的方法通常会有更高的精度,并且训练难度也会降低。
在一个实施例中,如图9所示,提供一种模型训练样本集的生成方法:
步骤S401获取目标物的图像数据集;其中,图像数据集中的每个图像数据对应一个目标物的姿态;
步骤S402获取包括3d关键点的目标物的3D模型(比如:CAD)模型;
步骤S403按照每个图像数据对应的姿态将CAD模型上的3d特征信息投影至对应姿态的图像数据中,生成2d特征信息;
步骤S404根据2d特征信息生成预测图的标注;
即以预测图作为图像数据的标注;
步骤S405以图像数据集和标注作为训练样本集。
具体的,有关模型的训练方法,参见图10所示的实施例中的姿态识别训练方法的步骤,在此不再赘述。
具体的,训练方法可以采用监督学习、半监督学习或无监督学习等等现在已有或者将来开发的训练方法。以监督学习为例,将图像数据集作为输入,预测图作为输出,对姿态识别模型进行训练。
具体的,该网络模型可以包括但不限于卷积神经网络(CNN),常见的CNN模型可以包括但不限于:LeNet,AlexNet,ZFNet,VGG,GoogLeNet,Residual Net,DenseNet,Mask-RCNN,Hourglass,CPN以及其他现在已知或将来开发的网络模型结构。
在一个实施例中,姿态识别结果为关键线或者关键线与关键点结合的姿态识别结果。
具体的,模型的输出可以是该二维图像上的关键线(比如:曲线、直线),比如:模型可以直接输出构成该关键线的各个连续关键点在在2d图像上的投影点的2d坐标;或者模型可以直接输出叠加该关键线标注的图像数据。
具体的,这些线需要预先定义,比如:根据物体的CAD等模型设定目标物的一些显著边缘线。甚至可以扩展定义为一些关键线的组合,如图26所示,模型的输出可以为线段AB,AC和AD的组合;甚至是多个关键线组合起来得到的某个几何图形(省略附图)。
通常情况下,一条线段的两个端点,与这条线段上的所有点,进行3D模型匹配时是等效,但实际情况下,由于检测带有误差,用一整条线段的带噪声的点去进行匹配3D模型会比单纯用线段的两个端点——在空间中对应物体一条边缘连接的两个角点——去进行匹配要更准,因此更多的点进行3D模型匹配可以起到降低最终匹配误差的作用。
另外,当一些关键角点不能被观测到时,之前的基于关键点的算法可能会失效,但是如果是关键曲线的检测,则依然有机会进行匹配。
需要说明的是,由于关键线可以看作是多个连续关键点的组成,因此有关关键线的姿态识别的网络模型种类,模型训练方法和样本生成方法等的相关描述参见关键点中的介绍,在此不再赘述。
在一个实施例中,如图3所示,当姿态识别结果为图像数据中目标物关联的特征信息的识别结果,步骤S103输出识别结果之后还包括:
步骤S106获取识别结果;
步骤S107根据识别结果,确定目标物的姿态识别结果。
具体的,步骤S107,可以在获得了两个图像上分别识别的关键点之后,使用某些算法,生成目标物的姿态识别结果。
进一步,在一个实施例,步骤S107可以包括如下方法:
步骤S1073获取包括3d关键点信息的3D模型;
步骤S1074分别获取图像数据中的目标物关联的2d关键点信息;
步骤S1075根据3d关键点信息和对应2d关键点信息,基于线性变换的方法,生成目标物的姿态识别结果。
具体的,可以将基于图像数据获得的关键点和3D模型上对应的关键点基于直接线性变换法,获得目标物在图像传感器坐标系下的姿态识别结果;
其中,直接线性变换法为根据物体3D模型上的3d关键点信息到2d关键点信息的投影关系,我们可以列出一个方程组。通过求解这个方程组,我们就可以获得目标物的三维姿态识别结果。
直接线性变换法最大的缺点在于通过它求解所得的旋转矩阵是一个一般矩阵,而真正的旋转矩阵是一个单位正交矩阵,所以直接线性变换法往往得到一个近似解,精度可能不是很高。
因此,在一个实施例中,在获得步骤S1075生成的目标物的姿态识别结果之后,还可以包括如下方法步骤:
步骤S1076优化目标物的姿态识别结果,得到优化识别结果。
具体的,可以采用非线性优化法进行优化。在一个实施例中,该优化方法S1074包括如下方法步骤:
步骤S601获取目标物的姿态识别结果;
步骤S602根据目标物的姿态识别结果,计算出3D模型上的3d关键点在图像数据中的投影;
步骤S603将所述投影与图像数据中的关键点的位置进行比较,得到重投影误差;
步骤S604以最小化重投影误差为目标,更新目标物的姿态识别结果,得到当前更新结果;
在一个实施例中,可以利用非线性优化算法,最小化重投影误差为目标,对问题进行求解。其中,非线性优化算法包括但不限于,牛顿法,高斯牛顿法,列文伯格-马夸尔特法。
步骤S605以当前更新结果代替目标物的姿态识别结果,重复S602-S604的步骤直到重投影误差小于某个预设的阈值或更新达到某预设次数,从而得到优化后的目标物的姿态识别结果。
具体的,如图4所示,当目标物关联的特征信息的识别结果为预测图时,上述步骤S107进一步可以包括如下方法步骤:
步骤S1071根据预测图,确定关键点;
步骤S1072根据关键点,确定目标物的姿态识别结果。
具体的,可以参照上面实施例提到的步骤S1073-步骤S1075或步骤S1073-步骤S1076根据关键点计算目标物的姿态识别结果的方法确定目标物的姿态识别结果。
在一个实施例中,该姿态识别结果为目标物的第一部分姿态识别结果与预处理识别结果的结合。即对于目标物的三维姿态信息中的平移位置和旋转姿态信息可以分开来获取。
进一步,在一个实施例中,根据上面实施例所述,如图5所示,步骤S103输出识别结果之后还可以包括如下方法步骤:
步骤S108获取预处理识别结果;
比如:通过模型直接输出旋转姿态信息,以及平移位置信息的预处理识别结果,再针对平移位置信息的预处理识别结果进行进一步处理,从而得到平移位置信息;或者通过模型直接输出平移位置信息,以及旋转姿态信息的预处理识别结果。
步骤S109根据预处理识别结果,确定目标物的第二部分姿态识别结果;
步骤S110以第一部分姿态识别结果和第二部分姿态识别结果,作为目标物的姿态识别结果。最终以旋转姿态信息和平移位置信息,作为目标物整体的姿态识别结果。
在一个实施例中,模型可以直接输出旋转姿态信息;而平移位置信息可以通过模型输出的预处理识别结果确定,比如:当模型输出为预测图时,可以通过预测图中的投票的方法获得目标物的参考点(比如:中心点)的位置信息;或者,当模型的输出为包围目标物的3d包围框,通过计算包围框的参考点(比如中心点)结合图像数据相对于图形传感器光心的深度信息(该深度信息可以通过模型直接输出,也可以通过某些图像处理的方法直接得到),结合成像原理来确定目标物的位置信息。
该网络模型可以包括但不限于卷积神经网络(CNN),常见的CNN模型可以包括但不限于:LeNet,AlexNet,ZFNet,VGG,GoogLeNet,Residual Net,DenseNet,R-CNN,SPP-NET,Fast-RCNN,Faster-RCNN,FCN,Mask-RCNN,YOLO,YOLOv2,YOLOv3,SSD,Deep-6dPose,PoseCNN以及其他现在已知或将来开发的网络模型结构。
具体的,训练方法可以采用监督学习、半监督学习或无监督学习等等现在已有或者将来开发的训练方法。
以监督学习为例,可以将目标物的训练样本集作为模型的输入,将预处理识别结果以及第一部分姿态识别结果作为训练样本集的标注,对初始模型进行训练,从而得到姿态识别模型。
进一步,在一个实施例中,该识别结果可以为目标物的姿态分类结果。具体的,在一个实施例中,该姿态分类结果可以为目标物的视角类别,将图像数据输入训练好的姿态识别模型,输出目标物的视角类别,根据通过查找视角类别-姿态表格,可以获得目标物对应的旋转姿态的范围数据。
具体的,目标物的姿态分类结果的目的是获得一个物体相对于相机的姿态,想象一个以物体为中心,半径任意的球面,把相机放在这个球面上移动,并对物体拍照,物体的姿态即与图像传感器在球面上的位置有关。
把这个球面离散化,如图21所示。图中每一个点都是一个视角,每一个视角都对应了一个姿态。通过这样的离散化,因此把原本连续的姿态估计问题转换为一个分类问题,即我们只需要估计出物体的姿态属于哪一个视角即可。
采用这种方法的识别的精度取决于离散化程度,球面被分割得越精细,精度越高。
具体的,有关模型的训练方法,参见图10所示的实施例中的姿态识别训练方法的步骤,在此不再赘述。
具体的,该姿态识别模型可以包括但不限于卷积神经网络(CNN),常见的CNN模型可以包括但不限于:LeNet,AlexNet,ZFNet,VGG,GoogLeNet,Residual Net,DenseNet,SSD-6D以及其他现在已知或将来开发的网络模型结构。
具体的,训练方法可以采用监督学习、半监督学习或无监督学习等等现在已有或者将来开发的训练方法。以监督学习为例,可以将上述目标物各个视角采集的图像作为训练样本集,将每个样本对应的视角类别ID以及表示物体在图像中位置的包围框作为标注,对模型进行训练。
进一步,在一个实施例中,如图7所示,提供一种训练样本集生成方法:
步骤S201建立多个视角类别和目标物的姿态的对应关系;
将姿态空间离散化,等分为N个视角,对每一个视角,计算出其所对应的物体姿态,并建立一个视角类别-姿态识别结果一一对应的表格。
步骤S202获取每个视角对应的图像数据集,并记录所述图像数据集、视角类别和姿态的对应关系,生成图像数据集的标注;
具体的,可以在每一个视角上对物体拍照采集真实样本图像数据,或者用CAD进行渲染生成虚拟样本图像数据,记录照片-视角-姿态的对应关系。
步骤S203将图像数据集粘贴至背景图像中,生成更新图像数据集;
需要说明的是,当输入模型的目标物的图像数据包括目标物和复杂真实背景时,则需要执行S203的步骤,从而完成训练样本集的建立。
可以将上述单个物体的照片随机粘贴至背景照片中,另外,也可以一张背景照片中随机的粘贴多个不同物体。
步骤S204以更新图像数据集和所述标注作为所述训练样本集;
在另一个实施例中,当输入模型的目标物的图像数据只包括目标物或单一背景时,则该样本集的生成方法可以只包括:
步骤S201建立多个视角类别和目标物的姿态的对应关系;
步骤S202获取每个视角对应的图像数据集,并记录述图像数据集、视角类别和姿态的对应关系,生成图像数据集的标注;
步骤S204以图像数据集和标注作为训练样本集。
在一个实施例中,如图6所示,根据上面实施例所述,当模型输出的识别结果为目标物的姿态识别结果时,步骤S103之后还可以包括步骤S111优化目标物的姿态识别结果,得到优化姿态结果;在一个实施例中,步骤S107确定目标物的姿态识别结果之后,还可以包括步骤S111优化目标物的姿态结果,得到优化姿态结果(省略附图);在一个实施例中,步骤S110得到目标物的姿态识别结果之后,还可以包括步骤S111优化目标物的姿态结果,得到优化姿态结果(省略附图)。
在一个实施例中,该步骤S111可以包括如下方法步骤:
步骤S601获取目标物的姿态识别结果;
步骤S602根据目标物的姿态识别结果,计算出3D模型上的3d关键点在图像数据中的投影;
步骤S603将所述投影与图像数据中的关键点的位置进行比较,得到重投影误差;
步骤S604以最小化重投影误差为目标,更新目标物的姿态识别结果,得到当前更新结果;
在一个实施例中,可以利用非线性优化算法,最小化重投影误差为目标,对问题进行求解。其中,非线性优化算法包括但不限于,牛顿法,高斯牛顿法,列文伯格-马夸尔特法。
步骤S605以当前更新结果代替目标物的姿态识别结果,重复S602-S604的步骤直到重投影误差小于某个预设的阈值或更新达到某预设次数,从而得到优化后的目标物的姿态识别结果。
在一个实施例中,根据上面实施例所述,所述姿态识别方法还包括:
步骤S112将上面实施例所述的识别结果发送给展示器;或
步骤S113将上面实施例所述的目标物的姿态识别结果发送给展示器;或
步骤S111将上面实施例所述的优化姿态结果发送给展示器。
应该理解的是,虽然图1-10的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,图1-10中的至少一部分步骤可以包括多个子步骤或者多个阶段,这些子步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些子步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤的子步骤或者阶段的至少一部分轮流或者交替地执行。
在一个实施例中,如图11所示,提供一种姿态识别装置,该姿态识别装置包括:
目标图像获取模块101,用于获取目标物的图像数据;其中,目标物的部分被遮挡;
识别模型获取模块102,用于获取姿态识别模型;
识别结果输出模块103,用于将图像数据输入姿态识别模型中,输出识别结果。
在一个实施例中,姿态识别结果为所述目标物的姿态识别结果。
在一个实施例中,姿态识别结果为图像数据中目标物关联的特征信息的识别结果;进一步,在一个实施例中,如图13所示,姿态识别装置还包括:
识别结果获取模块106,用于获取识别结果;
目标结果确定模块107,用于根据识别结果,确定目标物的姿态识别结果。
进一步,在一个实施例中,如图14所示,当识别结果为预测图,该目标结果确定模块107可以包括:
关键点确定单元1071,用于根据预测图,确定关键点;
目标结果确定单元1072,用于根据关键点,确定目标物的姿态识别结果。
在一个实施例中,所述姿态识别结果为所述目标物的第一部分姿态识别结果和预处理识别结果;进一步,在一个实施例中,如图15所示,姿态识别装置还包括:
预处理结果获取模块108,用于辅助获取所述预处理识别结果;
识别结果确定模块109,用于根据预处理识别结果,确定目标物的第二部分姿态识别结果;
目标结果得到模块110,用于结合所述第一部分姿态识别结果和所述第二部分姿态识别结果,得到所述目标物的姿态识别结果。
在一个实施例中,如图16所示,当模型输出的姿态识别结果为目标物的姿态识别结果时,该姿态识别装置还包括:目标结果优化模块111,用于优化所述目标物的姿态识别结果,得到优化结果;另外,在一个实施例中,当姿态识别装置包括目标结果确定模块107,则该装置还可以包括目标结果优化模块111(省略附图),用于优化所述目标物的姿态识别结果,得到优化结果;另外,在一个实施例中,当姿态识别装置包括目标结果得到模块110则该装置还可以包括目标结果优化模块111(省略附图),用于优化所述目标物的姿态识别结果,得到优化结果。
在一个实施例中,如图12所示,所述图像数据只包括目标物;所述姿态识别装置还包括:
初始图像获取模块104,用于获取初始图像数据;其中初始图像数据包括目标物和复杂背景;
目标图像生成模块105,用于提取初始图像数据中的目标物,生成只包括目标物或背景单一的目标物的图像数据。
在一个实施例中,姿态识别装置还包括:
展示模块112(省略附图),用于将上面实施例所述的识别结果发送给展示器;或
将上面实施例所述的目标物的姿态识别结果发送给展示器;或
将上面实施例所述的优化姿态结果发送给展示器。
在一个实施例中,如图17所示,提供一种姿态识别训练装置,所述姿态识别训练装置包括:
训练样本获取模块201,用于获取训练样本集;
初始模型获取模块202,用于获取姿态识别模型的初始模型
模型训练模块203,用于基于所述训练样本集,对所述初始模型进行训练,得到所述姿态识别模型;其中,所述姿态识别模型,用于对输入的目标物的图像数据,输出识别结果。
关于上述各个姿态识别装置、姿态识别训练装置的具体限定可以参见上文中对于姿态识别方法、姿态识别训练方法的限定,在此不再赘述。上述各个姿态识别装置、姿态识别训练装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。
在一个实施例中,如图18所示,提供一种姿态识别系统,该系统包括姿态识别控制装置400和图像传感器500。
图像传感器500,用于采集包括目标物和复杂背景的初始图像数据;其中,初始图像数据作为目标物的图像数据;目标物的部分被遮挡;
控制装置400,用于获取目标物的图像数据;获取姿态识别模型;将图像数据输入姿态识别模型中,输出识别结果;或
在另一个实施例中,图像传感器500,用于采集包括目标物和复杂背景的初始图像数据;其中,目标物的部分被遮挡;
控制装置400,用于获取初始图像数据:提取初始图像数据中的目标物,得到目标物的图像数据;获取目标物的图像数据;获取姿态识别模型;将图像数据输入姿态识别模型中,输出识别结果。
有关控制装置的其它相关描述参见上面的实施例,在此不再重复赘述。
在一个实施例中,姿态识别系统还可以包括展示器(省略附图)。
控制装置400,还用于将识别结果、目标物的姿态识别结果或优化姿态结果,发送给展示器;
展示器600,用于对识别结果、目标物的姿态识别结果或优化姿态结进行展示。
控制装置400可以为可编程逻辑控制器(Programmable Logic Controller,PLC)、现场可编程门阵列(Field-Programmable Gate Array,FPGA)、计算机(PersonalComputer,PC)、工业控制计算机(Industrial Personal Computer,IPC)或服务器等等。控制装置根据预先固定的程序,结合人工输入的信息、参数或者外部的第一传感器和/或第二传感器(比如图像传感器)采集的数据等生成程序指令。
关于上述各个控制装置的具体限定可以参见上文中对于姿态识别方法、模型训练方法和样本生成方法的限定,在此不再赘述。
在一个实施例中,如图20所示,提供一种计算机设备,包括存储器和处理器,存储器存储有计算机程序,处理器执行计算机程序时实现上述姿态识别方法,和/或姿态识别训练方法的步骤。
在一个实施例中,提供一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现上述姿态识别方法,和/或姿态识别训练方法的步骤。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和/或易失性存储器。非易失性存储器可包括只读存储器(ROM)、可编程ROM(PROM)、电可编程ROM(EPROM)、电可擦除可编程ROM(EEPROM)或闪存。易失性存储器可包括随机存取存储器(RAM)或者外部高速缓冲存储器。作为说明而非局限,RAM以多种形式可得,诸如静态RAM(SRAM)、动态RAM(DRAM)、同步DRAM(SDRAM)、双数据率SDRAM(DDRSDRAM)、增强型SDRAM(ESDRAM)、同步链路(Synchlink)DRAM(SLDRAM)、存储器总线(Rambus)直接RAM(RDRAM)、直接存储器总线动态RAM(DRDRAM)、以及存储器总线动态RAM(RDRAM)等。
需要说明的是,上述各个控制装置和/或传感器,即可以是真实环境下的真实控制装置和传感器,也可以是仿真平台下的虚拟控制装置和/或传感器,通过仿真环境以达到连接真实控制装置和/或传感器的效果。将依赖虚拟环境完成行为训练后的控制装置,移植到真实环境下,对真实的控制装置和/或传感器进行控制或者再训练,可以节省训练过程的资源和时间。
以上所述实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述或记载的部分,可以参见其它实施例的相关描述。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
除非另有定义,本说明书所使用的所有的技术和科学术语与属于本发明的技术领域的技术人员通常理解的含义相同。本说明书中在本发明的说明书中所使用的属于只是为了描述具体的实施方式的目的,不是用于限制本发明。
本发明的权利要求书和说明书及上述附图中的术语“第一”、“第二”、“第三”、“S110”、“S120”“S130”等等(如果存在)是用来区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的实施例能够以除了在这里图示或描述的内容以外的顺序实施。此外,术语“包括”“具有”以及他们的任何变形,意图在于覆盖不排他的包含。例如:包括了一系列步骤或者模块的过程、方法、系统、产品或机器人不必限于清楚地列出的那些步骤或者模块,而是包括没有清楚地列出的或对于这些过程、方法、系统、产品或机器人固有的其它步骤或模块。
需要说明的是,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的结构和模块并不一定是本发明所必须的。
以上所述实施例仅表达了本发明的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。因此,本发明专利的保护范围应以所附权利要求为准。