目标检测基础

目标检测:计算机视觉技术、在图像或视频中自动识别并定位感兴趣的对象。可识别出存在的物体类别、精确给出这些物体在图像中的位置信息,通常用边界框表示。

目标检测技术分为两类

  1. 传统方法

Haar 特征、HOG特征结合SVM、滑动窗口

  1. 基于深度学习方法

两阶段检测:生成一系列可能包含目标的候选区域,然后对这些候选区域进行分类和边界框回归。R-CNN系统(Fast R-CNN、Faster R-CNN)

一阶段检测:直接在网络中预测目标类别和位置,不需要生成候选区域,速度快。YOLO、SSD等

目标检测简介

计算机视觉:让计算机具备类似人类的视觉能力,使计算机能够理解和解释视觉信息,处理图像和视频数据。

最基本的任务包含4项:分类、定位、检测和分割。

分类:解决是什么的问题,判断包含什么类别目标

定位:解决在哪里的问题,确定目标位置

检测:是什么、在哪里的问题。

分割:解决 每一个像素属于哪个目标物体活场景 的问题

语义切割:对每一个像素分类,标识出每个像素所属的对象类别

实例分割:更强调对每个具体的物体实例进行分割。

例如,画面中有多只猫,语义分割可能知识将所有猫所在的区域归为猫类元素。实例分割则将每只猫单独分割出来,作为不同的实例处理。

目标检测:一是定位、二是分类。

边界框

xyxy

即(Xmin,Ymin,Xmax,Ymax),其中(Xmin,Ymin)是矩形框左上角坐标,(Xmax,Ymax)是矩形框右下角的坐标。

xywh

即(Xc,Yc,w,h),其中(Xc,Yc)是矩形框中心点的坐标,w是宽度、h是高度

边界框的分类

真实边界框

在训练数据中标注的,表示目标物体位置的矩形框。用于指导模型学习如何正确定位和识别目标物体。

真实边界框作为监督信号,用于计算模型的损失函数,通过比较预测边界框与真实边界框的差异来指导模型学习如何生成准确的预测边界。

预测边界框

指目标检测模型在给定输入图像后生成的边界框,表示模型对目标物体位置的预测。

预测边界的生成过程如下:

  1. 在模型预测阶段,为图像生成多个锚框(AnchorBox),这些锚框具有不同的大小和宽高比。

  2. 模型为每个锚框预测类别和偏移量。根据预测的偏移量调整锚框位置。

  3. 为了提高检测的准确性,通常会采用非极大值抑制(NMS)方法来去除重复活相似的预测边界框。

锚框

锚框也被称为先验框(Prior Box),锚框主要作用是为模型提供一个预定义的边界框集合,作为预测物体的基准。在训练过程中,模型会学习如何调整这些锚框的位置和大小,以更好地匹配实际的目标物体。

锚框的生成方法如下:

  1. 设定尺度(Scale)和宽高比(AspectRatio)。锚框的生成通常涉及两个关键参数:尺度和宽高比。尺度决定锚框的大小,而宽高比决定锚框的形状。

尺度:通常设定为一组0~1之间的值,表示锚框相对于输入图像大小的比例,例如:0.25、0.5、1.0.

宽高比:通常设定为一组大于0的值,表示锚框的宽度与高度的比例,例如1、2、0.5。

  1. 生成锚框。假设输入图像的高度为h,宽度为w,以每个像素为中心生成不同尺度和宽高比的锚框。

  2. 计算基本锚框。根据设定的尺度和宽高比,计算基本锚框的宽度和高度。

  3. 生成锚框,以每个像素为中心,生成具有不同尺度和宽高比的锚框。

  4. 坐标转换。将生成的锚框坐标转换为标准化的形式。

交并比

交并比 (Intersection over Union, IoU)用于衡量预测边界框与真实边界框之间的重叠程度。交并比的范围在0~1之间,0表示无重叠,1表示完全重叠。值越大表示两个边界框的重叠程度越高, 预测越准确。

交并比是指两个边界框的交集面积与并集面积的比值。

在训练目标检测模型时,交并比用于评估预测边界框与真实边界框之间的匹配程度。

在评估目标检测模型的性能时,交并比用于计算各种评估指标。

非极大值抑制

非极大值抑制(Non-Maximum Suppression,NMS)在目标检测领域,一个目标可能会被多个边界框检测到,这些边界框可能具有不同的位置和大小,但表示的是同一个目标。NMS的作用就是抑制这些重叠的边界框,只保留置信度最高的边界框,从而得到最终的目标检测结果。

NMS具体计算过程如下:

  1. 按照置信度得分排序。将所有边界框按照其对应的置信度得分从高到低进行排序。这样做的目的是优先处理最有可能是目标的边界框。

  2. 选择置信度得分最高的边界框,将其标记为最佳边界框,并从当前列表移除,或标记为已处理,后续不再考虑它被抑制的情况。

  3. 计算IoU。对于剩下的没一个边界框,计算其与当前最佳边界框之间的IoU。

  4. 移除重叠框。设定一个阈值(如0.5),如果某个边界框与当前最佳边界框的IoU超过该阈值,则任务这两个边界框重叠过多,将该边界框从候选列表中移除。

  5. 重复过程,从剩余的边界框中再次选择置信度最高的框,重复上述第3、4步,直到所有边界框都处理完毕。

评价指标

mAP:用于衡量模型预测边界框的类别和位置是否正确

正样本:指的是要检测的物体

负样本:不需要检测的物体

例如:在检测人脸的任务中,人脸是正样本,而背景如窗户、红绿灯等,则是负样本。

最常见的方法就是 通过混淆矩阵,结合分析图表对指标进行综合评价。

TP(True Positive)正样本被正确检测的数量

FP(False Positve)负样本被错误检测为正样本(也称误报)的数量的

FN(False Negative)正样本未被检测出来(也称漏报)的数量

TN(True Negative)负样本被正确检测数量。在目标检测中,通常不关注TN。

准确率 Accuracy

准确率是指模型正确识别目标的比例。公式为

但在目标检测中,由于正样本的不均衡性和目标检测任务的特殊性,准确率并不是理想的评价指标。使用更多的是精度和召回率。

精度 Precision

精度是指模型预测为正例的样本中,实际也为正例的比例。公式为

精度体现了模型在预测为正例样本时的准确程度。

召回率 Recall

召回率是指实际为正例的样本中,被模型正确预测为正例的比例

召回率反映了模型检测出所有正例的能力。

F1分数 F1 Score

F1 分数既用来强调覆盖,也用来强调精准程度,它是精度和召回率的调和平均。

F1分数越高,说明模型的精度和召回率整体就越高。

PR 曲线

PR曲线是以召回率为横轴,精度为纵轴绘制的曲线。通过观察PR曲线,可以直观地了解模型在不同阈值下的精度和召回率的表现。

平均精度 Average Precisiton AP

AP是目标检测中非常流行的一个度量指标,它反映了模型在不同召回率下的平均精度。

AP的计算方式是对不同召回率下的精度进行平均,通常定义为PR曲线下的面积。AP的值域为0,1

平均精度均值 mean Average Precision. mAP

mAP 是 AP 的平均值,用于综合评估目标检测模型在所有类别上的表现。计算mAP时,通常会先计算每个类别的AP,然后对所有类别的AP值求平均值。mAP越高,说明模型的整体检测性能越好。在多类别目标检测中,mAP是一个重要的评价指标。

两阶段目标检测算法

两阶段算法首先生成候选区域,然后对这些区域进行分类和定位。

R-CNN算法

R-CNN(Region-based CNN)是一种基于深度学习的目标检测算法,通过结合选择性搜索(Selective Search, SS)生成候选区域和CNN提取特征,大幅提高了目标检测的准确性和性能。

R-CNN 的核心思想是将目标检测问题转化为一系列候选区域(Region Proposal)的分类问题。

算法流程

  1. 候选区域生成

对于一张输入的图像,首先使用选择性搜索算法获取大约2000个候选区域。选择性搜索算法通过图像分割的方法生成一些原始区域,然后利用合并策略将这些区域合并,得到层次化的区域结构,这些结构包含可能需要的物体。候选区域被认为是可能包含目标的区域。

  1. 特征提取

由于候选区域的大小各不相同,为了适应后续CNN的输入要求,需要先对候选区域进行预处理,将每个候选区域缩放至固定大小(通常为227x227像素),以便输入CNN中。接着进行特征提取,这些缩放后的候选区域被输入预训练的CNN(如AlexNet)中,以提取出4096维的特征向量。这一步将每个候选区域转换为固定大小的向量,便于后续处理。

  1. 分类

使用SVM分类器对提取的特征向量进行分类,将每个候选区域的特征向量输入对应的SVM分类器中,得到每个类别的概率,判断每个候选区域是否包含目标以及目标的类别。对于每个类别单独训练一个二分类SVM。正样本是与真实边界框的IoU大于0.7的候选区域,负样本是与真实边界框的IoU小于0.3的候选区域。对于PASCAL VOC 数据集中的20个类别,需要训练20个SVM分类器。将每个候选区域的4096维特征向量分别输入20个SVM分类器中,得到20个概率值。分类器输出一个2000x20的矩阵,其中每一行代表一个候选框,每一列表示该候选框属于某一类别的概率,选择概率最高的类别作为该候选区域的类别。

  1. 边界框回归与NMS

虽然候选区域已经初步定位了目标的位置,但由于候选区域的生成过程存在误差,需要进一步精确定位目标。为此,R-CNN使用边界回归器对每个候选区域进行微调,以修正候选框的位置。此外,为了消除冗余的候选框,R-CNN还采用NMS算法进行筛选,去除那些与高概率候选框高度重叠的低概率候选框,从而保留最有可能的目标框。

优点

  1. 引入深度学习:开创性、迁移学习

  2. 显著提升检测精度:深度特征提取、多类别检测

  3. 模块化设计:候选区域生成、特征提取和分类分离

缺点

  1. 计算复杂度高

  2. 候选区域数量多:R-CNN 生成的候选区域数量通常在2000个左右,每个候选区域都需要通过CNN提取特征,导致计算量非常大

  3. 特征提取重复计算:由于每个候选区域都需要单独进行特征提取,在候选区域之间存在重叠的情况下,会导致大量的重复计算。

  4. 训练和测试时间长

训练时间长

测试时间长

  1. 内存消耗大

特征存储

模型复杂度高

  1. 依赖候选区域生成算法

选择性搜索:R-CNN依赖选择性搜索算法生成候选区域,而选择性搜索算法本身存在一定的局限性。可能会遗漏一些目标活生成过多的冗余的候选区域。

候选区域质量影响大:候选区域的质量直接影响最终的检测结果,如果候选区域的生成算法不理想,R-CNN的性能也会受到影响。

Fast R-CNN 算法

Fast R-CNN 在 R-CNN 的基础上,吸收了SPP-Net 的思想,使用了与 SPP(Spatial Pyramid Pooling,空间金字塔池化)层类似的兴趣区域池化层,同时将提取特征后的分类和边界框回归添加到深度学习中进行同步训练,使得Fast R-CNN 的训练与 R-CNN的多阶段训练相比更加简洁节省时间和空间。Fast R-CNN 的训练速度是 R-CNN的9倍,检测速度是R-CNN的213倍。

创新点

  1. 共享卷积计算:Fast R-CNN 将整张图像输入CNN,一次性计算出整张图像的特征图,然后根据候选区域在特征图上的位置,直接从特征图中提取每个候选区域的特征,避免了重复计算。

  2. RoI Region of Interest 兴趣区域池化层:为了处理不同大小的候选区域,Fast R-CNN 引入了RoI池化层。 RoI 池化层能将不同大小的候选区域映射为固定大小的特征向量,从而适应全连接层的要求。

  3. 多任务损失函数:Fast R-CNN 采用多任务损失函数,该函数同时考虑分类损失和边界框回归损失。通过这种方式,Fast R-CNN 能够在一次训练中同时优化分类和定位任务,从而提升模型的综合性能。

算法流程

  1. 候选区域生成:与R-CNN类似,Fast R-CNN 使用选择性搜索算法在图像中生成约 2000 个候选区域。

  2. 特征提取与RoI池化:手首先,输入图像通过预训练的CNN(如VGG16或ResNet)进行特征企图,得到整张图像的特征图。在得到特征图后,Fast R-CNN 会根据预先生成的候选框对特征图进行RoI池化操作。RoI池化层是一种特殊的池化层,可以将不同大小的输入映射到固定大小的输出。这样,无论候选框大小如何变化,都能得到固定大小的特征向量。

  3. 分类与回归:将经RoI池化后的特征向量送入全连接层,分别进行分类和边界框回归。分类任务使用softmax函数输出每个候选区域属于各个类别的概率,而回归任务则用于精确定位候选区域的边界框。Fast R-CNN 将分类和位置精调两个任务统一用深度网络实现,即用同一网络同时输出类别概率和边界框回归参数。这样就可以实现端到端的训练,进一步提高检测精度。

RoI池化层

作用是将不同尺寸RoI映射到相同大小的特征图上,以便进行后续的分类和定位操作。

多任务损失函数

将分类损失和边界损失加权求和作为总损失,这样,就可以在一次训练中同时优化分类和边界框回归两个任务。

分类损失通常使用交叉熵函数损失函数。

边界框回归损失则使用L1损失函数。

Faster R-CNN 算法

为了解决选择性搜索在寻找候选区域速度较慢的问题。

Faster R-CNN 采用和 Fast R-CNN 相同的设计,只是它用RPN替代选择性搜索。

一阶段目标检测算法

一阶段目标检测算法直接从图像中预测目标的类别和位置,无须生成候选区域。

YOLO 算法

YOLO v1

2016年由华盛顿大学的 Joseph Redmon 和 Ali Farhadi 开发,是YOLO系列的开山之作。YOLOv1将目标检测任务视为一个回归问题,通过单次前向传播完成图像中所有目标的检测。它将图像划分为网格,每个网格预测边界框和类别,并在PASCAL VOC 2007数据集上实现了63.4%的mAP值。YOLO1的设计使其在保持较高检测精度的同时,能够实现接近实时的检测速度。

YOLO v2(YOLO9000)

2016年底发布,也被称为YOLO9000。这个版本在YOLOv1的基础上加入了锚点和批量归一化,提高了小目标的检测精度,并具备了检测超过9000个不同物体类别的能力。同时,它采用了全卷积网格结构,并在高分辨率图像上进行了微调。此外,它还引入了多尺度训练方法,使同一模型可以在不同大小的图像上运行。

YOLOv3

2018年4月发布,在YOLOv1和YOLOv2的基础上进行了多项改进。它采用了多尺度特征提取技术,优化了网络结构,使用Darknet-53作为骨干网络,并引入了特征金字塔网络(Feature Pyramid Network,FPN)的概念,从而增强了对不同尺度目标的检测能力。YOLOv3在不同尺度上进行三次检测,分别在32倍、16倍和8倍降采样的特征图上进行,这种设计使其能够更好地检测不同大小的目标。

YOLOv4

2020年4月由 Alexey Bochkovskiy 等人发布。YOLOv4通过实验多种技术,如CBN(跨小批量归一化)、PAN(路径聚合网络)、SAM(空间注意力模块)等,找到了训练策略和推理成本之间的最佳平衡点。它还引入了Mosaic数据增强、新的无锚点检测头和新的损失函数等创新

YOLOv5

主要变化在于使用PyTorch而不是Darknet进行开发,由Ultralytics维护。进一步提高了模型的性能,并添加了新功能,如超参数优化、集成实验跟踪和自动导出为流行的导出格式。

YOLO v6

2022年6月由美团视觉智能部发布。YOLOv6采用了无锚点的检测器,并对Backbone和Neck进行了重新设计,以提高GPU(Graphics Procssing Unit,图形处理单元)等硬件的效率。它已被用于美团的许多自主送货机器人中。

YOLOv7

2022年7月由YOLOv4作者发布。YOLOv7提出了模型结构重参化和动态标签分配问题的优化,进一步减少了参数量和计算量。它还增加了额外的任务,如COCO关键点数据集的姿势估计。

YOLOv8

2023年1月由Ultralytics发布。YOLOv8是无锚的, 具有更快的NMS过程,提供了不同大小的模型选择,以适应不同的性能和精度需求。它还引入了新功能和改进,以提高性能、灵活性和效率,支持全方位的视觉AI任务。

YOLOv9

2024年2月由原YOLOv7团队发布。YOLOv9提出了可编程梯度信息(PGI)的概念,并设计了基于梯度路径规划的通用高效层聚合网络(GELAN)。

YOLOv10

2024年5月发布,由清华大学的研究人员使用UltralyticsPython 包创建。此版本通过引入端对端头实现了实时目标检测的改进,消除了NMS的需求。

YOLOv11

2024年9月发布,是Ultralytics推出的最新YOLO模型。YOLO11是一款前沿的SOTA模型,它是先前YOLO版本的基础上引入了新的特性和改进点,以进一步提升性能和灵活性。YOLO11被设计为快速、准确且易于使用,使其称为广泛应用于目标检测与跟踪、实例分割、图像分类和姿态估计任务的理想选择。

相关推荐
TJHHH.2 小时前
SQL注入学习总结
数据库·笔记·sql·学习·注入
自小吃多2 小时前
Capture软件原理图添加元器件笔记
笔记·嵌入式硬件
TJHHH.2 小时前
文件包含漏洞
笔记·安全·文件包含
zjnlswd3 小时前
C# 学习笔记
笔记·学习
远离UE43 小时前
UE5 显存 虚拟内存 深入学习笔记
笔记·学习·ue5
HY小宝F3 小时前
从 APP 层打穿到传感器:树莓派 FFmpeg 底层学习笔记(一)V4L2/ALSA 踩坑与认知重构
笔记·学习·ffmpeg
向上的车轮3 小时前
GitHub开源破圈方法论:一个小白的实战成长笔记
笔记·开源·github
不会代码的小猴3 小时前
4. 控件学习2
开发语言·c++·笔记·qt
210Brian5 小时前
STM32学习笔记(七)TIM定时中断(上)
笔记·stm32·学习