首页 > 其他分享 >爆改YOLOv8|利用BiFPN双向特征金字塔改进yolov8

爆改YOLOv8|利用BiFPN双向特征金字塔改进yolov8

时间:2024-09-10 20:52:32浏览次数:13  
标签:Conv 爆改 self FPN YOLOv8 C2f BiFPN 512

1,本文介绍

BiFPN(Bidirectional Feature Pyramid Network)是一种增强特征金字塔网络(FPN)的方法,旨在改善多尺度特征融合。BiFPN的主要创新点包括:

  1. 双向特征融合:与传统FPN仅在自下而上的方向进行特征融合不同,BiFPN引入了双向融合机制。它不仅从低层特征向高层传递信息,还从高层特征向低层传递信息,这种双向流动增强了特征的表达能力。

  2. 加权特征融合:BiFPN通过加权融合机制,自动调整不同尺度特征的重要性,从而实现了更精准的特征融合。这种加权策略使得特征的利用更加高效,有效提升了目标检测性能。

  3. 高效的特征处理:BiFPN采用了高效的计算结构来减少计算开销,同时保持了良好的特征融合效果。通过简化和优化计算流程,BiFPN提高了网络的运行速度和精度。

整体上,BiFPN在多尺度特征处理和融合上比传统FPN更具优势,提升了图像识别和目标检测的性能。

关于BiFPN的详细介绍可以看论文:https://arxiv.org/pdf/1911.09070.pdf

本文将讲解如何将BiFPN融合进yolov8

话不多说,上代码!

2, 将BiFPN融合进yolov8

2.1 步骤一

找到如下的目录'ultralytics/nn/modules',然后在这个目录下创建一个BiFPN.py文件,文件名字可以根据你自己的习惯起,然后将BiFPN的核心代码复制进去。

import torch.nn as nn
import torch
 
class swish(nn.Module):
    def forward(self, x):
        return x * torch.sigmoid(x)
 
class Bi_FPN(nn.Module):
    def __init__(self, length):
        super().__init__()
        self.weight = nn.Parameter(torch.ones(length, dtype=torch.float32), requires_grad=True)
        self.swish = swish()
        self.epsilon = 0.0001
 
    def forward(self, x):
        weights = self.weight / (torch.sum(self.swish(self.weight), dim=0) + self.epsilon) # 权重归一化处理
        weighted_feature_maps = [weights[i] * x[i] for i in range(len(x))]
        stacked_feature_maps = torch.stack(weighted_feature_maps, dim=0)
        result = torch.sum(stacked_feature_maps, dim=0)
        return result

2.2 步骤二

在task.py导入我们的模块

from .modules.BiFPN import Bi_FPN

2.3 步骤三

在task.py的parse_model方法里面注册我们的模块

        elif m in {Bi_FPN}:
            length = len([ch[x] for x in f])
            args = [length]
       

到此注册成功,复制后面的yaml文件直接运行即可

yaml文件

# Ultralytics YOLO 

标签:Conv,爆改,self,FPN,YOLOv8,C2f,BiFPN,512
From: https://blog.csdn.net/weixin_43986124/article/details/142046575

相关文章

  • 使用yolov8识别+深度相机+机械臂实现垃圾分拣机械臂(代码分享)
    文章目录垃圾分拣机械臂视频演示程序主代码完整代码链接垃圾分拣机械臂视频演示点击查看使用YoloV8做的目标检测,机械臂手眼标定使用Aruco的方式,通过深度相机获取三维坐标,与机械臂坐标系之间的转化,得到抓取的坐标深度相机是dabaipro机械臂自己打印程序主代码imp......
  • 关键点检测(7)——yolov8-head的搭建
    前两节我学习了yolov8的backbone和head操作。这一节就到了head部分。我们知道yolov8在流行的yolov5的架构上进行了扩展。在多个方面提供了改进。尤其是head部分,变化最大。yolov8模型与其前身的主要区别在于使用了无锚点检测(即从原先的耦合头变成了解耦头,并且从YOLOv......
  • 一种基于YOLOv8的高精度PCB缺陷检测算法(原创自研)
      ......
  • YOLOv8改进实战 | 注意力篇 | 引入ICCV2023顶会LSKNet:大选择性卷积注意力模块LSKA,助力
    YOLOv8专栏导航:点击此处跳转前言YOLOv8是由YOLOv5的发布者Ultralytics发布的最新版本的YOLO。它可用于对象检测、分割、分类任务以及大型数据集的学习,并且可以在包括CPU和GPU在内的各种硬件上执行。YOLOv8是一种尖端的、最先进的(SOTA)模型,它建立在以前......
  • 结合Transformer的YOLOv8多模态 融合可见光+红外光(RGB+IR)双输入 完美复现论文【附代
    文章目录前言视频效果代码获取文章概述必要环境一、模型训练1、定义数据1.1、数据集结构1.2、定义data.yaml2、运行方法运行效果二、模型验证运行方法运行效果三、模型推理1.参数定义2.运行方法运行效果四、效果展示白天夜间总结前言这期博客是在上期博......
  • 用YOLOv8模型实现目标检测、姿势识别、图像分割(视频跟踪)
    简介YOLO(youonlylookonce)是一阶段目标检测模型的开山之作,在图像目标检测领域一向以响应速度快著称,它同是兼顾了模型的准确性,在两者之间做到很好的平衡。经过多版本迭代,到YOLOv8,是一个功能强大,受到广大开发者欢迎与喜爱的目标检测模型,另外,在同一套代码中,它可以分别实现图......
  • YOLOv8改进 | 注意力篇 | YOLOv8引入YOLO-Face提出的SEAM注意力机制优化物体遮挡检测
    1. SEAM介绍1.1 摘要:近年来,基于深度学习的人脸检测算法取得了长足的进步。这些算法通常可以分为两类,即像FasterR-CNN这样的两级检测器和像YOLO这样的一级检测器。由于精度和速度之间具有更好的平衡,一级探测器已广泛应用于许多应用中。在本文中,我们提出了一种基于......
  • YOLOv8 detect person only
    demo.pyfromioimportBytesIOfrompathlibimportPath#pipinstallopencv-pythonpillowultralyticsimportcv2fromPILimportImagefromultralyticsimportYOLO#type:ignore[import-untyped]filename="test.jpg"model=YOLO("yolov......
  • YOLOv8改进 | 注意力篇 | YOLOv8引入MSCAAttention(MSCA)注意力机制
    1. MSCA介绍1.1 摘要:我们提出了SegNeXt,一种用于语义分割的简单卷积网络架构。由于自注意力在编码空间信息方面的效率,最近基于变压器的模型在语义分割领域占据了主导地位。在本文中,我们证明卷积注意力是一种比Transformer中的自注意力机制更高效、更有效的编码上下文......
  • Yolov8-源码解析-四十-
    Yolov8源码解析(四十).\yolov8\ultralytics\utils\benchmarks.py#从glob模块中导入glob函数,用于文件路径的模糊匹配importglob#导入os模块,提供了许多与操作系统交互的函数importos#导入platform模块,用于获取系统平台信息importplatform#导入re模块,支持正......