首页 > 其他分享 >【YOLOv10改进[Neck]】小目标遮挡检测的性能提升(SEAM)- 目标遮挡检测 + 含全部代码和详细修改方式 + 手撕结构图 + 全网首发

【YOLOv10改进[Neck]】小目标遮挡检测的性能提升(SEAM)- 目标遮挡检测 + 含全部代码和详细修改方式 + 手撕结构图 + 全网首发

时间:2024-06-04 11:59:42浏览次数:20  
标签:torch return Neck 遮挡 self nc yaml 检测 model

目录

一 SEAM 和 Repulsion Loss

1 SEAM

2 MultiSEAM

3 排斥损失Repulsion Loss

二 使用SEAM改进YOLOv10的小目标遮挡检测效果

1 整体修改

① 添加SEAM.py文件

② 修改ultralytics/nn/tasks.py文件

2 配置文件

3 训练

其他


一 SEAM 和 Repulsion Loss

本文将要介绍的是2022年8月YOLO-FaceV2论文中提出的改善目标遮挡检测的机制SEAM。首先,我们先对论文内容进行简单的介绍。

论文官方地址https://arxiv.org/pdf/2208.02019

代码地址https://github.com/Krasjet-Yu/YOLO-FaceV2

摘要

近年来,基于深度学习的人脸检测算法取得了很大的进展。这些算法一般可以分为两类:两级检测器(例如,Faster R-CNN)和一级检测器(例如,YOLO)。由于在精度和速度之间取得了较好的平衡,一级检测器在许多应用中得到了广泛的应用。本文提出了一种基于一级检测器YOLOv5的实时人脸检测器,命名为yolov - facev2本文设计了一个名为RFE的感受野增强模块来增强小面部的感受野,并利用NWD Loss来弥补IoU对微小物体位置偏差的敏感性针对人脸遮挡问题,本文提出了一个注意力模块SEAM,并引入排斥损失来解决该问题。此外,我们使用了一个权重函数Slide来解决易样本和硬样本之间的不平衡,并使用有效接受野的信息来设计锚。在WiderFace数据集上的实验结果表明,我们的人脸检测器优于YOLO,其变体可以在所有的易、中、难子集上找到。源代码在https://github.com/Krasjet-Yu/YOLO-FaceV2。

下图1 (a)中,左边的红色部分是探测器的主干,由CSP块和CBS块组成,它主要用于提取输入图像的特征。在P5层中加入RFE模块,扩大有效感受场,增强多尺度融合能力。图1 (b)中右侧蓝色和黄色部分称为颈层,由SPP和PAN组成。此外,还融合了P2层的特征,以提高更准确的目标定位能力。在图1 (c)中在颈部层输出部分之后,引入分离增强注意模块(SEAM)来增强被遮挡人脸的响应性

上图图1为YOLO-FaceV2的网络架构。

主干:前馈CSP-Darknet53架构提取多尺度特征图。为了扩展感受野,将P5的CSP块替换为接收野增强模块(RFE),如图蓝色虚线框所示。

颈部:空间金字塔池(SPP)分离出最重要的上下文特征并增加接受野,路径聚合网络(PAN)从不同的骨干级别为不同的检测器级别聚合参数。为了补偿增加的感受野分辨率损失,P2层被融合到PAN中,如图(a)和(b)所示。

分离和增强注意模块(SEAM)使用特征映射之间的关系来回忆被遮挡的特征,如图红色点框所示。

由于本文重点关注遮挡检测性能提升部分,所以接下来重点介绍注意力模块SEAM(Separated and Enhancement Attention Module)和排斥损失(Repulsion Loss)。

1 SEAM

本文引入了分离和增强注意力模块SEAM来增强Neck层输出部分后被遮挡人脸的响应能力。

下图为SEAM的说明。左边是SEAM的体系结构,右边是CSMM(通道和空间混合模块)的结构。CSMM利用不同斑块到多尺度的特征,利用深度可分离卷积来学习空间维度和通道的相关性

SEAM旨在补偿被遮挡面部的响应损失,通过增强未遮挡面部的响应来解决这一问题。 

2 MultiSEAM

解决多尺度问题的主要方法是构建金字塔来融合人脸的多尺度特征。

在 YOLOv5 中,FPN 融合了 P3、P4 和 P5 层的特征。但是对于小尺度的目标,经过多层卷积后信息很容易丢失,保留的像素信息很少,即使在较浅的P3层也是存在同样的问题。综上,提高特征图的分辨率无疑有利于小目标的检测

3 排斥损失Repulsion Loss

类内遮挡可能导致人脸A包含人脸B的特征,导致更高的误检率。排斥损失的引入可以通过排斥有效地缓解这一问题。排斥损失分为两部分:RepGTRepBox排斥损失通过使边界框之间保持距离,减少预测框重叠,进而提高面部在遮挡情况下的检测性能

RepGT Loss的作用是使当前边界框尽可能远离周围的真值框。这里的周边真值框是指除了边界框本身要返回的对象外,与该面部有最大IoU的人脸标签。

RepGT损失函数公式如下:

RepBox loss的目的是使预测框尽可能远离周围的预测框,并减少它们之间的IOU,以避免属于两个面的预测框中的一个被NMS抑制。我们将预测框架分成多个组。假设有g个单独的面部,其形式如公式3所示。同一组之间的预测框返回到相同的人脸标签,不同组之间的预测框对应不同的人脸标签。

然后,对于不同组pi和pj之间的预测框,我们希望得到pi和pj之间的重叠面积越小。RepBox还使用Smoothln作为优化函数。总体损失函数为:

接下来,我们基于YOLOv10进行小目标遮挡检测性能提升的具体对应吧。

二 使用SEAM改进YOLOv10的小目标遮挡检测效果

YOLOv10的结构图如下:

1 整体修改

整个改进的结构的示意图如下所示:

① 添加SEAM.py文件

ultralytics/nn/modules目录下新建SEAM.py文件,文件的内容如下:

② 修改ultralytics/nn/tasks.py文件

具体的修改内容如下图所示:

parse_model函数的修改部分如下:

至此,修改完毕。

2 配置文件

yolov10n_SEAM.yaml文件的内容如下:

# Parameters
nc: 80 # number of classes
scales: # model compound scaling constants, i.e. 'model=yolov8n.yaml' will call yolov8.yaml with scale 'n'
  # [depth, width, max_channels]
  n: [0.33, 0.25, 1024] 

# YOLOv8.0n backbone
backbone:
  # [from, repeats, module, args]
  - [-1, 1, Conv, [64, 3, 2]] # 0-P1/2
  - [-1, 1, Conv, [128, 3, 2]] # 1-P2/4
  - [-1, 3, C2f, [128, True]]
  - [-1, 1, Conv, [256, 3, 2]] # 3-P3/8
  - [-1, 6, C2f, [256, True]]
  - [-1, 1, SCDown, [512, 3, 2]] # 5-P4/16
  - [-1, 6, C2f, [512, True]]
  - [-1, 1, SCDown, [1024, 3, 2]] # 7-P5/32
  - [-1, 3, C2f, [1024, True]]
  - [-1, 1, SPPF, [1024, 5]] # 9
  - [-1, 1, PSA, [1024]] # 10

# YOLOv8.0n head
head:
  - [-1, 1, nn.Upsample, [None, 2, "nearest"]]
  - [[-1, 6], 1, Concat, [1]] # cat backbone P4
  - [-1, 3, C2f, [512]] # 13

  - [-1, 1, nn.Upsample, [None, 2, "nearest"]]
  - [[-1, 4], 1, Concat, [1]] # cat backbone P3
  - [-1, 3, C2f, [256]] # 16 (P3/8-small)
  - [-1, 1, SEAM, []] # 17

  - [-1, 1, Conv, [256, 3, 2]]
  - [[-1, 13], 1, Concat, [1]] # cat head P4
  - [-1, 3, C2f, [512]] # 20 (P4/16-medium)
  - [-1, 1, SEAM, []] # 21

  - [-1, 1, SCDown, [512, 3, 2]]
  - [[-1, 10], 1, Concat, [1]] # cat head P5
  - [-1, 3, C2fCIB, [1024, True, True]] # 24 (P5/32-large)
  - [-1, 1, SEAM, []] # 25

  - [[17, 21, 25], 1, v10Detect, [nc]] # Detect(P3, P4, P5)

3 训练

上述修改完毕后,开始训练吧!

标签:torch,return,Neck,遮挡,self,nc,yaml,检测,model
From: https://blog.csdn.net/wss794/article/details/139413597

相关文章

  • 【航空和卫星图像中检测建筑物】使用gabor特征和概率的城市区域和建筑物检测研究(Matla
     ......
  • 【航空和卫星图像中检测建筑物】使用gabor特征和概率的城市区域和建筑物检测研究(Matla
     ......
  • 检测DDoS攻击的原理
    检测DDoS攻击的原理分布式拒绝服务(DDoS)攻击是一种常见且破坏性极大的网络攻击方式。它通过大量的恶意流量使目标服务器或网络资源无法正常工作,从而达到瘫痪目标的目的。为了有效防御DDoS攻击,检测是至关重要的一步。本文将详细探讨DDoS攻击的检测原理,帮助读者了解如何识别和......
  • 基于放大电路传感器气体烟雾检测仪
    **单片机设计介绍,基于放大电路传感器气体烟雾检测仪文章目录一概要二、功能设计设计思路三、软件设计原理图五、程序六、文章目录一概要  基于放大电路传感器气体烟雾检测仪概要如下:一、系统概述气体烟雾检测仪是一种用于监测环境中气体和烟雾浓度的设......
  • 前端JS必用工具【js-tool-big-box】学习,检测密码强度
    js-tool-big-box 前端工具库,实用的公共方法越来越多了,这一小节,我们带来的是检测密码强度。我们在日常开发中,为了便于测试,自己总是想一个简单的密码,赶紧输入。但到了正式环境,我们都应该为自己准备一个密码强度较高的密码,以提高安全性。我们一起来看一下在js-tool-big-box工具......
  • 基于机器视觉的混凝土裂纹检测
    欢迎大家点赞、收藏、关注、评论啦,由于篇幅有限,只展示了部分核心代码。文章目录一项目简介二、功能三、系统四.总结一项目简介  一、项目背景与意义混凝土作为现代建筑的主要材料之一,其质量和耐久性直接关系到建筑的安全性和使用寿命。然而,由于施工、材料......
  • 基于STM32F103C8T6微控制器的物流信息检测系统
    摘要本论文设计并实现了一种基于STM32F103C8T6微控制器的物流信息检测系统。该系统旨在通过综合各种传感器模块实现对运输车环境及状态的实时监控,并通过4G网络将信息发送到手机端,以便用户进行远程管理和控制。首先,系统通过GPS模块获取运输车的位置信息,实现车辆定位和轨迹跟踪......
  • (自用)目标检测的一些方法
    一、Numpy模块importnumpyasnpnp.arange()生成一维数据numpy.arange(start,stop,step,dtype=None)     start:开始数字,默认为0     stop:停止数字(不输出该值),必填     step:步长,默认为1np.reshape()改变数组或矩阵的形状numpy.resha......
  • 3D目标检测入门:探索OpenPCDet框架
    前言在自动驾驶和机器人视觉这两个飞速发展的领域中,3D目标检测技术扮演着核心角色。随着深度学习技术的突破性进展,3D目标检测算法的研究和应用正日益深入。OpenPCDet,这个由香港中文大学OpenMMLab实验室精心打造的开源工具箱,为3D目标检测领域提供了一个功能强大且易于使用的平......
  • [目标检测数据集]变电站缺陷检测数据集8307张17类别VOC和YOLO格式
    数据集格式:PascalVOC格式+YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件)图片数量(jpg文件个数):8307标注数量(xml文件个数):8307标注数量(txt文件个数):8307标注类别数:17标注类别名称:[“bj_bpmh”,“bj_bpps”,“bj_wkps”,......