yolov7-3d算法原理

一.学习前言

基于Rope3D数据集实现YOLOv7-3D目标检测算法

二.源码与论文下载

三.效果

取自原论文

四.实现思路

1.概述

YOLOv 7 -3D算法应用于路边单摄像机三维目标检测。该方法利用二维边界框、投影角点和相对于二维边界框中心的偏移量等信息来辅助检测3D对象边界框,提高了三维物体边界框检测的准确性.此外,引入了5层特征金字塔网络(FPN)结构和多尺度空间注意机制,提高了不同尺度目标的特征显著性,从而提高了网络的检测精度。实验结果表明,该算法在Rope 3D数据集上的检测准确率明显提高,同时计算复杂度降低了60%。

2.两种类别

单摄像头3D物体检测方法有两类:伪激光雷达/基于深度的方法和不引入额外信息的方法。

2.1伪激光雷达/基于深度的方法

由于在单目视觉中缺乏深度信息,这些方法的准确性与结合LIDAR和图像融合的方法相比明显较低。因此,一些基于伪激光雷达/深度的方法引入了额外的深度估计模块和/或点云辅助。这些方法使用现有的深度估计技术将图像像素转换成伪LIDAR点云,从而允许它们利用基于LIDAR的方法来进行对象检测。相关方法有Mono 3D-PLiDAR,提出了一种利用城市地图来增强远程3D对象检测性能的新方法 、DA-3Ddet 其将特征从不可靠的基于图像的伪LIDAR域调整到可靠的LIDAR域,以提高单目3D对象检测性能。

2.2不引入额外的信息的方法

M3 D-RPN使用基于锚点的方法,利用一系列预定义的3D边界框位置(称为"锚点")并估计相对于这些锚点的偏移。MonoDLE 提出使用3D投影中心坐标来帮助估计粗中心感知3D几何信息。MonoCon 是MonoDLE的扩展,它包含了一个用于投影对象的2D辅助学习模块,并将注意力归一化引入所有头部。MonoFlex 将使用高度比预测对象深度的思想与不确定性理论相结合,以构建用于估计对象中心位置的集成学习方法。ARTM-3D 和MonoGRNet 采用基于关键点的方法,旨在直接回归关键点,并根据关键点的图像位置优化3D边界框大小和位置的估计。

3.本方法

3.1任务描述

目标是使用YOLOv 7 -3D模型在RGB图像中检测车辆对象的3D边界框,给定输入图像,相机内参矩阵,相机外参矩阵,YOLOv 7-3D模型输出的3D边界框B = {B1, B2, . . . , Bn},其中每个边界框Bi由七个自由度组成Bi = (xi, yi, zi, li, wi, hi, θi)。

(x,y,z)表示每个3D边界框的中心点的位置,单位为米。(l,w,h)分别表示长方体的长、宽和高,单位为米。θ表示每个交通对象在空间中的全局方向,即对象的航向方向与摄像机坐标系的x轴之间的角度,范围为[−π,π]。

相机内参数包括焦距、光学中心、像素尺寸等参数,描述了摄像机内部的光学特性和成像过程。fu和fv是焦距,而cu和cv表示光学中心的像素坐标。

相机外部参数描述了摄像机在世界坐标系中的位置和方向。它由平移向量和旋转矩阵组成,将摄像机坐标系中的点映射到世界坐标系。对于3D点X = [x,y,z]T,可以使用相机投影矩阵将其投影到图像平面上,如Y = [u,v,1]T:

3.2模型结构

在模型结构上,YOLOv7-3D可分为骨干特征提取网络、多尺度特征金字塔、多分支解耦检测头三部分。针对Rope 3D数据集中不同交通对象尺度差异较大的特点,提出了一种5层FPN结构和多尺度空间注意机制(MSSA),以提高不同尺度对象的特征显著性和检测精度。该模型的整体网络架构如图1所示。

在这项工作中,该模型不直接预测目标的七个自由度(x,y,z,l,w,h,θ)。相反,它预测了目标的九个自由度(xc,yc,xz,ϕz, σz,l,w,h,sin(θ),cos(θ))。这里,xc和yc表示3D边界框的中心在2D图像上的投影点。ϕz和σz分别表示深度值和深度值的对数方差。这些参数的引入旨在通过考虑方差来量化预测中的不确定性。l、w和h分别表示3D边界框的长度、宽度和高度,而sin(θ)和cos(θ)是计算航向角所需的值。自由度示意图如图2所示。

3.2.1多尺度特征金字塔

主干网络主要负责从图像中提取特征。它由CBS卷积层、E-ELAN卷积模块、MP-Conv卷积模块、SPPCSPC卷积模块组成。CBS卷积层包括卷积层、批量归一化层(BN)和SiLU激活函数,用于提取不同尺度的特征。E-ELAN卷积模块是一种有效的聚合网络,它在保留原始过渡层结构的同时修改了计算块。该算法在不破坏原始梯度路径的情况下,通过算法技术提高了网络的学习能力,并允许不同特征组的计算块学习更多的不同特征。MP-Conv卷积模块使用最大池和卷积块来组合下采样的结果,从而在增加感受域的同时降低了计算复杂度,并有效地向后传播全局信息。SPPCSPC模块包括一个空间金字塔池图层,该图层在四种不同的比例大小下使用最大池来适应不同的分辨率,从而区分不同大小的对象。本文在原有的主干特征网络的基础上增加了一个附加层P6 ∈ ,用于检测公交车等大型目标。此外,利用一个较大尺度的特征P2 ∈ 来检测离摄像机较远距离处的较小车辆目标。此外,将骨干特征提取网络中的通道数减半,避免了因模型深度增加而导致的参数和计算复杂度的过度增加。

3.2.2多尺度空间注意机制

Y = K · [R|T] · X

FPN(特征金字塔网络)是一种用于多尺度目标检测的特征金字塔网络。它通过在主干网络中添加额外的横向连接来构建多尺度特征图。这些横向连接从不同级别的骨干特征图中提取特征,并将它们合并到前一层的特征图中。这样,FPN可以在不同的尺度上获得丰富的语义信息,并提供不同分辨率的特征图。这对于检测不同尺度的物体至关重要,因为物体可能具有不同的大小和比例。本文将YOLOv 7算法中原有的3层FPN结构修改为5层FPN结构,以适应更多尺度变化的目标。FPN特征金字塔的上采样结构由CBS、UpSample、Concat、CatConv和多尺度空间注意力机制组成。

注意力机制被广泛用于通过选择性地关注相关信息并抑制不相关或噪声信息来提高深度学习模型的性能。然而,这些注意力机制忽略了特征图的尺度信息。yolov7-3d提出了一种多尺度空间注意机制(MSSA),该机制自适应地调整P2到P6特征的权重。它增加了对识别任务更有利的尺度特征的权重,同时抑制了其他尺度特征的权重。在空间上,该模型可以专注于图像纹理和上下文信息,有利于识别任务。MSSA的结构如图3所示。MSSA在输入的2D特征图G ∈ 上执行平均池化,池化核大小为,并且分别沿水平和垂直方向沿着步幅。该过程生成压缩特征为。随后,这两个浓缩层的特征被聚合:

(1)首先,连接压缩的特征。由于特征的尺寸不匹配,因此在将特征连接以获得特征图M之前,需要将特征的宽度尺寸和高度尺寸转置。

(2)第二,设置一个超参数r,使得M通过一个2D卷积得到特征图M1,其中通道数从c变为c/r本文中设置r,M1中的通道数不应小于8。然后,插入BN层和SiLU激活函数以获得特征图M2。在该阶段,M2合并输入特征G沿着x轴和y轴的特征压缩,允许输入特征G的空间信息交互。

然后,M2中的混合空间信息被划分、转置并通过另一个2D卷积以将通道编号恢复为c,从而产生。这两个特征图表示空间权重。最后,在和矩阵G的对应元素之间执行逐元素乘法以获得。该过程组合输入特征图中的空间权重,其中增加了对识别任务有益的空间权重。在图中,表示矩阵之间的元素乘法。因此,自适应地调整空间信息S和信道信息C。该过程可表示为:

其中σ表示sigmoid函数,表示卷积过程,f是卷积核。接下来,特征图 在尺度L处自适应地平均池化,以获得大小为2 × 1 × 1w的压缩特征。然后,使用MLP来调整压缩特征,并应用S形函数来获得激活权重。最后,将权重添加到原始特征图中以获得特征图。该过程在标度L处调整权重。它可以表示为:

3.2.3.多分支解耦检测头

在目标检测中,分类和回归任务之间的冲突是一个常见的问题。因此,分类头和定位头的解耦已经广泛应用于单级和两级检测器中。然而,尽管YOLO系列在主干和特征金字塔方面有所发展,但其检测头仍保持耦合,如图4所示。在检测阶段采用多分支解耦检测头。该模型的输出包括2D边界框回归、对象分类、3D框的中心点(xc,yc)到2D图像上的投影、深度值和深度值的对数方差(ϕz, σz)、3D框在长度、宽度和高度(l,w,h)方面的尺度以及计算航向角sin(θ)和cos(θ)所需的值。去耦检测头由以下分支组成:

(1)Reg2D(h,w,4):用于确定每个特征点的回归参数,允许调整预测的边界框。

(2)Obj(h,w,1):用于判断每个特征点是否包含一个对象。

(3)Cls(h,w,num classes):用于确定每个特征点的对象类。

(4)CenterReg3D(h,w,2):用于确定3D对象中心点在图像上的2D投影的回归参数。

(5)深度(h,w,2):用于确定3D对象的深度值和对数方差。

(6)Dim(h,w,3):用于确定对象的3D尺寸(长、宽、高)。

(7)Theta(h,w,2):用于确定3D对象的视角。

最后,将七个预测结果叠加在一起。针对每个特征层获得的结果的大小为Out(h,w,13 + 1 + num classes)。前四个参数用于确定每个特征点的2D回归参数,允许调整预测的边界框。第五个参数用于确定每个特征点是否包含对象。参数6到13用于获得3D空间中对象的9个自由度。最后,使用最后num个类参数来确定每个特征点的对象类。

3.3损失函数

在这项工作中,该模型并没有直接预测物体的七个自由度(x,y,z,l,w,h,θ),而是预测了九个自由度(xc,yc,ϕz,σz,l,w,h,sin(θ),cos(θ))。这里,(xc,yc)表示3D边界框的中心点在图像上的投影2D坐标。(ϕz,σz)表示深度补偿值和深度值的对数方差。引入σz旨在通过考虑方差来量化预测的不确定性。(l,w,h)表示3D边界框的长度、宽度和高度。(sin(θ),cos(θ))来计算航向角。

分类损失函数:

引入了焦点损失来解决Rope 3D数据集中的类不平衡问题。Focal Loss减少了分配给容易分类的样本的权重,并增加了分配给硬样本的权重,以便更多地关注具有挑战性的样本。这有助于在类不平衡的场景中提高模型的性能:

其中Pt是模型预测的概率,指示样本属于目标类的概率。αt为平衡因子,用于调整阳性和阴性样本的权重。一般定义为阳性样本数与总样本数的比值。γ是用于调整易分类样本和难分类样本之间的权重差异的聚焦参数。γ值越大,模型越关注硬样本。

2D框回归损失函数:

对于2D边界框的预测,使用CIoU(Complete Intersection over Union)损失。

其中IOU表示传统的交集对并集,表示预测框和地面实况框的中心点之间的欧几里得距离。α是用于调整位置和形状损失的权重的平衡因子,并且v表示位置和形状损失。具体配方如下:

投影中心点损失函数:

对于三维物体中心点到二维图像的投影,本文采用L1损失进行直接回归。与之前的方法不同,本文将中心点的预测修改为相对于2D边界框中心点的偏移,而不是相对于整个图像的偏移。这里,P表示地面实况投影点坐标,并且P表示预测投影点坐标。

感知损失函数:

对于3D边界框尺寸的预测,本文采用了一个尺寸感知的L1损失函数,适用于大小估计。损失函数定义如下:

这里,||·||1表示L1范数。先前的算法使用基线L1损失,即, = ||s - ||1。值得注意的是,与基线L1损失相比,该方法中使用的维度感知损失包含动态补偿生成。通过重新计算,生成补偿权重,以使最终损失函数的平均值等于标准损失。通过这种方式,建议的损失可以被视为标准L1损失的重新分配。

视点损失函数:

该方法不直接预测物体的偏航角(相机坐标系中物体的全局方位角,范围从−π到π),而是选择回归每个物体的观察角θ。观察角θ表示在围绕相机的y轴旋转对象以与相机的z轴对齐之后,对象的方向与相机轴之间的角度,其中相机原点为中心,并且将相机原点连接到对象的中心的线为半径。这两个角度之间的转换关系如图5所示。此外,每个都被编码为矢量。使用目标位置,可以获得偏航角:此外,每个θ被编码为向量[sin(θ),cos(θ)]T。通过使用θ和物体的位置,可以获得偏航角ry:

最终视点损失函数使用SmoothL1Loss对归一化的[sin(θ),cos(θ)]T计算损失。

深度损失函数:

在3D对象检测中,深度估计是一项具有不确定性的任务,因为真实世界场景中对象的深度可能受到各种因素的影响,例如视点,遮挡和图像噪声。本文利用拉普拉斯随机不确定性损失来预测3D物体的深度,通过引入方差项来量化预测的不确定性。这种损失降低了具有较高方差的深度预测的权重(即,更大的不确定性),从而以更低的不确定性增加深度预测的准确性和可靠性。

这里,P表示真实的2D边界框中心的集合,(ϕz,σz)表示深度偏移和对数方差,z是对象的真实深度值,并且是对象的预测深度值。通过将模型的预测深度偏移量ϕz的S形变换反转回原始线性范围来获得预测深度值

通过组合特征图上中心的投影点(xc,yc),相机内参数的逆矩阵,可以计算物体的3D中心位置(以米为单位):

一旦获得3D边界框的七个自由度,2D图像上的3D框的八个角的坐标可以计算为:

这里,Rθ是偏航角的旋转矩阵,[h,w,l]T表示物体的三维尺寸,[x,y,z]T表示物体的中心坐标。总损失是所有单独损失项的总和,每个损失项都有一个平衡权重参数。

相关推荐
智驱力人工智能17 小时前
小区高空抛物AI实时预警方案 筑牢社区头顶安全的实践 高空抛物检测 高空抛物监控安装教程 高空抛物误报率优化方案 高空抛物监控案例分享
人工智能·深度学习·opencv·算法·安全·yolo·边缘计算
工程师老罗17 小时前
YOLOv1 核心结构解析
yolo
Lun3866buzha18 小时前
YOLOv10-BiFPN融合:危险物体检测与识别的革新方案,从模型架构到实战部署全解析
yolo
Katecat9966318 小时前
YOLOv8-MambaOut在电子元器件缺陷检测中的应用与实践_1
yolo
工程师老罗19 小时前
YOLOv1 核心知识点笔记
笔记·yolo
工程师老罗1 天前
基于Pytorch的YOLOv1 的网络结构代码
人工智能·pytorch·yolo
学习3人组1 天前
YOLO模型集成到Label Studio的MODEL服务
yolo
孤狼warrior1 天前
YOLO目标检测 一千字解析yolo最初的摸样 模型下载,数据集构建及模型训练代码
人工智能·python·深度学习·算法·yolo·目标检测·目标跟踪
水中加点糖1 天前
小白都能看懂的——车牌检测与识别(最新版YOLO26快速入门)
人工智能·yolo·目标检测·计算机视觉·ai·车牌识别·lprnet
前端摸鱼匠2 天前
YOLOv8 环境配置全攻略:Python、PyTorch 与 CUDA 的和谐共生
人工智能·pytorch·python·yolo·目标检测