yolov8自带的P2层如何开启

YOLOv8模型

简述YOLOv8不同size模型简述

在最开始的YOLOv8提供的不同size的版本,包括n、s、m、l、x(模型规模依次增大,通过depth, width, max_channels控制大小),这些都是通过P3、P4和P5提取图片特征;

正常的YOLOv8对象检测模型输出层是P3、P4、P5三个输出层,为了提升对小目标的检测能力,新版本的yolov8 已经包含了P2层(P2层做的卷积次数少,特征图的尺寸(分辨率)较大,更加利于小目标识别),有四个输出层。Backbone部分的结果没有改变,但是Neck跟Head部分模型结构做了调整。这就是为什么v8模型yaml文件里面(GitHub地址)有p2这个模型;

新增加的这个P6,是为了引入更多的参数量,多卷积了一层,是给xlarge那个参数量准备的,属于专门适用于高分辨图片(图片尺寸很大,有大量可挖掘的信息)的版本。

 - model=yolov8n.ymal 使用正常版本
 - model=yolov8n-p2.ymal 小目标检测版本
 - model=yolov8n-p6.ymal 高分辨率版本

在这里插入图片描述

模型结构分析

现阶段YOLO目标检测模型主要分为输入端、Backbone、Neck和Prediction四个部分,其各部分作用为:

  • 输入端:缩放图片尺寸数据、适应模型训练;
  • Backbone:模型主网络,通过卷积层数的增加,提取P1-P5不同感受野的feature map,依次感受野逐渐增加;
  • Neck:呈现FPN和PAN结构,其中FPN (feature pyramid networks):特征金字塔网络,采用多尺度来对不同size的目标进行检测;PAN:自底向上的特征金字塔。这样结合操作,FPN层自顶向下传达强语义特征,而特征金字塔则自底向上传达强定位特征,两两联手,从不同的主干层对不同的检测层进行特征聚合。
  • Prediction:为model框架中的Head头,用于最终的预测输出,P3 -> P4 -> P5过程中,感受野是增大的,所以依次预测目标为小 -> 中 -> 大

输入端

常规做法

在常用的目标检测算法中,不同的图片长宽都不相同,因此常用的方式是将原始图片统一缩放到一个标准尺寸,再送入检测网络中。比如YOLO算法中常用416×416,608×608等尺寸,比如对下面800*600的图像进行变换。

在这里插入图片描述

YOLOv8做法

作者认为,在项目实际使用时,很多图片的长宽比不同。
因此缩放填充后,两端的黑边大小都不同,而如果填充的比较多,则存在信息冗余,影响推理速度。因此在代码中datasets.py的letterbox函数中进行了修改,对原始图像自适应的添加最少的黑边。

  • 第一步:计算缩放比例
    在这里插入图片描述

作者采用长边作为缩放因子:得到缩放因子0.52。

  • 第二步:计算缩放后尺寸
    在这里插入图片描述

原始图片都乘以缩放因子0.52得到了长宽尺寸。

  • 第三步:计算填充数值
    在这里插入图片描述

由于模型需要下采样5次,将图片特征缩放至1/2x2x2x2x2 ,即1 / 32,所以输入图像尺寸必须为32的整数倍,因此通过取余的方式得到填充数,除以2得到结果。

backbone:

ConvModule

  • 模型的最小组件通过Conv2d + BatchNorm2d + SiLU组成。
  • 其中 Conv2d为2维CNN,用于提取图像空间特征。
  • BatchNorm2d为在channel维度上的数据归一化操作,卷积层之后总会添加BatchNorm2d进行- 数据的归一化处理,这使得数据在进行激活函数之前不会因为数据过大而导致网络性能的不稳定。
  • SiLU:激活函数,用于提高模型的非线性表达能力。

在这里插入图片描述

DarknetBottleneck

  • 包含add=True、add=False两种类型
  • add=True部分为resnet结构,可以更利用网络加深,作为CSPLayer_2Conv结构的组件用在backbone中,
  • add=False部分没有resent结构,作为CSPLayer_2Conv结构的组件用在neck部分。

在这里插入图片描述

  • CSPLayer_2Conv:现在经常称作C2f结构,对标的是yolov5的C3结构。在backbone中结合ConvModule构成主网络。让YOLOv8可以在保证轻量化的同时获得更加丰富的梯度流信息。

在这里插入图片描述

其他基础操作:

  • (1) Split:在通道维度,将数据一分为二。
  • (2) Concat:张量拼接,会扩充两个张量的维度,例如26×26×256和26×26×512两个张量拼接,结果是26×26×768。Concat和cfg文件中的route功能一样。
  • (3) Add:张量相加,张量直接相加,不会扩充维度,例如104×104×128和104×104×128相加,结果还是104×104×128。add和cfg文件中的shortcut功能一样。

SPPF:空间金字塔池化

  • 在卷积神经网络中我们经常看到固定输入的设计,但是有的时候难以控制,何凯明的论文SPPNet中的SPP结构解决了该问题。后续在YOLO系列中也出现了SPP结构及改进的结构,但是作用与最初的SPP结构却是不同的。
  • SPPNet
    有了空间金字塔池化,输入图像就可以是任意尺寸了。不但允许任意比例关系,而且支持任意缩放尺度。
  • SPP(Spatial Pyramid Pooling layer):空间金字塔池化,Yolov4中作者在SPP模块中,使用k={1×1,5×5,9×9,13×13}的最大池化的方式,再将不同尺度的特征图进行Concat操作。
  • 注意:这里最大池化采用padding操作,移动的步长为1,比如13×13的输入特征图,使用5×5大小的池化核池化,padding=2,因此池化后的特征图仍然是13×13大小。

在这里插入图片描述

  • 这里的SPP虽然也叫SPP,但是作用更多的是实现局部特征和全局特征的featherMap级别的融合。
  • SPPF(Spatial Pyramid Pooling Fast):实现更快的SPP

Neck:

由Structure图可以看出,图片首先进入Backbone进行特征提取,再通过Neck网络,纵观Neck全局网络,形成了FPN(Feature pyramid network)网络,再通过了PAN(Path Aggregation Network)网络。

在这里插入图片描述

  • PAN(Path Aggregation Network for Instance Segmentation):

在这里插入图片描述

FPN是自顶向下,将高层的强语义特征传递下来。PAN就是在FPN的后面添加一个自底向上的金字塔,对FPN补充,将低层的强定位特征传递上去,FPN是自顶(小尺寸,卷积次数多得到的结果,语义信息丰富)向下(大尺寸,卷积次数少得到的结果),将高层的强语义特征传递下来,对整个金字塔进行增强,不过只增强了语义信息,对定位信息没有传递。PAN就是针对这一点,在FPN的后面添加一个自底(卷积次数少,大尺寸)向上(卷积次数多,小尺寸,语义信息丰富)的金字塔,对FPN补充,将低层的强定位特征传递上去,又被称之为“双塔战术“。

Prediction:

YOLOv8 的推理过程和 YOLOv5 几乎一样,唯一差别在于前面需要对 Distribution Focal Loss 中的积分表示 bbox 形式进行解码,变成常规的 4 维度 bbox(代表bounding box的坐标位置)。

在这里插入图片描述

其推理和后处理过程为:

  • (1) bbox 积分形式转换为 4d bbox 格式
    对 Head 输出的 bbox 分支进行转换,利用 Softmax 和 Conv 计算将积分形式转换为 4 维 bbox 格式

  • (2) 维度变换
    YOLOv8 输出特征图尺度为 80x80、40x40 和 20x20 的三个特征图。Head 部分输出分类和回归共 6 个尺度的特征图。 将 3 个不同尺度的类别预测分支、bbox 预测分支进行拼接,并进行维度变换。为了后续方便处理,会将原先的通道维度置换到最后,类别预测分支 和 bbox 预测分支 shape 分别为 (b, 80x80+40x40+20x20, 80)=(b,8400,80),(b,8400,4)。

  • (3) 解码还原到原图尺度
    分类预测分支进行 Sigmoid 计算,而 bbox 预测分支需要进行解码,还原为真实的原图解码后 xyxy 格式。

  • (4) 阈值过滤
    遍历 batch 中的每张图,采用 score_thr 进行阈值过滤。在这过程中还需要考虑 multi_label 和 nms_pre,确保过滤后的检测框数目不会多于 nms_pre。

  • (5) 还原到原图尺度和 nms
    基于前处理过程,将剩下的检测框还原到网络输出前的原图尺度,然后进行 nms 即可。最终输出的检测框不能多于 max_per_img。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

网络编程 -- 简易TCP网络程序

一 字符串回响 1.1 核心功能 字符串回响程序类似于 echo 指令,客户端向服务器发送消息,服务器在收到消息后会将消息发送给客户端,该程序实现起来比较简单,同时能很好的体现 socket 套接字编程的流程。 1.2 程序结构 这个程序我们…

Python编程玩转二维码

文章目录 Python编程玩转二维码第一部分:背景介绍第二部分:qrcode库是什么?第三部分:如何安装这个库?第四部分:库函数使用方法第五部分:场景应用第六部分:常见Bug及解决方案第七部分…

动力学重构/微分方程参数拟合 - 基于模型

这一篇文章,主要是给非线性动力学,对微分方程模型参数拟合感兴趣的朋友写的。笼统的来说,这与混沌系统的预测有关;传统的机器学习的模式识别虽然也会谈论预测结果,但他们一般不会涉及连续的预测。这里我们考虑的是&…

Git ignore、exclude for TortoiseGit 小结

1.Ignore Type:忽略类型,也即忽略规则,如何去忽略文件? 1.1.Ignore item(s) only in containing folder(s):仅忽略在包含在文件夹中项目。 仅忽略该文件夹下选定的patterns。the patterns其实就是文件类型,比如.txt后…

文本美学:text-image打造视觉吸引力

当我最近浏览 GitHub 时,偶然发现了一个项目,它能够将文字、图片和视频转化为文本,我觉得非常有趣。于是我就花了一些时间了解了一下,发现它的使用也非常简单方便。今天我打算和家人们分享这个发现。 项目介绍 话不多说&#xf…

面试(05)————Redis篇

目录 一、项目中哪些地方使用了redis 问题一:发生了缓存穿透该怎么解决? 方案一:缓存空数据 方案二:布隆过滤器 模拟面试 问题二: 发生了缓存击穿该怎么解决? 方案一:互斥锁 方案二&#xff…

【GPTs分享】GPTs分享之Image Recreate | img2img​

简介 该GPT是一个专门用于图像编辑、重建和合并的工具。它通过详细的自动图像描述和生成,帮助用户从源图像中重现或修改图像。此工具设计用于为视障用户提供图像内容的详细描述,并生成全新的图像,以满足特定的视觉需求。 主要功能 \1. 图像…

Clion 2023.1.5 最新详细破解安装教程

CLion 最大的优点是跨平台,在Linux、Mac、Windows 上都可以运行。CLion 还同时支持 GCC、Clang、MSVC 这 3 种编译器,使用 CLion 编写程序,程序员可以根据需要随意切换使用的编译器。 第一步: 下载最新的 Clion 2023.1.5 版本安装包 我们先…

掌握字幕艺术:pysrt 库指南

文章目录 掌握字幕艺术:pysrt 库指南第一部分:背景介绍第二部分:库是什么?第三部分:如何安装这个库?第四部分:库函数使用方法第五部分:场景应用第六部分:常见Bug及解决方…

Hive基础3

一、表的分区 大数据开发数据量较大,在进行数据查询计算时,需要对数据进行拆分,提升的查询速度 1-1 单个分区 单个分区是创建单个目录 -- 创建表指定分区,对原始数据进行分区保存 create table new_tb_user(id int,name string,ag…

Linux嵌入式驱动开发-linux中断

文章目录 linux中断原理中断控制器GIC中断源分类 中断ID、中断线(中断号/中断源)中断ID中断线(中断号/中断源)MX6U中断源 上半部与下半部(顶半部和底半部)下半部实现机制linux软中断注册软中断触发软中断初始化软中断 taskletasklet_init:初始…

【AIGC】文本与音频生成引领行业革新

AIGC技术崛起 一、AIGC技术概述二、文本生成:结构化与创作型并进三、实例与代码解析四、音频生成:语音合成技术大放异彩五、结语 在科技的浪潮中,人工智能与大数据的结合不断推动着时代的进步。其中,AIGC(Artificial I…

安居水站:水站经营秘籍:年入30万不是梦。水站创业指南。

在这个快节奏的社会里,初创企业家们总是在寻找一条明路,以在竞争激烈的市场中立足。为了帮助他们更好地实现这一目标,我根据经验决定制定一份水站经营指导手册。这份手册将详细阐述如何从零起步,如何运营,如何进行市场…

智慧浪潮下的产业园区:解读智慧化转型如何打造高效、绿色、安全的新产业高地

随着信息技术的飞速发展,智慧化转型已经成为产业园区发展的重要趋势。在智慧浪潮的推动下,产业园区通过集成应用物联网、大数据、云计算、人工智能等先进技术手段,实现园区的智慧化、高效化、绿色化和安全化,从而打造成为新产业高…

x-cmd ai | x openai - 用于发送 openai API 请求,以及与 ChatGPT 对话

介绍 Openai 模块是 Openai 大模型 Chatgpt 3 和 ChatGPT 4 命令行实现。x-cmd 提供了多个不同平台间多种 AI 大模型的调用能力。无论是本地模型还是 Web 服务上的模型,用户都可以在不同的 AI 大模型间直接无缝切换,并能把之前的聊天记录发送给新的大模…

【PCL】教程conditional_euclidean_clustering 对输入的点云数据进行条件欧式聚类分析...

[done, 3349.09 ms : 19553780 points] Available dimensions: x y z intensity 源点云 Statues_4.pcd 不同条件函数output.pcd 【按5切换到强度通道可视化】 终端输出: Loading... >> Done: 1200.46 ms, 19553780 points Downsampling... >> Done: 411…

【JavaWeb】Day50.Mybatis的XML配置文件

XML配置文件规范 使用Mybatis的注解方式,主要是来完成一些简单的增删改查功能。如果需要实现复杂的SQL功能,建议使用XML来配置映射语句,也就是将SQL语句写在XML配置文件中。 在Mybatis中使用XML映射文件方式开发,需要符合一定的规…

Nginx解决跨域访问难题:轻松实现跨域资源共享!

点击下方关注我,然后右上角点击...“设为星标”,就能第一时间收到更新推送啦~~~ 跨域资源共享(CORS,Cross-Origin Resource Sharing)是一种网络浏览器的安全功能,它限制了一个源(域、协议和端口…

学习空间转换-3D转换

1.什么是空间转换? 使用的是transform属性实现元素在空间内的位移,旋转,缩放等效果。 空间:是从坐标轴角度定义的。x,y,z三条坐标轴构成的一个立体空间,Z轴位置与视线方向相同。 所以空间转换也被叫做3D转换 语法&a…

docker+awk=无敌?!

欢迎来到我的博客,代码的世界里,每一行都是一个故事 dockerawk无敌?! 前言需求分析容器间通过容器名称访问脚本实现一键部署命令解释 前言 当今软件开发的世界充满了数据,而 Docker 则是许多开发者首选的容器化解决方…