YOLOv8代码解读

CVPR顶会论文复现指南:从YOLOv8代码解读到创新点挖掘 本文以YOLOv8为例,提供了一套从代码解读到创新点挖掘的CVPR顶会论文深度复现指南。文章详细阐述了超越“跑通代码”的四层复现境界,并通过对模型结构、损失函数等核心模块的精读与剖析,系统性地指导读者如何从效率、性能、鲁棒性等维度发现并验证创新点,最终构建从实验到论文投稿的完整工作流。 阅读详情

本文参考:Yolov 8源码超详细逐行解读+ 网络结构细讲(自我用的小白笔记)_yolov8源码-CSDN博客

YOLOv8源码地址: https://gitcode.com/gh_mirrors/ul/ultralytics?utm_source=csdn_github_accelerator&isLogin=1

笔者采用YOLOv8训练自定义数据集:基于SeaShips数据集的yolov8训练教程_yolov8训练seaships数据集-CSDN博客

一、网络结构

首先我们来看YOLOv8的整体网络结构:

接下来我们将分为backbone和Head两部分进行介绍:

二、backbone骨干网络

backbone文件保存在yolov8-main/ultralytics/models/v8/yolov8l.yaml

这里的yolov8l.yaml的l代表large,同理还有s(small)、m(medium)x(extra large)以及n(nano),n是代表模型尺寸小、计算量最少的版本。这里介绍以l为例。yaml文件如下所示:

# Ultralytics YOLO 🚀, GPL-3.0 license

# Parameters
nc: 6  # number of classes
depth_multiple: 1.00  # scales module repeats
width_multiple: 1.00  # scales convolution channels

# YOLOv8.0l 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, [512, 3, 2]]  # 7-P5/32
  - [-1, 3, C2f, [512, True]]
  - [-1, 1, SPPF, [512, 5]]  # 9

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

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

  - [-1, 1, Conv, [256, 3, 2]]
  - [[-1, 12], 1, Concat, [1]]  # cat head P4
  - [-1, 3, C2f, [512]]  # 18 (P4/16-medium)

  - [-1, 1, Conv, [512, 3, 2]]
  - [[-1, 9], 1, Concat, [1]]  # cat head P5
  - [-1, 3, C2f, [512]]  # 21 (P5/32-large)

  - [[15, 18, 21], 1, Detect, [nc]]  # Detect(P3, P4, P5)

可以看到其中包含了backbone和head两个块的代码,这里先介绍backbone部分:

# YOLOv8.0l 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, [512, 3, 2]]  # 7-P5/32
  - [-1, 3, C2f, [512, True]]
  - [-1, 1, SPPF, [512, 5]]  # 9

backbone下第一行注释的四个参数分别表示:

  • from:输入,-1表示上层的输出作为本层的输入
  • repeats:模块的重复次数
  • module:使用的模块
  • args:模块传入的参数

另外计算尺寸的公式:

 out_{-}size=(in_{-}size-k+2*p)/s+1

这里我们可以看到backbone部分一共有10层(0层~9层),一共采用三种模块:Conv、C2f和SPPF。

2.1 标准卷积模块Conv

代码文件存放在yolov8-main/ultralytics/nn/modules.py/Class Conv

def autopad(k, p=None, d=1):  # kernel, padding, dilation
    # Pad to 'same' shape outputs
    if d > 1:
        k = d * (k - 1) + 1 if isinstance(k, int) else [d * (x - 1) + 1 for x in k]  # actual kernel-size
    if p is None:
        p = k // 2 if isinstance(k, int) else [x // 2 for x in k]  # auto-pad
    return p

# 标准卷积
class Conv(nn.Module):
    # Standard convolution with args(ch_in, ch_out, kernel, stride, padding, groups, dilation, activation)
    default_act = nn.SiLU()  # default activation

    def __init__(self, c1, c2, k=1, s=1, p=None, g=1, d=1, act=True):
        super().__init__()
        self.conv = nn.Conv2d(c1, c2, k, s, autopad(k, p, d), groups=g, dilation=d, bias=False)
        self.bn = nn.BatchNorm2d(c2)
        self.act = self.default_act if act is True else act if isinstance(act, nn.Module) else nn.Identity()

    def forward(self, x):
        return self.act(self.bn(self.conv(x)))

    def forward_fuse(self, x):
        return self.act(self.conv(x))

autopad函数是自动填充函数,为保证输出尺寸大小一致,通常会在卷积操作前进行填充操作,卷积基础知识可以看笔者这篇文章:

卷积神经网络基础(一)_rulu激活函数-CSDN博客

kernel是卷积核大小,如3则表示3×3.p表示padding(填充),d表示dilation(扩张)。

在标准卷积的init函数中还接受了一个参数s,表示stride(步长),是卷积核移动的距离。

下面通过一些动图来展示:

stride=1

stride=2

保姆级教程:手把手教你用thop库分析YOLOv8的模型复杂度(附完整代码与结果解读) 本文提供了一份详细的教程,教你如何使用thop库分析YOLOv8模型的复杂度,包括FLOPs和参数量。通过完整的代码示例和结果解读,帮助开发者快速评估模型的计算负担和存储需求,优化模型性能。适用于计算机视觉领域的AI工程师和研究人员。 阅读详情

相关推荐

源码解析篇 | YOLOv8官方源码项目目录结构解析

YOLOv8是一种目标检测算法,它是YOLO(You Only Look Once)系列算法的第8个版本。为了让大家更好地了解和应用YOLOv8算法,本节课就带领大家对其项目目录结构进行详细解析!~🌈

小哥谈 4580

YOLOv8 | 代码逐行解析(一) | 项目目录构造分析

Hello,大家好这次给大家带来的不是改进,是整个YOLOv8项目的分析,整个系列大概会更新7-10篇左右的文章,从项目的目录到每一个功能代码的都会进行详细的讲解,同时YOLOv8改进系列也突破了三十篇文章,最后预计本专栏持续更新会在年底更新上百篇的改进教程, 所以大家如果没有订阅专栏可以提前订阅以下。下面开始进行YOLOv8逐行解析的一篇——项目目录构造分析在这里给大家推荐我的YOLOv8改进有效涨点专栏,本专栏目前为新开的平均质量分98分,后期我会根据各种最新的前沿顶会进行论文复现,。

Snu77的博客 4万+

yolov8 源码解读 (part1: backbone, head)

yolov8的backbone, head部分

蓝羽飞鸟的博客 2936

深度解读:YOLOv8如何用Dyhead检测头实现性能飞跃?(附独家代码)

本文介绍了如何在YOLOv8目标检测算法中引入Dyhead检测头,以替换原有的DCNv3检测头,从而进一步提升模型性能。YOLOv8作为当前热门的目标检测算法,虽然在速度和精度上取得了平衡,但其DCNv3检测头在处理不规则形状物体时仍有优化空间。Dyhead检测头通过动态分配权重、类别感知和尺度感知模块,显著提升了模型在多尺度物体检测中的表现,尤其是在小物体检测方面。实验结果表明,替换Dyhead检测头后,YOLOv8的mAP从0.48提升到0.52,小物体检测的mAP从0.38提升到0.45,且模型收敛速

shrgegrb的博客 2070

zedboard(5)spi轮询和中断

一个SPI可以有几个从设备 在程序中使用 s32 XSpiPs_SetSlaveSelect(XSpiPs *InstancePtr, u8 SlaveSel) 选择。其实就是吧对应设备的ss拉低。 备注:只选一个ss,可以不用指定。(感觉,还没测试) 这是xspips.c中定义的函数,发送和接收有 XSpiPs_Transfer 和 XSpiPs_PolledTransfer 两个函数,分别采用中断和轮询模式。    一、轮询模式 米联客参考代码,SpiPs_Init中部分和官方例程流程一样,Spi

Kiss丶小坏 5879

【机器学习】Anaconda安装后打不开jupyter notebook(网页不自动跳出)

anaconda安装成功以后,jupyter notebook可以出现打开的路径,能够手动复制粘贴地址路径打开,却不能自动跳转到网页。解决的办法是在配置文件中加入指定的浏览器配置信息。

weixin_43416960的博客 4万+

从业10年的AI应用架构师:企业AI平台运营的4个核心经验,值得收藏

去年年底,我在某大型制造企业做AI咨询时,遇到了这样的场景:这不是个例。我接触过的10家企业中,有7家的AI平台都陷入了“技术自嗨”的陷阱——技术团队追求模型精度、功能完备性,却忽略了业务到底需要什么。如果你也遇到过类似问题:比如“模型准确率很高,但业务不买账”“AI项目上线后没人用”“投入产出比极低”,那么这篇文章的4个经验,可能会帮你避开这些坑。很多企业认为,AI平台就是“买一套工具+部署几个模型”。但实际上,企业AI平台的本质是“技术与业务的连接生态”:根据Gartner的报告,80%的企业AI项目失

AI 原生应用开发的博客 707

NS-3 和Aqua-sim-ng 学习笔记(一)

因为要搞水下网络,OMNET++不太合适,就转Aqua-sim。这是基于NS-2上的模型,NS-2需要额外学一门tcl脚本语言。 正好查到它的一个升级版Aqua-sim-NG,在github上,https://github.com/rmartin5/aqua-sim-ng是基于NS-3的,只需要基本的C++,不用学tcl语言。美滋滋。 装好ubuntu之后,安装NS-3和Aqu...

diboshang8820的博客 2188

【Unity】【2D】用连续图片生成动画Animation的简明步骤

本文介绍了Unity中使用2D连续图片制作2D动画Animation的简明步骤。

O青草O的博客 Unity和游戏制作知识分享 703

收放卷伺服控制系统详细算法介绍(电子齿轮+张力PID卷绕轴控制功能块)

收放卷控制系统涉及的内容非常多,这里我们介绍全伺服系统利用电子齿轮指令实现主从轴的比例随动速度控制,收放卷控制算法介绍常用链接如下1、收放卷+排线控制收放卷+排线控制系统框图-CSDN博客文章浏览阅读24次。1、收放卷前馈量计算FC收放卷前馈量计算FC(CODESYS ST源代码)-CSDN博客文章浏览阅读16次。1、收放卷前馈量计算FC(博途PLC):收放卷前馈量计算FC(梯形图+SCL代码)-CSDN博客文章浏览阅读534次。2、收放卷前馈量计算FC。

RXXW_Dor的博客 3104

利用 RSAU_LOG_API 把 SAP 安全审核日志接入企业 SIEM 的完整指南

在 SAP 世界里,安全审核日志(Security Audit Log,简称 SAL)是审计和合规的核心基础设施之一。系统会在后台把安全相关的关键事件记录下来,比如:(用户登录与登录失败用户锁定、解锁权限对象或角色变更远程调用(RFC)相关活动关键事务码的启动程序直接执行、批处理作业相关的敏感操作传统 ABAP 系统里,这些日志会写到本地应用服务器上的审计文件中(背后对应类似表RSAUENTR2的结构),包含事件标识、客户端、用户、终端、事务码、时间戳等信息。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 158

opencv 双目摄像头拍照(分别左右镜头拍照)

准备一个usb线的双目同步摄像头: 运行环境是vc2015,opencv3.1。 将左右两个摄像头拍到的图片分别保存起来。 1)适用条件 双目同步摄像头(两个镜头,共用一个设备ID) 使用语言:C++ 、opencv库 摄像头 分辨率2560*960 或以上。 源程序: #include"stdafx.h" #include<iostream&g...

黎国溥 1万+

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

上一篇: 目标检测20年(三)
下一篇: 目标检测20年(四)——最终章
卧式纯绿
博客等级 码龄6年 891粉丝 71原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值