项目简介
本项目旨在研究由YOLOV5模型在多目标检测任务重的应用。通过设计YOLOV5模型及DeepOCSORT模型来实现多物体检测、追踪,最终达高实时性、高精度的物件检测、分割、追踪的效果。最后通过AX620A完成嵌入式硬件部署
项目研究背景
近年来,近年来,城市建设在不断提高着道路的复杂程度,对自动驾驶汽车判断当下多变的交通场景提出挑战。应用摄像头搭建环境感知系统可为自动驾驶汽车提供全面、丰富的周边环境信息,解决路况感知缺乏导致的城市交通问题。如何实现准确的道路目标检测是自动驾驶汽车感知环境所要解决的最基础和核心技术问题。
目标检测是一种基于目标几何和统计特征的图像处理技术,用于确定图像视野内的目标所在位置并判断其对应类别。在执行驾驶任务时,通过摄像头捕捉道路场景,并利用车载电脑内的目标检测算法对道路目标进行定位和识别,可为自动驾驶汽车提供充足的路况信息辅助其规划与决策,进而保证行车安全。
目标检测算法的发展大致分为两个阶段:第一阶段为传统的目标检测算法,由人工特征选取与选定分类器相结合的方式实现。其中,图像特征提取通常采用尺度不变特征变换 SIFT、方向梯度直方图 HOG和局部二值模式 LBP三种方法;分类器选定则通常采用支持向量机 SVM与Adaboost算法实现任务分类。然而,传统目标检测算法存在以下缺陷:
(1) 人工选取方式难以获取图像的复杂语义信息,对图像特征的表达能力不足,对不同任务的鲁棒性较差;
(2) 特征提取对噪点和方向敏感,易产生信息描述失真,影响分类的准确率。
第二阶段为基于深度学习的目标检测算法。随着卷积神经网络不断发展,由卷积神经网络提取图像特征的方式实现。相比传统目标检测算法不仅误检和漏检率较低,而且特征表达能力和检测精度更优良。目前,基于深度学习的目标检测方法主要分为两类。一类是两阶段目标检测,将候选框提取与分类任务分次进行,第一阶段使用 RPN网络提取目标潜在候选区域,第二阶段对区域位置校准后进行分类任务得到检测结果。由于检测网络在结构设计上注重高准确率,复杂的结构致使检测速度较慢,其代表算法主要有首次将候选区域与卷积神经网络结合的 R-CNN、在 R-CNN 基础上添加金字塔池化层的SPPNe和在 SPP-Net 基础上以感兴趣池化层代替金字塔池化层的 Fast R-CNN等;另一类是单阶段目标检测,将候选框提取与分类任务以端到端方式同时进行,不使用 RPN 网络,只通过基于边框回归的一阶段提取图像特征。由于检测网络在结构设计上注重检测实时性,简单的结构致使检测精度较低,其代表算法主要有将提取候选区域与特征识别两阶段合二为一的YOLO和在YOLO基础上融入锚框机制的 SSD等。
本文针对道路交通场景下的远处目标识别效果欠佳、目标特征表达不充分及目标定位不准确等目标检测问题,以YOLOv5单阶段网络为基础框架进行改进研究:首先,通过增加小目标检测层,提高网络对远处目标的识别能力;其次,将检测头解耦为分支检测方式,增强检测头对征层信息的表达能力;最后,应用K-means++聚类算法重新调整先验框大小,提高网络对道路目标的定位能力。通过上述网络结构调整与先验框改进,使本文算法能够更好地适用于道路交通场景,获得良好的目标检测效果。
研究内容
- 基于DeepOCSORT与YOLOV5的联合部署实现高精度的行人检测追踪方法
DeepOCSORT的优势时利用检测框和跟踪轨迹之间的相似性,在保留高分检测结果的同时,从低分检测结果中去除背景,挖掘真正的物体,从而降低漏检并提高轨迹的连贯性,对比于普通的多目标追踪方法,具有更好的效果, YOLOV5在目标检测算法中具有极大的优势,拥有极高的准确性及是实测检测速度,通过修改DeepOCSORT中的检测器,可以让行人追踪更好的效果。
2,Decoupled-Head融入YOLOV5网络研究并实现行人检测
通过将检测头解耦会增加运算的复杂度,但经过权衡速度和性能上的得失,使用1个1x1 的卷积先降维,并在分类和回归分支里各使用了2个3x3卷积,最终调整到仅仅增加一点点参数。但可以大大提高了收敛速度,且对于性能AP降低非常少,构建YOLOV8检测网络完成对于行人检测算法模型的构建,然后通过数据集训练自己的YOLO网络来实现行人检测。
3,实现AX620A嵌入式平台的算法移植
爱芯派的核心芯片是来自「爱芯元智」的 AX620A,这是一款高算力,高能效比,低功耗的AI SoC芯片,芯片集成了四核 Cortex A7 @ 1Ghz CPU,拥有3.6TOPs@INT8 的高算力NPU,支持4K@30fps的ISP,以及支持 H.264、H.265 编码的 VPU,拥有大算力和优异画质处理能力的 AX620A 可以实现更多的 AI 功能,带来最优的 AI 体验!功耗低于 1W,支持低功耗、低待机功耗以及快速唤醒的特性,让 AX620A 也可以轻松应对电池类产品,所以在AX620A中部署可以更加节省资源,降低部署成本
研究目标
- 结合物体检测追踪任务特性,提出利用DeepOCSORT结合YOLOV5模型完成对于目标检测分割任务的方法。
- 提出基于paddlepaddle框架的AX620A嵌入式硬件部署方法,完成对于嵌入式硬件部署加速,通过剪枝模型,完成高性能部署。
项目创新特色概述
- 首次将DeepOCSORT与YOLOV5联合部署用于物体分割追踪任务,以高性能模型组合完成检测任务,降低计算成本,实现高实时性高精度检测。
- 提出基于paddlepaddle框架的AX620A嵌入式硬件部署方法,完成对于嵌入式硬件部署加速,通过剪枝模型,完成高性能部署,且使得网络更加具有迁移性,降低计算成本。
项目研究技术路线
针对基于物体检测任务的数据集收集、清理、标注及评估,得到较好的训练数据集、完成YOLOV5模型结构的研究及构建、基于DeepOCSORT与YOLOV5的联合部署实现高精度的物体检测追踪方法实施、以及使用提出基于AX620A的嵌入式硬件部署方法。
(1) YOLOV5模型结构的研究及构建
YOLOv5 包含四种不同大小的模型,相较于 YOLOv3、YOLO4,有更好的便携性,可以根据需求移植到不同设备上;改进了特征提取网络,使得提取速度和提取能力都有所提升,不仅保证了精度还提高了速度,被应用于各个领域。为提升运行速度,YOLOv7 对特征提取网络进行了优化,舍去了大量特征信息。相比于新一代的 YOLOv7 算法,YOLOv5算法在特征提取网络中保留了更多的特征并多次优化算法细节,这导致了 YOLOv5 在处理复杂问题时更具鲁棒性和稳定,Yolov5的网络架构如图4.1所示:
图 4.1 YOLOV5网络原理图
Backbone 是主干网络,用于提取图像特征,供后续网络层使用。v6.0 版本之前的 YOLOv5 在主干网络中使用了 Focus 结构,而且提出了两种 CSP 结构。下面具体介绍 Focus 模块和 CSP 模块。的数量扩大到 c,扩大了特征并增加了特征多样性。单个可变形卷积层进行的偏移操作会舍弃原始位置的特征,造成信息的缺失。此外,可变形卷积改变了采样位置,导致卷积操作前后特征图的像素点无法对应匹配,即位置信息的缺失。为了解决上述问题,借鉴了残差网络的思路,将模块的输入与第二个可变形卷积层的输出 concat 往短路上靠,利用输入的原始特征对输出特征进行补全,从而防止训练过程中的梯度消失,又对特征进行补充和重复利用。拼接得到的特征图随后送入 3×3 卷积,将两种不同层次的特征进行融合。图像输入主干网络之前,先由 Focus 模块对其进行切片操作,将高分辨率图像拆分成多个低分辨率图像。如图 4.2 所示,以一个 4×4×3 的输入图像为例,对其进行间隔采样,并将采样结果在通道维度拼接,可将通道扩充为原来的 4 倍,生成 2×2×12 的特征图,随后网络在新的特征图上进行卷积操作。
图4.2 VGG 网络模型图
将尺度为 608×608×3 的图像输入 YOLOv5s 中,经过 Focus 层进行切片操作后变成了 304×304×12 的特征图,然后输入 32 通道的卷积层进行卷积操作,最终得到 304×304×32 大小的特征图。利用 Focus 切片操作将图像的平面信息转换到通道维度,能在确保图像信息无损的前提下实现二倍下采样操作,有利于提升网络速度
且将 SPPF 模块置于主干网络的最后。
由于网络优化时存在梯度重复计算的问题,导致推理过程计算量过大。为了解决这个问题,早在 YOLOv4 中就借鉴 CSPNet[60]的思想,提出了 CSP 模块。研究表明,引入 CSP 模块有利于增强网络的学习能力,能在减少计算量的同时保证准确率,而且还能降低内存消耗。YOLOv4 与 YOLOv5 的主干网络都使用了 CSP 结构,不同之处在于 YOLOv5设计了两种 CSP 模块,结构如图 3.3 所示,其中 CSP1_X 用于主干网络,而CSP2_X 则应用于 Neck 网络。CSP1_X 先将特征图按通道拆分为两部分,一部分进行常规卷积操作,另一部分利用残差网络的思想构建残差组件,最后将这两部分合并得到新的特征图。这种设计可以避免重复计算梯度值,提高模型推理速度。而且带有残差组件的 CSP 结构,在反向传播过程中可以增强梯度值,当主干网络的层数较深时,可以缓解梯度消失的问题,增强网络的特征提取能力。而CSP2_X 用卷积层代替了残差组件,用于将输入的特征图分为两部分,分别计算后再融合,能保留更多图像信息。YOLOv5 模型 v6.0 版本的主干网络与之前版本有所不同,主要表现在以下几方面:
(1)为了便于模型部署,将 Focus 模块换成了 6×6 的卷积层。
(2)使用 C3 模块代替 CSP 模块,而且将主干网络的最后一个 C3 模块引入了残差组件。C3 顾名思义即包含 3 个标准卷积层和若干个 Bottleneck 层的模块。
(3)为了提高速度,减少了主干网络 P3 层中 C3 模块的重复次数。
(4)使用 SPPF 模块代替 SPP 模块,而且将 SPPF 模块置于主干网络的最后。
(2) 基于YOLOv5与DeepOCSORT联合部署实现高精度的物体检测追踪方法
本项目中车辆追踪部分采用YOLOv5替换DeepOCSORT的检测器,,YOLOv5是基于YOLOv3进行优化的模型,通过更改Label assign方式使用TAL算法来进行正负样本分配,进一步克服了分类和定位的错位,且在分类器部分,使用二进制交叉熵,如公式(4.4)所示:
保证所有的正样本Anchor都在GT周围,且还可以更具不同层的特性对不同层的正样本的阈值进行微调。且将RepVGG替换了普通的resnet可以融合resnet和VGG的优点融合,拥有VGG网络小卷积带来的运算速度,且通过单路架构,可以减少resnet消耗的显存占用,在推理阶段RepVGG也可以简化ONNX输出,可以简化网络结构。
在DeepOCSORT中,相较于普通的多目标检测追踪算法只保留高分检测框,保留了每个检测框,并将其分类为了高分检测框和低分检测框,我们首先将高分检测框与检测轨迹相关联,存在一些无法匹配的轨迹,因为通常图像存在一些遮挡、运动模糊和大小更改的情况,将低分数检测框和这些不匹配的轨迹联系起来,来恢复低分数检测框中对象并同时过滤掉背景。在分离这些高分数与低分数的检测框时利用卡尔曼滤波器KT预测T中的每个轨迹的新位置,并进行匹配,如公式(4.5)所示。
第一次匹配,在高分检测框和所有轨迹T之间进行,计算检测框和轨迹预测框之间进行IOU计算,然后完成相似度匹配,如果IOU小于0.2,将拒绝匹配,将未匹配的检测结果保存在 并将为匹配的轨迹保存在 ,第二次匹配在低分检测框与第一次剩余的轨迹 之间进行,将未匹配的轨迹保存进 并删除所有未匹配的低置信度的检测框。最后将第一次关联中未匹配的高置信度的 初始化为新轨迹,然后再每一单独帧的输出为当前帧中的轨迹T的边检和标识框。可以极大的提高MOT的性能。
(3) 基于通过paddlepaddle框架完成AX620A的嵌入式平台移植
不同于大部分深度学习框架,PaddlePaddle(下文简称PP)在深度神经网络定义和描述时,去掉计算图的概念,代之以Program的形式动态描述计算过程。这种程序化的计算描述方式,兼具网络结构修改的灵活性和模型搭建的便捷性,极大地提高了框架对模型的表达能力的同时也保证了高性能,同时在神经网络计算中,矩阵维度足够大,才能最大化对计算资源的利用,充分发挥GPU或是其他异构计算设备的计算能力,从而加速运算。在PP的设计中,通过对序列进行排序,然后沿时间步维度切取出多个Batch并行计算,PP对序列模型没有增加计算量,也无需用户处理填充/去填充相关的细节,从而提升变长序列场景的计算效率。而且重要的是PP还针对特殊场景研发内建(Built-in)并行能力。通过不断地累计本地梯度,并同步最有代表性的少量梯度,在保证模型收敛的前提下可以将通信量减小为原始通信量的1%以下,大大降低了网络通信负载。在带宽压缩到1Gb/s的情况下,通用的多机多卡并行训练方法在吞吐方面已经趋近于0,而基于稀疏通信的并行训练方法依然可以保持较高的吞吐。且在PP框架是国内唯一功能完备的端到端开源的深度学习平台,集深度学习训练和预测框架、模型库、工具组件、服务平台为一体,其间距灵活和效率的开发机制、工业级应用效果的模型、超大规模并行深度学习能力,推理引擎一体化设计及系统化的服务支持等等优势,且口罩识别过程中我们也需要使用到CV方面的模型库。
PaddleDetection物体检测统一框架,覆盖主流的检测算法,即具备高精度模型、也具备高速推理模型,包含Faster-RCNN (支持FPN), Mask-RCNN ( 支持FPN), Cascade-RCNN, RetinaNet, Yolo v3, SSD算法并提供一系列的预训练模型,具有工业化、模块化、高性能的优势。结合飞桨核心框架的高速推理引擎,训练到部署无缝衔接;提供模块化设计,模型网络结构和数据数据处理均可定制;基于高效的核心框架,训练速度和显存占用上有一定的优势,例如,YOLO v5训练速度相比同类框架快1.6倍。此外,本次除了统一检测框架,还发布一系列预训练模型,例如基于改进版的ResNet的检测模型,不增加计算量的情况下,精度普遍提高约1%左右。从而能够更高效的去部署网络,以更低的门槛去实施。
项目目标:
(1) 提出基于YOLOV5优化检测分割算法;
(2) 提出基于YOLOV5与DeepOCSORT架构的目标检测追踪算法;
(3) 提出基于paddlepaddle的嵌入式平台AX620A的部署方法
(4) 实现高实时性准确的物体检测追踪算法;
运行效果图:
https://www.bilibili.com/video/BV15x4y167yp/?spm_id_from=333.999.0.0
项目链接:https://pan.baidu.com/s/1rKbUqVVVZev0m9zmUC6QdQ
提取码可私信博主
项目文件进入文件track.py路径之后,输入命令 python track.py --source test2.mp4 即可运行
电脑有GPU 运行效果更好,若没有,运行效果可能不会很流畅