- 2022年全省农商行新员工招录面试时间地点及注意(3-25)
- 重要提醒:本网站发布的内容是转载资讯,供您浏览和参考。您需自行辨别和判断相关内容。本网站对此不承担
本章会对 YOLOv8 中可能成为面试题的关键技术点进行更新,并且会持续更新。只要想到合适的问题,我就会将其整理并更新到本博客中。
该网络结构有其自身的特点。
YOLOv8 的网络结构包含三部分。一部分是 BackBone 主干网络。另一部分是 Neck 颈部网络。还有一部分是 Head 头部网络。
BackBone 网络主要承担对输入图像进行特征提取的任务。输入图像的分辨率原本是 640x640,经过 5 次下采样操作后,其分辨率变为 20x20。输入图像的通道原本是 RGB 的 3 通道,经过处理后变成了 512 维通道。同时,BackBone 网络会输出 80x80、40x40 和 20x20 这三个尺度的特征图,并将这些特征图传递到 Neck 网络。
Neck 网络的主要作用是对 BackBone 网络输出的特征图进行特征融合。它自下而上通过上采样操作,将 20x20、40x40 和 80x80 这三种尺度的特征图的通道维度进行拼接。然后使用 c2f 模块对拼接后的特征图进行特征提取。接着自上而下再次将其与对应的特征图在通道维度上进行拼接。最后输出 20x20、40x40 和 80x80 这三种尺度的特征图。
Head 网络主要对 Neck 层输出的三个尺度特征图进行解码。它采用解耦的方式,分别去预测框的位置和大小,也就是 Box 分支,并且每个尺度的通道数是 64。同时,它还会预测框的类别,即 Cls 分支,每个尺度的通道数为 nc,也就是类别数。
YOLOv8 提供了多个版本的网络。每个版本之间存在着差异。网络的宽度是如何变化的呢?网络的深度又是如何变化的呢?
这些版本从小到大依次为 n、s、m、l、x。
这五个版本的主要差异在于网络的深度和宽度。网络的深度体现在主干网络的 c2f 模块中堆叠的 bottleneck 模块个数上。网络的宽度体现在网络每一层输出通道数上。网络越大,其对应的性能就越好,但推理速度会越慢;网络越小,性能就越差,而推理速度则会越快。
网络的宽度由 Width 和 max_channels 来一同控制。网络的最大宽度,也就是通道数,不会超过 Width*max_channels,这里不包括 concat 层的情况。L - 版本网络属于 v8 的标准版。L - 版本每一层的通道数与 L - 版本每一层通道数之间存在着 Width 倍数的关系。
网络的深度由 Depth 来控制。c2f 模块堆叠的 bottleneck 个数与 L -版本的 bottleneck 个数存在倍数关系。在 L -版本中,4 个 c2f 分别堆叠了 3 个、6 个、6 个、3 个 bottleneck。
BackBone 层的 c2f 模块与 Neck 层的 c2f 模块有哪些区别?
主要有两大区别:
第一,BackBone 层的 c2f 层,其输入通道数和输出通道数保持不变。其次,Neck 层的 c2f 层,它的输出通道数发生了改变,且输出通道数为主干网络输出同一尺度特征图的通道数。
第二,BackBone 层的 c2f 模块的 bottleneck 存在残差分支。Neck 层的 c2f 模块的 bottleneck 没有残差分支。并且每个 c2f 仅仅堆叠了一个 bottleneck。
1.4Head层的两组CBS卷积组的通道数变化有什么规律
第一,在每个尺度的同一分支中,CBS 的通道数是相同的。例如在 L -版本里,80x80 尺度的 Box 分支通道数为 64,40x40 尺度的 Box 分支通道数也为 64,20x20 尺度的 Box 分支通道数同样是 64;同时,80x80 尺度的 Cls 分支通道数是 256,40x40 尺度的 Cls 分支通道数是 256,20x20 尺度的 Cls 分支通道数也是 256。
第二,对于 n/s/m/l/x 这五个版本的网络而言,Box 分支的 CBS 卷积组的通道数,其最小值不能小于 64;Cls 分支的 CBS 卷积组的通道数,其最小值不能小于类别数。
YOLOv8 推理流程篇中,接下来简单介绍一下 YOLOv8 中的 Letterbox 操作。
训练阶段的 letterbox 目的在于将任意尺寸的图片调整为 640x640 尺寸的图片。首先要区分输入图片的长短边,接着把长边缩放至 640,之后将短边按照相同缩放比例进行缩放,最后用灰边(像素值为 114)对短边进行补齐至 640。
预测阶段的 lettebox:其处理与训练阶段的 lettebox 基本相同。不同之处在于,预测阶段的短边无需填充至 640,只需将其填充为 32 的最小倍数即可。这样做有利于减少运算量,进而提升预测速度。
输入尺寸为 640x640 的网络最后输出的 Cls 分支特征图的通道数是多少呢?又该如何进行解码呢?
网络会输出三个不同尺度的特征图,分别是 80x80、40x40 和 20x20。这三个尺度特征图的通道数都为类别数 nc。解码前,会把这三个特征图展开并拼接成 ncx8400。接着,在第一个维度上,对 nc 个值分别经过 sigmoid 函数,从而得到 0 到 1 的值。这些 nc 个 0 到 1 的值,可以被理解为网络预测的 nc 个类别的概率。
Box 分支的作用是预测框的位置和大小。它的通道数为何是 64 而不是 4 呢?
v8 确定预测框大小是通过预测 grid cell 点到预测框左边框、上边框、右边框和下边框的距离这 4 个值。这 4 个值并非由网络直接预测得出,而是需要借助 16 个数共同预测,所以通道数为 4×16 = 64。网络预测出这 16 个数后,需经过 softmax()映射到 0 到 1 之间,且 16 个数的和为 1。同时,这 16 个数对应着 0 到 15 的下标,最后预测出的值是经过 softmax 后的 16 个数与对应的下标值相乘后再相加得到。
在 YOLOv8 后处理中,使用 torchvision.ops.nms 之前,进行了让不同类别的预测框各自做 NMS 的处理。具体来说,就是针对不同类别的预测框,分别进行 NMS 操作,以筛选出更可靠的预测框。这样可以提高目标检测的准确性和效率。
torchvision 自带的 nms 仅能对单个类别的框进行 NMS。v8 在使用该 nms 之前,会给不同类别加上一个偏移量,这样就能让同一个类别的框在同一片区域进行 NMS,且不会受到其他类别的影响。
未完待续,先拿我柴占一下坑...
温馨提示:本内容地址http://m.ysjob.cc/article/articledetail-258256.html转载请注明,以上YOLOv8网络结构详解:BackBone、Neck与Head的关键技术点解析资讯信息来自颍上人才网(颍上地区最大的颍上人才网,颍上人才网)