基于层次三元组损失函数的深度度量学习方法及其装置
技术领域
本发明涉及图像识别技术领域,更具体地说,涉及一种基于层次三元组损失函数的深度度量学习方法及其装置。
背景技术
在统计学,统计决策理论和经济学中,损失函数是指一种将一个事件(在一个样本空间中的一个元素)映射到一个表达与其事件相关的经济成本或机会成本的实数上的一种函数。更通俗地说,在统计学中损失函数是一种衡量损失和错误(这种损失与“错误地”估计有关,如费用或者设备的损失)程度的函数。在深度卷积神经网络训练中,一般采用三元组损失的方法,去掉卷积神经网络最终的分类层,直接利用三元组损失函数归一化的特征编码。
现有的应用于卷积神经网络学习的三元组损失函数的深度学习方法,在应用于图像搜索任务和人脸识别任务的过程中,存在样本过于随机,导致速度慢、效率低、准确性差的缺点。
发明内容
有鉴于此,本发明提供一种基于层次三元组损失函数的深度度量学习方法及其装置以解决现有技术的不足。
为解决上述问题,本发明提供一种基于层次三元组损失函数的深度度量学习方法,包括:
基于三元组损失函数得到任意两类之间的类间距离,构建层次类别树;
基于所述层次类别树,通过所述类间距离,对三元组损失函数进行层次化,得到层次三元组损失函数;
基于所述层次三元组损失函数对神经网络进行训练,提取得到目标图像抽取特征,并根据所述目标图像抽取特征进行图像搜索,以便于得到目标搜索图像。
优选地,所述“基于三元组损失函数得到任意两类之间的类间距离,构建层次类别树”包括:
利用标准的三元组损失函数训练得到三元组神经网络模型;
根据所述三元组神经网络模型,得到数据层次化结构;
通过所述数据层次化结构进行计算,得到任意两类之间的类间距离,并通过所述类间距离构建层次类别树。
优选地,所述“通过所述数据层次化结构进行计算,得到任意两类之间的类间距离”包括:
定义任意两个类别,即为第p个和第q个类别,其间的类间距离通过如下公式计算:
其中,该公式表征了第p个和第q个类别之间的平均距离,即为类间距离;
优选地,所述类间距离的取值范围为0-4。
优选地,所述层次类别树包括多个层级;其中,平均类内距离作为第0层级的合并阈值;所述层次类别树还包括多个叶子节点;每个所述叶子节点为对应层级的图像类别;
所述“并通过所述类间距离构建层次类别树”,包括:
根据所述类间距离对所述叶子节点进行合并;其中,叶子节点的合并的通过设置所述合并阈值进行合并,构建所述层次类别树;
所述合并阈值,被设定为如下公式:
其中,d
l为任意两进行合并的阈值,在所述层次类别树中,如果第l层级中任意两类的距离小于d
l,即将该两类进行合并。其中d
0为类内的平均距离,
优选地,所述“基于所述层次类别树,通过所述类间距离,对三元组损失函数进行层次化,得到层次三元组损失函数”包括:
提取所述层次类别树中第0层级的叶子节点作为目标叶子节点;
基于所述类间距离,对所述目标叶子节点选择与其对应的近邻类别作为锚点类别;
在每个所述锚点类别中随机提取图片,组成训练图片;
搜索所述训练图片组成的三元组对应的动态损失边界,构成与所述动态损失边界对应的所述层次三元组损失函数。
优选地,所述“搜索所述训练图片组成的三元组对应的动态损失边界,构成所述层次三元组损失函数”包括:
对于每一个所述训练图片组成的三元组,通过所述层次类别树计算所述锚点类别和负样本类别之间的类别关系,得到所述动态损失边界,成与所述动态损失边界对应的所述层次三元组损失函数。
此外,为解决上述问题,本发明还提供一种基于层次三元组损失函数的深度度量学习装置,包括:构建模块、层次模块和训练模块;
所述构建模块,用于基于三元组损失函数得到任意两类之间的类间距离,构建层次类别树;
所述层次模块,用于基于所述层次类别树,通过所述类间距离,对三元组损失函数进行层次化,得到层次三元组损失函数;
所述训练模块,用于基于所述层次三元组损失函数对神经网络进行训练,提取得到目标图像抽取特征,并根据所述目标图像抽取特征进行图像搜索,以便于得到目标搜索图像。
此外,为解决上述问题,本发明还提供一种用户终端,包括存储器以及处理器,所述存储器用于存储基于层次三元组损失函数的深度度量学习程序,所述处理器运行所述基于层次三元组损失函数的深度度量学习程序以使所述用户终端执行如上述所述基于层次三元组损失函数的深度度量学习方法。
此外,为解决上述问题,本发明还提供一种计算机可读存储介质,所述计算机可读存储介质上存储有基于层次三元组损失函数的深度度量学习程序,所述基于层次三元组损失函数的深度度量学习程序被处理器执行时实现如上述所述基于层次三元组损失函数的深度度量学习方法。
本发明提供的一种基于层次三元组损失函数的深度度量学习方法及其装置。其中,本发明所提供的方法包括:基于三元组损失函数得到任意两类之间的类间距离,构建层次类别树;基于所述层次类别树,通过所述类间距离,对三元组损失函数进行层次化,得到层次三元组损失函数;基于所述层次三元组损失函数对神经网络进行训练,提取得到目标图像抽取特征,并根据所述目标图像抽取特征进行图像搜索,以便于得到目标搜索图像。本发明通过预先构建层次类别树,并基于层次类别树得到层次三元组损失函数,进而通过该层次三元组损失函数对进行对神经网络训练,已提取特征并进行图像搜索,克服了现有的三元组损失函数算法中的样本过于随机的缺点,进行学习、搜索和识别任务的速度快、效率高,并且大大提高了准确度。
附图说明
图1为本发明基于层次三元组损失函数的深度度量学习方法实施例方案涉及的硬件运行环境的结构示意图;
图2为本发明基于层次三元组损失函数的深度度量学习方法第一实施例的流程示意图;
图3为本发明基于层次三元组损失函数的深度度量学习方法第二实施例的流程示意图;
图4为本发明基于层次三元组损失函数的深度度量学习方法第二实施例的步骤S130的细化流程示意图;
图5为本发明基于层次三元组损失函数的深度度量学习方法第三实施例的流程示意图;
图6为本发明基于层次三元组损失函数的深度度量学习方法第三实施例种的步骤S240细化的流程示意图;
图7为本发明基于层次三元组损失函数的深度度量学习装置的功能模块示意图。
本发明目的的实现、功能特点及优点将结合实施例,参照附图做进一步说明。
具体实施方式
下面详细描述本发明的实施例,其中自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。
此外,术语“第一”、“第二”仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括一个或者更多个该特征。在本发明的描述中,“多个”的含义是两个或两个以上,除非另有明确具体的限定。
在本发明中,除非另有明确的规定和限定,术语“安装”、“相连”、“连接”、“固定”等术语应做广义理解,例如,可以是固定连接,也可以是可拆卸连接,或成一体;可以是机械连接,也可以是电连接;可以是直接相连,也可以通过中间媒介间接相连,可以是两个元件内部的连通或两个元件的相互作用关系。对于本领域的普通技术人员而言,可以根据具体情况理解上述术语在本发明中的具体含义。
应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
如图1所示,图1是本发明实施例方案涉及的终端的硬件运行环境的结构示意图。
本发明实施例终端可以是的PC,也可以是智能手机、平板电脑、便携计算机等具有一定运算能力的可移动式终端设备。
如图1所示,该终端可以包括:处理器1001,例如CPU,网络接口1004,用户接口1003,存储器1005,通信总线1002。其中,通信总线1002用于实现这些组件之间的连接通信。用户接口1003可以包括显示屏、输入单元比如键盘、遥控器,可选用户接口1003还可以包括标准的有线接口、无线接口。网络接口1004可选的可以包括标准的有线接口、无线接口(如WI-FI接口)。存储器1005可以是高速RAM存储器,也可以是稳定的存储器,例如磁盘存储器。存储器1005可选的还可以是独立于前述处理器1001的存储装置。可选地,终端还可以包括RF(Radio Frequency,射频)电路、音频电路、WiFi模块等等。此外,移动终端还可配置陀螺仪、气压计、湿度计、温度计、红外线传感器等其他传感器,在此不再赘述。
本领域技术人员可以理解,图1中示出的终端并不构成对终端的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。
如图1所示,作为一种计算机可读存储介质的存储器1005中可以包括操作系统、数据接口控制程序、网络连接程序以及基于层次三元组损失函数的深度度量学习程序。
此外,本发明所提供的基于层次三元组损失函数的深度度量学习方法的运行环境,也可以为如下环境:
应用深度学习软件Caffe,并且运行在NVIDIA TITAN X GPU上;GPU显存为12GB;使用的深度神经网络结构为GoogleNet V2;该神经网络首先被用在ImageNet训练集上进行预训练。
本发明提供的一种基于层次三元组损失函数的深度度量学习方法及其装置。其中,所述方法通过预先构建层次类别树,并基于层次类别树得到层次三元组损失函数,进而通过该层次三元组损失函数对进行对神经网络训练,已提取特征并进行图像搜索,克服了现有的三元组损失函数算法中的样本过于随机的缺点,进行学习、搜索和识别任务的速度快、效率高,并且大大提高了准确度。
实施例1:
参照图2,本发明第一实施例提供一种基于层次三元组损失函数的深度度量学习方法,包括:
步骤S100,基于三元组损失函数得到任意两类之间的类间距离,构建层次类别树;
上述,本发明中,所提供的基于层次三元组损失函数的深度度量学习方法,应用于进行图像搜索任务或者人脸识别任务的深度学习。该算法,可以通过预先定义的层次树来将全局上下文信息进行编码,并收集代表性的训练样本(三元组),从而克服了三元组损失函数的主要缺陷,即训练样本的选择过于随机。
上述,三元组损失函数,即为标准的三元组损失函数。其中,损失函数,是指一种将一个事件(在一个样本空间中的一个元素)映射到一个表达与其事件相关的经济成本或机会成本的实数上的一种函数。
上述,进行深度学习的对应的库,可以为图片库,在本实施例中,图片库中可以包含有不同的类别集合,每个类别中包含有不同的图片。
上述,通过三元组损失函数,进行对所有类别数据进行层次化,进而得到每两个类之间的距离,即为类间距离,进而构建层次类别树。
步骤S200,基于所述层次类别树,通过所述类间距离,对三元组损失函数进行层次化,得到层次三元组损失函数;
上述,根据类间距离,在层次类别树中对三元组损失函数进行层次化,进而得到层次三元组损失函数,该损失函数可用于进一步的对于神经网络的训练。
步骤S300,基于所述层次三元组损失函数对神经网络进行训练,提取得到目标图像抽取特征,并根据所述目标图像抽取特征进行图像搜索,以便于得到目标搜索图像。
通过利用层次三元组损失函数对神经网络进行训练,从而得到图像库中的图像的目标图像抽取特征,进而可进行根据该特征的图像搜索,以便于得到目标搜索图像。
具体的,在得到目标图像抽取特征后,将目标图像抽取特征与图像库中的图像的图像特征进行比较,得到图像库中的图像对应的相似度值,进而依照相似度值,对图像库中所有图片进行排序,从而根据排序情况找出图像搜索任务或图像识别任务中的需要查找的目标结果,即目标搜索图像。
本实施例中通过预先构建层次类别树,并基于层次类别树得到层次三元组损失函数,进而通过该层次三元组损失函数对进行对神经网络训练,已提取特征并进行图像搜索,克服了现有的三元组损失函数算法中的样本过于随机的缺点,进行学习、搜索和识别任务的速度快、效率高,并且大大提高了准确度。
实施例2:
参照图3-4,本发明第二实施例提供一种基于层次三元组损失函数的深度度量学习方法,基于上述图2所示的第一实施例,所述步骤S100,“基于三元组损失函数得到任意两类之间的类间距离,构建层次类别树”包括:
步骤S110,利用标准的三元组损失函数训练得到三元组神经网络模型;
步骤S120,根据所述三元组神经网络模型,得到数据层次化结构;
上述,在本实施例中,构建一个在类别层面的全局化的层次结构;给定一个预先用标准的三元组损失函数训练好的神经网络模型
然后通过该神经网络模型(特定的规则,即指任意两个类别通过设定的阈值不断地递归地合并的规则)得到数据的层次化结构。
步骤S130,通过所述数据层次化结构进行计算,得到任意两类之间的类间距离,并通过所述类间距离构建层次类别树。
所述步骤S130,“通过所述数据层次化结构进行计算,得到任意两类之间的类间距离”包括:
步骤S131,定义任意两个类别,即为第p个和第q个类别,其间的类间距离通过如下公式计算:
,该公式表征了第p个和第q个类别的平均距离,即为类间距离;
进一步的,所述类间距离的取值范围为0-4。
上述,定义,第p个类别和第q个类别,其间的距离,通过上述公式计算;其中,该公式表征了p类和q类样本之前的训练样本的平均距离。因为深度特征(深度神经网络的特征,即为深度特征,在本实施例中为所述目标图像抽取特征)已经被归一化到单位长度,任意两类之间的距离聚类的取值范围是0-4。通过前述步骤得到的类间距离从而构成层次类别树。
所述层次类别树包括多个层级;其中,平均类内距离作为第0层级(层次类别树的初始层级为0)的合并阈值;所述层次类别树还包括多个叶子节点;每个所述叶子节点为对应层级的图像类别;
所述步骤S130,“并通过所述类间距离构建层次类别树”,还包括:
步骤S132,根据所述类间距离对所述叶子节点进行合并;其中,叶子节点的合并的通过设置所述合并阈值进行合并,构建所述层次类别树;
所述合并阈值,被设定为如下公式:
其中,d
l为任意两类的距离,在所述层次类别树中,如果第l层级中任意两类的距离小于d
l,即将该两类进行合并。
上述,层次类别树中包括多个叶子节点,每个叶子节点为对应的最初的图像类别,其中,每个图像类别代表了第0层级的一个叶子节点;进而将所有叶子节点,利用前述步骤得到的类间距离,不断进行递归合并,从而构建层次类别树。
上述,层次类别树可分为L层级,并且,平均类内距离为d0被用作在0层级进行合并的合并阈值。具体的,通过公式:
计算类内的平均距离,用以计算递归合并的公式内计算合并阈值;
进而,这些叶子节点不断通过合并阈值进行合并,其中,在层次类别树中的第l层级,合并阈值设定为
其中,如果任意两个类的距离小于d
l,则这两个类将进一步被合并。
l层的节点数目为Nl。节点从第0级到第L级被不断的合并。最终,构建生成了层次类别树。这颗构建的层次类别树获取了整个数据集中不同物体类别之间的关系,并且在适当的迭代次数之后被更新。
本实施例中,通过数据层次化结构进行计算,得到任意两类之间的类间距离,并通过类间距离构建层次类别树。其中,构建层次树可以提供训练数据的全局分布,引导训练样本的选择和训练规则,大幅提升收敛速度和精度
实施例4:
参照图5-6,本发明第四实施例提供一种基于层次三元组损失函数的深度度量学习方法,基于上述图4所示的第三实施例,所述步骤S200,“基于所述层次类别树,通过所述类间距离,对三元组损失函数进行层次化,得到层次三元组损失函数”包括:
步骤S210,提取所述层次类别树中第0层级的叶子节点作为目标叶子节点;
在本实施例中,通过将三元组函数的搜集,转换为层次三元组损失函数。需进行锚点-近邻采样,在构建层次数的第0层级随机选取l′个目标叶子节点。其中,每个目标叶子节点代表了一个初始的类别。在层次类别树的第0级选取,是为了保持每个小批次中图像的多样性,这样的话批量归一化将会更加的稳定和准确。
步骤S220,基于所述类间距离,对所述目标叶子节点选择与其对应的近邻类别作为锚点类别;
上述,基于类间距离,对前述步骤中被选择的锚点类别,再选择m-1个最近的近邻类别,这样就可以保证相似的类别也被放在同一个小批次中,以此来增强神经网络的判别能力。
步骤S230,在每个所述锚点类别中随机提取图片,组成训练图片;
上述,对于每个锚点类别,随机选取其中的t张图片,最终形成n=l′mt张训练图片。
步骤S240,搜索所述训练图片组成的三元组对应的动态损失边界,构成与所述动态损失边界对应的所述层次三元组损失函数。
进一步的,所述步骤S240,“搜索所述训练图片组成的三元组对应的动态损失边界,构成所述层次三元组损失函数”包括:
步骤S241,对于每一个所述训练图片组成的三元组,通过所述层次类别树计算所述锚点类别和负样本类别之间的类别关系,得到所述动态损失边界,成与所述动态损失边界对应的所述层次三元组损失函数。
上述,本实施例中,引入一种动态损失边界,该动态损失边界是本算法与现有的固定边界算法的区别。
其中,作为三元组产生于的动态损失边界中,层次三元组损失函数可以为如下形式
其中,公式中a
z是动态损失边界,与现有的传统三元组损失函数中的固定损失边界具有实质上的区别。其为通过在构建的层次类别树上计算锚点类别y
a和负样本类别y
n之间的类别关系来得到的。尤其的,对于一个三元组T
z,损失边界a
z计算方式如下,
这里β(=0.1)是一种固定参数来鼓励图像类别在当前迭代中比上一次迭代分离得更加明显。
是这颗树的层级高度值。
是用来合并两个类别的合并阈值。而公式:
则是第ya类样本内的平均距离。在本实施例中的层次三元组损失函数中,从距离上考虑,为一个样本被鼓励去推开附近不同类别的样本,而拉近不同类别的样本。
在本实施例中,通过锚点近邻采样后,得到训练图片,进而对训练图片的三元组进行动态损失边界的获取,从而得到每个三元组对应的层次三元组损失函数,通过本实施例中的动态损失边界的算法,从而使得到的层次三元组损失函数更加准确,计算效率更高。
此外,参考图7,本发明还提供一种基于层次三元组损失函数的深度度量学习装置,包括:构建模块10、层次模块20和训练模块30;
所述构建模块10,用于基于三元组损失函数得到任意两类之间的类间距离,构建层次类别树;
所述层次模块20,用于基于所述层次类别树,通过所述类间距离,对三元组损失函数进行层次化,得到层次三元组损失函数;
所述训练模块30,用于基于所述层次三元组损失函数对神经网络进行训练,提取得到目标图像抽取特征,并根据所述目标图像抽取特征进行图像搜索,以便于得到目标搜索图像。
此外,本发明还提供一种用户终端,包括存储器以及处理器,所述存储器用于存储基于层次三元组损失函数的深度度量学习程序,所述处理器运行所述基于层次三元组损失函数的深度度量学习程序以使所述用户终端执行如上述所述基于层次三元组损失函数的深度度量学习方法。
此外,本发明还提供一种计算机可读存储介质,所述计算机可读存储介质上存储有基于层次三元组损失函数的深度度量学习程序,所述基于层次三元组损失函数的深度度量学习程序被处理器执行时实现如上述所述基于层次三元组损失函数的深度度量学习方法。
横向比较测试实验:
基于本发明中所提供的基于层次三元组损失函数的深度度量学习方法,利用服饰图像检索库和细粒度分类测试库进行横向比较测试试验。
实验对象:
1、作为比较的现有算法:FashionNet+Joints、FashionNet+Poselets、FashionNet、HDC、BIER、LiftedStruct、Binomial Deviance、FashionNet;
2、本发明所提供算法的基准算法:Ours Baseline(Semi Hard NegativeMining);
3、本发明所提供算法中部分算法-锚点近邻采样算法:A-N Sampling;
4、本发明中所提供的基于层次三元组损失函数的深度度量学习方法:HTL。
实验方法:
基于上述实验对象中所包含的作为比较的现有算法、基准算法、锚点紧邻采样算法和基于层次三元组损失函数的深度度量学习方法,通过不同的包含测试图像图片库的数据集进行搜索,进而通过比较目标图像的排名在所得到的搜索结果中是否靠前,使用召回率R@#(#代表制定的排名名次数字,即包含排名名次数字及其之前的数据,如R@10,代表排名前10的召回率;如R@30代表排名前30的召回率等)来衡量目标搜索图像在搜索结果中排名前1、10、20、30、40、和50(售卖服饰检索数据集的最新算法准确率比较),或者排名前1、2、4、8、16和32(在鸟类细分类数据集CUB-200-2011上的图像检索准确率比较)的准确率。
结果与讨论
1、参考下表1,对作为比较的现有算法、基准算法、锚点紧邻采样算法和基于层次三元组损失函数的深度度量学习方法,进行基于售卖服饰检索数据集的最新算法结果的准确率比较;其中,表格中的R@列,为不同参比的算法;行,为搜索结果中的目标图像排名在搜索结果的名次。
其中,HTL比作为比较的现有算法性能在Recall@1上高出18.6%。这证明了三元组损失函数可以极大地提升深度特征的判别能力。不同于当前的最新算法HDL和BIER通过特征集成来提升性能,HTL通过引入全局数据分布来提升性能。HTL在Recall@1指标上高出HDC达18.8%,并且比BIER高出4%。
2、参考下表2,对作为比较的现有算法、基准算法、锚点紧邻采样算法和基于层次三元组损失函数的深度度量学习方法,进行基于在鸟类细分类数据集CUB-200-2011上的图像检索结果准确率的比较;其中,表格中的R@列,为不同参比的算法;行,为搜索结果中的目标图像排名在搜索结果的名次。
其中,在Caltech-UCSD Birds 200-2011鸟类细分类数据集上,本文自行实现的Semi Hard Negative Mining三元组损失函数获得了当前最好的结果。如果采用HTL算法结果可以达到57.1%Recall@1,高出HDC达3.5%,高出BIER达1.8%。
综上,本发明所提供的基于层次三元组损失函数的深度度量学习方法(算法),克服了现有的三元组损失函数算法中的样本过于随机的缺点,进行学习、搜索和识别任务的速度快、效率高,并且大大提高了准确度。
表1、基于售卖服饰检索数据集的算法结果准确率比较
R@ |
1 |
10 |
20 |
30 |
40 |
50 |
FashionNet+Joints |
41.0 |
64.0 |
68.0 |
71.0 |
73.0 |
73.5 |
FashionNet+Poselets |
42.0 |
65.0 |
70.0 |
72.0 |
72.0 |
75.0 |
FashionNet |
53.0 |
73.0 |
76.0 |
77.0 |
79.0 |
80.0 |
HDC |
62.1 |
84.9 |
89.0 |
91.2 |
92.3 |
93.1 |
BIER |
76.9 |
92.8 |
95.2 |
96.2 |
96.7 |
97.1 |
Ours Baseline |
62.3 |
85.1 |
89.0 |
91.1 |
92.4 |
93.4 |
A-N Sampling |
75.3 |
91.8 |
94.3 |
96.2 |
96.7 |
97.5 |
HTL |
80.9 |
94.3 |
95.8 |
97.2 |
97.4 |
97.8 |
表2、基于鸟类细分类数据集(CUB-200-2011)的图像检索结果准确率比较
上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在如上所述的一个存储介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。
以上仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。