胡焱,徐志强,刘文劲,吴丹丹
(中国民用航空飞行学院航空工程学院,广汉618307)
“低小慢”目标是指飞行高度在1000m以下,雷达反射截面小于2㎡,飞行速度200km/h以下的飞行器。其中200m以下空域出现的无人飞行器(下文统称无人机),由于体积小、操纵简单、可搭载有效载荷,且飞行高度低、地物遮挡多,雷达等探测设备无法有效侦测[1]。根据《中华人民共和国飞行基本规则》第二十九条规定:未经局方批准的航空器,不得飞入空中禁区、临时空中禁区[2]。然而当前存在法盲者、不法分子等在未经局方允许下非法在机场附近进行“黑飞”、“滥飞”,对民航飞机的起降、低空飞行训练造成经济损失,构成重大安全威胁。因此,对机场“黑飞”“滥飞”无人机进行侦查预测,从而保障飞行安全,显得尤为必要。
目前对机场无人机侦测的主要手段有使用无人机步枪、激光武器和微波武器进行物理打击,红外制导拦截,无线电干扰等。但由于无人机的小型、微型、隐身化,攻击性强,机动能力强,导致探测追踪和预警难度大,防空方面压力大[3],击中较为困难,更为重要的是机场附近人流量较大,无人机坠落可能会对机场附近人员造成损伤。而利用深度学习的目标识别算法,加以硬件部署,在机场进行实时目标探测识别定位,既避免了冗杂的设备工序,又能提高探测识别效率和速度。
在物体检测技术发展中,物体检测由最初的目标分类演化至目前主要的目标识别与目标回归。传统的卷积神经网络识别算法如ResNet、VGG、GoogleNet、AlexNet等网络识别出给定图片中物体的类别。这些识别算法所识别的图像往往只有单个物体,在样本采集中难免需要人为去筛选单项本目标,而在实际应用中,不但需要检测出物体的类别,还需要标注出物体在图片中的位置,更进一步,是需要把所有的物体都检测并框选出来。
出于以上问题和实际需求,基于图像的目标检测技术也快速发展,一系列算法也由各研究者提出。传统方法有如Viola-Jones算法[4]、SLAM算法[5]等,而基于深度学习的物体检测算法主要基于锚框(anchor)的算法,基于锚框算法主要分为2种,一种是单阶段算法,如SSD、RetinaNet、RefineNet、Overfeat、YOLO系列等,一种是多阶段法(主要是二阶段法)如FPN、R-FCN、RCNN等系列算法。
在目标识别中,类别不平衡(class imbalance)是目标检测中的一大难点,其中最为突出的难点是正负样本不平衡问题。目前的大部分目标检测模型在FCN上每个位置密集采样,无论是基于锚框boundingbox还是基于anchor free都存在正负样本不平衡问题。对于两阶段的代表性算法Faster R-CNN而言,在第一阶段的RPN算法中已经过滤掉很大一部分的背景图,也就是负样本,而在第二阶段采用正负样本的固定比例抽样采样来解决正负样本不平衡问题。在单阶段中,SSD算法采用的策略是hard mining,以top-K算法从负样本中选出loss最大的负样本数据,同时保证正负样本比例为1:3[6]。但在数据训练时,负样本的采样是以NMS算法作为过滤器,以某个阈值为界的正负样本来采样,导致出现第二阶段的负样本使用不均衡,或者没有充分利用负样本的多样性,以至于算法的优化上还需要改进。
相较于多阶段法,单阶段算法RetinaNet具有识别速度快,识别准确率高的特点。该算法由何凯明等人提出,与单阶段法的其他算法相比,RetinaNet解决了正负样本不平衡的问题,这也是该算法主要创新点,故本实验拟采用RetinaNet算法。
以往的算法受限于硬件设备的发展,近年来随着微电子技术的发展,集成电路有了阶段性提升。目前的技术能做到7nm的元件电路,CPU和GPU的算力也随之大幅提升。在成本可控的前提下,本研究主要配备了具有高性能处理速度GPU NVIDIA 2080Ti和16线程处理器AMD 3700x。软件上,基于Linux系统开发相关程序软件。Linux系统具有执行速度快,少BUG,少内存等优点,是基于深度学习框架下的首选环境。在Anaconda集成平台上创建环境,使用Python 3.6,PyTorch 1.5版本,并利用cuda-toolkit加速工具包进行神经网络训练加速。
CUDA是NVIDIA公司发布的一款能够利用GPU进行数值计算的加速工具包。主要配合cuDNN使用。而算力是提升计算速度的一个关键性指标。根据其官网提供的算力数据,2080Ti具有7.5的算力,显卡系列中算力属于第一阶层。
表1 系统环境配置
图1数据处理流程
本数据主要为无人机飞行数据,目前数据获取途径主要分为两部分,一部分是图像数据,一部分是视频数据。前者主要通过Bing、Baidu、Google图片库搜索“旋翼无人机”等类似关键词,在海量数据中爬取数据并保存本地;后者主要由相关飞行团队提供。在得到数据后,需要判定数据是否符合要求。网络爬取的数据尽管十分庞大,但由于其存在无关数据、背景全白或全黑、明显PS痕迹、无人机目标占比过大等问题,需要过人工筛选掉绝大多数数据。而网络训练数据是针对旋翼无人机而言,数据的好坏往往影响着训练的好坏和识别的效果,所以需要对采集到的无人机数据进行筛选,其要求包括:①图片为无人机数据、②目标占比不能过大、③背景无明显PS痕迹、④像素要求不能小于244px×244px。
对于视频流数据,利用OpenCV将视频按帧分割,并进行初步的无人机目标数据筛选。为保证抽取图片的多样性,分别按5帧、10帧、20帧、30帧、40帧抽取,图片的像素大小为1920×1080。在实际切割中发现,在保证数据多样性的前提下,10帧是最佳切割间隔。
采集到这些数据后,还需要进行下一步的数据清洗,主要是将重复的图片予以清除。根据上述数据筛选要求,最终所得无人机图片数据为2262张,其中视频切割所得数据为1315张,网络爬取无人机图片为947张。
数据清洗后,利用专用标注软件labelImg进行数据标注。其标注过程如图2所示。
图2无人机数据的标注
为增强数据多样性,在进行数据标注后进行数据增强,并送入搭建好的网络进行训练。
图3 RetinaNet网络结构
RetinaNet是RPN的多分类升级版,其RetinaNet的backbone与RPN一样,都是采用FPN,同时采用相同的anchor机制,且都属于RCNN系列。RetinaNet整体框架包括两个大部分:一个是FPN部分,一个是Detection部分,Detection部分包括两个部分:分类与回归。分类是对目标与背景的二值判断,回归是对候选框与真实标注框的误差纠正。
尽管目前的目标检测算法不尽相同,但前半部分结构通常都是差不多的。利用卷积神经网络读输入图像进行卷积提取特征,从而形成深层的特征图,然后利用各种算法完成区域生成和损失计算,这部分网络结构是检测网络中的“骨架”,故被称作Backbone。RetinaNet的Backbone部分是取自于ResNet的FPN,FPN又叫特征金字塔,其工作原理是在原始的CNN网络上增加自上而下的路径和横向连接,以融合不同程度的层次特征。FPN的横向连接,其高层次特征通过一个2x倍数的上采样(采样通过最近邻插值实现),然后低层次特征用1×1的卷积核进行降维,以保证低层次特征与高层次特征维度一致,即h,w,c均一致,直接相加。由于上采样会带来特征的不利影响,采取的办法是加上一个3×3的卷积。
原始的ResNet共有4个阶段,其各个阶段得到的特征分别记为C1,C2,C3,C4,stride分别对应为4,8,16,32。FPN的构建从C5开始,以C5为初始输入L,采用一个1×1的卷积核得到通道数为256的新特征L",如图4所示。
图4 FPN构建
我们将底层特征L(Low)和上一级特征H(High)作为FPN部分的输入,经过卷积后再进行特征融合,即C=L"+H",作为下一轮的输入L/H,同时特征融合后的结果进行3×3的卷积得到最终检测层。以此类推,通过自上而下生成不同level的新特征,分别为P2、P3、P4、P5,分别与C4、C3、C2、C1一一对应。此外,P5采用一个stride=2,maxpooling=2的下采样得到更高层的特征P6。最后,FPN就有从P2到P6五个特征,其stride分别为22=4,23=8,24=16,25=32,26=64,这些特征的维度均为C。Faster R-CNN采用的是P2-P6这样的特征金字塔结构,而RetinaNet将C2舍弃,因为由stride=4得到的P2特征大、参数多,将C2舍弃可以减少大量的计算。另外增加的2个特征P6与P7,P7是在P6的后面加了一个ReLU函数和一个stride=2的3×3的卷积模型得到。这样,RetinaNet的backbone就包含了5个部分,分别是P3,P4,P5,P6,P7。RetinaNet的backbone的搭建就算完成。
检测模块主要包含分类分支与回归分支。分类分支负责预测每个位置的各个anchor的类别概率,分出前景与背景。该分支由4个3×3的卷积(ReLU激活函数,256的channel),最后是一个3×3的卷积,输出的channel为K*A(K:数量,A:类别),最终经过sigmoid分类函数预测各个anchor对应的类别的概率。在RetinaNet中分类部分是一个二分类问题,即分类前景与背景;box回归主要用来检测每个位置的anchor与真实标准值GT的误差offset,输出为4A,则RetinaNet正确的box与类别无关。在深度上,RetinaNet网络深度更深,且在各个level的特征参数共享。
在模型训练与预测方面,RetinaNet的box回归参数采用的是smoothL1,分类loss采用的是focal loss,根据其公式和原论文试验,当α=0.25,γ=2时达到的分类误差最小[7]。分类loss是focal loss的总和除以类别为正的anchor总数。论文中也证明,采用的FL比OHEM和SSD算法更优。
相比RPN,RetinaNet可以看成RPN的多分类升级版,backbone和FPN设置基本一样,只不过RPN采用简单的sampling方法训练,而RetinaNet采用FL;相比SSD,SSD也是利用多尺度特征,不过RetinaNet是FPN,SSD的anchor与Faster R-CNN类似,不过anchor的size和ratio有稍许差异,另外就是SSD是OHEM 1:3训练,而且采用Softmax loss。
在inference阶段,对各个level的预测首先取top 1K的detections,然后用0.05的阈值过滤掉负类,此时得到的detections负样本已经大大降低,再对detections的box进行解码,以提升推理速度。最后把level的detections结果concat在一起,通过IoU=0.5的NMS过滤重叠框就得到最终结果。
网络搭建好后,则进行网络的训练与评估。训练前,需要对网络的模型进行初始化和参数配置。RetinaNet训练结果主要有3个参数:分类损失、回归损失以及两者之和的总损失。以往的损失函数主要是通过交叉熵(Cross Entropy,CE)损失函数作为网络模型鲁棒性的评估指标,如式(1)所示:
则交叉熵损失函数简化为:
上述式中,CE(p,y)表示交叉熵,y表示样本的真实值,p表示样本的预测值,y=1表示预测的是正样本。则pt越接近于1,则表示预测值越接近真实值,分类得越正确。但此算法也存在一定的缺陷,即那些偏正样本的图像会被直接过滤掉,从而导致中间部分的样本没有充分利用。对此,RetinaNet算法提出了在该交叉熵函数面前加入权重参数,如式(4)所示:
在式(4)中,FL表示Focal Loss,权重部分-(1-pt)γ是一种软加权,这样做的优势在于,分类分得越正确,权重越低,分类分的越错误,权重相对越高,且与交叉熵函数相比,所有的样本都参与了训练,充分利用了所有的样本。
训练网络时,设置其训练迭代次数为5000,默认其优化器为SGD,优化器动量为0.9,学习率lr为0.001,训练批次batch为6,backbone的ResNet网络层数设为50,FL的γ值为2,NMS的阈值设为0.45,置信度设为0.1。通过visdom可视化训练结果,模型保存步长设为50,每1000进行一次模型评估。其训练结果如图5所示。
可以看到,分类损失在进行第40次迭代的时候有比较明显的下降,在第1000次迭代时下降至0.05,随着迭代次数不断增加,在第5000次迭代时,分类损失已经减小至0.274,分类准确率为97.16%。回归损失波动较大,但总体呈下降趋势,在训练至550次迭代前,回归损失下降增快,在600至5000次训练轮数时,回归损失减小趋势逐渐放缓,在回归曲线图中,有几次返峰现象,是由于样本中存在个别样本误识别问题,导致在锚框铺设的估计值与真实值之间误差出现跳变。在3000至5000次回归损失中,损失函数的误差减少量已无明显区别,回归损失为0.1977,则回归的准确率可达80.23%。总体下降量是回归损失与分类损失之和,分类损失在其中占比较小,故总体趋势与回归损失趋同。
训练好后,我们将保存好的权重文件用作测试样本的测试,以观察其训练效果。如图所示,这是一组batch的测试结构,其图形大小多样,在图像分辨率较小,无人机目标占比图像较大的样本中,识别准确率达到94%,在图像像素偏大,无人机目标占比图像很小的样本图像中,尽管准确率略低,但还是取得了不错的识别效果。
图5训练结果
针对低小慢目标中无人机“滥飞”“黑飞”情况,研究了基于深度学习中的目标识别与检测算法,以辅助机场安保人员对四旋翼无人机的侦查,保证机场飞行安全。研究单阶段目标识别算法与多阶段识别算法的发展情况与各自优缺点,构建RetinaNet目标识别网络,实现模糊背景,视距较远的目标识别与定位,其准确率可达94.0%。与Faster R-CNN和SSD多阶段算法相比,参数量更小,误差更小,且用时更少,表明RetinaNet在小目标上有较好的目标识别与定位能力。而准确率还有进一步的提升空间,下一步工作是在此基础上,针对远景低下慢目标,进一步提升识别准确率和回归能力。
图6 RetinaNet识别效果