一种在手机端实现感兴趣物体实时检测的方法与流程

文档序号:16739803发布日期:2019-01-28 12:54阅读:192来源:国知局
一种在手机端实现感兴趣物体实时检测的方法与流程

本发明涉及物体检测技术领域,尤其是涉及一种在手机本地实现用户可能感兴趣的物体的实时检测的方法。



背景技术:

物体检测技术是计算机视觉中非常重要的研究方向。目前基于卷积神经网络的物体检测技术取得了较好的研究效果,具有相当高的检测准确率。在服务器上运行的部分检测模型的检测速度可超过100帧每秒;在移动终端例如手机端实时检测感兴趣的物体,由于手机端计算资源有限,因此目前所支持的实时检测方案还较少。

在手机本地进行实时的物体检测是很有价值的。在日常生活中,一些简单或者特定的物体检测,如最常见的人脸检测等,已经广泛地应用到了手机端。除此之外,从平常的一件商品,或者小到一只昆虫、大到一颗树,人们时常会对身边不认识的物体感兴趣。现在比较通用的做法是用户拍照后将照片通过网络上传给后台服务器来进行物体检测,然后再从服务器返回每个物体的检测结果、相关信息等。但这样的检测方案存在几个主要问题:首先是用户体验不好,即要求用户对物体拍照上传,从而每次检测识别都需要手动拍照选框等操作;整个照片的上传操作也容易让用户泄露更多的隐私;另外,如果所有的物体检测任务都由后台服务器完成的话,那么后台服务器压力会非常大。

此时人们更希望可以直接用手机摄像头对着感兴趣的物体即可在手机本地实时获得物体的相关信息、链接等,但这样的物体检测模型的使用会受限于手机的运算能力、耗电量等因素,因此要在手机端实现还存在技术困难。人脸实时检测之所以已在手机端成熟地运行,一方面因为检测对象均为人脸而不是其它各种类型的物体,另一方面在维持可接受的检测精度的情况下,一些人脸检测等相对固定、容易的检测算法已可以做到足够小足够快,从而能在手机本地直接运行。但是对于一些更加困难的物体检测需求,比如多类别的物体检测(通用物体检测,如动植物家具衣物生活设施等),则一般需要比较大且复杂的检测模型才能达到较满意的检测效果。

目前,可以在手机端实现物体检测的方案有tensorflow、mxnet、metal、coreml等,tensorflow对android、ios和树莓派提供了官方支持的手机运行方案,并且提供较多的优化工具,如量化、低精度计算等。mxnet也支持ios和android,但是优化的速度不好。metal是苹果公司官方提供的支持使用手机gpu的框架,可以极大地提高物体检测模型的运行速度。coreml也是苹果公司官方提供的,是一个特别为机器学习设计的库,可以方便地将很多种类的物体检测模型部署到手机app中,而且还会自动在gpu和cpu之间优化运行速度,但是只能支持ios11以后的系统运行。

适合在手机上运行的物体检测模型有yolo、ssd等,使用proposal的检测模型如fasterrcnn虽然检测精度稍高,但是检测流程对于手机而言比较复杂;yolo模型通过在图像上使用grid(v1)或者anchor(v2)形式而在图像上预定义物体包围框的回归参照物,然后通过训练输出每个anchor的分类结果和包围框的坐标作为检测结果。适合在手机上使用的网络模型有tinyyolo、mobilenet和shufflenet等,这些网络在降低网络计算量的前提下,尽量保持了物体检测的准确度。另外还有一些其他压缩模型的方法,如权重矩阵分解、卷积神经网络剪枝和知识提取等。虽然这些检测方法能够用在手机端执行物体检测,但是通过结合实际的应用需求,物体检测的速度和精度都有改进提高的空间。

以上背景技术内容的公开仅用于辅助理解本发明的发明构思及技术方案,其并不必然属于本专利申请的现有技术,在没有明确的证据表明上述内容在本专利申请的申请日前已经公开的情况下,上述背景技术不应当用于评价本申请的新颖性和创造性。



技术实现要素:

本发明的主要目的在于提出一种在手机端实现感兴趣物体实时检测的方法,通过压缩物体检测模型的神经网络,去除不必要的物体检测运算步骤,以降低手机端本地实时检测物体的内存占用,并提高手机端物体实时检测的速度和准确率。

为达上述目的,本发明提出以下技术方案:

一种在手机端实现感兴趣物体实时检测的方法,包括以下步骤:

s1、利用深度学习训练框架构建可在手机端运行的物体检测模型,其中,所述物体检测模型包含压缩的特征提取骨干网络;

s2、利用imagenet的分类数据集预训练所述物体检测模型的物体分类任务;

s3、对经过预训练的所述物体检测模型,再利用公开数据集pascalvoc、coco以及预先构建的检测数据集训练其物体检测任务;

s4、利用服务器22层yolo模型检测公开数据集pascalvoc和coco中的物体;

s5、基于步骤s3和步骤s4的物体检测结果,分别提取出22层yolo模型和所述物体检测模型的最后一层的对应激活值,并计算两个激活值之间的均方误差;

s6、取上一步得到的均方误差,与原有的物体检测损失进行平均,作为新的损失函数,用以再一次训练所述物体检测模型;

s7、导出训练好的物体检测模型的网络权重文件;

s8、在手机端加载所述网络权重文件,以运行所述物体检测模型,并对物体检测模型的输出使用改进后的非极大值抑制算法,根据距屏幕中心的距离对检测置信度进行加权,提取出topn检测结果,作为最终的物体检测结果输出;1≤n≤5。

本发明提出的上述技术方案,能够在手机端实现本地物体检测,标出用户可能感兴趣的物体。通过模型的压缩和精度改善(步骤s2和s3改善检测精度),使得在手机端本地检测物体的检测功耗和内存占用大大降低,并保证了与服务器端同样水平的检测速度;另外,通过改进的非极大值抑制算法,根据物体中心与屏幕中心的距离对物体置信度进行加权,改进后的非极大值抑制算法能够在只输出五个检测结果的情况下,也能保持较高的感兴趣物体召回率(70%以上)。

更进一步地,步骤s1中所用的深度学习训练框架为谷歌的开源框架tensorflow或苹果公司的mpscnn。

更进一步地,所述压缩的特征提取骨干网络为谷歌的mobilenet。

更进一步地,所述压缩的特征提取骨干网络为tinyyolo网络。

更进一步地,步骤s1还包括将tinyyolo网络的最后两个卷积层裁剪掉。

更进一步地,步骤s7中,按照预设的权重顺序导出训练好的物体检测模型的网络权重文件。

更进一步地,步骤s8中n=4。

附图说明

图1是本发明的方法在ios系统手机端运行的结果示意图。

具体实施方式

下面结合附图和具体的实施方式对本发明作进一步说明。

本发明的具体实施方式提供一种在手机端实现感兴趣物体实时检测的方法,包括以下步骤s1~s8:

步骤s1、利用深度学习训练框架构建可在手机端运行的物体检测模型,其中,所述物体检测模型包含压缩的特征提取骨干网络。本发明优选地采用谷歌公司的开源框架tensorflow或者苹果公司的mpscnn,mpscnn是ios自带的卷积神经网络框架,mps即metalperformanceshaders,mpscnn是苹果公司在其metal库的基础上提供的支持库,给神经网络模型提供了如卷积、全连接、最大池化等运算操作。

服务器端常用的特征提取骨干网络,如vgg、resnet等并不适合在手机端运行,因为模型权重太大、而且太深。本发明中优选使用压缩的特征提取骨干网络如谷歌的移动网络mobilenet或者tinyyolo网络。后文的具体实施例中主要以tinyyolo网络为例对本发明的方法作说明。tinyyolo网络使用了9层卷积结构(最后一层输出预测结果),整个物体检测模型的权重文件大小约63.4mb,而tinyyolo网络中第七和第八层卷积的卷积核参数分别为1024*512*3*3(nchw顺序,分别代表输出通道、卷积核高、卷积核宽和输入通道)和1024*1024*3*3个。因此这两个卷积层的权重占据了大部分的权重大小。经测试发现,去掉第八层和第九层卷积层,并将第七层的卷积改为(512*30*3*3)以输出结果,然后使用imagenet数据预训练分类,再使用知识提取方式用服务器22层yolo模型训练该检测模型,则对其top4的召回率影响较小。这样一来整个检测模型的权重大小下降为17mb。然后我们再使用16位浮点数的格式存储权重文件,可以将整个物体检测模型的模型文件压缩到8.5mb。可见,在用tinyyolo网络时,我们可以裁剪掉其最后两个卷积层。

步骤s2、利用imagenet的分类数据集预训练所述物体检测模型的物体分类任务。

步骤s3、对经过预训练的所述物体检测模型,再利用公开数据集pascalvoc、coco以及预先构建的检测数据集训练其物体检测任务。

在模型训练时,我们使用的训练代码是tensorflow的objectdetectionapi,主要的训练方法、超参数等也都与api一致。但是删减网络结构会造成一定的检测精度损失。因此,可以通过步骤s2和s3的方式来提升检测精度。

步骤s4、利用服务器22层yolo模型检测公开数据集pascalvoc和coco中的物体。

步骤s5、基于步骤s3和步骤s4的物体检测结果,分别提取出22层yolo模型和所述物体检测模型的最后一层的对应激活值,并计算两个激活值之间的均方误差。

步骤s6、取上一步得到的均方误差,与原有的物体检测损失进行平均,作为新的损失函数,用以再一次训练所述物体检测模型。由步骤s3的检测结果和物体标签可以计算出原有的物体检测损失。

步骤s7、导出训练好的物体检测模型的网络权重文件。导出时需按照预设的权重顺序,例如,在基于metal的mpscnn的方案中,需按照metal的权重顺序nchw(输出通道、卷积核高、卷积核宽和输入通道)。

s8、在手机端加载所述网络权重文件,以运行所述物体检测模型,并对物体检测模型的输出使用改进后的非极大值抑制算法,根据距屏幕中心的距离对检测置信度进行加权,提取出topn检测结果,作为最终的物体检测结果输出;1≤n≤5。优选地,我们提取前4个检测结果作为最终的输出,即提取top4检测结果,如图1所示,在用户手机摄像头的画面中,通过检测框1、2、3、4标出4个用户可能感兴趣的物体。从而用户可以无需上传照片到服务器来进行物体检测,只需在本地即可实现感兴趣物体的检测。

在具体实施例中,步骤s3中所用到的检测数据集是通过如下方式构建的:用手机拍出1000多张实际生活图像,然后在这批图像上根据经验和用户倾向的主观判断,额外地标注出图中用户可能最希望检测并了解的物体。标注的标准来自生活经验和应用场景需求,比如,当人们对某个物体感兴趣时,往往会对着物体拍摄,从而会使物体呈现出合适的大小,以及用户对拍的清晰的前景物体比模糊的背景物体更感兴趣等。从而形成训练时可用的检测数据集(或称“测试集”)。

在基于tensorflow的实施例中,将利用tensorflow训练的物体检测模型导出到手机端时,基本流程是:1)用tensorflow将训练好的网络模型连同网络定义和权重一起,导出为手机上运行的模型文件;2)根据网络模型的运算定义,编译在手机上运行的静态支持库;3)在手机上编写代码,调用静态库以加载模型文件。

在服务器上,tensorflow可以将物体检测等模型保存成多种格式,但是在手机上则需要将网络模型定义和权重一起“冻结”(freeze)成一个文件,该文件同时包含了在模型推断阶段所需要的网络定义及每一层的权重。tensorflow是一个基于运算图的深度学习框架,因此在训练一个物体检测模型时,所有tensorflow的运算都是运算图内的一个节点。所以在训练时,tensorflow的检测模型就会有许多和训练相关的运算,比如计算损失函数、反向求导等操作。但是这些运算在模型训练完成后就不再需要了,我们所需要的仅仅是传入一张图像,然后运行神经网络输出预测结果即可。因此在“冻结”阶段,还会将这些不需要过的操作也修剪掉以进一步减小模型文件大小。同时,“冻结”操作还可以集成对模型权重的进一步“量化”,如压缩模型的参数位数等。

tensorflow导出的手机端检测模型需要使用由tensorflow提供的静态库提供加载、解析、运行等操作。图像分类模型中常见的操作,如卷积、全连接等在tensorflow官方提供的静态库里已经包含了,但是部分检测模型用到的操作或新发表的运算操作,如mobilenet的逐通道卷积运算,在本发明的方案中是不支持的,因此需要修改并重新编译静态库。编译静态库的主要工作是先根据自己的要求修改makefile文件,然后重新创建“需注册的操作”头文件。然后根据所使用的tensorflow检测模型打印出所有需要注册到静态库内的运算操作,产生了包含我们模型所需要的所有操作的头文件后,再修改编译脚本命令,编译出支持我们模型的静态库文件。

在手机上调用静态库加载模型文件(含有复现的模型定义和模型网络权重)时,可以用tensorflow提供的工具将物体检测模型文件转换成内存映射文件(convert_graphdef_memmapped_format)。然后在加载该文件时,使用内存映射的方式加载,则在运行物体检测模型时对手机的内存占用大幅降低至数十m级别。

在基于mpscnn的实施例中,与tensorflow静态库不同的是,mpscnn独立于现今流行的深度学习框架,并且可以使用ios系统的iphone手机的gpu。因此,使用任何深度学习平台训练的检测模型都可以导入到mpscnn中运行,且导入的基本步骤相同。使用mpscnn运行检测模型的第一步是在mpscnn中定义一个相同的检测模型网络,然后将训练好的检测模型的权重转成mpscnn支持的格式,然后再使用mpscnn加载权重执行检测即可。

总之,本发明的前述方法,能够以较快的检测速度、较小的检测功耗和内存占用率实现在手机本地的实时检测,标出摄像头画面中用户可能感兴趣的物体。

以上内容是结合具体的优选实施方式对本发明所作的进一步详细说明,不能认定本发明的具体实施只局限于这些说明。对于本发明所属技术领域的技术人员来说,在不脱离本发明构思的前提下,还可以做出若干等同替代或明显变型,而且性能或用途相同,都应当视为属于本发明的保护范围。

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