网络资料整理个人学习,感谢各位大神!(若侵则删)
问题10:卷积-目标检测系列问题
参考:40+目标检测网络架构大盘点!从基础架构ResNet到最强检测器Yolov7再到最新部署神器GhostNetV2
【深度学习】YOLO检测器家族所有版本(2024最新汇总、详细介绍)_yolo各个版本-CSDN博客
YOLO系列算法全家桶——YOLOv1-YOLOv9详细介绍 !!-腾讯云开发者社区-腾讯云
关键挑战:
-
类内变化: 同一目标实例之间的类内变化在自然界中很常见。这种变化可能由多种原因引起,如遮挡、照明、姿势、视角等。这些不受约束的外部因素可能会对目标外观产生巨大影响。 某些目标可能具有非刚性变形或旋转、缩放或模糊等特性,这都使得特征提取变得异常困难。
-
类别数量: 同时检测大量的目标是一个非常具有挑战性的问题。它需要大量的高质量注释数据,这极大的增加了标注成本。 使用少样本训练策略来训练检测算法当前十分热门的研究领域。
-
效率: 当今的模型需要大量的计算资源来生成准确的检测结果。随着移动和边缘设备变得普遍,高效的目标检测器对计算机视觉领域的进一步发展至关重要。
评价指标:
1 Precision
Precision(精确率):Precision 衡量了在所有被检测为正样本的样本中,有多少是真正的正样本。
Precision 的计算公式为:Precision = TP / (TP + FP),其中 TP 是真正的正样本数量,FP 是将负样本错误地标记为正样本的数量。较高的 Precision 表示算法在正样本的判定上更准确。
2. Recall
Recall(召回率):Recall 衡量了在所有真正的正样本中,有多少被算法正确地检测出来了。
Recall 的计算公式为:Recall = TP / (TP + FN),其中 TP 是真正的正样本数量,FN 是错误地未能检测到的正样本数量。较高的 Recall 表示算法能够更好地检测出真实目标。
3. Average Precision(AP)
AP 是根据 Precision-Recall 曲线计算的面积。它对不同召回率下的 Precision 进行插值,并计算插值曲线下的面积。AP 是评估目标检测算法在不同召回率下的综合性能指标。
4. mean Average Precision(mAP)
mAP 是所有类别的 AP 值的平均值。它是评估多类别目标检测算法整体性能的重要指标。
5. Intersection over Union(IoU)
IoU 是用于衡量预测边界框与真实边界框之间重叠程度的指标。IoU 计算为预测框与真实框的交集面积除以它们的并集面积。IoU 通常用于确定预测框是否与真实框匹配。
6. F1-score
F1-score 是 Precision 和 Recall 的调和平均值,用于综合考虑算法的准确性和召回能力。
F1-score 计算公式为:F1-score = 2 * (Precision * Recall) / (Precision + Recall)。
方法分类
参考:https://zhuanlan.zhihu.com/p/694572995
anchor-based。目标检测一般都是采用anchor_based的方法,大致可以分为单阶段检测器和双阶段检测器。它们都是在一张图片上放置大量的预先定义好的 anchor boxes,然后预测其类别,优化这些anchor boxes的坐标,最终将这些优化后的 anchor boxes作为检测结果输出。由于双阶段方法需要优化的 anchors 的数量是单阶段方法的好几倍,前者的准确率要高一些,而后者的计算效率要高一些。在常用的检测基准上,SOTA的方法一般都是anchor_based 的。
- 双阶段方法。Faster R-CNN 的出现确立了双阶段、anchor-based 检测器的主导地位。Faster R-CNN 由一个 RPN 网络和一个 region-wise 的预测网络(R-CNN)组成,然后预测目标。之后,人们又提出了许多的算法来提升其表现,包括结构重新设计、注意力机制、多尺度训练、训练策略和损失函数、特征融合和增强、候选框平衡等。目前在标准的检测基准上,SOTA的结果仍然被双阶段anchor-based方法统治。
- 单阶段检测器。随着SSD(RetinaNet)的出现,由于其计算效率高,单阶段检测器吸引了很多人的关注。SSD 在卷积网络的多尺度上展开 anchor boxes,直接预测物体的类别和 anchor box 偏移量。随后,人们又从多个方面进行大量的工作来提升其性能,如不同层之间上下文信息融合、从零开始训练、引入新的损失函数、anchor优化与匹配、结构重设计、特征增强和对齐等。现在,单阶段 anchor-based 方法已经可以取得与双阶段 anchor-based 方法类似的性能,而速度要更快。
anchor-free。由于FPN和 Focal Loss 的出现,最近学术领域又开始关注在 anchor-free 检测器上。Anchor-free 检测器以两种不同的方式来直接找到物体,无需预先定义 anchors。一种方式是首先定位到多个预定义或自学习的关键点,然后约束物体的空间范围。作者称这种 anchor-free 方法为 keypoint-based 方法(基于关键点的方法)。另一种就是利用中心点或中心目标区域来定义正样本,然后预测它到目标四个边的距离。这类 anchor-free 方法被称作为 center-based 方法(基于中心点的方法)。这些 anchor-free 方法降低了有关anchor的超参数,取得的效果与 anchor-based 方法类似,使它们更具泛化潜能。
检测算法:RCNN
- 基于选择性搜索算法为每个图像提取2,000个候选区域;
- 使用CNN为每个图像区域提取特征;
- 整个RCNN物体检测过程用到三种模型:
- CNN模型用于特征提取;
- 线性svm分类器用于识别对象的的类别;
- 回归模型用于收紧边界框;参考:https://zhuanlan.zhihu.com/p/76603583
这些过程相结合使得RCNN非常慢,对每个新图像进行预测需要大约40-50秒,这使得模型在面对巨大的数据集时变得复杂且几乎不可能应用。
检测算法:Fast RCNN
- 训练是single-stage的,使用multi-task loss;
- 训练时可以更新所有网络层;
- 不需要再硬盘上额外存储;
- 更高精读mAP。
输入是一张图片和多个proposal,经过卷积层计算之后,通过ROI pooling的方式归一到一个fixed size的feature map,最后通过FCs计算分类损失(softmax probabilities)和框回归损失(b-box regression offsets)。
相比于RCNN,Fast RCNN已经取得了长足的进步。但是,Fast RCNN也存在一定的问题,它仍然使用选择性搜索作为查找感兴趣区域的提议方法,这是一个缓慢且耗时的过程,每个图像检测对象大约需要2秒钟。
检测算法:Faster RCNN
Faster RCNN其实可以分为4个主要内容:
- Conv layers。作为一种CNN网络目标检测方法,Faster RCNN首先使用一组基础的conv+relu+pooling层提取image的feature maps。该feature maps被共享用于后续RPN层和全连接层。
- Region Proposal Networks。RPN网络用于生成region proposals。该层通过softmax判断anchors属于positive或者negative,再利用bounding box regression修正anchors获得精确的proposals。
- Roi Pooling。该层收集输入的feature maps和proposals,综合这些信息后提取proposal feature maps,送入后续全连接层判定目标类别。
- Classification。利用proposal feature maps计算proposal的类别,同时再次bounding box regression获得检测框最终的精确位置。
检测算法:SSD
SSD网络以VGG16作为基础的特征提取层Base Layer,选取其中的Conv4_3作为第一个特征层用于目标检测;
在VGG16 Base Layer的基础上,作者额外的添加了几个特征层用于目标检测,将VGG16中的FC7该成了卷积层Conv7,同时增加了Conv8、Conv9、Conv10、Conv11几个特征层。
对获取到的每一个有效特征层,我们都需要对其做两个操作,分别是:
num_anchors x 4的卷积 用于预测 该特征层上 每一个网格点上 每一个先验框的变化情况。
num_anchors x num_classes的卷积 用于预测 该特征层上 每一个网格点上 每一个预测对应的种类。
YOLOv1-YOLOv8之间的对比如下表所示:
Model |
Anchor |
Input |
Backbone |
Neck |
Predict/ Train |
---|---|---|---|---|---|
YOLOv1 |
锚框(7*7grids,2 anchors) |
resize(448*448*3): 训练是224*224,测试是448*448; |
GoogLeNet(24*Conv+2*FC+reshape;Dropout防止过拟合;最后一层使用线性激活函数,其余层都使用ReLU激活函数); |
无 |
IOU_Loss、nms;一个网格只预测了2个框,并且都属于同一类;全连接层直接预测bbox的坐标值; |
YOLOv2 |
锚框(13*13grids,5 anchors:通过k-means选择先验框) |
resize(416*416*3):416/32=13,最后得到的是奇数值有实际的中心点;在原训练的基础上又加上了(10个epoch)的448x448高分辨率样本进行微调; |
Darknet-19(19*Conv+5*MaxPool+AvgPool+Softmax;没有FC层,每一个卷积后都使用BN和ReLU防止过拟合(舍弃dropout);提出passthrough层:把高分辨率特征拆分叠加大到低分辨率特征中,进行特征融合,有利于小目标的检测); |
无 |
IOU_Loss、nms;一个网络预测5个框,每个框都可以属于不同类;预测相对于anchor box的偏移量;多尺度训练(训练模型经过一定迭代后,输入图像尺寸变换)、联合训练机制; |
YOLOv3 |
锚框(13*13grids,9 anchors:三种尺度*三种宽高比) |
resize(608*608*3) |
Darknet-53(53*Conv,每一个卷积层后都使用BN和Leaky ReLU防止过拟合,残差连接); |
FPN(多尺度检测,特征融合) |
IOU_Loss、nms;多标签预测(softmax分类函数更改为logistic分类器); |
YOLOv4 |
锚框 |
resize(608*608*3)、Mosaic数据增强、SAT自对抗训练数据增强 |
CSPDarknet53(CSP模块:更丰富的梯度组合,同时减少计算量、跨小批量标准化(CmBN)和Mish激活、DropBlock正则化(随机删除一大块神经元)、采用改进SAM注意力机制:在空间位置上添加权重); |
SPP(通过最大池化将不同尺寸的输入图像变得尺寸一致)、PANnet(修改PAN,add替换成concat) |
CIOU_Loss、DIOU_nms;自对抗训练SAT:在原始图像的基础上,添加噪音并设置权重阈值让神经网络对自身进行对抗性攻击训练;类标签平滑:将绝对化标签进行平滑(如:[0,1]→[0.05,0.95]),即分类结果具有一定的模糊化,使得网络的抗过拟合能力增强; |
YOLOv5 |
锚框 |
resize(608*608*3)、Mosaic数据增强、自适应锚框计算、自适应图片缩放 |
CSPDarknet53(CSP模块,每一个卷积层后都使用BN和Leaky ReLU防止过拟合,Focus模块); |
SPP、PAN |
GIOU_Loss、DIOU_Nms;跨网格匹配(当前网格的上、下、左、右的四个网格中找到离目标中心点最近的两个网格,再加上当前网格共三个网格进行匹配); |
YOLOX |
无锚框 |
resize(608*608*3) |
Darknet-53 |
SPP、FPN |
CIOU_Loss、DIOU_Nms、Decoupled Head、SimOTA标签分配策略; |
YOLOv6 |
无锚框 |
resize(640*640*3) |
EfficientRep Backbone(Rep算子) |
SPP、Rep-PAN Neck |
SIOU_Loss、DIOU_Nms、Efficient Decoupled Head、SimOTA标签分配策略; |
YOLOv7 |
锚框 |
resize(640*640*3) |
Darknet-53(CSP模块替换了ELAN模块;下采样变成MP2层;每一个卷积层后都使用BN和SiLU防止过拟合); |
SPP、PAN |
CIOU_Loss、DIOU_Nms、SimOTA标签分配策略、带辅助头的训练(通过增加训练成本,提升精度,同时不影响推理的时间); |
YOLOv8 |
无锚框 |
resize(640*640*3) |
Darknet-53(C3模块换成了C2F模块) |
SPP、PAN |
CIOU_Loss、DFL_Loss、DIOU_Nms、TAL标签分配策略、Decoupled Head; |
YOLO算法的核心思想
YOLO系列的核心思想就是把目标检测转变为一个回归问题,利用整张图片作为网络的输入,通过神经网络,得到边界框的位置及其所属的类别。
YOLO系列算法的步骤
(1)划分图像:YOLO将输入图像划分为一个固定大小的网格。
(2)预测边界框和类别&#x