基于融合损失函数的行人重识别模型优化方法与流程

文档序号:18269217发布日期:2019-07-27 09:29阅读:1262来源:国知局
基于融合损失函数的行人重识别模型优化方法与流程

本发明涉及一种行人重识别方法,尤其涉及一种基于融合损失的行人重识别优化计算方法。



背景技术:

随着人工智能技术的迅猛发展和视频监控设备的日益普及,智能监控以其准确、及时和功能丰富而受到社会各界的广泛关注。目前行人重识别问题在机器视觉领域得到的广泛的关注,近几年来已经有很多的相关算法在该问题上得到了很好的实现,并且在识别精确度方面都获得了优秀的结果。随着未来安防系统性价比的不断提高和数字高清化、智能化等技术的发展,市场应用空间将不断增长。

我们可以将行人重识别问题看作是一种图片的单分类问题,即在众多图片数据中既快又好的找到搜索目标。近几年,主流的行人重识别算法大都是基于卷积神经网络的架构。这些算法由多层的卷积运算获得良好的行人特征来进行识别。但是我们在实践的过程中发现,行人图片的获取是源源不断的,一旦图片数据量过于庞大,例如mars数据集,就需要更深的网络架构来提取特征,但这样往往会出现梯度反向传播到前面的层,重复相乘使梯度无穷小,甚至是消失,导致训练集准确率下降。其次,现有的行人重识别模型只对行人进行有限个主要特征的训练提取,而对于更多细节特征点的提取还远远不足以满足现实行人图像识别精度的要求。再次,在实际训练过程中发现,如果仅仅使用交叉熵损失函数对现有的行人重识别模型进行优化,由于数据集数量比较庞大,相似的行人图片较多,单一地比较输出和期望的差距,虽然计算速度上比较快,但是在准确度上会有所欠缺。而且还会导致冗余参数多训练时间久,在诸如集群检索等问题时计算的开销就非常高,希望找到多个目标人物时,识别效果并不是很好,因为每次匹配都必须通过与每个图片库图像配对的网络,并不适合物联网端到端的识别。



技术实现要素:

发明目的:针对以上问题,本发明提出一种基于融合损失函数的行人重识别模型优化方法,能够提升行人重识别的识别率并加快运行速率。

技术方案:本发明所采用的技术方案是一种基于融合损失函数的行人重识别模型优化方法,包括以下步骤:

(1)利用神经网络训练得到行人重识别模型后,利用交叉熵损失函数计算模型中每个行人图像特征空间的损失;

(2)根据步骤1中计算得到的特征空间的损失值分布来设置损失阈值,并利用所设置的阈值构造三元组对象;

(3)利用三元组对象构造三重损失函数迭代优化,得到优化后的行人重识别模型。

其中,步骤(1)中所述的交叉熵损失函数为:

其中,p(x)、q(x)分别表示样本真实分布和预测分布,x表示随机样本。

进一步的,步骤(2)中所述的利用阈值构造三元组对象,包括以下过程:

(21)选取特征空间差距小于阈值下限和大于阈值上限的行人样本;

(22)从上一步的行人样本中抽取若干个样本,样本个数记为b,样本分别经过嵌入层(embedding)计算,得到b3个损失值;

(23)将损失值小于阈值下限的样本标记为正样本图片(positive),将损失值大于阈值上限的样本标记为负样本图片(negative),从训练数据集中随机选择一个样本标记为锚样本图片(anchor),正样本、负样本和锚样本图片构成三元组对象。

进一步的,步骤(3)包括以下过程:

(31)利用三元组对象构造三重损失函数为

其中代表正样本、负样本和锚样本图片,x代表模型中的样本,i是样本下标,n为样本总数,margin代表semi-hardtriplets和hardtriplets之间的距离,semi-hardtriplets代表三重损失值介于阈值上限和阈值下限之间的特征值,hardtriplets代表三重损失值大于阈值上限的特征值,+表示[]内的值大于零的时候,取该值为损失,小于零的时候,损失取为零;

(32)最小化该三重损失函数,即得到和正样本之间的距离最小,且和负样本之间的距离最大的模型样本,得到优化的行人重识别模型。

本发明还提出一种行人重识别方法,该方法中用来匹配目标行人图像的行人重识别模型是采用上述行人重识别模型优化方法进行优化后所得到的行人重识别模型。一般的,行人重识别方法包括以下步骤:(1)制作行人重识别数据集;(2)利用神经网络训练得到行人重识别模型;(3)通过多个摄像头从不同角度实时采集行人连续帧图像发送至服务器,并提取采集到的行人连续帧图像的图像特征;(4)将图像特征与步骤2中所得到的训练模型进行匹配,识别行人身份。本发明所述的行人重识别方法在步骤(2)后增加了模型优化步骤,即采用上述行人重识别模型优化方法对训练所得的模型进行优化。

有益效果:本发明融合交叉熵损失和三重损失函数对模型进行优化,既能够很好的表征真实样本标签和预测概率之间的差值,并以此来选取合适的正负样本进行考量,又能不断优化使真实样本与预测样本小于真实样本与负样本之间的距离,提升样本的相似性。这样减少了训练过程中的冗余参数,且实现了直接在输入图像和所需的嵌入空间之间执行端到端学习,快速地对目标识别进行优化。

附图说明

图1是本发明的流程图;

图2是本发明模型训练过程损失图;

图3是本发明模型准确率测试结果图。

具体实施方式

下面结合附图和实施例对本发明的技术方案作进一步的说明。

本发明所述的一种基于融合损失函数的行人重识别模型优化方法,如图1所示,包括以下步骤:

(1)利用神经网络训练得到行人重识别模型后,利用交叉熵损失函数计算模型中每个行人图像特征空间的损失。由于交叉熵损失函数为对数函数,在接近上边界的时候,其仍然可以保持在高梯度状态,因此模型的收敛速度不会受到影响。采用交叉熵损失函数可以非常快速地得到用于判定构造三元组对象的损失值,这比直接用三重损失函数构造三元组对象更加准确和快速。

实施例采用国际公认的行人重识别数据集market1501进行计算,深度学习框架为pytorch开源框架。当然也可以使用其他的数据集如cuhk03,dukemtmc和mars等。利用深度卷积神经网络训练得到行人重识别模型。现有的深度残差网络的输出矩阵是经过一个softmax层将单个节点回归处理为一个概率值,所有节点服从概率分布。我们假设x代表单个样本图片,概率分布p(x)为期望输出,概率分布q(x)为实际输出概率,则有:

其中dkl(p||q)代表随机分布p和q之间的距离,χ代表混合数据集的所有样本。

上式经过变换可以得到:

上式前半部分的-h(p)代表概率分布p(x)的熵,即为常量。后半部分的代表概率分布p(x)和q(x)的交叉熵,如果交叉熵越小,则两个样本就越接近。则交叉熵损失函数表示为:

但我们在实际训练过程中发现,如果仅仅使用交叉熵损失函数来训练模型,由于数据集数量比较庞大,相似的行人图片较多,单一地比较输出和期望的差距,虽然计算速度上比较快,但是在准确度上会有所欠缺。而且在实现集群检索问题时,即希望找到多个目标人物时,识别效果并不是很好,而且每次匹配都必须通过与每个图片库图像配对的网络,运算开销比较高,并不是特别适合物联网端到端的识别。所以我们就考虑对目标识别方法进行优化,在计算损失函数时引入三重损失函数三元组的思想,让深度残差网络的输出矩阵不再经过一个softmax层,因为softmax层输出的类别概率是确定的。我们希望利用损失函数学到一个好的embedding,所有相似的行人图像在embedding空间里是相近的。但是三元组的对象选取并不容易,因此先用交叉熵损失函数来帮助损失函数更快的选择一个合适的三元组,再用三重损失函数来训练模型。

(2)根据交叉熵损失设置损失阈值,并利用阈值构造三元组对象。

因为交叉熵是对每个数据集图像进行损失计算,得到输出和期望的差距,所以我们在得到交叉熵损失后,在代码当中设置与交叉熵损失值进行比较的全局变量——阈值,包括阈值上限和阈值下限,保留第一步计算后损失值小于阈值下限和大于阈值上限的行人样本,这样就可以解决三重损失函数不能够很好地选取三元组的问题。具体的,先计算交叉熵损失值,然后根据这些损失值对应的分布,选取可区分出positive和negetive元组的上下阈值。

接下来,利用上述阈值来构造三元组对象,具体包括以下过程:

(21)选取特征空间差距小于阈值下限和大于阈值上限的行人样本;

(22)从上一步的行人样本中抽取若干个样本,样本数记为b,并分别经过b个嵌入层(embeddings)的计算,得到b3个损失值(triplets);b为大于代码中所设置的全局变量batch的值,batch在机器学习代码中一般公认为最小样本数的意思,也是人为设置的一个变量,根据自己计算机的性能设置,batch值越大,一次性训练的样本数就越多,计算机所需要的性能就更高。在我们的模型中该参数设置60,具体值需要根据平台计算性能决定。

(23)将损失值小于阈值下限的样本标记为正样本图片(positive),将损失值大于阈值上限的样本标记为负样本图片(negative),从训练数据集中随机选择一个样本标记为锚样本图片(anchor),正样本、负样本和锚样本图片构成三元组对象。

(3)利用三元组对象构造三重损失函数迭代优化,得到优化后的行人重识别模型,包括以下过程:

(31)利用三元组对象构造三重损失函数。

我们分别用代表anchor,positive和negative样本,则三元损失函数可表示为:

其中margin代表semi-hardtriplets和hardtriplets之间的距离,x代表随机样本,i是样本下标,d代表两参数之间的距离。最终的优化目标是拉近a,p的距离,拉远a,n的距离,实现行人图像的分类,从而得到一个相似行人图像的embedding空间。将上式变形可以得到:

则对应的目标损失函数,即三重损失函数为:

这里距离用欧式距离度量,+表示[]内的值大于零的时候,取该值为损失,小于零的时候,损失为零。则当第i个triplet损失大于零的时候,仅就上述公式而言,有:

可以看到,对特征表达的梯度刚好利用了求损失时候的中间结果,如果在cnn中实现tripletloss,如果能够在前向传播中存储着两个中间结果,反向传播的时候就能避免重复计算。这样就可以很好地解决了交叉熵损失函数每次匹配都必须通过与每个图片库图像配对的网络运算开销高的问题了。

(32)最小化该三重损失函数,即得到和正样本之间的距离最小,且和负样本之间的距离最大的模型样本,得到优化的行人重识别模型。

最后,计算并评价了利用上述行人重识别模型优化方法对模型进行优化的效果。针对market1501,cuhk03,dukemtmc和mars四种不同的国际通用数据集进行了单独测试和评价。训练过程中各个数据集与其模型间的损失曲线如图2所示,可以看到,随着迭代数增加图像损失越来越小,目标和模型越来越接近,最后趋于一个稳定值,代表得到了一个最优的模型。相应的,图3是本发明模型准确率测试结果图,可以看到本发明提升了行人重识别的准确性,尤其是对于market1501数据集来说,准确率能够接近100%。

本发明还提出一种行人重识别方法,该方法中用来匹配目标行人图像的行人重识别模型是采用上述行人重识别模型优化方法进行优化后所得到的行人重识别模型。一般的,行人重识别方法包括以下步骤:(1)制作行人重识别数据集;(2)利用神经网络训练得到行人重识别模型;(3)通过多个摄像头从不同角度实时采集行人连续帧图像发送至服务器,并提取采集到的行人连续帧图像的图像特征;(4)将图像特征与步骤2中所得到的训练模型进行匹配,识别行人身份。本发明所述的行人重识别方法在步骤(2)后增加了模型优化步骤,即采用上述行人重识别模型优化方法对训练所得的模型进行优化。

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