-
Notifications
You must be signed in to change notification settings - Fork 0
Home
本wiki将介绍DM战队2020赛季感知部分算法,首先第一部分将简要介绍哨岗感知部分,第二部分将介绍车载感知部分。
本部分将详细介绍哨岗感知部分的理论框架与算法。首先,本部分将从四个方向介绍图像坐标系转换至世界坐标系的方法,包括相机模型,相机内参标定,相机外参标定以及转换矩阵的求解。从相机的成像模型出发,推导出从相机的图像坐标系转换至世界坐标系的方法。其中需要两组重要的相机参数:内参和外参。内参的求解有成熟的标定方法可以直接采用,外参则利用PnP问题的求解方法得到。当这两个重要的相机参数确定之后再结合机器人某些特征物的实际高度就能得到图像坐标系转换至世界坐标系的转换矩阵。
其次,本部分将介绍了用于机器人位姿识别的两种卷积神经网络:用于提取机器人ROI以及机器人特征物的yolov3-tiny神经网络以及识别机器人朝向角信息的朝向预测网络。这两种卷积神经网络经过合理的训练和处理并将结果综合在一起可以输出原始的机器人位姿信息。由于这两种神经网络无法保证输出的位姿信息具有稳定性和连续性,本算法利用卡尔曼滤波以及匈牙利匹配的方法对原始位姿信息进行了一定的滤波处理,以保证最后输出定位信息的连续性和稳定性。
利用单目相机将目标三维空间中的几何信息投影到相机成像平面上的过程就是对场地环境信息进行的图像采集。该投影产生的变换关系需要从相机成像的模型入手。针对本文使用的单目相机,针孔相机模型可以较为良好地反应三维空间的几何信息与相机成像平面的投影关系,针孔相机模型如图1所示。
图1. 针孔相机模型
设为相机坐标系,其中为相机的光心。轴方向为相机正方向,轴方向位于相机右侧,轴垂直于轴和轴,并与轴和轴组成右手坐标系。根据小孔成像原理,成像平面上的点是空间点点经过光心投影在成像平面上的像点,根据三角形相似原理,可以得到其坐标关系如下式所示:
其中为相机的焦距,表示光心到成像平面的距离,负号表示成像是倒立的。为了简化模型,可以将成像平面经相机坐标系的面对称到相机的前方,与三维空间点放置在相机坐标系的同一侧,得到如图2的等价相机模型,世界坐标系和成像平面坐标系的转换关系为:
对于成像平面坐标系和图像坐标系的关系则如图3所示。由于图片坐标系的原点一般位于图片的左上角,轴平行于图片的宽方向,轴平行于图片的高方向。成像平面坐标系和图像坐标系之间的关系为平移和缩放的关系,坐标变换关系式为:
式中和分别为成像平面坐标系的轴和轴的缩放比例,而和为成像坐标系坐标原点在图像坐标系上的坐标。
图2. 等价针孔相机模型
图3. 图像坐标系与成像平面坐标系
令,,并将上述结果合并可以得到相机坐标系转换至图像坐标系的坐标转换关系式:
上式往往改写成矩阵的形式,得到:
其中矩阵为相机内参矩阵,是一个和相机结构、感光传感器相关的参数。在处理相机模型的时候通常认为内参在出厂之后是固定的,不会在相机使用过程中发生变化。
考虑到是点在相机坐标系下的坐标。由于相机固定位置的随机性,该坐标无法有效表达空间中某点的具体位置。因此需要利用点的相机坐标系坐标获取其世界坐标。由坐标变换的性质可以知道,点是点根据相机在当前世界坐标系下的位姿变换到相机坐标系下的结果。相机的位姿由旋转矩阵和平移向量来表示,经转换可以得到:
最右边的等式隐含了一次齐次坐标到非齐次坐标的转换。其中相机的位姿,称为相机的外参数。把一个世界坐标系下的齐次坐标变换到相机坐标系下,为了使其可以和相乘,需要取结果的前三维组成向量。齐次坐标到非齐次坐标的转换关系如下:
本算法实际需要的是将全局视角相机拍摄的场地图片中的某个坐标转换至世界坐标系中。如果相机的内参和外参已知,那么求解世界坐标就只需要某个维度的信息即可将的三个变量求解出来,具体转换关系为:
上式中为转换矩阵。而实际中针对运行在地面上的车辆或者机器人,我们可以了解到某些特征物的实际高度(例如车轮,车灯等),利用这些物体的实际高度再综合这些物体的图像坐标就能解算出这些物体的三维世界坐标。而转换矩阵包括了相机的内参矩阵和外参矩阵,所以标定这两个矩阵之后就可以得到转换矩阵。
仅使用针孔模型会出现投影关系不正确的情况,这和相机实际中代替小孔的透镜有关。相机的实际成像过程中使用透镜以获得更好的成像效果,而透镜的加入会使得光线穿过透镜投影到成像平面时的位置发生变化,从而造导致图像发生畸变。根据导致图像畸变因素的不同,畸变可分为径向畸变和切向畸变。径向畸变是由于透镜形状引起的,而切向畸变是由于相机的安装过程中无法让透镜和成像面严格平行产生的。
由于实际生产的透镜是中心对称的,由透镜形状引起的径向畸变也是径向对称的,并且畸变量随着距中心的距离增加而增加。因此径向畸变量可以使用一个和中心距离有关的函数来矫正:
其中是没有矫正点的坐标,是矫正后点的坐标。
对于切向畸变,可以使用另外两个参数,来矫正:
联合上式,可以通过五个畸变系数找到该点在像素平面上的正确位置:
这五个畸变系数以及相机的内参可以通过Matlab相机工具箱标定。
图4. Matlab工具箱标定全局视角相机
利用多个数据点在三维场景中的坐标及其在图像中的投影坐标求解图像坐标系和三维世界坐标系之间的绝对位姿关系的问题统称为PnP问题(Perspective-N-Point)。在已知相机内参的情况下,可以利用求解PnP问题的方法得到相机的外参矩阵。求解PNP问题需要至少四个点对,示意图如下所示:
图5. PnP问题示意图
利用三个点对的位置关系,相机的内参以及畸变系数可以求解出相机的外参,即中的和。考虑到相机测量的噪声等原因,可以利用多于三个点对来优化求解结果。实际求解过程中使用了OpenCV的内置函数solvePnP,该函数的输入为世界坐标系和图像坐标系的对应点对,利用相机的内参以及畸变系数来解算出相机在世界坐标系下的旋转向量和平移向量,从而可以构建出相机的外参。
从上图可以看到,场地内五个朝上的视觉标签(图中红圈标识)可以利用。以场地左上角为坐标原点,场地长方向为轴方向,宽方向为轴方向,轴方向垂直于轴和轴组成的平面并于其构成右手坐标系,如下图所示:
图6. 场地坐标示意图(水平箭头为轴,竖直箭头为轴)
为这五个点对赋予坐标之后再利用全局视角相机拍摄识别后得到这些视觉标签中心的图像坐标就得到了至少3对点对,结合内参矩阵和畸变系数可以得出相机的外参矩阵。
从相机得到的图像坐标信息可以转换至世界坐标,从而得到真实环境下的定位信息。接下来需要从全局视角相机拍摄的场地环境图片中识别出机器人并获取其图像坐标,再代入转换矩阵得到世界坐标。这其中的包含了两个内容,一个是定位,即发现图片中哪块区域包含机器人;另一个是分类,即发现的机器人是什么型号。包含这两个内容的识别任务在图像识别领域被称为目标检测。
图像经目标检测处理后可以得到原始图像中包含特征物体以及特征物体的类别和所在的外接矩形的区域。利用这些信息和机器人上特征物的相对尺寸就可以估计出机器人的底盘中心坐标。本章首先对在图像识别方面有较大优势的卷积神经网络进行介绍,随后介绍进行了优化的yolov3-tiny神经网络和一个自定义卷积神经网络,并利用该网络对场景中的机器人进行识别并获取位姿信息。最后对这些位姿信息进行相应的处理来保证数据的稳定、准确。
卷积神经网络(Convolutional Neural Network, CNN)是一种深度前馈神经网络。其在图像分类、目标检测、目标分割、视频分类等图像识别相关领域都有很多较为成功的应用。
经相机拍摄所得图像在计算机内会以数值矩阵的形式进行存储。该矩阵中的每个元素和图像中的一个像素点相对应。这些元素有的包含一个值,比如灰度图的存储矩阵;有的包含三个值,比如彩色图片的存储矩阵,这三个值分别对应该像素点的RGB大小值。图像处理就是对这些数值矩阵进行处理并提取数据排布特征的一些方式。卷积神经网络中最为重要的是卷积层。卷积层处理的本质是利用权重不同的卷积核来对图像局部的数值进行加权求和,从而实现对该部分图像的特征提取。如图7所示的卷积操作。输入图像的尺寸为,并且其每个元素包含了三个通道的值,可以视为一张彩色图像。该图像经过尺寸为的卷积核处理后,将会得到的矩阵输出。而从数值的角度来看,如图3-2,卷积核就是对局部区域的竖直进行加权求和来得到高层特征信息。
图7. 大小为的卷积核卷积过程
图8. 大小为的卷积核卷积过程
而实际上每个卷积层可能有多个卷积核同时对一个输入进行操作,从而再次得到同尺寸多通道的输出,如图9所示。
图9. 多个卷积核处理过程
这样处理的原因是可以利用不同的卷积核提取不同的特征来实现最后的识别需求。卷积过程会需要大量的计算资源,所以有效稳定地降低卷积的计算量是很必要的,此时伴随着卷积层的是池化层。池化层可以在尽量保留特征信息的基础上降低特征层大小,从而降低后续卷积操作的运算量。根据需要保留的特征,池化层可以进行最大值池化或均值池化等操作。
图10. 最大值池化示意图
为了增强卷积神经网络的表达能力,还会在网络中引入非线性函数,以及网络的激活层。激活层的转换可以让卷积神经网络对分类问题的表达能力以及稳定性更强,从而适应更多的数据量和任务。整个神经网络迭代的目标是使得Loss函数最小。Loss函数是评价网络分类或回归任务好坏的标准,网络中卷积核的内容、全连接层的权重矩阵都是从优化Loss函数的方向出发进行迭代的。其中较为常见的是随机梯度下降法,即让整个网络向着可以让Loss函数值更小的方向优化。
机器人的位姿信息为场地坐标系下的。其中和为机器人底盘中心在场地坐标系下的坐标。为机器人头方向与场地轴所成夹角并沿逆时针递增,该夹角的范围定义在。本文使用了三个神经网络来对不同的输出要求的数据集进行处理,这三个神经网络模型的功能分别是:
-
从视觉传感器采集的图像信息中提取机器人的ROI。
-
在ROI中识别机器人的车轮、装甲板以及灯条作为特征物并提取其bounding box形心的图像坐标。
-
在ROI中估计机器人朝向角信息。
为了得到这三个模型需要使用三种数据集来训练神经网络。一组是机器人本体在场地环境中的标定图片,另一组是ROI中车轮、装甲板以及灯条等特征物的标定图片,最后一组是ROI中机器人朝向的标定图片。对于第一组数据集的标注,本文先用全局相机拍摄场地中的视频图像,然后在vott软件中用矩形框逐帧框出目标物体的位置,并在最后设置该软件将标注的矩形框导出成Pascal VOC格式的数据集。在保存成数据集后利用矩形框信息以及原始图像,结合图像裁剪的方法将机器人ROI图片裁剪出来,以得到第二组数据集和第三组数据集的源图片。对于第二组数据集,可利用和第一组数据集标注的相同方法对机器人ROI图片进行标注,从而得到每张ROI图片中关于特征物的标注矩形框。对于第三组数据集,则利用自定义的可视化标注软件处理每张原始图片。该自定义的可视化标注软件导入机器人ROI图片,并识别由鼠标点击在图片上的机器人起始点和终止点,在两点之间生成一条标识朝向角的箭头,最后保存每张图片中的起始点和终止点以代替朝向角。数据集示例如下所示:
(a)
(b) (c)
图11. 数据集示意图(a:机器人本体,b:ROI内特征物,c:ROI内机器人朝向)
实时检测时则利用模型分别输出机器人本体的ROI,ROI中对应特征物的类别和bounding box的图像坐标以及机器人朝向。
要求1和要求2的实现在神经网络中的输入和输出是类似的:输入原始图片,输出目标物体在原始图片中的图像坐标以及目标物体的类别。这类识别问题被称为目标检测。常见的目标检测是设计不同尺度和长宽比的滑窗输入进CNN中,但是这样的计算量是很大的。解决这个问题较为知名的方法是selective search方法,这是一种可以从图片中选出潜在物体候选框的方法。这种方法会比单纯地遍历整个图片更快。R-CNN,Fast R-CNN以及Faster R-CNN都是以这种选择候选框的方法为基础搭建的,这些方法都分为产生候选框以及检测两个步骤,可以得到较好的精度,但缺点是速度较慢,很难用于实时性要求较高的应用场合。
YOLO神经网络直接将图片划分成若干个小格,并在小格中进行检测和分类任务,直接去掉了获取候选框的步骤。整个神经网络的速度会比上述最快的网络Faster R-CNN还要快很多,但由于划分图像的粒度较粗,所以精度相比于Faster R-CNN较差。但该方案使实时目标检测成为可能。本文将使用yolov3-tiny神经网络来实现要求1和要求2以得到目标检测结果。
yolov3-tiny是一种微型的YOLO,只由9个卷积层和6个最大池化层构成,运算速度会比YOLO快。同时yolov3-tiny增加了多尺度预测来适应不同大小的物体,保持预测的准确性。yolov3-tiny网络结构图如下所示:
图12. yolov3-tiny网络结构图
从网络结构图中可以看出,yolov3-tiny从两个特征层中提取锚点和预测结果(进入yolo层),而这两个特征层上的锚点在输入Input上对应的感受野大小不同,所以yolov3-tiny有两个多尺度预测。
yolov3-tiny神经网络的Loss函数需要综合每个锚框在预测后的定位损失,置信度损失以及分类损失,整个Loss函数计算如下:
其中的,和为三个损失的平衡系数,可以分别设定。和采用的均为交叉熵误差,而采用的是真实偏差值和预测偏差值的平方和。这三个损失函数计算方法如下:
首先是目标置信度损失的计算方法:
其中,表示预测目标边界框中是否真实存在目标,该值从真实标签中提取。表示预测目标边界框中是否存在目标的Sigmoid概率。
目标类别损失和目标置信度损失均处理分类问题,所以这两个损失函数类似,目标类别损失计算方法如下:
其中,表示预测目标边界框中是否真实存在第类目标,该值从真实标签中提取。表示预测目标边界框中存在第类目标的sigmoid概率。
目标定位损失的计算相当于是回归问题,所以使用的是锚框和真实bounding box中真实偏差值和预测偏差值的平方和。同时由于真实bounding box的标记值是位于输入图片上的图像坐标值,而锚框的值是位于特征层上的图像坐标值,为了避免繁杂的尺寸变换并且使得损失函数计算简单,定位损失对这两组偏差值做了相同的映射处理,以保证数值的稳定:
其中表示预测矩形框坐标偏差量,表示与锚框匹配的bounding box之间的坐标偏差量,为预测的目标矩形框参数,为各个锚框的参数,为和对应锚框匹配的bounding box参数。
本文在实现要求1和要求2时,首先加载两个相同的yolov3-tiny模型,然后根据实际的原始图像尺寸对模型尺寸参数进行了微调,随后使用数据集a和数据集b对这两个网络分别进行训练以完成不同的识别任务。
而在机器人朝向预测方面(要求3),网络的输入是原始图片,同时网络需要回归出目标的朝向信息。这一输出内容和前两个要求的输出内容不相符,因此本文根据典型的神经网络模型搭建了一个朝向预测网络,并使用数据集c来实现机器人的朝向预测。该网络模型如下所示:
图13. 朝向角识别网络结构图
网络模型中使用了4个深度方向的可分离2D卷积(SeparableConv)来代替卷积层,这是因为这种卷积方法可以较为有效地减少模型参数数目从而降低模型复杂度。网络最后需要将卷积层输出的特征层平铺成144个元素再输入后续的全连接层(Dense)来回归实际需要的角度值。本文在网络最后并没有直接回归机器人朝向角度值,而是回归朝向角度值对应的两个三角函数值和。这是因为0度和360度的实际朝向是一致的,直接输出朝向角容易使网络模型识别效果差。朝向识别网络的Loss函数采用的MSE(均方误差)函数,该函数可以表示误差平方和的平均数:
训练时将数据集c导入该模型进行训练以实现机器人朝向角度的回归。
神经网络输出的数据有bounding box的图像坐标以及对应的ID概率(每个bounding box都会对应四个ID概率),同时还有机器人的朝向信息。bounding box的图像坐标可以解算得到中心坐标,转换关系如下式所示:
式中,,,为bounding box左上角和右下角两点的图像坐标,输出的和则为bounding box中心的图像坐标。这里近似地将图像的中心坐标作为特征物的图像坐标,并结合特征物距离地面的高度可以求解出特征物的世界坐标。计算如下式所示:
式中为经过标定已知的转换矩阵,为场地坐标系中特征物在轴方向的坐标,即物体的实际高度。利用可以求解出尺度系数,从而将和得到,从而求解出特征物在场地坐标系下的三维坐标。
图14. 机器人特征识别与定位
对于机器人底盘中心来说,在场地坐标系中其在轴方向的坐标为0(即令底盘平面和场地坐标系的平面重合),结合各个特征物和底盘中心的尺寸信息和预测的朝向信息就可以得到机器人底盘中心的世界坐标。这里以灯条特征物为例进行说明,示意图如下图所示:
图15. 解算底盘中心坐标示意图
图中点为经过神经网络识别的灯条特征物中心点在场地俯视图上的投影点。为机器人底盘中心在场地俯视图上的投影点。假设神经网络识别得到的朝向角为,则机器人底盘中心的坐标计算如下所示:
上式中为灯条与底盘中心在俯视图下的直线距离。根据ROI框可以粗略估计一个机器人的底盘中心位置根据ROI框粗略估计一个机器人的底盘中心位置,该点位于第一个神经网络提取得到的机器人ROI的中心偏下部分。在坐标转换方程中设定高度,并将底盘中心位置代入方程左侧的图像坐标,可得在估计的底盘中心位置在世界坐标系下的坐标。
从第二个和第三个神经网络中可以得到机器人特征物的图像坐标和机器人实际朝向。将特征物的图像坐标结合特征物的实际高度以及机器人实际朝向可以推算出n个世界坐标系下机器人的底盘中心坐标。以灯条模块为例:
第二个神经网络可以得到灯条模块的图像中心坐标,结合灯条的高度和坐标转换方程,可以得到灯条中心位置在世界坐标系下的坐标。再结合机器人的实际朝向角可得世界坐标系下的底盘中心坐标,计算如下:
上式中为灯条模块与底盘中心在俯视图下的直线距离。
由于第三个神经网络输出的朝向角度表示的可能是机器人实际朝向角度或者实际朝向角度加180°,所以还需要将代入上式。故灯条模块可以计算出2个世界坐标系下的机器人的底盘中心坐标。而装甲板和车轮由于不在机器人底盘的对称轴上,所以通过装甲板和车轮的图像中心坐标推导出的世界坐标系下机器人的底盘中心坐标均为4个。至此,世界坐标系下可能的机器人底盘中心坐标数量为。其中,和分别为第三个神经网络识别出灯条,装甲板及车轮的数量。
最后将世界坐标系下不可能为机器人底盘中心坐标的数据剔除,并将所有可能的数据聚类。数据剔除的方法为将所有可能的坐标与第一步中估计的坐标计算距离,如果距离超过阈值则视为异常数据,则进行剔除。数据聚类的方法是一个迭代过程。该过程将可能坐标的平均值逐步收敛到第一步估计的坐标附近,直到平均值和第一步估计坐标之间的差值小于阈值,此时输出平均值为世界坐标系下机器人底盘中心坐标。
神经网络预测位姿的同时可以利用特征物的类别来区分出不同ID(红1,红2,蓝1,蓝2)的位姿信息,但如果神经网络在判断某ROI中的机器人ID时出错,就可能导致该ID机器人在场地上的位姿出现很大的漂移,造成定位数据的不准确。所以本文跟踪不同ID机器人的历史位置以及ROI中特征物相对于某ID的概率,使用卡尔曼滤波以及匈牙利匹配算法保证位姿的准确性。
卡尔曼滤波(Kalman filtering)是一种利用线性系统状态方程并通过系统输入输出的观测数据来对系统状态进行最优估计的方法。它能在测量方差已知的情况下从一系列存在测量噪声的数据中估计动态系统的状态。其核心公式如下所示:
第一个式子中为基于时刻状态对状态的预测值,即机器人的位姿,为时刻状态的最优结果,对应于Kalman滤波器上个状态的状态矩阵。为时刻系统的控制量。为状态转移矩阵,由于本文选择的机器人为麦克纳姆轮全向底盘,所以将其运动模型设定为方向和方向的匀加速运动来迭代滤波器。设定如下所示:
其中为滤波器的迭代周期,考虑神经网络运行的速度,本文设定为1,即每1s迭代一次滤波器。为控制输入矩阵,考虑匀加速运动的运动方程可以得出。该式表示的是基于时刻的状态对时刻状态的预测值,此时输入和机器人相关的位置和朝向参数可以得到一个预测的位置和朝向矩阵。
第二个式子中为基于时刻的协方差计算时刻协方差的预测值,而为时刻协方差的最优结果,表示的是系统过程噪声协方差。该式是计算对应协方差矩阵的预测值。的设定主要依据滤波器调试结果和经验,本文设定矩阵如下:
第三个式子中为时刻的Kalman增益,为估计量的方差占总方差的比重。而和分别为系统的测量矩阵和测量噪声协方差,分别设定如下:
第四个式子和第五个式子则是更新时刻的数据。为时刻系统状态的最优结果,为时刻系统的测量值。为时刻系统最优结果对应的协方差。
实际运行时,本文先利用卡尔曼滤波的预测结果和机器人实际测量的位姿计算IOU值,IOU(Intersection Over Union)是衡量两个矩阵交叠情况的指标,其计算公式如下所示:
IOU值越大表示两个矩形更重叠。卡尔曼滤波预测出四个不同ID机器人当前时刻的位置和朝向再结合机器人底盘的尺寸可以得到四个分布在场地坐标系下的矩形,而当前神经网络识别并经过坐标变化之后得到的位置和朝向也可以得到四个矩形。本文利用这八个矩形每两个之间(预测出的矩形和转换得到的矩形成对计算)的IOU值来衡量该检测结果对应机器人ID的概率。
同时神经网络识别过程中还会根据当前特征物的特征来输出该机器人对应ID的概率。比如特征物中蓝色偏多,则当前机器人属于蓝方的概率更大。所以还可以得到基于特征物的一组对应ID概率。本文将基于IOU计算的ID概率和基于特征物的ID概率相结合得到当前神经网络解算得到的四个机器人位置和朝向对应四个ID的总概率。
匈牙利分配算法是一种在多项式时间内求解任务分配问题的组合优化算法。本文利用该算法和上述步骤解算得到的概率来给每个位姿信息分配机器人ID。示意图如下图所示:
图16. 匈牙利算法示意图
图中X为解算得到的四个位置和朝向,Y为四个机器人的ID。本文从四个位置和朝向中分别选择出大于0.2的概率,其他的ID对应概率很低,可以直接剔除。此时会有一些位置和朝向可能在一个以上的ID上存在大于0.3的概率,例如图中的X1和X2,它们对于Y1的概率都大于0.3。匈牙利算法则利用ID和位置无法共享的原理最大化分配结果,来保证ID信息的合理分配。
通过匈牙利分配算法选出每个检测结果对应的ID的位置和朝向之后可以进一步更新卡尔曼滤波器。这样能得到相对稳定的识别结果,并且可以在一定程度上保证位置变化的连续性。
对于车载端感知部分算法,基于CenterNet深度学习目标检测方法,通过在教师学生网络中加入知识蒸馏,我们构建了一种基于深度学习与知识蒸馏的目标检测方法。在该部分中,第1小节主要介绍了CenterNet目标检测方法的网络结构及Loss函数计算;第2小节介绍了基于CenterNet的教师学生网络,及蒸馏方法;第3小节详细介绍了针对知识蒸馏进行CenterNet的Loss函数改进。第4小节中进行了不同的蒸馏策略的比较,同时将基于深度学习与知识蒸馏的目标检测方法和未进行知识蒸馏的目标检测方法比较,反映出知识蒸馏针对检测效果的提升。最后,本部分结尾将介绍本方法部署于RoboMaster AI机器人数据集上进行的测试。
CenterNet目标检测方法主要包含三部分。第一部分是对图片预处理,实现数据增强。第二部分是骨干网络(Backbone),用于提取目标特征。第三部分是关键点计算,利用骨干网络提取的特征图获得关键点热力图,同时利用关键点预测目标的类别、目标框大小和目标中心点偏置。第四部分是损失计算,针对热力图、目标边框的大小和目标中心点偏置进行损失计算并反向传播,如图17所示。
图17. CenterNet目标检测方法框架
在CenterNet网络训练前,会对训练图像进行空间变换。会随机对图像进行平移、镜像、旋转、缩放、裁剪处理。这样的处理是为了修正图像采集时造成的系统误差和采集设备带来的随机误差,如成像角度、不同镜头带来的影响。同时然后进行下采样因子为4的下采样,然后随机对图像的亮度,饱和度,对比度进行处理到达锐化图片的效果,对于图中没有图像区域进行了填充。由此得以对图像进行增强,突出图像中的有用信息,扩大物体特征差别,提高识别效果。经过这些处理获得大小为1281283的图像用于训练。如图18为原始图像,经过预处理后可以得到如图19的处理后图像。其中图像进行了平移,翻转,锐化的处理。
图18. 原图像
图19. 预处理后图像
CenterNet目标检测方法可以使用多种骨干网络,如ResNet,DLA,Hourglass网络。各类骨干网络的由于其结构,深度大小不同其对特征提取的效果也不同。在CenterNet目标检测方法中可以使用4种网络包括ResNet-18,ResNet-101,DLA-34,Hourglass-104。通常而言,深度越深,结构越复杂的网络其能够获取的特征更多,更复杂,因此也有更好的训练测试效果。但是由此会带来更多的计算量,同时需要更大的存储空间。
在本设计中将采用ResNet-101和ResNet-18网络。为了从特征图中获得更大分辨率的输出,对于ResNet网络在其原有的4层结构后加入了带有反卷积的3层网络。ResNet网络第4层输出通道数为512,经过反卷积上采样后通道数从256变成128在变成64,最后输出3个分支(Header),分别为关键点的热力图(heatmap),目标检测框的长宽回归(wh)以及中心点偏置(offset)。
(1)热力图计算
关键点预测是热力图计算的关键。因为目标中心点即真值的关键点确定了目标在图片中的位置,类别等信息。这也是CenterNet目标检测方法的核心思想,即将对象建模成目标中心点。此中心点反映的则是对象在图中的几何中心点,由此便可以确定图像的位置。而对于一个中心点来说,其几乎只可能属于某一类别的物体,以COCO数据集为例,其包含了80个类别的对象,所以在实际的预测中,会针对每个类别进行目标的中心点预测。
CenterNet目标检测方法参照CornerNet目标检测方法提出的利用关键点定位的方式来确定目标对象的左上角点和右下角点由此确定目标的中心点。这种方式摆脱了利用锚点机制(Anchor)确定目标候选区域的方法。
对于输出图像 ,其中W,H分别为图像的宽和高,3为RGB的三个通道。关键点热力图为
其中R为采样因子,当 表示其为关键点,当 时表示为背景对于热力图的计算如公式(2-2)。其中,,,分别为目标检测框的角点坐标。
经过下采样的坐标为:
其中下采样因子R为4。使用高斯核将其分散到热力图上,其中是目标尺度自适应方差。并且当多个高斯函数发生重叠,则选择关键点值较大的高斯函数。因此不需要再后续处理中做非极大值抑制(NMS)。
如图20,经过处理后的图片,通过热力图的计算,将目标中心点的为热力图中心的热力图分布在原始图像上。对于每个热力图局部,在中心点的颜色最深,然后向四周颜色逐渐变浅。即说明在中心点处,其热力图的置信度预测值最大,向四周逐渐变小。
在检测推理过程中,其寻找中心点的方法是对每个点进行33的最大值池化,从而寻找出一定范围内热力图预测值最大的点,该点则会成为检测的目标中心点。
图20. 热力图分布于图像
(2)目标宽高(大小)回归
目标检测框的宽高决定了目标的大小尺寸。其在CenterNet检测方法中是直接通过回归得到的。假设目标k为 ,其中心点为:
使用关键点预测来预测所有的中心点。然后对每个目标k的大小进行回归,回归的目标的尺寸为:
(3)中心点偏置
由于在预处理中对图像进行了下采样的处理,虽然这样可以缩小图像的尺寸,使其在网络中的计算量更小,但是这样也带来了离散误差。针对COCO数据集,其标签时数据为浮点类型。例如对于一张大小为512512的图片,经过下采样后为128128,如果计算其中心点坐标则为(122.5,102.5)。而在预测中,我们是通过热力图来直接预测其中心点,其预测结果必定为整型,如果经过主干网络预测该点对应的是(122,103),如果这样直接映射到原图片的中心点,必然会带来误差,所以在CenterNet加入对中心点偏移的计算。
针对CenterNet目标检测方法中的热力图,目标检测框宽高,中心点偏移,损失函数也可以分为对应的三部分即热力图(中心点)损失,检测框大小损失,中心点偏置损失:
其中,分别为目标大小损失和中心点偏置损失的超参数,用于调整其与热力图损失的比例。其中中心点(热力图)损失为:
这是一种Focal Loss,其中是图片中关键点的数量。当时,如果预测到该点是真实关键点,由可知,此时损失值就会很小。如果此时预测该点不是真实关键点,即接近于0,那么就会比较大。而可以其到一定的矫正作用。当预测值接近1时,说明该点是一个易于检测的关键点,因此的值就会比较小,说明主干网络已经学习到了这个点,他所需要的训练比重就比较小。而当接近于0时,表明网络还需要增大其学习比重,因为其还没有学习到这个中心点,此时就会比较大。
而当时,若该点是靠近关键点的点,如果此时预测值的值接近于1,的值就会接近于0,并且的值也较小接近于0,但是这种靠近关键点的点如果其值较大,反而会影响中心点的判断,所以会将损失比重增大一些,从而防止其值过大,从而影响对中心点的判断。如果预测值较小,由于中心点周围的点也并不是直接都为0,所以的值就会较大,从而使其在训练中加大损失比重,提高该点的预测值。
如果这个点不是关键点,并且远离目标中心。此时如果这个点的预测值接近于1,此时说明网络的学习差距较大,此时三项的值都会很大,增加其损失比重,使其在后续的学习中减少其预测值。而当其接近于0时,的值因为都接近于0,并且的值较大,进而进一步减少其预测值。
检测边框长宽损失为:
其中为预测值,取值为:
其采用L1损失,其只针对预测出的关键点所回归出的长宽和真值进行计算。L1损失是最小化绝对误差,即它计算的是真实值和预测值的差值绝对和。中心点偏置损失为:
其中为预测偏置,根据标签在训练过程中计算的偏差为:
为了在CenterNet目标检测方法中引入教师网络中的暗知识,进行知识蒸馏训练,所以需要构建教师学生网络。网络采用的CenterNet的目标检测方法,教师网络选择结构较为复杂,但检测性能较好的骨干网络,学生网络选择结构简单,运算量较小的骨干网络。由此发挥学生网络的轻量化优势,保证实时性,发挥教师网络的优良预测性能,提取出有益的暗知识,用于学生网络的提升。
整个教师学生网络包含三个部分:教师网络、学生网络、知识蒸馏训练,如图21所示。教师网络和学生网络均采用CenterNet目标检测方法。针对学生网络和教师网络的不同需求,选择了不同的骨干网络。对于教师网络,需要其有更好的推理预测性能,从而从网络中能够提取出可以引导学生网络的暗知识。所以其骨干网络选择的是结构较为复杂、运算量较大的ResNet-101。其输出的预测相比学生网络应当更为准确。学生网络要求有较快的推理速度,所以选择运算量较小,但预测性能略低的ResNet-18作为骨干网络。
图21. 教师学生网络结构图
对于知识蒸馏训练部分则是通过将教师网络中输出的热力图,目标宽高,中心点偏置等信息提取出,然后加入学生网络的损失计算中。所以学生网络的损失计算包括两部分,一部分为学生网络输出与标签的硬目标损失,一部分为学生网络输出与教师网络的软目标损失。通过此种方式获得更好的训练效果,使其更加接近教师网络的输出。
教师网络和学生网络工作时处于不同的工作状态。教师网络为已训练完成的网络,其工作目标是输出其准确预测。学生网络此时处于训练状态,其通过计算软目标损失和硬目标损失后,进行误差反向传播,来调整网络权重,达到学习效果。运算流程如图22所示。
图22. 运算流程图
对于深度学习网络来说,通常网络层数越深,其能表达的对象特征信息则越丰富。越深的网络获得的特征信息也越“高级”。在ResNet网络出现以前,随着神经网络的深度增加,模型的效果在一段时间内能取得更好的效果,但是当模型的层数增加到一定程度后,模型的提取效果不再上升,反而会出现下降的情况,这一现象被称为“模型退化”。而出现这一现象的原因是,在反向传播的过程中出现了“梯度消失”的情况。“梯度消失”是在模型的深度达到一定程度,在反向传播时,由于多层回传,其梯度逐渐出现了消失的情况。
而为了解决这一问题,He-Kaiming, Ren-Shaoqing, Sun-Jian等华人学者于2015年提出了ResNet网络。在其中他们提出了残差学习的概念。
对于一个深度较深的网络,其渐层的神经网络已经可以达到一个较好的预测效果,但是如果其深层的神经层不能做到恒等映射,即:
此时深层的网络便会使得预测得效果降低。在残差学习中,为了解决这个问题便直接将网络的恒等映射作为网络学习的一部分。即将问题转化为:
此时在学习中,当深层的神经元无法再提升此时的效果,则学习的方向则是让,这样就可以使得,即实现了恒等映射。所以作者提出了如图23所示的残差网络基本模块。
图23. 残差网络基本模块
由于ResNet是一种经典并且性能优良的网络,所以在本设计中也采用了ResNet为骨干网络。同时为了更好的比较蒸馏前后的效果,教师网络和学生网络均采用了ResNet网络,只是采用了不同深度的网络。对于学生网络的ResNet-18其网络结构如图24所示。
图24. ResNet网络结构
其中第一层、第二层、第三层和第四层由2个基本模块构成,基本模块结构如图25所示。其结构为上一层网络的输出经过一个卷积层后再进入一个BN归一化层。经过归一化后,通过Relu激活函数获得非线性。再次进入卷积层,最后经过一个BN归一化层后输入到下一层的神经网络。其中归一化层主要有两个作用。一是防止梯度消失和二是梯度爆炸。同时由于ResNet网络的特性,有旁路的存在,结合BN归一化层,对于梯度爆照和梯度消失有更好的改善效果。
图25. 基本模块结构图
为了使特征图具有更高分辨率的输出,在经过ResNet网络后,进行了转置卷积的处理,从而达到上采样的效果。转置卷积的方法采用的是双线性插值法。并且将其中的卷积层,变为可变卷积层。使用可变卷积层的优势在于,在训练过程中,可以根据感兴趣区域,来调整卷积层的形状,而不仅仅是如标准卷积层的33矩阵。
图26. 可变卷积示意
虽然普通的卷积层对于对象的特征提取具有一定鲁棒性,但是其效果还不够明显。对于大部分的目标,其形状几乎是不规则的,用规则的卷积层取提取必然造成特征的丢失。而可变卷积层则对卷积层加入偏置处理,使其在训练过程中,更多的将注意力放在与目标有关的地方。
所以加入可变卷积层,可以使网络更好地对特征进行提取,使网络能够提取到更为有用的特征,避免对图片中的一些无用的特征的提取。CenterNet巧妙地将DCN可变卷积层融入到上采样的过程中,使得网络能更好的利用卷积层中的神经网络资源。避免一些神经元对一些不重要的信息敏感,由此提升整体的检测效果。当然这种改进也带来了额外的计算量,由此会使得训练时间加长,同时增加了卷积的参数量,增加了网络对存储空间的需求。
图27. 标准卷积与可变卷积
如图26所示,可变卷积通过对卷积层进行了偏移的处理,使得每个卷积核的位置发生变化,在训练过程中,根据目标形状,得到一个最为合适的位置偏移,由此来达到可变卷积的目的。当然,偏移信息也是在标签的监督下进行学习。相比于数据增强等方法,可变卷积不需要先验知识,而是通过网络自身的学习过程来达到最好的效果。由图27可以看出,使用可变卷积后,卷积层对目标的特征提取更加地集中,其形状更加符合检测目标地形状。由此使其能够得到更好地特征提取效果。
为了解决轻量化网络的检测性能下降的问题,采用知识蒸馏训练的方法,来提升学生网络的检测性能。知识蒸馏是在分类任务中提出的,而在目标检测任务中,也有分类的步骤,所以可以将知识蒸馏引入目标检测任务中。知识蒸馏的核心目标是要使学生网络学习到教师网络中的暗知识,使学生网络输出更像是教师网络。在CenterNet目标检测方法中,其分类的工作主要是通过热力图预测完成的。所以本方法采用的是基于热力图的暗知识引入,来达到知识蒸馏的目的。同时本方法也尝试了在目标宽高计算中引入知识蒸馏。
在CenterNet目标检测方法中,在计算热力图时会针对数据集的每一个目标类别进行热力图的预测,即每一张图上的热力图和中心点是同一类的目标。在论文中提出了使用交叉熵作为软目标的损失函数,但是对于热力图来说,使用交叉熵并不能很好地体现其优势。交叉熵更适合于简单的分类问题,而热力图不仅反映了目标的类别,同时也反映出目标中心的整体范围,本设计中尝试了交叉熵,L2,Focal Loss等损失函数,但是在交叉熵和L2损失的实验中,软目标损失下降非常缓慢,效果并不理想。所以在本设计中采用的还是Focal Loss在CenterNet上的改进方法,其更好地结合了热力图寻找关键点的特性,所以也得到了更加显著的效果。
Focal Loss是由交叉熵损失改进型而来。前文提到当前深度学习目标检测方法可以分为一阶算法和二阶算法两类。二阶算法相比于一阶算法有更好的准确率,论文作者认为,其主要原因是“样本类别不均”。通常在目标检测时,一张图片中会生成非常多的候选区域,但是这些候选区域中有我们所需要检测的对象的区域非常少,此时负样本的数量就远远大于正样本的数量。所以负样本对损失的影响也占了大部分,而这些负样本中的大部分是易于分类的简单样本,由此造成误差反传时的梯度下降方向并不是期望的梯度下降方向,由此Lin T Y 等提出了一种损失Focal Loss:。
其中表示对象属于某一类别的概率,为超参数。其特点就在于项 可以起到调节损失权重的效果,对于一些预测效果较好的简单正样本就减少其损失的比重,而对一些难负分类的样本,增大其损失的比重,使得模型的按照我们需要的方向进行梯度下降和误差反传。Focal Loss的核心思想就是用一个函数来度量难分类和易分类的目标。Focal Loss与交叉熵在正样本中的比较效果如图28所示。
图28. Focal Loss函数损失对比
由图28可知,在简单易分类样本上,Focal Loss的损失远小于传统的交叉熵损失。当为0时,Focal Loss会退化成交叉熵损失。
在本设计中,将教师网络输出的热力图,提取出后,使用Focal Loss计算学生网络输出和教师网络输出的损失,将其作为软目标损失:
其中表示教师网络的输出。在实际测试中,发现教师网络输出中几乎没有的点。通常在教师网络的输出中,其预测的中心点置信度较高,但没有值为1的点。其原因是为了防止过拟合,否则会极大地增加网络认为其是中心点的特征要求,导致泛化能力下降。
所以在进行损失计算时,对教师网络的输出进行了处理,设置了两个阈值,当置信度输出大于阈值时认为此点为中心点,将其值变为1,当置信度小于阈值时认为此点为背景点,将其值变为0。这样处理减少了在一些中心点预测输出不为1带来的影响,同时也减少了背景点对损失计算的干扰。最后热力图的综合损失为:
其中为调整软目标损失和硬目标损失的超参数。在图29中主要对象为卡车。对于这张图片中的卡车,其通过教师网络的预测如图29,其中图30左侧为在卡车类别(truck)中针对其关键点进行的预测输出,其值较大。而图30右侧是在车(car)中的预测,其值较小。通过热力图的知识蒸馏,将教师网络中对卡车和车这两类对象的关联性即暗知识引入到学生网络中,由此使学生网络突破自身的限制,有更好的预测性能,同时在训练时也能更快地收敛。
图29. 检测图片
图30. 目标对象热力图
在CenterNet中,其宽高的预测是没有对类别进行区分,而是根据其关键点,只对其关键点进行预测。在CenterNet目标检测方法中使用的是L1,通过比较L1损失和L2损失的优劣势,如表1,因此考虑采用L2损失函数,用于计算教师网络和学生网络的损失值。
表1. L1损失和L2损失对比
L1 | L2 |
---|---|
0点不可导 | 处处可导 |
梯度值不变 | 梯度值动态变化 |
收敛较慢 | 收敛较快 |
由于L1损失的梯度值不变,所以其在损失很小的时候梯度值也较大,而对于深度学习,需要在损失较小的时候,其梯度值也比较小。所以L2损失的求解速度也更快。当损失大于阈值时,为损失中加入宽高的软目标损失。当损失小于阈值时,则认为此时学生网络输出已经接近教师网络输出:
目标框宽高如图31所示。
图31. 目标宽高示意图
此时,目标检测宽高损失为:
其中为调整软目标和硬目标比例的超参数。
对于中心点偏移损失同样采用L2损失作为软目标损失:
则最终中心点偏移的综合损失为:
在CenterNet目标检测方法中,中心点偏移损失是一个可选项,且所占损失比例非常小。并且在后续实际测试中,中心点偏移软目标损失下降速度较,迅速趋近于0,所以在最终测试中,未加入中心点偏移的知识蒸馏。
前面几章主要介绍了本设计采用的目标检测方法,对CenterNet目标检测算法进行了详细的介绍。然后针对设计需要进行知识蒸馏,进行了教师学生网络的介绍。最后详细说明了知识蒸馏使用的算法。本章将主要展示本设计的实际效果,并在RoboMaster AI机器人数据集上进行了测试。结果表明通过采用知识蒸馏训练,学生网络的检测效果相较于不加入知识蒸馏的效果有明显提升。
在RoboMaster比赛中目标检测的主要工作是识别出目标和目标的装甲板,然后进一步的获得地方目标同我方目标的距离角度信息,进而对敌方进行打击。图32为标注的数据集原始图片,在RoboMaster AI机器人的工作环境中,有场地遮挡干扰,同时还有现场的光照环境变化。并且在实际检测时,目标尺度变换较大,多机器人混战时,还会有相互的遮挡、重合,对检测方法有一定的挑战。传统方法在多机器人、遮挡的情况下非常容易出现误识别的情况,由此削弱机器人性能。本设计采用深度学习方法可以较好的解决以上矛盾,进一步提升机器人的综合作战指标。
图32. 数据集原始图片
在本设计中,采用了Vott进行数据集的标注。Vott是由微软发布的用于目标检测的一款标注工具。其可以多操作程序平台运行,支持Windows和Linux,同时支持从图片和视频数据读取。其可以导出多种类型的数据集包括VOC,COCO。图33为数据集标注解面。
图33. Vott数据集标注界面
标注的对象包括整车和装甲板。数据集共计8000余张图片,分为训练集,验证集,测试集。采用COCO数据集格式进行标注。由于是目标检测任务,所以选择的是Object instances类型的标注数据。
在标签中包含5个字段:info,licenses,images,annotations,categories。其中info字段包含了图片的年份,版本,下载地址等外部信息,在检测中通常不会使用。License包含图片的相关许可信息。最为重要的是images和annotations字段。Images包含了图片的编号(ID)、宽高、图片名等信息。在实际的使用中最重要的是图片名和编号,因为需要通过其和图片进行对应,其他的信息都可以通过读取图片获取。Annotations包含了目标检测框的信息,包含检测框对象的ID已经检测边框的位置、宽高、以及对象类别。这些都是在后续的训练和检测中不可缺少的信息。Categories包含的是各个对象类别的一个列表。
使用了本方法在RoboMaster AI机器人数据集上进行了测试。测试效果如表2所示。
表2. 在RoboMaster AI机器人数据集测试结果
项目 | IoU | Area(对象大小) | **MaxDets(**图片最大检测目标个数) | 值(学生网络(无蒸馏)/教师网络/学生网络(蒸馏)) |
---|---|---|---|---|
AP | 0.50:0.95 | All | 100 | 0.244/0.270/0.283 |
AP | 0.50 | All | 100 | 0.556/0.639/0.644 |
AP | 0.75 | All | 100 | 0.205/0.203/0.218 |
AP | 0.50:0.95 | Small | 100 | -1.000/-1.000/-1.000 |
AP | 0.50:0.95 | Medium | 100 | 0.079/0.117/0.165 |
AP | 0.50:0.95 | Large | 100 | 0.312/0.351/0.352 |
AR | 0.50:0.95 | All | 1 | 0.287/0.315/0.331 |
AR | 0.50:0.95 | All | 10 | 0.308/0.351/0.361 |
AR | 0.50:0.95 | All | 100 | 0.308/0.351/0.361 |
AR | 0.50:0.95 | Small | 100 | -1.000/-1.000/-1.000 |
AR | 0.50:0.95 | Medium | 100 | 0.204/0.213/0.230 |
AR | 0.50:0.95 | Large | 100 | 0.334/0.376/0.379 |
AP值代表平均准确率,AR值代表平均召回率。IoU是指预测的边框和真实边框的交集与并集的比值,其主要目的是用于判别当前检测框的检测对象是否为正例,当当前IoU值大于阈值时,如大于0.5时,则认为检测框检测到的是正例,此时AP值在IoU为0.5的情况就要多一个正例。AP值代表平均准确率,AR值代表平均召回率。IoU是指预测的边框和真实边框的交集与并集的比值,其主要目的是用于判别当前检测框的检测对象是否为正例,当当前IoU值大于阈值时,如大于0.5时,则认为检测框检测到的是正例,此时AP值在IoU为0.5的情况就要多一个正例。
由于该数据集中所有的机器人和装甲板的目标大小均大于COCO数据认为的小目标对象,所以在对象大小为Small的测试中,测试值均为-1.000。可以从表看出,经过蒸馏后的学生网络在训练效果上,甚至超过了教师网络。
其中在mAP值超过了教师网络0.13,其知识蒸馏的效果提升了约16%。其提升非常明显。同时在召回率上,其也超越了教师网络,其中AR(IoU=0.50:0.95,All,MaxDets=100)的召回率比学生网络高出0.053,比教师网络高出0.01,召回率的提升非常明显。计算F-score值如表3。可以看出,学生网络采用基于热力图的知识蒸馏后,其F-score提升了0.045,效果非常显著。
表3. RoboMaster AI机器人F-score测试值
网络 | 学生网络(无蒸馏) | 教师网络 | 学生网络(蒸馏) |
---|---|---|---|
F-score | 0.2723 | 0.3052 | 0.3173 |
如图34所示,使用本文提出的方法进行训练,网络可以预测出检测的机器人整车的目标检测框和装甲板的目标检测框。同时还会输出其做出预测的置信度。如图34左上角图像和图34左下角图像所示,该检测方法有较好的鲁棒性。在机器人受到其他物体遮挡时,根据对象的部分图像,仍然可以输出其检测的目标框。如图34所示,使用本文提出的方法进行训练,网络可以预测出检测的机器人整车的目标检测框和装甲板的目标检测框。
图34. RoboMaster AI机器人实际检测效果
同时还会输出其做出预测的置信度。如图34左上角图像和图34左下角图像所示,该检测方法有较好的鲁棒性。在机器人受到其他物体遮挡时,根据对象的部分图像,仍然可以输出其检测的目标框。
和传统方法比较,使用深度学习方法更加不容易出现对图片的误识别情况。比如如果选择装甲板的灯条作为检测特征,使用传统方法时,可能将相邻装甲板的相邻两条灯条识别成一个装甲板,由此造成误识别的情况,影响机器人的打击。并且对于传统方法而言,对装甲板的数字进行识别是非常复杂的,并且效果不好,容易出现误检测,而在本设计当中即便目标出现数字模糊,不完整的情况,网络也可以将装甲板上的数字和装甲板一同识别出来。
图35. 加入软NMS的处理效果
在测试时遇到如图35右下角的情况,针对一个对象,出现了多个位置接近,置信度接近的重复检测框,由此会给检测带来干扰。出现这种情况有多个影响因素。一是采用的是实时性较好,检测效果较差的简单骨干网络。其提取特征和预测分类的能力有一定限制。二是CenterNet预测中心点的方法有关。CenterNet在预测时会根据骨干网络的输出,寻找热力图的中心点。而其寻找中心点的方法是通过对每个像素进行33的最大值池化。即在33的范围内寻找最大值点。因此其在网络回归时不需要使用非极大值抑制。但是当出现一些特殊情况,两个峰之点的距离虽然较近,但是其距离大于33的范围,此时可能对一个目标,出现多个预测框的情况。
因此,该方法引入了软非极大值抑制,从而起到将多个检测框合并为一个检测框。加入后的效果如图35所示。非极大值抑制通过计算检测框之间的IoU即目标检测框的交并比,将交并比大于阈值的两个或多个框合为一个目标。由此解决了网络中因为检测对象出现拖影的情况而造成的单个目标有多个检测框的情况。
同时在满足检测的实时性要求下,网络中特征图的尺寸进行了缩小。将输入图像从512512缩小到了160160,特征图则从128128缩小到了4040,使其有更快的运算速度。最终在笔记本平台(CPU:i7 6700HQ,GPU:GTX 960M)上对单张图片测试帧率达到了50FPS,对视频检测可以达到60FPS。检测单张图片的速度比检测视频的速度慢的原因是,检测单张图片每次网络运行完成之后,需要重新地在计算机地硬盘中检索图片所对应的地址和名称,由此需要花费大量的时间。而检测视频只需要一次性将视频读入,进行检测时,将视频中的每一帧图像放入网络中进行运算即可,不用反复的读取图片,由此会出现检测视频更快的情况。但在实际检测中通常是对当前的摄像头所采集到的视频和图片进行处理,所以处理速度还和摄像头的采集的参数有关。视频检测虽然更快,但是其需要存储空间也越大,在一些嵌入式平台上,是无法提供这样的存储空间的。所以视屏检测和图片检测各有优劣,本实验在视频和图像检测上均进行了实验,得到了本文中所提到的结果。