当前位置:   article > 正文

深度学习—yolov5改进小目标检测_yolov5小目标检测改进

yolov5小目标检测改进

改进目的

自动驾驶仿真项目中,需要对一些小目标进行检测,比如:交通指示灯、标志牌等,如果用官方的yolov5网络会发现其训练的模型检测效果不是很好。正好浏览到了一篇很好的关于yolov5改进小目标检测的论文,论文地址: http://www.c-s-a.org.cn/html/2022/12/8835.html ,下面对论文里提到的改进方法做一个复现

改进思路

1.增加小目标检测头

在YOLOv5模型上通过P2层特征引出检测头结构如图,P2层检测头分辨率为160x160像素,相当于在主干网络只进行了2次下采样操作,含有目标更为丰富的底层特征信息。颈部网络中自上而下和自下而上得到的两个P2层特征与主干网络中的同尺度特征通过concat形式进行特征融合,输出的特征为3个输入特征的融合结果, 这样使得 P2层检测头应对微小目标时, 能够快速有效的检测。P2层检测头加上原始的3个检测头, 可以有效缓解尺度方差所带来的负面影响
请添加图片描述

2.引入CBAM注意力模块

CBAM是一种轻量的注意力模块, 其简单有效, 可以直接集成到CNN架构中, 并且可以端到端的对其进 行训练。在给定特征映射的情况下, CBAM会依次沿着通道和空间两个独立维度推导注意映射, 然后将注意映射与输入特征映射相乘, 进行自适应特征细化,CBAM结构如下:
请添加图片描述

3.改进Neck中的PANet结构为BiFPN

BiFPN网络是集成双向交叉连接和加权融合的一种高效的多尺度特征融合方法。采用跨连接去除PANet中对特征融合贡献度较小的节点, 在同一尺度的输入节点和输出节点间增加一个跳跃连接, 在不增加较多成本的同时, 融合了更多的特征.。在同一特征尺度上, 把每一个双向路径看作一个特征网络层, 并多次反复利用同一层, 以实现更高层次的特征融合。BiFPN结构如下图,如果需要详细了解该网络可以看原文: https://arxiv.org/abs/1911.09070
请添加图片描述

4.完整的网络结构图

请添加图片描述

实现细节

下面将按上面的步骤来一步一步实现:

1.在yolov5s.yaml中找到头部head添加小目标检测头并增加对应大小的anchors

按照原文的意思做出如下修改:

# 添加小目标检测头
anchors:
  - [5, 6, 8, 14, 15, 11]  # P2/4
  - [10, 13, 16, 30, 33, 23] # P3/8
  - [30, 61, 62, 45, 59, 119] # P4/16
  - [116, 90, 156, 198, 373, 326] # P5/32
head:
  [[-1, 1, Conv, [512, 1, 1]],  # 10
   [-1, 1, nn.Upsample, [None, 2, 'nearest']], # 11
   [[-1, 6], 1, Concat, [1]],  # 12 cat backbone P4  
   [-1, 3, C3, [512, False]],  # 13
 
   [-1, 1, Conv, [512, 1, 1]], # 14
   [-1, 1, nn.Upsample, [None, 2, 'nearest']], # 15
   [[-1, 4], 1, Concat, [1]],  # 16 cat backbone P3 
   [-1, 3, C3, [512, False]],  # 17 
 
   [-1, 1, Conv, [256, 1, 1]], # 18
   [-1, 1, nn.Upsample, [None, 2, 'nearest']], #19
   [[-1, 2], 1, Concat, [1]],  # 20 cat backbone P3
   [-1, 3, C3, [256, False]],  # 21 
 
   [-1, 1, Conv, [256, 3, 2]], # 22
   [[-1, 18], 1, Concat, [1]],  # 23 cat head P4
   [-1, 3, C3, [256, False]],  # 24 
 
   [-1, 1, Conv, [256, 3, 2]], # 25
   [[-1, 14], 1, Concat, [1]], # 26
   [-1, 3, C3, [512, False]], # 27
 
   [-1, 1, Conv, [512, 3, 2]], # 28
   [[-1, 10], 1, Concat, [1]],  # 29 cat head P5
   [-1, 3, C3, [1024, False]],  # 30 
 
   [[21, 24, 27, 30], 1, Detect, [nc, anchors]],  # Detect
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/579070
推荐阅读
相关标签
  

闽ICP备14008679号