yolo v4和v5目标检测模型(下)


前言

目标检测作为计算机视觉的核心任务之一,其算法性能的优化始终是研究热点。YOLO系列模型凭借其高效的实时检测能力广受关注,但传统方法在密集目标检测、多尺度适应性及后处理冗余框抑制等方面仍存在局限。YOLO-v4作为该系列的重要升级版本,融合了多种前沿技术改进,从网络结构设计、特征融合机制到后处理策略均进行了系统性优化。通过引入DIOU-NMS解决重叠框误删问题,采用CSPNet与SPP增强特征表达能力,结合PAN实现双向多尺度特征融合,并利用Mish激活函数提升非线性建模能力。此外,注意力机制(CBAM)与网格敏感度消除策略进一步提升了模型精度与鲁棒性。YOLO-v4在保持实时性的基础上,显著提升了复杂场景下的检测性能,成为目标检测领域的重要里程碑。

一、yolo-v4非极大值抑制的改进

1、DIOU-NMS

NMS用于过滤掉冗余的检测框并保留最准确的框。在目标检测中,算法会输出多个检测框,但有些框可能是冗余的,这时候就需要进行后处理。
DIOU-NMS和原始的NMS不同,DIoU-NMS不仅考虑了IoU的值,还考虑了两个Box中心点之间的距离,使用了新的公式决定一个Box是否被删除:
其中,RDIoU是两个Box中心点之间的距离,用下面的公式表示:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
其中M是表示置信度最高的候选框,Bi表示遍历各个框和高置信度的重合面积。

2、SOFT-NMS

传统的NMS存在一定的问题:如果一个物体在另一个物体重叠区域出现,即当两个目标框接近时,分数更低的框就会因为与之重叠面积过大而被删掉,从而导致对该物体的检测失败并降低了算法的平均检测
在这里插入图片描述
在这里插入图片描述
将当前检测框得分乘以一个权重函数,该函数会衰减与最高得分检测框M有重叠的相邻检测框的分数,越是与M框高度重叠的检测框,其得分衰减越严重,为此选择高斯函数为权重函数,从而修改其删除检测框的规则。(δ通常取0.3)。

Bag of Specials(BOS)
yolo-v4模型框架增加少许推断代价,但可以提高模型精度的方法,网络细节部分加入了很多改进,引入了各种让特征提取更好的办法,注意力机制,网络细节设计,特征金字塔等,

二、网络结构的改进

1、SPP—net网络

SPP-Net是何凯明《Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition》中提出的一种网络结构,可以不用考虑图像大小,输出图像固定长度,并且在图像变形情况下表现稳定。这种方法在速度上比R-CNN快24-102倍,并且在不同的数据集上面得到验证。在ImageNet 2014的比赛中,SPP-Net在检测中排名第二,分类中排名第三。
在这里插入图片描述
SPP Net的第一个贡献就是在最后一个卷积层后,接入了金字塔池化层,保证传到下一层全连接层的输入固定。在普通的CNN机构中,输入图像的尺寸往往是固定的(比如224*224像素),输出则是一个固定维数的向量。SPP Net在普通的CNN结构中加入了ROI池化层(ROI Pooling),使得网络的输入图像可以是任意尺寸的,输出则不变,同样是一个固定维数的向量。

2、CSP—net网络

CSPNet是作者Chien-Yao Wang于2019年发表的论文《CSPNET: A NEW BACKBONE THAT CAN ENHANCE LEARNING CAPABILITY OF CNN》中提出的一种新的网络结构,它可以增强CNN的学习能力,并且在轻量化的同时保持准确性。
做法:1、每一个block按照特征图的channel维度拆分为2部分。
2、一份正常执行残差网络,另一份直接concat到block的输出

在这里插入图片描述
CSPNet主要是为了解决三个问题:
增强CNN的学习能力;降低内存成本;以及减少计算瓶颈。
它通过将梯度的变化从头到尾地集成到特征图中,从而减少了计算量的同时保证了准确率。在特征金字塔生成过程中采用跨通道池来压缩特征映射,可以减少内存使用。
同时,CSPNet方法可以减少模型计算量和提高运行速度,还能和多种网络结构结合在一起。

三、注意力机制(网络结构的改进)

CBAM(Convolutional Block Attention Module)是一种针对深度神经网络的注意力机制模块,用于提高模型在分类、检测和分割等任务中的表现。它结合了通道注意力和空间注意力,几乎可以嵌入任何CNN网络中,在稍微增加一点计算量和参数量的情况下,可以大大增强模型性能。
在这里插入图片描述
yolo-v4中的Spatial attention module
在这里插入图片描述

四、网络结构的改进—PAN

FPN(Feature Pyramid Networks)是一种用于目标检测和语义分割的深度学习模型,它能够有效地处理不同尺度的目标。
FPN使用图像金字塔的思想,通过对原始图像进行多尺度处理,构造出一个类似真实金字塔的特征金字塔。在特征金字塔的每一层,FPN都会提取出不同的特征,并进行相应的预测。这样,对于不同尺度的目标,FPN可以在不同的特征层上进行预测,从而获得更好的检测效果。
FPN的主要优点是它能够在不增加计算量和内存开销的情况下提高目标检测的精度。此外,FPN还可以通过横向连接和自上而下(top-down)的模型来进一步增强特征信息,提高目标检测的性能。
在这里插入图片描述
自顶而下的模式,将高层特征传下来,希望来个双向,PAN就是双向的

在这里插入图片描述
YOLOV4中并不是加法,而是拼接
在这里插入图片描述

四、网络结构的改进—激活函数

在这里插入图片描述
RELU有点过于绝对了,Mish更符合实际。
在这里插入图片描述

五、网络结构的改进—网格

eliminate grid sensitivity

如果坐标回归预测值都在0-1之间,但是在grid边界怎么表示,此时就需要非常大的值才可以达到边界,为了缓解这种情况可以在激活函数前面加上一个系数(大于1的),
在这里插入图片描述

在这里插入图片描述

六、整体网络架构

残差块(Residual Block)的主体部分。在一个残差块中,输入首先通过一个卷积层进行变换,然后将结果加到原始输入上。这种结构允许网络学习残差函数,即输入和输出之间的差异,而不是直接学习输出。这可以使网络更好地关注输入和输出之间的微小差异,提高了特征提取的能力。
在这里插入图片描述
v4是偏学术上的实现
v5增加了工程上的使用,将来开发可以模仿v5版本的代码

总结

YOLO-v4通过多维度创新实现了目标检测性能的全面提升。在算法层面,DIOU-NMS与Soft-NMS的引入有效缓解了密集目标的漏检问题;网络结构上,CSPNet降低了计算冗余,SPP与PAN的双向金字塔融合增强了多尺度特征表达能力;激活函数Mish与注意力机制CBAM的加入进一步优化了特征建模过程。此外,通过消除网格敏感性与改进后处理策略,模型在边界框回归精度和训练稳定性上取得了显著进步。实验表明,YOLO-v4在保持高实时性的同时,兼顾了检测精度与泛化能力,为后续版本(如YOLO-v5/v7)的工程优化奠定了理论基础。其技术路线不仅推动了目标检测算法的学术发展,也为工业级应用提供了高效可靠的解决方案。

### YOLO V5 目标检测教程 YOLO V5 是一种高效的目标检测算法,官方代码中提供了四种不同规模的检测网络:YOLO V5s、YOLO V5m、YOLO V5l YOLO V5x[^1]。 #### 主要组件介绍 YOLO V5 的架构主要包括以下几个部分: - **Backbone**: 使用 Focus 结构替代传统的卷积操作,以及 BottleneckCSP SPP (Spatial Pyramid Pooling) 来增强特征表达能力[^3]。 - **Neck**: 利用 PANet 进行特征融合,结合自底向上自顶向下的路径聚合机制,有效提升了小物体检测的效果。 - **Head**: 继承了 YOLOv3/v4 中的经典头部设计,负责最终的边界框回归与类别分类任务。 #### 关键技术创新点 为了改善训练过程并获得更好的泛化性能,YOLO V5 引入了一些重要的改进措施: - **残差网络 Residual Network**:采用 CSPDarknet 架构中的残差模块,该结构由两条分支组成——一条为主干通道执行标准卷积运算;另一条则保持恒定不变直至最后时刻才加入到主线上。这种设置有助于解决深层网络中存在的梯度消失难题,并允许更深层次的设计以提升精度[^4]。 - **新型激活函数 SiLU**:相较于传统 ReLU 函数而言,SiLU 不仅保留了非线性的优势,而且拥有更加灵活平滑的变化趋势,尤其适合应用于复杂的视觉识别场景之中。 - **空间金字塔池化层 SPPF**:通过对同一张图片的不同尺度子区域实施最大值采样操作,从而扩大感受野范围,使得模型能够在更大范围内捕捉上下文信息。 #### 性能优化建议 针对实际应用场景的需求,可以从以下几个角度出发来进行针对性调优: - 调整预设参数配置文件内的超参设定,比如学习率策略、正则项系数等; - 增加数据集多样性,利用图像增广手段扩充样本数量; - 尝试不同的损失函数组合方式,探索更适合当前任务需求的形式; - 对于特定领域问题,则可考虑定制专用的数据加载器或评估指标体系。 ```python import torch from models.experimental import attempt_load from utils.general import non_max_suppression, scale_coords from utils.torch_utils import select_device def detect(image_path='data/images/bus.jpg', weights='yolov5s.pt'): device = select_device() model = attempt_load(weights, map_location=device) img0 = cv2.imread(image_path) img = letterbox(img0)[0] img = img[:, :, ::-1].transpose(2, 0, 1) # BGR to RGB, hwc to chw img = np.ascontiguousarray(img) img = torch.from_numpy(img).to(device) img = img.float() / 255.0 pred = model(img.unsqueeze(0), augment=False)[0] det = non_max_suppression(pred, conf_thres=0.25, iou_thres=0.45) if det is not None and len(det): det[:, :4] = scale_coords(img.shape[1:], det[:, :4], img0.shape).round() return det.cpu().detach().numpy(), img0 if __name__ == '__main__': detections, original_image = detect('your_test_image.png') ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值