1.目标检测算法分类

2.目标检测评价指标
2.1 mAP
2.2 IoU

2.3 FPS(frame per second)和FLOPs(floating point operations)
3. 目标检测常用损失函数
- 一类是分类损失,例如交叉熵损失、 Focal Loss等;
- 另一类是位置回归损失,例如L2损失、Smooth L1 loss、IoU loss 等。
3.1 交叉熵损失公式
3.2Focal loss

3.3 回归损失
3.4 IoU损失类的损失函数(GIoU、DIoU、CIoU等)


4.锚框与非极大值抑制
4.1 锚框
4.2 非极大值抑制
- 提取候选框、
- 计算置信度得分、
- 对置信度得分进行排序、
- 选择最高得分的候选框、
- 非极大值抑制、
- 去除重叠的候选框。
5.YOLO


5.1 工作原理
1. 输入图像预处理
-
将输入图像调整到统一的大小(448×448像素)。
2. 特征提取
-
将预处理后的图像送入卷积神经网络(CNN),提取图像的特征表示。CNN通过卷积层、池化层等操作,将图像映射为高维特征图。
3. 图像划分与网格化
-
将特征图划分为S×S个单元网格(grid cell)。每个网格负责预测该区域内可能出现的目标。
4. 边界框预测
-
每个网格单元预测B个锚框(box),每个锚框预测以下五个回归值:
-
边框位置:(x, y, w, h),分别表示边界框的中心点坐标(x, y)和边界框的宽度(w)与高度(h)。
-
置信度:表示边界框包含目标的概率以及边界框的准确度。置信度的计算公式为:
置信度 = Pr(Object) × IOU(bbox, Truth)
其中,Pr(Object)表示边界框中包含目标的概率;IOU(bbox, Truth)表示边界框与真实标注框的交并比(Intersection over Union)。
-
5. 类别预测
-
每个网格单元还会预测C个类别概率值,表示该网格中目标属于各个类别的概率。这些类别概率与边界框的置信度无关,是针对整个网格单元的预测。
6. 预测值整合
-
每个网格单元最终预测的值为:
5B + C
其中:
-
5B表示B个边界框的预测值(每个边界框5个值:x, y, w, h, 置信度)。
-
C表示类别概率值。
-
7. 非极大抑制(Non-Maximum Suppression, NMS)
-
对于每个类别,使用非极大抑制算法过滤预测框:
-
首先根据置信度对所有预测框进行排序。
-
选择置信度最高的预测框作为当前的最优框。
-
计算该最优框与剩余预测框的交并比(IOU),如果IOU超过设定的阈值(如0.5),则将这些预测框抑制(即移除)。
-
重复上述过程,直到所有预测框处理完毕。
-
-
NMS的作用是去除重复的预测框,保留最准确的边界框。
8. 输出最终预测结果
-
经过NMS处理后,得到每个类别的最终预测框,包括边界框的位置、类别和置信度。
5.2 yolov3 主要改进
-
5.2.1 多尺度预测
-
YOLOv3引入了多尺度预测机制,通过不同分辨率的特征图(13×13、26×26、52×26)来预测不同大小的物体边框:
-
13×13:负责预测大物体。
-
26×26:负责预测中等大小的物体。
-
52×52:负责预测小物体。
-
-
每种尺度的特征图上,每个单元格预测3个锚框(共9个锚框)。这种多尺度预测机制显著提升了对小物体的检测能力。
-
5.2.2 基础网络Darknet-53
YOLOv3采用了Darknet-53作为基础网络,结合了残差思想:
-
Darknet-53通过残差模块(Residual Blocks)避免了深层网络训练中的梯度消失问题。
-
与ResNet相比,Darknet-53对ResNet模块进行了简化:
-
去掉了ResNet模块的最后一层(1×1×256)。
-
将倒数第二层(3×3×64)改为3×3×128。
-
5.2.3 二分类交叉熵损失
-
YOLOv3在类别预测中使用二分类交叉熵损失函数(Binary Cross-Entropy Loss),而不是YOLOv2中的Softmax损失。
-
这种改进使得YOLOv3能够更好地处理多标签分类问题(即一个物体可能属于多个类别的情况)
5.3 Yolov5
5.4 yolov8
6.添加模块
6.1 efficientViT替换YOLOV8主干网络结构
6.1.1 effivientvit EfficientViT 的架构特点
EfficientViT 是一种结合了 Transformer 和卷积网络优点的轻量级模型,它的设计目标是高效地提取图像特征,同时减少计算量。以下是它的关键组成部分:
(1)Transformer 编码器-解码器结构
-
原理:EfficientViT 使用了 Transformer 的编码器-解码器结构。简单来说,它通过一种特殊的机制(自注意力机制)来捕捉图像中长距离的依赖关系,比如图片中远处的物体和近处的物体之间的关系。
-
好处:这种结构可以让模型更好地理解全局信息,而不仅仅是局部的细节。
(2)MobileViT 模块
-
原理:在 Transformer 的编码器和解码器中,EfficientViT 使用了 MobileViT 模块。这是一种轻量级的设计,可以让模型在保持高效的同时,减少计算量。
-
好处:它使得模型在处理高分辨率图像时不会变得特别慢。
(3)深度可分离卷积
-
原理:EfficientViT 用深度可分离卷积代替了传统的卷积操作。这种卷积方式将标准卷积分解为两个更简单的操作,大大减少了计算量。
-
好处:它让模型在保持性能的同时,变得更轻量化。
(4)多尺度线性注意力机制
-
原理:EfficientViT 引入了多尺度线性注意力机制,这种机制可以在不同尺度上捕捉图像的全局上下文信息。
-
好处:它让模型能够更好地处理不同大小的目标,同时减少计算成本
6.1.2 将 EfficientViT 替换为 YOLOv8 主干网络的优势
(1)更强的全局特征提取能力
-
原因:EfficientViT 的 Transformer 结构可以捕捉图像中的全局信息,而传统的卷积网络(如 CSPDarknet)更擅长局部特征提取。
-
好处:在目标检测中,全局信息可以帮助模型更好地理解场景,从而提高检测精度。
(2)更高的效率和轻量化
-
原因:EfficientViT 使用了深度可分离卷积和线性注意力机制,这些设计大幅减少了计算量和参数量。
-
好处:替换后的模型可以在保持高性能的同时,运行得更快,更适合在资源受限的设备上部署。
(3)更好的泛化能力
-
原因:EfficientViT 的多尺度线性注意力机制可以让模型更好地处理不同大小的目标,而 YOLOv8 的主干网络在处理小目标时可能稍显不足。
-
好处:替换后的模型在复杂场景下(如小目标检测)表现更好
6.1.3 如何替换
第一步:首先,在yolov8官网下载代码并解压,地址如下:
https://github.com/ultralytics/ultralytics
第二步:
添加efficientVit.py文件,并导入
在ultralytics/nn/backbone
目录下,新建backbone网络文件efficientVit.py
,部分内容如下:
第三步:在ultralytics/nn/tasks.py
中导入刚才的efficientVit
模块:
from ultralytics.nn.backbone.efficientViT import *