贾一凡, 曹天一, 白越
(1.中国科学院 长春光学精密机械与物理研究所, 吉林 长春 130033;2.中国科学院大学, 北京 100049;3.西南交通大学-利兹学院, 四川 成都 610097)
无人机具有长续航、高隐蔽、成本低、不惧损耗、体积小、操作简单等特点,可以代替人去完成更复杂或更危险的特定任务,在军事和民用领域都受到了广泛关注[1]。随着无人机技术优势的不断积累,其应用领域逐渐扩大到了搜索救援、城市巡检、农业植保以及智能物流等诸多领域[2]。若要使无人机能够自主完成特定的任务,其避障能力尤为重要。该能力也是无人机产品能否脱颖而出的一项重要指标[3]。
目前的避障识别主要有超声波、激光雷达和机器视觉等方式[4]。其中,超声波易受干扰,激光雷达成本高昂,因此,机器视觉的方式广受欢迎。机器视觉还可应用于光学领域[5]中进行全息图像重建[6]。国内外的研究者针对机器视觉和深度学习在无人机避障中的应用进行了大量的研究和测试,取得了一些有实用价值的研究成果。Xue等[7]提出了一种基于深度强化学习的方法,使无人机在充满常见障碍物的室内环境中仅通过视觉完成避障任务。Boitumelo等[8]使用从相机图像计算出的视差图来定位障碍物,并用一种反应性方法进行无人机避障。Lai等[9]提出了一种基于深度学习距离估计的无人机避障方案,旨在利用单目相机检测和跟踪来袭的固定翼无人机,进而进行空中避障。袁毅等[10]先检测障碍物轮廓,再提取障碍物的左右图像特征点并进行立体匹配得到障碍物与无人机之间的实际距离,从而进行安全距离飞行。杨娟娟等[11]使用改进的YOLOv3模型检测障碍物的位置来辅助无人机进行避障决策。
基于深度学习的目标检测算法往往对计算机硬件的算力要求较高,在低算力的嵌入式系统中有较大的传输时延,故难以在无人机平台完成实时性的目标检测任务。双目相机具有准确性高、鲁棒性强、成本低等优点,能获取障碍物的距离信息,辅助无人机进行避障决策。本文分析了无人机的室外飞行环境,深入研究了无人机避障的关键技术和目标检测网络轻量化的方法,提出一种基于Ghost改进的YOLOv5轻量化双目视觉无人机避障算法。首先,提出改进的YOLOv5s-Ghost网络模型,提升障碍物检测的速度,减少系统运行的计算量和时间;其次,检测障碍物的ORB(Oriented FAST and Rotated BRIEF)特征点并进行立体匹配,解算出障碍物的三维坐标及距离信息,为无人机的视觉防撞做准备;最后,结合目标位置和距离信息,绘制出无人机的防撞预测区域,向无人机传达避障指令,从而实现避障功能。本文的无人机自主避障方式具有成本低廉、结构简单、系统鲁棒性高和环境适应能力强等优点,能够使无人机在0~20 m范围内进行安全避障飞行。
YOLO(You Only Look Once)系列检测算法因其效率高[12]、检测速度快,越来越受到研究者的喜爱。目前,YOLOv5网络是YOLO系列中应用最为广泛的模型,而YOLOv5s是YOLOv5网络中参数和浮点运算量最小的版本,检测速度也较快,但仍不适用于嵌入式系统快速检测的需要。为了使网络更轻量化并提高检测速度,本文引入Ghost-BottleNeck与DarkNet-53融合组成新的特征提取网络YOLOv5s-Ghost。
传统的深度学习网络在提取特征图时,会存在大量冗余、相似的特征图,但这些特征图对于模型的精度又是不可或缺的,并且都是由卷积操作得到又输入到下一个卷积层进行运算。这个过程中包含大量的网络参数,消耗了大量的计算资源。因此可以尝试使用更低成本的计算量来获取这些冗余特征图,Ghost模块主要包括以下步骤[13](图1):
图1 Ghost模块Fig.1 Ghost module
(1) 使用1/2的卷积核进行传统卷积操作。
(2) 使用另1/2的3×3卷积核进行逐通道卷积操作,即Cheap operations。
(3) 将两部分的输出进行Concat拼接。
在常规卷积FLOPs(Floating Point Operations Per Second)计算中,h'是输出的高;w'是输出的宽;n是输出维度,即卷积核的数量;c是通道数;k是卷积核的高和宽。本文使用Ghost 模块对此进行了改进,将常规卷积操作的n组卷积核分为s组,d为Cheap operations的卷积核,约等于k,故加速比rs和压缩比rc如式(1)、式(2)所示。本文将卷积核分为两组,即s为2,故Ghost 模块的参数量和计算时间为常规卷积的1/2。
本文基于Ghost 模块的轻量化特点,提出Ghost-BottleNeck模块。如图2所示,该模块由两个堆叠的Ghost模块组成,加入BN(Batch Normalization)层用于加速网络的收敛速度并且防止过拟合。前半部分引入Leaky relu激活函数是为了防止训练过程中出现神经元不学习问题;而后半部分没有引入激活函数,是为了使数据在训练过程中保持同分布,从而加快模型的收敛速度。
图2 Ghost-BottleNeck模块Fig.2 Ghost-BottleNeck
基于Ghost模块和Ghost-BottleNeck模块对YOLOv5s网络结构中的CBL模块和CSP_X进行改进,得到GBL和GCSP_X。与原始的YOLOv5相比,YOLOv5s-Ghost模型仅使用了一种CSP_X结构,这样可以降低模型的复杂度,并且将梯度变化的信息完整地传递到特征图中,优化了网络的特征融合能力,从而保证了检测的准确率。最终YOLOv5s-Ghost网络结构如图3所示。
图3 YOLOv5s-Ghost网络结构Fig.3 Network structure of YOLOv5s-Ghost
本文YOLOv5s-Ghost的损失函数L主要由回归损失函数Lloc和分类损失函数Lcla两部分组成,损失函数的计算公式如式(3)所示:
式中:Lloc利用CIOUloss(Complete Intersection over Union)[14]函数计算,CIOUloss的计算公式如式(4)所示:
其中:IOU表示预测框与真实框的交并比;D2表示预测框与真实框两个中心点的欧氏距离;Dc表示预测框与真实框最小外接矩形的对角线距离;v是衡量长宽比一致性的参数,其计算公式如式(5)所示:
CIOUloss相比于传统的IOUloss,多考虑了边界框中心点的距离信息和长宽比,可以有效地优化两个框不相交和边界框宽高比的尺度情况,使预测框回归的速度和精度更高。在目标检测的后处理过程中,针对单个目标的重复检测问题,往往需要进行非极大值抑制(Non-Maximum Suppression,NMS)操作。因为CIOUloss是在DIOUloss的基础上添加了影响因子,包含真实框的信息,在训练时用于回归。但在测试过程中,并没有真实框的信息,不用考虑影响因子,因此直接用CIOUloss即可。本文针对真实框与预测框几何中心的位置关系,使用CIOUloss作为损失函数,但使用DIOUnms进行NMS操作,效果明显优于使用传统的NMS,有效提升了检测精度。
在图像处理领域中,若想得到三维空间中某一点的坐标与二维图像像素点的对应关系,可以利用双目测距原理建立双目相机模型,得到双目相机参数。本文使用张正友标定法[15]得到相机参数,然后通过Bouguet立体校正算法将实际双目立体视觉模型转变为理想的平行双目立体视觉模型,消除双目图像在垂直方向的视差,有效改善了立体匹配效果。
3.2.1 特征点的提取
在背景复杂、噪声明显、目标在视图中快速运动的情况下,用传统的BM(Block Matching))[16]算法、GC(Graph Cuts)算法[17]、SGBM(Semi-Global Matching)[18]算法等都很难得到有效的视差图,且存在对背景信息的冗余计算,不满足测距的实时性,因此采用对待测距目标进行特征点提取与匹配的方式进行稀疏点云的测距。SIFT(Scale-Invariant Feature Transform)算法在尺度和旋转变换的情况下匹配效果良好[19],不会因光照、仿射变换和噪音等因素而变化,但运行时间过慢,不满足实时性需求。
本文选用ORB特征点提取方法,设图像中某一点像素P的亮度为Ip,以像素P为圆心,在半径为3圆上选取16个像素点,若该圆上超过12个点的亮度值大于120%Ip或小于80%Ip,则像素P视为一个特征点,如图4所示。
图4 特征点提取方法Fig.4 Feature point extraction
遍历完图像后,角点可能会大量集中在某一处,因此要采用非极大值抑制为所有角点确定一个得分值S,表示为P与圆上16个点的像素值差的绝对值进行求和,计算过程如式(6)所示:
为了使检测出的特征点能够进行特征匹配,应为特征点添加尺度和旋转的描述。通过构建图像金字塔,并在金字塔的每一层上检测角点的方式可以实现尺度不变性。特征的旋转可以由灰度质心法实现,具体步骤如下:
(1) 在一个小窗口B中,定义图像块的矩阵:
(2) 通过矩阵得到图像块的质心c:
最终,对图像进行ORB角点提取,结果如图5所示。
图5 ORB特征点提取结果Fig.5 Extraction results of ORB feature point
3.2.2 特征点的匹配
首先,遍历左图像中的特征点,以特征点为中心确定一个目标窗口,同时在右图像同一位置确定一个大于目标窗口的搜索区域;其次,使用与目标窗口大小相等的搜索窗口在右图像搜索区域内连续滑动,并计算目标窗口与搜索窗口的相关系数ρ,如式(10)所示;最后,将相关系数ρ最大的窗口所对应的中心像素点作为左图像中特征点的同名点。使用该方法匹配后的效果如图6所示。
图6 特征点匹配Fig.6 Feature point matching
右图像与左图像的相关系数用来匹配两图之间的特征点。公式如式(10)~(12)所示:
由图6可以看到,直接对左、右图像进行ORB特征点的提取和匹配仍存在大量的无用背景特征点,会造成冗余计算,造成计算资源的浪费。因此,本文利用YOLOv5s-Ghost模型检测出的目标框,只对目标框内的特征点进行提取和匹配,如图7所示。
图7 目标检测约束的特征点提取与匹配Fig.7 Feature point extraction and matching constrained by object detection
3.2.3 目标特征点的三维解算
在双目视觉模型中,通常要进行世界坐标系、相机坐标系、像素坐标系和图像坐标系这4个坐标系之间的相互转换。设在世界坐标系中的任意一点P(x,y,z)投影到左、右相机上的像素点为Pl(xl,yl)与Pr(xr,yr),则像素坐标系与世界坐标系之间的转换方程如式(13)所示:
式中:Zc为点P在左相机坐标系中Z方向的坐标值,通常情况下,设世界坐标系与相机坐标系重合,即Zc=z,则Zc为点P到相机的距离;(x,y)为点P在像素坐标系中的坐标;K是双目相机的内参数矩阵;R为世界坐标系到相机坐标系的旋转变换矩阵;T为世界坐标系到相机坐标系的平移变换矩阵。K、R、T均由双目相机标定得到。最后,取障碍物检测框内所有特征点距离的中位数作为障碍物的最终距离。
使用双目相机进行避障的优点是可以获取无人机与障碍物的相对位置关系,从而根据相对位置关系对无人机发出相应的避障指令。本文提出一种基于目标检测的双目视觉无人机避障算法,具体算法流程如图8所示。
图8 无人机避障方案Fig.8 Obstacle avoidance solution for UAVs
首先,初始化无人机的世界坐标系与双目相机的左相机光心坐标系,使坐标系的原点对应;其次,利用YOLOv5s-Ghost网络与特征点匹配得到障碍物的距离Z;然后,依据无人机的尺寸与障碍物的相对距离绘制防撞区域;最后,当距离障碍物≤5 m且防撞区域与检测框重叠时,执行避障指令,否则按原航向继续飞行。
一般模型在进行训练和性能评估时,有很多数据集可以选择,其中最常用的是 ImageNet 数据集、MS COCO 数据集和 PASCAL VOC 数据集。因为SIFT-Flow数据集主要针对自然场景,包括建筑、树、汽车和指示牌等常见障碍物,适合无人机的室外飞行环境,故本次实验选用包含33个类别的SIFT-Flow数据集作为模型训练和测试的数据集,划分验证子集和训练子集的比例为 1∶9。为了降低各方面额外因素对检测的影响,对原始数据集进行Mosaic数据增强,即对图像进行随机缩放、随机裁剪和随机排布。YOLOv5s-Ghost网络训练Loss曲线如图9所示,测试集平均精度均值mAP如图10所示,与不同算法性能指标的对比如表1所示。
表1 不同检测算法性能指标的对比Tab.1 Comparison of performance indicators for different detection algorithms
图9 YOLOv5s-Ghost网络训练Loss曲线Fig.9 Training loss curve for YOLOv5s-Ghost network
图10 测试集平均精度均值(mAP)Fig.10 Mean average precision (mAP) on the test set
YOLOv5s-Ghost网络的目标检测mAP达到76.88%,与YOLOv5相比,平均检测精度均值下降0.37%,检测时间下降22%,参数量下降25%。虽然检测准确率有少量降低,但Ghost模块对网络的轻量化改进效果明显,有效提高了网络的综合性能。
调用OpenCV 函数库,同时打开左右两个摄像机进行图片采取,共采取了不同角度、不同距离的20幅图像对。采取过程中将图像进行平移旋转等多种操作,体现图像的差异性,且保证棋盘格在左右摄像机上的图像显示清晰完整。图11是本次实验所获取的20组标定图像,标定后计算出旋转向量R(-0.006 76,-0.002 58,-0.000 18)、平移向量T(-56.550 50,0.054 30,-0.110 91)和相机内参K,相机内参K如表2所示。
表2 左、右相机内参Tab.2 Intrinsic parameters of left and right camera
图11 标定图像Fig.11 Calibration images
用a和b分别表示用本文方法测出的目标距离和用激光测距仪测出的目标真实距离,误差e可表示为式(14):
本文对50帧图片上的122个目标进行定位误差计算,部分距离值及其定位误差值如表3所示,最后求得本文双目测距方法在0~20 m范围内的最大误差为8.36%,平均误差为4.87%。在大于20 m的范围,测距误差超过10%,且目标检测效果变差,因此,本文算法有效范围是0~20 m。
表3 测距结果Tab.3 Distance measurement results
本实验采用四旋翼无人机搭载Jetson TX2嵌入式平台,装入jetpack4.5,Python版本为3.8,使用ROS系统与无人机Pixhawk飞控固件进行通信,双目视觉模块使用全瑞视讯双目相机,如图12所示。实验环境为室外,将树木作为农用无人机的飞行避障目标。无人机实际飞行时,防撞系统的图像如图13所示。
图12 无人机及其组件Fig.12 UAV and its components
图13 无人机避障系统测试Fig.13 Testing of the UAV obstacle avoidance system
在图13(a)中,障碍物距离农用无人机3.28 m,小于5 m且防撞区域与障碍物重叠,若无人机继续飞行则会与障碍物目标发生碰撞,故执行避障指令。因为右侧防撞区域与目标检测框的差集更大,故无人机会向右偏航来躲避障碍物。在图 13(b)中,虽然障碍物与无人机的距离小于5 m,但无人机中心的防撞区域与障碍物目标检测框交集为0,故无人机可沿当前航线继续飞行,无需进行避障动作。
本文研究了目标检测神经网络的轻量化方法和无人机自主避障的关键技术,提出一种基于Ghost改进的YOLOv5轻量化双目视觉无人机避障算法。该避障算法在嵌入式系统中运行的平均FPS达到14.3,并用无人机避障飞行试验证实了该算法具有一定的可行性,准确性和实时性均能达到无人机飞行时避障的实用要求。改进后的网络检测平均准确率为76.88%,与YOLOv5相比,mAP下降0.37%,但检测时间下降22%,参数量下降25%。该方法对搭载小型嵌入式平台的智能车辆或机器人等避障技术也具有非常重要的作用。本算法使用的避障方式依赖于目标检测的准确性,因此,提高目标检测的准确率将是改进本算法的一个重要方向。