🚀🚀🚀卷王之王 | Ultralytics YOLOv8 算法来啦!!✨✨✨
一、前言简介 🎄🎈
📚 代码地址:卷王之王 | YOLOv8代码下载地址
📚 详细文档:https://v8docs.ultralytics.com/
YOLOv8 是 Ultralytics 开发的 YOLO(You Only Look Once)物体检测和图像分割模型的最新版本。YOLOv8是一种尖端的、最先进的SOTA模型,它建立在先前YOLO成功基础上,并引入了新功能和改进,以进一步提升性能和灵活性。它可以在大型数据集上进行训练,并且能够在各种硬件平台上运行,从CPU到GPU。
不仅如此,YOLOv8还有一个关键特性是它的可扩展性,由于其被设计成一个框架,支持所有以前YOLO的版本,使得在不同版本之间切换和比较它们的性能变得容易。
YOLOv8创新改进点:
1.Backbone。使用的依旧是CSP的思想,不过YOLOv5中的C3模块被替换成了C2f模块,实现了进一步的轻量化,同时YOLOv8依旧使用了YOLOv5等架构中使用的SPPF模块;
2.PAN-FPN。毫无疑问YOLOv8依旧使用了PAN的思想,不过通过对比YOLOv5与YOLOv8的结构图可以看到,YOLOv8将YOLOv5中PAN-FPN上采样阶段中的卷积结构删除了,同时也将C3模块替换为了C2f模块
3.Decoupled-Head。是不是嗅到了不一样的味道?是的,YOLOv8走向了Decoupled-Head;
4.Anchor-Free。YOLOv8抛弃了以往的Anchor-Base,使用了Anchor-Free的思想;
5.损失函数。YOLOv8使用VFL Loss作为分类损失,使用DFL Loss+CIOU Loss作为分类损失;
6.样本匹配。YOLOv8抛弃了以往的IOU匹配或者单边比例的分配方式,而是使用了Task-Aligned Assigner匹配方式。
🍀 下面,请小伙伴们先睹为快!👇👇👇
(一)相关实验效果
(二)模型文件代码
-
#
Ultralytics
YOLO 🚀,
GPL-3
.0
license
-
-
#
Parameters
-
nc:
80 #
number
of
classes
-
depth_multiple:
0.33 #
scales
module
repeats
-
width_multiple:
0.50 #
scales
convolution
channels
-
-
#
YOLOv8
.0s
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
.0s
head
-
head:
-
-
[-1, 1, nn.Upsample, [None, 2, 'nearest']]
-
-
[[-1, 6],
1,
Concat,
[1]] #
cat
backbone
P4
-
-
[-1, 3, C2f, [512]] #
13
-
-
-
[-1, 1, nn.Upsample, [None, 2, 'nearest']]
-
-
[[-1, 4],
1,
Concat,
[1]] #
cat
backbone
P3
-
-
[-1, 3, C2f, [256]] #
17 (P3/
8-small)
-
-
-
[-1, 1, Conv, [256, 3, 2]]
-
-
[[-1, 12],
1,
Concat,
[1]] #
cat
head
P4
-
-
[-1, 3, C2f, [512]] #
20 (P4/
16-medium)
-
-
-
[-1, 1, Conv, [512, 3, 2]]
-
-
[[-1, 9],
1,
Concat,
[1]] #
cat
head
P5
-
-
[-1, 3, C2f, [1024]] #
23 (P5/
32-large)
-
-
-
[[15, 18, 21],
1,
Detect,
[nc]] #
Detect(P3, P4, P5)
二、创新改进模块 🎄🎈
(一)C2f模块
C2f模块对应代码:
-
class
C2f(nn.Module):
-
# CSP Bottleneck with 2 convolutions
-
def
__init__(
self, c1, c2, n=1, shortcut=False, g=1, e=0.5):
# ch_in, ch_out, number, shortcut, groups, expansion
-
super().__init__()
-
self.c =
int(c2 * e)
# hidden channels
-
self.cv1 = Conv(c1,
2 * self.c,
1,
1)
-
self.cv2 = Conv((
2 + n) * self.c, c2,
1)
# optional act=FReLU(c2)
-
self.m = nn.ModuleList(Bottleneck(self.c, self.c, shortcut, g, k=((
3,
3), (
3,
3)), e=
1.0)
for _
in
range(n))
-
-
def
forward(
self, x):
-
y =
list(self.cv1(x).split((self.c, self.c),
1))
-
y.extend(m(y[-
1])
for m
in self.m)
-
return self.cv2(torch.cat(y,
1))
(二)SPPF
SPPF对应代码:
-
class
SPPF(nn.Module):
-
# Spatial Pyramid Pooling - Fast (SPPF) layer for YOLOv5 by Glenn Jocher
-
def
__init__(
self, c1, c2, k=5):
# equivalent to SPP(k=(5, 9, 13))
-
super().__init__()
-
c_ = c1 //
2
# hidden channels
-
self.cv1 = Conv(c1, c_,
1,
1)
-
self.cv2 = Conv(c_ *
4, c2,
1,
1)
-
self.m = nn.MaxPool2d(kernel_size=k, stride=
1, padding=k //
2)
-
-
def
forward(
self, x):
-
x = self.cv1(x)
-
with warnings.catch_warnings():
-
warnings.simplefilter(
'ignore')
# suppress torch 1.9.0 max_pool2d() warning
-
y1 = self.m(x)
-
y2 = self.m(y1)
-
return self.cv2(torch.cat([x, y1, y2, self.m(y2)],
1))
(三)PAN-FPN
(四)Decoupled-Head
YOLOv8算法中使用了Decoupled-Head,具体结构如下:
相关参考链接:
YOLOv8来了!YOLOv5官方出品!
YOLOv8来啦 | 详细解读YOLOv8的改进模块!YOLOv5官方出品YOLOv8,必卷!
转载:https://blog.csdn.net/m0_53578855/article/details/128634914
查看评论