1.一种跨层融合改进的YOLOv4道路目标识别方法,基于KITTI通用数据集的道路目标识别,其特征在于:
步骤一、下载当前目标检测领域通用数据集KITTI道路目标数据集,剔除原始KITTI数据集中的“Misc”和“Dontcare”两类数据,创建KITTI‑7Classes道路目标数据集,使用该数据集可保证算法检测效果与该领域公开的通用数据集保持一致,构建了使用的道路目标数据集;将测试集、验证集与训练集按照6:2:2的比例划分;
KITTI数据集是目前最大的自动驾驶场景下数据集;KITTI包含各种道路场景采集的真实图像数据;KITTI数据集共包含九类,分别为Car,Van,Truck,Pedestrian,Person sitting,Cyclist,Tram,Misc和Dontcare;由于KITTI中有两类为“Misc”和“Dontcare”,分别为“杂乱无章”类和“不关心的”类,这两种类别是无意义的,并且由于这两类没有特定的目标特征,在不同的图片中其“Misc”类包含的物体是不同的,对原始KITTI数据集中的“Misc”和“Dontcare”剔除,形成KITTI‑7Classes数据集,将在KITTI‑7Classes上进行训练和测试;
步骤二、使用标准YOLOv4网络训练并识别和定位道路目标;使用标准YOLOv4网络对基于步骤一道路目标数据集进行训练,下载标准YOLOv4网络并进行编译;为道路目标数据kitti‑7classes更改cfg文件夹中kitti7.data文件中的训练集、验证集、测试集目录为下载数据集的地址,指定类别数量与类别名称,并将kitti7.name中的“Misc”和“Dontcare”条目删除;在训练执行的命令中根据精度要求设定迭代次数为100,根据本次实验数据集加载kitti7.data,同时加载yolov4.cfg,程序即可开始训练;保存训练过程中各层的权重文件Q1,作为训练结束后检测的权值输入文件;利用权重文件Q1进行测试,得到均值平均精度Mean Average Precision,mAP、召回率Recall与检测时的帧率Frame Per Second,FPS;当目标占据整张图片一半以上大小时,由于实际有效感受野的限制,网络的检测效果并不佳;
训练过程具体如下:
1)构建YOLOv4网络模型,使用Initialization函数进行神经网络各层权值参数的初始化;
YOLOv4由四个部分组成,分别是:(1)Input输入端:指输入网络原始样本数据;(2)BackBone网络:指进行特征提取操作的卷积神经网络结构;(3)Neck颈部:对主干网络提取的图像特征进行融合,并将融合后的特征传递到预测层;(4)Head头部:对图像中的感兴趣目标物体进行预测,并生成可视化的预测框与目标类别;
下载标准YOLOv4网络后,对YOLOv4网络使用make命令进行编译,形成可执行文件darknet;为道路目标数据集KITTI‑7classes编辑cfg文件夹中kitti7.data文件,将class、train、valid、names字符串改为对应数据集的目录与参数,这样就编辑好了标准YOLOv4网络Input部分需要的参数,在训练执行的命令行中设定epoch后,根据本次实验数据集加载kitti7.data,同时加载yolov4.cfg,程序即可开始训练;程序在运行时会使用Initialization函数进行神经网络各层权值参数的初始化;
2)从Input部分输入图片数据,经过Backbone部分,最终输出两个尺度的特征图,并使用分类器输出预测框Pb1与分类概率CPx;
从Input部分输入图片数据,经过Backbone部分,最终输出两个尺度的特征图,将两种不同尺度的特征图送入特征金字塔网络Featuer Pyramid Network,FPN组成的Neck部分,并将融合后的特征传递到预测层中,与此同时Head部分完成目标的分类并输出预测框Pb1与分类概率CPx,其中x为每个分类的索引;
3)对这些数据进行IoU与NMS后处理,将预测框Pb2与真实框Gtb对比,并使用Adam算法进行神经网络各层权值更新;
经过Backbone网络生成的预测框Pb1数量太大,对图片中同一物体有大量检测框存在,造成检测结果冗余;YOLOv4的Head部分会同时完成预测框与其对应的分类概率;对这些数据进行IoU与NMS后处理,得到处理好的数据;这里使用的IoU与NMS为标准YOLOv4的CIoU_loss与NMS;经过这些后处理后就可以得到感兴趣目标的预测框Pb2与其对应的分类概率CPx;同时,使用Adam算法使用后处理过程中得到的loss进行神经网络各层权值更新;
4)循环执行步骤2)和3)继续迭代至命令中设定的epoch值,停止训练,输出记录每一层权重与偏移的文件Q1;利用Q1得到的权重与偏移对测试集进行检测,计算得到mAP、Recall与检测时的帧率FPS;
按照精度要求设置迭代阈值epoch=100,迭代次数小于阈值时,使用Adam算法进行网络各层权值更新,直到阈值epoch=100停止训练,计算mAP与Recall,输出记录每一层权重与偏移的文件Q1;
步骤三、设计Dense‑YOLOv4网络模型;在该模型中设计两种跨层融合模块,分别为Dense‑SPP模块和Dense‑特征融合模块;以YOLOv4为基础网络,将上述两个模块引入到YOLOv4模型中;
在骨架网络上采用CSPDarknet‑53为特征提取网络,在特征融合网络上,将原始SPP模块换为Dense‑SPP模块;同时将路径聚合网络Path Aggregation Network,PAN结构上的与上一尺度的输出特征图进行融合的单路五层卷积模块换为设计的Dense‑特征融合模块;网络的检测器方面,采用原始设计的三尺度检测,网络的输入尺寸为640×640×3,最终检测层特征图大小分别为20×20、40×40和80×80,分别检测大中小目标;
(a)设计一种Dense‑SPP模块,在原始SPP模块的基础上引入跨层连接模块,这样特征图分为两个分支,其中一个特征图进行原始SPP模块卷积、池化操作,另一个特征图进行1×1×512单次卷积,然后两个分支的输出特征图进行Concat拼接操作;Dense‑SPP模块的卷积核的数量为11264,而原始SPP模块的卷积核的数量为20480,相比之下参数量减少了45%;
设计的Dense‑SPP模块同样是采用5个CBL模块,不同之处在于增加一个跨层连接,融合了之前卷积的信息,保留了更多的原始信息;其次,网络具有层次性,也就是说对于同一个任务,不同样本用不同种类的特征就可以完成检测;浅层网络提取的是简单的特征,包括纹理特征,而不同的样本需要不同复杂程度的特征来进行判断,没有Concat拼接操作时,网络没有保存前面浅层网络提取的特征;加入Concat拼接操作后,相当于又在输出上拼接了模块第一层的特征信息,变得有效;
(b)设计一种Dense‑特征融合模块,进入Dense‑特征融合模块,特征分为两个分支,其中一个特征图进行四次卷积,卷积核大小分别为1×1×256、3×3×256、1×1×256、3×3×
256,另一个特征图进行1×1×256单次卷积,然后两个分支的特征进行Concat拼接操作;与原始YOLOv4中的单路五次卷积相比Dense‑特征融合模块的计算量会更少,卷积核参数的数量为5376,而单路五次卷积的卷积核参数的数量为9984,相比之下计算量减少了40%;由于每做一次卷积都会浪费掉一些信息:激活函数的抑制作用、卷积核参数的随机性,此跨层连接相当于把以前处理过的信息直接再拿到现在一并处理,起到了减损的效果;并且Concat拼接操作,相当于又在输出上拼接了模块第一层的特征信息,实现了特征复用;密集跨层连接模块每一层的输出都会和后面所有层建立输入输出关系,而每一层的输入都是前面所有层的累加,这种模式可以把网络浅层的简单特征保留到网络深层,与高语义特征进行融合,可以实现特征复用;这种模可以减少网络的参数量;后续的网络层获得损失函数的梯度和原始的输入信号,使得网络包含了隐式的深度监督,进而容易训练更深的网络同时具有正则化的效果,缓解了训练过程中的梯度消失问题;
步骤四、将步骤二与步骤三模型性能的检测结果进行对比,包括模型检测精度、模型检测速度、模型检测召回率、模型权重文件大小,并查看步骤二与步骤三实际检测的数据集中的图像,分析检测结果。