邵 翔,魏国亮,张 彬,王建华
(上海理工大学 光电信息与计算机工程学院,上海 200093)
基于Raspberry Pi和Haar分类器的AUV目标搜寻
邵 翔,魏国亮,张 彬,王建华
(上海理工大学 光电信息与计算机工程学院,上海 200093)
文中使用Raspberry Pi开源硬件平台搭建了水下机器人视觉系统,通过OpenCV对所要搜寻的特定目标物体进行Haar分类器训练,AUV在进行特定目标搜寻任务时加载训练文件,并通过所开发程序在嵌入式视觉系统上完成了水下特定目标的搜寻任务。文中对训练流程进行了分析,并对分类器做出了评价,通过实际的水下实验,验证了所用训练分类器具有较低的误检率和较高的检测率,同时,所搭建的视觉系统具有较好的实时性。
Raspberry Pi;Haar分类器;OpenCV;AUV;Adaboost检测算法
自主式水下机器人(AUV)在军事与民用方面其有重要用途。通常情况下,水下机器人需要在恶劣环境下执行任务,视觉系统给机器人提供了大量的有用信息,且能够使其完成对特定目标的搜寻任务,因此,水下机器人的视觉系统的研究将成为AUV智能化的重要环节。
从智能机器人的研究领域来看,目标自动识别能力是评价系统智能化的重要指标,其一直是一个重要的研究课题[1]。对水下目标正确识别的关键是识别目标的特征好坏,目前在水下目标特征选择中应用的方法有遗传算法、前向顺序搜索、后向顺序搜索以及基于粗糙集的方法,这些算法均能有效地降低维数、提高分类器的性能[2]。研究目标自动识别的一般做法是运用各种方法提取众多的水下目标特征参数,通过增加特征维数来提高识别效果,但是,特征维数越多,获取的代价也就越大,并且在实际问题中,并非特征数目越多分类性能就越好。本文选用在人脸检测的研究中已经非常成熟且具有较好的实时性、鲁棒性和实用性的Haar特征和Adaboost迭代算法。本文将给出该算法的详细设计思路和实际中基于OpenCV的分类器训练过程,以及在实际中AUV目标自动识别的具体实施步骤。
机器视觉是一项通过计算机让机器拥有人眼的视觉功能,从而可以实现对客观世界中物体的各种检测、识别、测量等功能。与传统的光学传感设备不同,水下机器人的视觉系统不仅需要具有获取光学图像和视频信息的能力,而且应该具备对图像和视频信息进行处理、特征提取以及分类识别的能力。在智能水下机器人的研究中,视觉系统的目标是:快速、准确地获取水下目标的相关信息,并对信息进行实时处理,且将处理的结果反馈给机器人,从而指导水下机器人能够正确地执行任务[3]。
1.1 视觉系统的硬件组成
水下机器人的视觉系统采用搭载4核Broadcom BCM2836芯片的Raspberry Pi,同时也采用了配套的CSI(Camera Serial Interface,相机串行接口)摄像头来采集数据,在确保图像清晰和视频流畅的同时又节省了硬件接口的数目。此视觉系统的摄像头采用官方的RPi Camera,可以提供500万像素的图像,并且支持1 080p30, 720p60以及640×480p60/90视频录像,相比于普通网络摄像头,此摄像头有着更高的带宽,同时具有强大的视频处理能力。基于Raspberry Pi的机器视觉系统具有体积小巧、易于安装、硬件接口丰富和易于开发等诸多优点。与此同时,此摄像头可以通过有线方式或者插入无线网卡的方法来实现与水下机器人控制系统相连接的功能。
1.2 视觉系统的软件体系
Raspberry Pi是没有预装操作系统(OS)的,需下载一个OS到SD卡,然后插到树莓派上重启以完成OS的安装。Raspbian是Raspberry Pi的专属操作系统,Raspbian是一个基于Debian的自由操作系统,它的硬件驱动程序也是根据Raspberry Pi的硬件而优化,目的是为Raspberry Pi打造一个稳定和快速的系统平台。在固件、核心、应用方面,OS都做了改进,是最适合普通用户使用的OS。Raspbian预搭载的编程开发环境是Python语言。Python是一种面向对象、直译式计算机编程语言,已有近20年的发展历史,包含了一组完善而且容易理解的标准库,能够完成多种常见任务。
OpenCV是一个基于开源发行的跨平台计算机视觉库,可以运行在Linux、Windows和MacOS操作系统上,对跨平台支持良好。它轻量级而且高效,提供了大量图像特征检测的算法函数,执行效率高、使用方便。因此在Raspberry Pi运行的Raspbian操作系统上安装OpenCV,并使用Python语言做开发。
水下目标识别技术是随着声纳技术、信号检测及处理、计算机技术和人工智能等技术的发展而逐渐发展起来的[4]。目标识别能力的大小决定了机器人在水下环境的理解程度和作业实施的成功与否。由于水下环境的复杂和水介质对光的吸收和散折射的影响,使得水下图像质量严重地下降,同时,使得目标识别中可供利用的图像信息大量减少。在成像过程中,噪声的引入对图像特征的提取会造成一定的干扰。图像特征提取的困难势必使得在后续的分类器设计过程中得不到目标物准确而全面的识别特征。因此,在复杂的海洋水域中,将水下目标识别的核心技术,即特征提取技术和分类器设计技术,应用于智能水下机器人系统仍是一个亟待解决的难题[5]。
特征一般是通过对需要分类的对象所拥有的知识进行编码后得到的。在物体识别领域,特征的设计始终扮演着重要的角色,之所以采用特征形式作为分类的依据,是因为特征与原始像素相比,特征可以表达区域之间的关联信息,这是用有限的单个、独立的原始像素所无法表示的。采用特征对图像进行建模,有利于减小待分类对象的类内距离,同时可以增加待分类对象的类间距离,这样有利于建立更有效的判别函数。特征更容易形式化,而形式化了的特征计算起来更加迅速,有利于提高识别速度。尤其对于实时图像中物体识别来说,基于特征的识别要比基于像素的识别快的多。在采用特征形式作为分类依据之前,需要解决特征值的计算复杂度问题。实时物体识别算法需要扫描大量的窗口,对每个窗口对应的子图像都要计算相应的特征值,所以,拥有快速的特征计算方法后,才能满足识别系统的实时性要求[6]。
本文采用Haar-Like特征来表述特定目标,是因为这种特征表示的形式简单、计算速度快、形式多样,这些矩形特征原型可派生出丰富的矩形特征。AUV对特定目标搜寻任务的流程图如图1所示。机器视觉系统与AUV主控的交互实现方式如图2所示。确定好所要搜寻的目标后,制作所要识别目标的正、负样本图片,然后使用PC机端的OpenCV中的AdaBoost算法做Haar特征分类器训练,生成针对于该目标的分类器xml文件,并将该文件发送给嵌入式机器视觉系统,同样采用开源计算机视觉库OpenCV,并以该xml文件为基础对实时视频中的特定目标进行检测。水下自主机器人搭载机器视觉系统在确定水域中进行特定目标的搜寻,其下潜到固定深度后进行Z字型地毯式搜索。当特定目标被所搭载的视觉系统捕获并识别出来,水下机器人停止扫描并上浮到水面。
图1 AUV特定目标搜寻任务流程
图2 AUV各部分通信方式
3.1 使用Haar-Like特征做检测
Haar-Like特征是Viola等提出的一种简单矩形特征,因类似于Haar小波而得名。矩形特征的值是指图像上两个或者多个形状大小相同的矩形内部所有像素灰度值之和的差值。扩展后的Haar特征分为3类:边缘特征、线性特征和中心特征,如图3所示。将矩形黑色覆盖的图像区域像素灰度值总和与白色覆盖的图像区域像素灰度值总和求差即为所求特征值,它反映了图像局部的灰度变化[7-9]。本文实验采用扩展后的Haar特征,这种特征表示的形式简单,计算速度快、形式多样,由这些矩形特征原型可派生出丰富的矩形特征。
图3 扩展后的Haar特征
3.2 对Haar-like特征求值进行加速
当使用 Haar-Like进行目标检测时,必须将每一个Haar特征在待检测图像子窗口中逐渐移动以便获得更多的Haar-Like特征,从而能够更加准确地对图像进行检测,由上述检测方法可知,假设选用分辨率为24×24的图像作为训练样本,那么每张这样的图像样本将得到超过18万个Haar-Like特征。在目标检测过程中,为加快人脸检测的速度,在对Haar-Like特征进行计算时,Viola等提出了积分图像的定义。积分图是一种能够描述全局信息的矩阵表示方法
(1)
积分图的构造方式是位置(i,j)处的值ii(i,j)是原图像(i,j)左上角方向所有像素的和。逐行扫描图像,递归计算每个像素(i,j)行方向的累加和s(i,j)和积分图像ii(i,j)的值。扫描图像一遍,当到达图像右下角像素时,积分图像ii即构造完成。积分图仅遍历一次图像即可求出图像中所有区域像素和的快速算法,大幅提高了图像特征值计算的效率。
3.3 AdaBoost算法
AdaBoost是最优秀的Boosting算法之一,有着坚实的理论基础,在实践中得到了很好的推广和应用[10]。AdaBoost算法实质是一种分类器算法,核心是通过迭代的方法从大量的Haar-Like特征中找到小部分关键的特征,并用其产生一些有效的分类器,利用大量分类能力一般的弱分类器,以一定的方法叠加起来构成一个分类能力较强的分类器,最后级联这些分类器得到强分类器。只要每个弱分类器的分类能力比随机猜测的效果强,那么当将无穷多个弱分类器进行叠加时,强分类器的分类能力将无限接近100%准确[11]。该算法在实际应用时,在人脸检测速度和检测精度方面都取得了理想的效果,是目前相对比较适用的人脸检测算法。另外,所有弱分类器中的特征可以通过积分图的方法进行计算,进一步降低计算量,加快检测速度[12]。
一个弱分类器对应一个Haar-Like矩形特征,由弱学习算法来训练,找到一个分类错误最小的最佳阈值。判断特征f的值vi大于某个阈值ti,当大于时则表示特定目标,当小于时则表示非搜寻的特定目标
(2)
大多情况下,一个弱分类器无法满足识别目标的要求,因此,必须提升算法迭代地建立一个由许多弱分类器的加权和组成的强分类器
F=sign(w1f1+w2f2+…+wnfn)
(3)
加权和若<0,则符号函数返回-1,加权和等于0,则符号函数返回0。加权和大于0,则符号函数返回1。由此可以看出当符号函数返回值为1时,即找到要搜寻的目标。
级联分类器的每一层都是一个强分类器,这些强分类器形成一种多层分类结构。调整分类器的参数,可以使每层都通过几乎全部的正样本,而拒绝大量的负样本,从而在有可能存在待检目标的区域花费较多时间,降低总体计算时间。只有被前一层的分类器判别为人脸图像的子窗口,才会被传到下一个分类器并进行处理。如果被判断为非人脸,就结束对该子窗口的检测,检测下一个子窗口。级联分类器的最终目的是希望得到尽可能高的检测率和尽可能低的误检率[13]。
3.4 使用OpenCV进行Haar特征分类器训练
利用OpenCV训练Haar特征分类器,总体上包括3步:准备正负样本图片、然后对正样本图片进行裁剪和归一化;用CreateSamples程序建正样本集;用 HaarTraining程序训练,得到最终的分类器模型xml文件。HaarTraining程序训练流程如图4所示。
图4 级联分类器训练流程图
对于正样本,通常的做法是先把所有正样本裁切好,并对尺寸做规整即缩放至指定大小由于HaarTraining 训练时输入的正样本是vec文件,所以需要使用OpenCV自带的CreateSamples程序将准备好的正样本转换为vec文件。负样本图像的大小只要不小于正样本即可,同时不能包括所要识别的目标,负样本中如果含有所要识别正样本的特征信息,必然导致分类器训练失败,或者训练出的分类器的识别性能较差。准备好正样本集即samples.vec文件,负样本集及其描述文件后,接口进行训练。
本文正样本的数目为823,大小为24×24,格式为jpg。负样本数目为4 121,大小为120×120,格式为jpg。正负样本比例1∶4或者1∶5训练出来的分类器要优于1∶1或1∶10。正负样本比例接近1∶1时,对负样本的看中程度较低,在实际生活中负样本是远多于正样本的。因此只能尽可能地保证在不过分看中负样本的情况下,尽量增加负样本的个数。许多分类器训练失败,绝大多数是因为负样本数目过少,导致OpenCV训练Haar特征分类器算法进入死循环。也有因为负样本之间重复部分过多,或者正样本的尺寸过大,导致训练分类器内存溢出。
图5 训练过程截图
训练过程截图如图5所示,POS后第一项为取出的正样本数,第二项为查询过的正样本数。NEG后第一项为负样本个数,第二项为虚警率。N为当前分类器所使用的特征数,HR(Hit Rate)即为基于当前分类器阈值的命中率,FA(False Alarm Rate)表示基于当前分类器阈值的错误报警率。
3.5 嵌入式OpenCV实时检测
图6 检测基本流程
检测基本流程如图6所示,将训练生成的specific_target.xml文件放入Raspberry Pi对应的文件夹下,运行所编写的OpenCV-Python代码,进行特定目标检测,使用CascadeClassifier这个级联分类器类检测视频流中的目标。其中,detectMultiScale函数在输入图像的不同尺度中检测物体。
图7 所选特定目标的正样本
图8 设定的训练参数
图9 训练生成的分类器文件
图9为生成的训练分类器文件。训练得到的分类器以xml形式保存,整体上来说,它包括stageType、featureType、height、width、stageParams、featureParams、stages、features几个节点。图10为实际测试结果的截图,图中可以看到没有任何误检,检测率较高,检测速度约300 ms,可以满足实际需求。
图10 实验测试结果
通过对特定目标的训练,可以得到分类器模型文件,在实验中可以较好地识别出物体,同时具有良好的实时性。但在实测中,发现目标旋转角度较大时检测效果并不理想,所以应该扩大正样本中旋转目标个数或者专门对旋转目标进行训练。此外,由于每次对特定目标训练的时候都需要收集和整理该相关目标的
样本,而且其训练过程花费的时间也较长,本文对特定目标手枪的训练在4核8 GB内存电脑上花费了35个小时。由于是进行水下的特定目标搜寻,所选取的样本最好是根据具体场景而采集的,且由于所选搜寻目标的多样化,急需实现在线Adaboost学习,在训练过程中使用云计算来加速。如果能在线学习更新分类器,或者根据具体场景对正负样本进行学习,这样将大幅满足实际应用中对搜寻目标多样化的要求。
[1] 杨宏辉,孙进才.基于支持向量机集成的水下目标自动识别系统[J].测控技术,2006,25(12):14-16.
[2] 赵妮,梁峰.基于BPSO的水下目标特征选择方法[J].计算机仿真,2008, 25(1):196-199.
[3] Balasuriya A,Ura T.Vision-based underwater cable detection and following using AUVs[C].Piscataway,NJ,USA:Proceedings of the Oceans 2002 Conference and Exhibition,2002.
[4] 邱政,汪锋,潘元璋.一种基于频谱细化技术的水下目标识别方法[J].电子科技,2015,28(7):56-59.
[5] 张丽.基于单视觉的水下目标识别与三维定位技术研究[D].哈尔滨:哈尔滨工程大学,2010.
[6] 王刚,王朝立,杜庆辉,等.未知视觉参数下的移动机器人动力学鲁棒镇定[J].上海理工大学学报,2015,37(4):368-373.
[7] Viola P,Jones M.Rapid object detection using a boosted cascade of simple features [C]. CA,USA:IEEE CVPR,2001.
[8] Viola P,Jones M.Robust real-time face detection[J].International Journal of Computer Vision, 2004,57(2):137-154.
[9] Lienhaa R, Maydt J.An extended set of Haar-like features for rapid object detection[C].TX,USA:IEEE ICIP ,2002.
[10] 王毅,王创新,卢进,等.基于HSV模型和改进AdaBoost算法的车牌检测[J].电子科技,2015,28(2):107-111.
[11] 王寻,赵怀勋,刘锡蔚.基于肤色及改进的Adaboost算法的人脸检测[J].电子科技,2013,26(9):18-21.
[12] 严云洋,郭志波,杨静宇.基于特征空间划分的AdaBoost人脸检测算法[J].小型微型计算机系统,2007, 28(11): 2107-2109.
[13] 张书勤.人脸级联分类器的性能分析 [D].武汉:华中师范大学,2009.
[14] 刘纪红,李中帆.基于视频的人眼跟踪方法研究[J].小型微型计算机系统,2012,33(9): 2087-2090.
AUV Specific Target Search Based on Raspberry Pi and Haar Classifiers
SHAO Xiang,WEI Guoliang,ZHANG Bin,WANG Jianhua
(School of Optical-Electrical and Computer Engineering, University of Shanghai for Science and Technology,
Shanghai 200093, China)
The realization of autonomous underwater vehicle (AUV) identification of underwater specific targets has important practical value and research significance. This paper uses the Raspberry Pi open source hardware platform to build underwater robot vision system, and the Haar classifier training for specific target object to be searched by OpenCV. The AUV automatically loads the file in performing a specific task and complete the specific target of underwater search task through the developed program in the embedded vision system. This paper analyzes the training process and evaluated the classifier. Actual underwater experiment shows that the classifier generated by training has higher detection rate and lower error rate. The good real-time performance of the proposed scheme is also verified.
Raspberry Pi; Haar classifier; OpenCV; AUV; Adaboost algorithm
2016- 05- 16
邵翔(1991-),男,硕士研究生。研究方向:机器视觉,机器人。
10.16180/j.cnki.issn1007-7820.2017.02.034
TP368
A
1007-7820(2017)02-130-05