1. 目标检测的单阶段与两阶段
目标检测是计算机视觉领域的一个重要任务,它旨在识别图像或视频中的对象类别并确定它们的位置。目标检测算法可以大致分为两类:单阶段目标检测器和两阶段目标检测器。这两种类型的主要区别在于它们的处理流程和速度与精度的权衡。
1.1 单阶段目标检测器
单阶段目标检测器的特点是在网络模型的一次前向传播中直接预测出所有边界框(bounding boxes)及其类别,这使得这类检测器在速度上具有显著优势,适合实时应用。
单阶段检测器的代表算法包括: (1)YOLO系列:
YOLOv1:最早提出的单阶段目标检测算法之一,通过将输入图像划分为网格矩阵,直接预测边界框和类别概率。
YOLOv2(YOLO9000):在YOLOv1的基础上进行了改进,引入了批量归一化(Batch Normalization)和高分辨率分类器,显著提高了检测精度。
YOLOv3:进一步优化了网络结构,使用了Darknet-53作为骨干网络,并引入了多尺度特征融合,提升了对小目标的检测能力。
YOLOv4:在YOLOv3的基础上,引入了Mosaic数据增强和CSPDarknet53作为骨干网络,进一步提高了检测精度。
YOLOv5:采用了CSPDarknet53作为骨干网络,并通过特征金字塔网络(FPN)进行特征融合,提升了多尺度目标的检测性能。
YOLOv6:采用了多种优化策略,如EfficientRep Backbone、Rep-PAN结构、解耦检测头等,以提高检测精度和速度,并在多个数据集上取得了良好的性能表现
YOLOv7:包括一个高效的主干网络(Backbone)、一个特征强化结构(Neck)和一个检测头(Head),其中主干网络基于YOLOv5的设计,并引入了多种优化策略以提高检测性能
YOLOv8:Ultralytics公司继YOLOv5之后开发的下一代目标检测算法,具有更快的速度、更高的准确率,支持多种视觉任务,并引入了新的backbone、anchor-free策略以及新的损失函数
YOLOv9:通过引入程序化梯度信息(PGI)和泛化高效层聚合网络(GELAN)等创新技术,实现了在保持轻量级的同时,达到前所未有的准确度和速度
YOLOv10:YOLO系列的最新一代算法,它继承了YOLO家族在实时目标检测上的优势,通过消除非极大值抑制(NMS)操作、优化模型架构等创新,进一步提升了检测性能和效率
(2)SSD(Single Shot MultiBox Detector):
SSD通过在不同尺度的特征图上预测边界框和类别概率,实现了对不同尺寸目标的检测。它结合了Faster R-CNN的Anchor机制,提高了检测的召回率。
(3)RetinaNet:
RetinaNet通过引入Focal Loss解决了训练过程中正负样本不均衡的问题,提升了单阶段目标检测算法的精度。
(4)EfficientDet:
EfficientDet通过引入BiFPN和模型缩放机制,构建了具有更高精度和效率的可扩展检测器。
(5)Swin Transformer:
Swin Transformer将Transformer架构应用于计算机视觉任务,通过局部多头自注意模块和移动窗口实现高效的特征提取。
1.2 两阶段目标检测器
两阶段目标检测器首先生成一组潜在的感兴趣区域(Region of Interest,ROI),然后对这些区域进行精细的分类和定位。这种“先筛选再识别”的策略往往能带来更高的检测精度,但计算成本较高,因此速度较慢。两阶段目标检测算法通常包括候选区域生成和候选区域分类及边界框回归两个阶段。
两阶段检测器的代表算法有:
(1)R-CNN系列:
R-CNN:通过选择性搜索生成候选区域,然后使用CNN提取特征并进行分类和边界框回归。
Fast R-CNN:在R-CNN的基础上,通过ROI Pooling层实现了对候选区域的特征提取,提高了检测速度。
Faster R-CNN:引入了区域提议网络(RPN),直接从卷积特征图中生成候选区域,进一步提升了检测速度。
Mask R-CNN:在Faster R-CNN的基础上,增加了对目标掩膜的预测,实现了实例分割。
(2)Cascade RCNN:
Cascade RCNN通过级联多个检测头,逐步提高检测精度,解决了训练和测试阶段不匹配的问题。
(3)FPN(Feature Pyramid Network):
FPN通过自顶向下的特征融合,增强了对多尺度目标的检测能力。
(4)DetectoRS:
DetectoRS通过递归特征金字塔和可切换的Atrous卷积,实现了对不同尺度目标的高效检测
比较与选择
单阶段检测器在速度上有明显优势,特别适合移动设备或实时系统。然而,两阶段检测器在精度上通常更高,尤其在处理复杂场景或小目标时表现更佳。在实际应用中,根据具体的需求(如实时性、精度、资源限制等)来选择合适的检测器非常重要。
随着研究的进展,近年来也有一些工作试图结合两者的优势,例如EfficientDet通过复合缩放方法在精度和速度之间取得了良好的平衡。
2. 目标检测的一些评测指标
目标检测是一项复杂的计算机视觉任务,用于识别图像中的物体并标识出它们的位置。为衡量目标检测模型的性能,提出了多种评测指标。以下是一些常用的目标检测评测指标:
(1)正样本与负样本:
正样本:待检测的目标物,如缺陷检测中的麻点、划痕、破洞等
负样本:目标物所处的不同背景,背景不包含目标物
(2)TP、FP、TN、FN:
TP(True Positive):将正类预测为正类
FP(False Positive):负类预测为正类
TN(True Negative):负类预测为负类
FN(False Negative):正类预测为负类
(2)精确率(Precision):
所有检测出来的目标中,检测正确的概率,又称查准率
公式:Precision = 正确检测的目标实例数 / 所有检测的目标实例数
(3)召回率(Recall):
正样本中有多少被找出来了,又称查全率
公式:Recall = 正确检测的目标实例数 / 实例总数
(4)AP(Average Precision):
检测器在各个 Recall 情况下的平均值,对应 PR 曲线下的面积(AUC,Area Under Curve)
计算公式涉及对每个物体的 Precision 值进行排序、求和,然后除以检测出的物体数量
(5)mAP(mean Average Precision)、mAP@0.5、mAP@.5:.95:
从类别的维度对 AP 进行平均,用于评价多分类器的性能。值在[0,1]区间,越大越好;
将IoU设为0.5时,计算每一类的所有图片的AP,然后所有类别求平均,即mAP;mAP@.5:.95表示在不同IoU阈值(从0.5到0.95,步长0.05)(0.5、0.55、0.6、0.65、0.7、0.75、0.8、0.85、0.9、0.95)上的平均mAP。
(6)准确率(Accuracy):
所有预测中,预测正确的比例
(7)F1-Score:
精度和召回率的调和平均数,常作为多分类问题的最终指标
(8)IOU(Intersection over Union):
用于评估预测框与真实框之间的重叠程度,是目标检测中另一个重要指标,用来评价目标检测算法的对象定位精度,IoU是目标检测的预测框和标签框之间的重叠面积与它们面积并集的比值,数值越大,说明目标检测算法定位越准确。在实际过程中一般会设定一个IoU阈值(比如:0.5),如果大于等于0.5,对象将被识别为“成功检测”,否则将被识别为“错误”。IoU = 两个矩形框相交的面积 / 两个矩形框相并的面积,如下图所示:
(9)检测速度:
包括前传耗时、FPS(Frames Per Second)等,用于评估模型的实时性能。
(10)Params参数量:
网络模型中需要训练的参数总数,
(11)FLOPS、FLOPs、GLOPS、GLOPs、FPS
FLOPS:每秒浮点运算次数,用来衡量硬件性能;
FLOPs:浮点运算次数,衡量算法、模型复杂度,常用做神经网络模型速度的间接衡量标准;
GLOPS: 每秒10亿次的浮点运算数,常作为GPU性能参数但不一定代表GPU的实际表现,因为还要考虑具体如何拆分多边形和像素、以及纹理填充,理论上该数值越高越好。
1GFlops =1,000MFlops。
FPS:每秒传输帧数,网络每秒可以处理(检测)多少帧(多少张图片),即每秒可以处理的图片数量或者处理一张图片所需时间来评估检测速度。
单位换算:
一个MFLOPs等于每秒一百万次(10^6)浮点运算次数;
一个GFLOPs等于每秒十亿次(10^9)浮点运算次数;
一个TFLOPs等于每秒一万亿次(10^6)浮点运算次数;
一个PFLOPs等于每秒一千万亿次(10^6)浮点运算次数;
一个EFLOPs等于每秒一百京次(10^6)浮点运算次数;
FLOPs:注意s小写,是floating point operations的缩写(s表复数),意指浮点运算数,理解为计算量。可以用来衡量算法/模型的复杂度。所以FLOPs才是我们要关注的指标。 补一下FLOPs的计算过程:
这时Nvidia团队在ICLR上发表的论文中附录的内容,介绍了FLOPs的计算过程。很多大佬的计算过程都不一样,可以参考这个回答:FLOPs。但是目前计算FLOPs还没有统一的标准,在torch中可以利用torchstat来计算复杂度。
在评估目标检测模型时,通常会结合多个指标来全面衡量模型的性能。
3. 目标检测工作流程
基于深度学习的目标检测主要包括训练和测试两个部分。
3.1训练阶段
(1)数据预处理:增强训练数据集,提升检测网络的泛化能力。
(2)检测网络:由基础骨干、特征融合和预测网络组成。基础骨干通常采用用于图像分类的深度卷积网络。
(3)特征融合:对基础骨干提取的特征进行融合。
(4)预测网络:进行分类和回归等任务。
(5)标签分配与损失计算:为检测器预测提供真实值,计算分类和回归的损失,并更新检测网络的权重。
(6)非极大值抑制(NMS):筛选去除重叠的检测结果。
(7)目标检测的评估指标:包括准确率、召回率、F1值、平均精度(AP)、均值召回率(mAP)等。
3.2 测试阶段
(1)输入待检测图像,进行前向传播,输出物体的位置信息。
(2)使用NMS对检测结果进行后处理,保留得分最高的检测结果
4.目标检测应用场景
4.1 目标检测技术在多个领域应用
包括但不限于:
(1)车辆和行人检测:自动驾驶汽车中识别道路上的车辆和行人。
(2)交通信号灯检测:识别交通信号灯状态。
(3)路标检测:识别道路标志。
(4)障碍物检测:检测和避免道路上的障碍物。
(5)入侵检测:监控视频中的入侵者检测和跟踪。
(6)丢失物品检测:检测和跟踪丢失的物品。
(7)摔倒检测:监控视频中的摔倒事件检测。
(8)交通监控:检测和跟踪交通违规行为。
还有一些智慧园区、智慧社区、智慧金融、智慧消防等场景下的特定算法应用
——————————————————————————————————
——————————————————————————————————
4.2 2D目标检测在工业界的任务
以下是一些具体的工业级任务示例:
(1)自动驾驶与辅助驾驶系统:
-
车辆和行人检测:识别道路上的车辆和行人,估计它们的位置、速度和方向,帮助车辆做出正确的决策,如避让或停车。
-
交通信号灯检测:识别红绿灯的状态,帮助车辆判断何时停止或继续行驶。
-
路标检测:识别路标,如限速标志、转弯指示等,辅助导航和决策制定。
-
障碍物检测:识别路面上的障碍物,如水坑、石块或垃圾,提供避障策略。
(2)安防监控:
-
入侵检测:监控未经授权的人员进入建筑物或特定区域,及时报警。
-
失踪物品检测:自动检测和跟踪监控视频中的遗失物品,如钱包、手机等。
-
摔倒检测:识别监控视频中老人或身体不便者摔倒的事件,及时通知相关人员。
(3)零售业与顾客行为分析:
-
顾客流量统计:监测商店内的顾客数量和流动情况,优化商品布局和促销活动。
-
行为分析:分析顾客在店内的活动模式,如驻足时间、兴趣点等,以改进购物体验。
(4)工业自动化与质量控制:
-
生产线监控:检测生产线上的产品缺陷,确保产品质量。
-
库存管理:自动识别和计数仓库中的库存物品,简化库存管理。
(5)医疗影像分析:
-
病变检测:识别X光片、CT扫描或MRI图像中的异常区域,辅助医生诊断。
-
细胞分类:在显微镜图像中识别和分类细胞类型,用于病理学研究。
(6)无人机与遥感影像:
-
地形与植被分析:检测和分类卫星或无人机图像中的地形特征和植被类型。
-
灾害评估:在自然灾害后的航拍图像中识别受损建筑和基础设施。
(7)智能城市:
-
交通监控:自动检测和跟踪车辆、行人,监测交通拥堵和违法行为。
-
城市规划:分析城市图像中的建筑密度、绿地面积等,辅助城市规划决策。
(8)体育分析:
-
运动员动作识别:分析运动员的动作和姿势,用于训练指导和运动表现分析。
-
球类运动分析:跟踪球类运动中的球和球员位置,提供战术分析。
(9)虚拟现实与增强现实:
-
环境理解:识别和跟踪虚拟环境中用户周围的物理对象,增强用户体验。
(10)农业与环境监测:
-
农作物健康监测:通过无人机拍摄的农田图像识别农作物疾病和生长状况。
-
野生动物保护:在自然保护区的监控视频中识别和跟踪野生动物。
以上只是2D目标检测在工业级应用中的一部分,实际上,随着技术的进步,其应用场景还在不断拓展
4.3 2D目标检测面临的困难
2D 目标检测在工业级应用中面临多种挑战和困难,以下是一些主要问题:
(1)多样性和复杂性:
-
目标检测任务需要处理不同外观、形状和姿态的目标,这使得检测任务复杂且具有挑战性。例如,目标可能在图像中以不同的大小和位置出现,增加了检测的难度。
(2)小目标检测:
-
小目标物体(如小于30像素的目标物体)的检测是一个难点,因为它们在图像中占据的像素较少,容易被忽略或误判。此外,小目标物体的检测还受到遮挡和图像分辨率的影响。
(3)遮挡问题:
-
目标物体在图像中可能会被其他物体遮挡,这使得检测变得更加困难。遮挡不仅影响目标的可见性,还可能导致检测算法无法准确识别目标的形状和位置。
(4)光线和成像条件:
-
光线变化和成像条件(如雾、雨等)会影响图像质量,进而影响目标检测的准确性。例如,雾天会降低图像的对比度和清晰度,使得目标检测更加困难。
(5)实时性要求:
-
在自动驾驶或工业自动化等应用中,目标检测需要在实时或近实时的环境中进行。这要求检测算法不仅要准确,还要快速,以满足实时处理的需求。
(6)数据集和标注问题:
-
高质量的数据集和准确的标注是训练有效目标检测模型的基础。然而,获取大量标注准确的数据集是一个挑战,尤其是在某些特定领域或应用中。此外,数据集的类别不平衡问题也会影响模型的训练效果。
(7)上下文信息的利用:
-
上下文信息对于目标检测非常重要,但如何有效利用局部和全局上下文信息仍然是一个挑战。利用上下文信息可以提高检测的准确性,但需要复杂的模型和算法来处理这些信息。
(8)模型加速和轻量化:
-
在资源受限的环境中(如移动设备或嵌入式系统),模型的计算效率和内存占用是一个重要考虑因素。因此,设计轻量化的网络结构以减少计算量和提高检测速度是一个关键问题。
(9)多任务检测:
-
一些应用场景需要同时进行目标检测和其他任务(如深度估计、语义分割等)。如何在一个统一的框架中高效地处理这些多任务检测是一个挑战。
(10)泛化能力:
-
目标检测模型需要在不同的场景和条件下具有良好的泛化能力。然而,模型可能会在训练数据和测试数据之间存在分布差异,导致检测性能下降。
这些挑战表明,尽管2D目标检测技术在工业级应用中具有广泛的应用前景,但仍需要在算法设计、数据集构建和模型优化等方面进行持续的研究和改进。
更多精彩内容:
微信公众号:AI算法爱好者角落
知乎解析:AI探索先锋