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

news2024/9/22 17:27:10

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 🚀, AGPL-3.0 license
# YOLOv8 object detection model with P3-P5 outputs. For Usage examples see https://docs.ultralytics.com/tasks/detect
 
# 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]  # YOLOv8n summary: 225 layers,  3157200 parameters,  3157184 gradients,   8.9 GFLOPs
  s: [0.33, 0.50, 1024]  # YOLOv8s summary: 225 layers, 11166560 parameters, 11166544 gradients,  28.8 GFLOPs
  m: [0.67, 0.75, 768]   # YOLOv8m summary: 295 layers, 25902640 parameters, 25902624 gradients,  79.3 GFLOPs
  l: [1.00, 1.00, 512]   # YOLOv8l summary: 365 layers, 43691520 parameters, 43691504 gradients, 165.7 GFLOPs
  x: [1.00, 1.25, 512]   # YOLOv8x summary: 365 layers, 68229648 parameters, 68229632 gradients, 258.5 GFLOPs
 
# 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, Conv, [512, 3, 2]]  # 5-P4/16
  - [-1, 6, C2f, [512, True]]
  - [-1, 1, Conv, [1024, 3, 2]]  # 7-P5/32
  - [-1, 3, C2f, [1024, True]]
  - [-1, 1, SPPF, [1024, 5]]  # 9
 
 
# YOLOv8.0n head
head:
  - [4, 1, Conv, [512]]  # 10-P3/8
  - [6, 1, Conv, [512]]  # 11-P4/16
  - [9, 1, Conv, [512]]  # 12-P5/32
 
  - [-1, 1, nn.Upsample, [None, 2, 'nearest']] # 13 P5->P4
  - [[-1, 11], 1, Bi_FPN, []] # 14
  - [-1, 3, C2f, [512]] # 15-P4/16
 
  - [-1, 1, nn.Upsample, [None, 2, 'nearest']] # 16 P4->P3
  - [[-1, 10], 1, Bi_FPN, []] # 17
  - [-1, 3, C2f, [512]] # 18-P3/8
 
  - [1, 1, Conv, [512, 3, 2]] # 19 P2->P3
  - [[-1, 10, 18], 1, Bi_FPN, []] # 20
  - [-1, 3, C2f, [256]] # 21-P3/8
 
  - [-1, 1, Conv, [512, 3, 2]] # 22 P3->P4
  - [[-1, 11, 15], 1, Bi_FPN, []] # 23
  - [-1, 3, C2f, [512]] # 24-P4/16
 
  - [-1, 1, Conv, [512, 3, 2]] # 25 P4->P5
  - [[-1, 12], 1, Bi_FPN, []] # 26
  - [-1, 3, C2f, [1024]] # 27-P5/32
 
  - [[21, 24, 27], 1, Detect, [nc]]  # Detect(P3, P4, P5)

不知不觉已经看完了哦,动动小手留个点赞收藏吧--_--

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2117536.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

AI智能工牌:告别手动录入,1小时上门服务报告,3分钟生成

在当今快速发展的商业环境中,提高工作效率和客户满意度成为了企业追求的核心目标之一。传统的手动录入方式不仅耗时耗力,而且容易出错,特别是在上门服务行业,如何快速准确地完成服务报告成为了一个亟待解决的问题。AI智能工牌的出…

从零到精通:亚马逊和Target自养号测评的下单支付与fang关联技巧

在跨境电商的广阔领域里,自养号测评策略已崛起为众多卖家实现低成本、高效市场推广的一把利器。然而,要驾驭好这一策略,确保其成功实施,关键在于精准把握并满足一系列核心条件。接下来,我们将深入剖析这些条件&#xf…

IEEE投稿模板翻译

>将这一行替换为您的稿件id号(双击此处编辑)< IEEE 期刊和会议论文的撰写准备&#xff08;2022&#xff09; 第一作者 A. 作者&#xff0c;IEEE成员&#xff0c;第二作者 B. 作者&#xff0c;第三作者 C. 作者 Jr.&#xff0c;IEEE成员 摘要—本文档为IEEE会刊、期刊和…

《Neon程序员指南》文档中关于矩阵转置的两处笔误

今天在看《Neon程序员指南》&#xff08;Neon Programmer Guide for Armv8-A Coding for Neon&#xff09;发现两处笔误&#xff0c;随手记在这里。 图6-11中&#xff0c;左边的指令应该是trn1 v1.4s, v0.,4s, v3.4s。 图6-15中trn1的图中有两个箭头画错了。

漏洞挖掘 | 记一次edu通过奖学金名单泄露学号的横向渗透

0x1 前言 哈喽&#xff0c;师傅们&#xff01; 这篇文章主要是给师傅们分享下一个简单的手法&#xff0c;通过打edu的时候&#xff0c;我们可以在一些学生管理登录后台&#xff0c;需要我们使用账号是学号登录的系统&#xff0c;然后我们可以尝试通过去网上找公开的奖学金名单…

JAVA在线教育新利器高效答题系统小程序源码

在线教育新利器——高效答题系统 &#x1f680;【开篇引入&#xff1a;教育新风尚】&#x1f680; 在这个快节奏的时代&#xff0c;学习不再局限于教室的四角&#xff0c;在线教育如雨后春笋般蓬勃发展。而今天&#xff0c;我要给大家揭秘一款在线教育的新宠儿——高效答题系…

传统CV算法——threshold阈值算法介绍

阈值化函数我的理解为&#xff0c;在计算机图像视觉中&#xff0c;我们常见的RGB图像表现的信息过多&#xff0c;可能会存在于一些掺杂的噪声&#xff08;因为针对视觉目标不是我们需要的&#xff09;&#xff0c;因此使用阈值算法&#xff0c;直接效果就是可以降噪&#xff0c…

微信公众号获取 openid: 从零到一快速实现一个微信公众号授权项目

一. 前言 上一篇文章说到&#xff0c;微信官方团队发了一则公告&#xff0c;美其名曰&#xff1a;“为了优化开发体验&#xff0c;避免多个同一功能接口对开发者造成困扰&#xff0c;微信团队将对下发统一消息接口进行如下调整。” 正是由于这个调整&#xff0c;而将部分开发者…

力扣: 快乐数

文章目录 需求分析代码结尾 需求 编写一个算法来判断一个数 n 是不是快乐数。 「快乐数」 定义为&#xff1a; 对于一个正整数&#xff0c;每一次将该数替换为它每个位置上的数字的平方和。 然后重复这个过程直到这个数变为 1&#xff0c;也可能是 无限循环 但始终变不到 1。 …

社群空间站9.9付费入群系统二开源码 易支付版全套搭建教程

1.创建站点 2.搭建环境 php7.2 3.上传源码包 数据库批量修改sq9.dongge1.icu s10.dongge1.icu 改为你的域名 4.上传数据库 修改数据库文件/data/config/ 5.访问域名 6.账户密码 admin 123456 7.易支付修改地址是在/data/tpl/app/default/yy_shequn2/lib/epay.config.php…

【动捕_VRPN_ROS2】安装vrpn_client_ros2库将动捕数据转换ROS2话题

安装vrpn_client_ros2库将动捕数据转换ROS2话题 环境&#xff1a; Ubuntu &#xff1a;20.04 LTS ROS &#xff1a;ROS2 Foxy 安装VRPN库 执行以下命令安装VRPN库。 git clone https://github.com/vrpn/vrpn.git mkdir -p vrpn/build cd vrpn/build cmake .. make sudo …

【技术】叉车防撞报警系统的原理及应用场景

叉车作为一种大型货物的运输机械&#xff0c;自出现之后大大提高了人们在日常工作的运输效率&#xff0c;但是同样存在着一部分弊端&#xff0c;例如存在着较多的视觉盲区&#xff0c;随着人们对于叉车的日常使用&#xff0c;叉车的安全事故愈发严重&#xff0c;很容易发生碰撞…

C#高级:递归2-根据ID反向递归求其所有的祖先节点信息

目录 一、实现demo 二、封装方法 【ID>祖先ID】 【ID>祖先实体】 三、递归讲解 一、实现demo class MainClass {static List<Person> PersonList new List<Person>(){new Person(){ Id1,ParentIDnull,Name"小明曾祖父",},new Person(){ Id2…

《论面向方面的编程技术及其应用》写作框架,软考高级系统架构设计师

论文真题 随着社会信息化进程的加快&#xff0c;计算机及网络已经被各行各业广泛应用&#xff0c;信息安全问题也变得愈来愈重要。它具有机密性、完整性、可用性、可控性和不可抵赖性等特征。信息系统的安全保障是以风险和策略为基础&#xff0c;在信息系统的整个生命周期中提…

基于Java+SpringBoot+Vue+MySQL的西安旅游管理系统网站

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、SSM项目源码 系统展示 基于SpringBootVue的西安旅游管理系统网站【附源码文档】、…

美团OC感想

OC感想 晚上十点拿到美团意向了 到家事业部。&#xff0c;日常实习没过&#xff0c;暑期实习没过&#xff0c;秋招终于意向了&#xff0c;晚上十点发的&#xff0c;整整激动到一点才睡着&#xff0c;不仅因为这是秋招的第一个意向&#xff0c;更因为这是我一直心心念念想去的地…

pip-tools:打造可重复、可控的 Python 开发环境,解决依赖关系,让代码更稳定

在 Python 开发中&#xff0c;管理依赖关系是一项繁琐且容易出错的任务。手动更新依赖版本、处理冲突、确保一致性等等&#xff0c;都可能让开发者感到头疼。而 pip-tools 为开发者提供了一套稳定可靠的解决方案。 什么是 pip-tools&#xff1f; pip-tools 是一组命令行工具&…

2024-09-08 小红书机试 解题报告 | 珂学家

前言 题解 这是2024年9月8号的小红书机试题。 看到群里有人在讨论&#xff0c;小红书的机试题&#xff0c;顺手做了下&#xff0c;感觉挺有意思的。 现在的机试题&#xff0c;是真的难&#xff0c;好卷。 A. 机器人 题目描述: m * n的格子&#xff0c;都有一个方向指令LRUD…

挑战当前最难、规模最大多模态评测基准MME-RealWorld,QwenVL-2位列第一但并未及格

32 个标注者&#xff0c;29,429 条标注数据&#xff0c;图像平均分辨率 20001500&#xff0c;当前最难最大的纯手工标注图像感知 benchmark 来了&#xff01;现有模型没有一个在总分上取得 60% 以上的准确率。 论文链接&#xff1a; https://arxiv.org/abs/2408.13257 项目主…

MLLM(三)| BigModel平台正式上线Plus系列全家桶

2024年8月28日&#xff0c;在ACM SIGKDD&#xff08;国际数据挖掘与知识发现大会&#xff0c;KDD&#xff09;会议现场&#xff0c;智谱AI重磅推出新一代全自研基座大模型GLM-4-Plus、图像/视频理解模型GLM-4V-Plus和文生图模型CogView-3-Plus。 1、模型介绍页&#xff1a;htt…