小言_互联网的博客

官方正品 | Ultralytics YOLOv8算法来啦(尖端SOTA模型)

624人阅读  评论(0)


🚀🚀🚀卷王之王 | 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匹配方式。

🍀 下面,请小伙伴们先睹为快!👇👇👇

(一)相关实验效果

(二)模型文件代码


  
  1. # Ultralytics YOLO 🚀, GPL-3 .0 license
  2. # Parameters
  3. nc: 80 # number of classes
  4. depth_multiple: 0.33 # scales module repeats
  5. width_multiple: 0.50 # scales convolution channels
  6. # YOLOv8 .0s backbone
  7. backbone:
  8. # [from, repeats, module, args]
  9. - [-1, 1, Conv, [64, 3, 2]] # 0 -P1/ 2
  10. - [-1, 1, Conv, [128, 3, 2]] # 1 -P2/ 4
  11. - [-1, 3, C2f, [128, True]]
  12. - [-1, 1, Conv, [256, 3, 2]] # 3 -P3/ 8
  13. - [-1, 6, C2f, [256, True]]
  14. - [-1, 1, Conv, [512, 3, 2]] # 5 -P4/ 16
  15. - [-1, 6, C2f, [512, True]]
  16. - [-1, 1, Conv, [1024, 3, 2]] # 7 -P5/ 32
  17. - [-1, 3, C2f, [1024, True]]
  18. - [-1, 1, SPPF, [1024, 5]] # 9
  19. # YOLOv8 .0s head
  20. head:
  21. - [-1, 1, nn.Upsample, [None, 2, 'nearest']]
  22. - [[-1, 6], 1, Concat, [1]] # cat backbone P4
  23. - [-1, 3, C2f, [512]] # 13
  24. - [-1, 1, nn.Upsample, [None, 2, 'nearest']]
  25. - [[-1, 4], 1, Concat, [1]] # cat backbone P3
  26. - [-1, 3, C2f, [256]] # 17 (P3/ 8-small)
  27. - [-1, 1, Conv, [256, 3, 2]]
  28. - [[-1, 12], 1, Concat, [1]] # cat head P4
  29. - [-1, 3, C2f, [512]] # 20 (P4/ 16-medium)
  30. - [-1, 1, Conv, [512, 3, 2]]
  31. - [[-1, 9], 1, Concat, [1]] # cat head P5
  32. - [-1, 3, C2f, [1024]] # 23 (P5/ 32-large)
  33. - [[15, 18, 21], 1, Detect, [nc]] # Detect(P3, P4, P5)

二、创新改进模块 🎄🎈

(一)C2f模块

C2f模块对应代码:


  
  1. class C2f(nn.Module):
  2. # CSP Bottleneck with 2 convolutions
  3. def __init__( self, c1, c2, n=1, shortcut=False, g=1, e=0.5): # ch_in, ch_out, number, shortcut, groups, expansion
  4. super().__init__()
  5. self.c = int(c2 * e) # hidden channels
  6. self.cv1 = Conv(c1, 2 * self.c, 1, 1)
  7. self.cv2 = Conv(( 2 + n) * self.c, c2, 1) # optional act=FReLU(c2)
  8. self.m = nn.ModuleList(Bottleneck(self.c, self.c, shortcut, g, k=(( 3, 3), ( 3, 3)), e= 1.0) for _ in range(n))
  9. def forward( self, x):
  10. y = list(self.cv1(x).split((self.c, self.c), 1))
  11. y.extend(m(y[- 1]) for m in self.m)
  12. return self.cv2(torch.cat(y, 1))

(二)SPPF

SPPF对应代码:


  
  1. class SPPF(nn.Module):
  2. # Spatial Pyramid Pooling - Fast (SPPF) layer for YOLOv5 by Glenn Jocher
  3. def __init__( self, c1, c2, k=5): # equivalent to SPP(k=(5, 9, 13))
  4. super().__init__()
  5. c_ = c1 // 2 # hidden channels
  6. self.cv1 = Conv(c1, c_, 1, 1)
  7. self.cv2 = Conv(c_ * 4, c2, 1, 1)
  8. self.m = nn.MaxPool2d(kernel_size=k, stride= 1, padding=k // 2)
  9. def forward( self, x):
  10. x = self.cv1(x)
  11. with warnings.catch_warnings():
  12. warnings.simplefilter( 'ignore') # suppress torch 1.9.0 max_pool2d() warning
  13. y1 = self.m(x)
  14. y2 = self.m(y1)
  15. 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
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场