当前位置: 首页 > news >正文

YOLOV8代码分析———持续更新中

YOLOV8代码分析

  • 1. YOLOV8相对于YOLOV5的改进
  • 2 制作标签
  • 3 模型
      • 3.1 模型主要模块
      • 3.1.1 模型主要模块:
      • 3.1.2 CBS、SPPF、Bottleneck、C2f、model
      • 3.1.3 model
  • 4 损失
  • 5 训练
  • 6 推理

1. YOLOV8相对于YOLOV5的改进

  1. 模型改进。
    1.1 将YOLOv5中的C3模块替换为C2f模块。将Detect(耦合头 + Anchor-based)模块替换为Detect模块(解耦头 + Anchor-free + DFL)。YOLOv5的耦合头输出尺寸为[batch_size,h,w,(classes+4+1)*3]。classes(分类损失 BCE),4(框回归boxes reg)+ 1(置信度obj BCE)。
    YOLOV8的解耦头输出尺寸为:Obj的BCE损失[batch_size,h,w,1],Boxes的CIOU[batch_ls类别损失[batch_size,h,w,cls]
  2. 正样本筛选。
    用TaskAlignedAssigner分配策略。anchors中心点在GT(真实框)内部anchors为候选框。计算GT内部包含的每个anchors预测物体类别cls与CIOU的乘积作为分数对aanchors的分值,对分值排序,选取top_k个框作为正样本。
  3. 损失函数。类别损失(BCE)+位置损失(CIOU+ DFL)

2 制作标签

制作标签主要讲(编码)

3 模型

3.1 模型主要模块

3.1.1 模型主要模块:

  • CBS:卷积层convolution、批标准化(BN)和SiLU激活函数。
  • C2f:多梯度融合特征提取模块
  • SPPF:快速金字塔池化特征层
  • Detect:检测头(解耦头 + Anchor-free + Distribution)

3.1.2 CBS、SPPF、Bottleneck、C2f、model

1. CBS:
Conv + BN + SiLU 
(k=3,s=2)
(k=3,s=1)
(k=1,s=1)
SiLU 的优点是无上界,有下界,平滑(可导)。SiLU函数随之自变量取值增大,因变量的取值先下降后上升。
SiLU的导函数呈现S形,当自变量接近正无穷大时,导数接近于比1大一点的恒定常数。2. SPPF:
CBS(A) ——> MaxPool5(B) ——> MaxPool5(C) ——> MaxPool5(D) ——> Concat([A,B,C,D])——> CBS
SPPF相对于SPP效果一样,但是参数量大大降低。SPP是用5*59*913*13的卷积核对输入图提取特征,而
SPPF用5*5的卷积核对输入图提取特征后,用串联方式对每次卷机后的结果依次用5*5的卷积核提取特征,两个
5*5的卷积核得到的结果相当于一次9*9卷积核的结果,三个
5*5的卷积核得到的结果相当于一次13*13卷积核的结果,因此SPPF比SPP的参数量减少,速度更快。3. Bottleneck:
input --> CBS(s=1,k=3) --> CBS(s=1,k=3)--> output -->output add input4. C2f:
input --> CBS(s=1,k=1) --> split  --> Bottleneck*n  --> concat [Bottleneck*n ,split]--> CBS(s=1,k=1)5.model
input (640,640)↓
CBS(s=2,k=3) (320,320)↓
CBS(s=2,k=3) (160,160)↓
C2f(n=3)     (160,160)↓                                                     { CBS(s=1,k=3,n=2) → Conv(k=1) →﹜
CBS(s=2,k=3) (80,80)    →   concat    → C2f(n=3)      → {                               ﹜→ concat↓                           ↑            ↓            { CBS(s=1,k=3,n=2) → Conv(k=1) →﹜
C2f(n=6)      (80,80)      upsample     CBS(s=2,k=3)↓                           ↑            ↓
CBS(s=2,k=3)  (40,40)      C2f(n=3)   →  concat↓                           ↑            ↓            { CBS(s=1,k=3,n=2) → Conv(k=1) →﹜
C2f(n=6)       (40,40)   →  concat       C2f(n=3)     → {                               ﹜→ concat↓                           ↑            |            { CBS(s=1,k=3,n=2) → Conv(k=1) →﹜
CBS(s=2,k=3)   (20,20)        |            ↓    ↓                           |          CBS(s=2,k=3) 
C2f(n=3)       (20,20)        |            ||            ↓                    { CBS(s=1,k=3,n=2) → Conv(k=1) →﹜
SPPF(k=6)       (20,20)  → upsample    →  concat  → C2f(n=3)  → {                               ﹜→concat{ CBS(s=1,k=3,n=2) → Conv(k=1) →﹜

3.1.3 model

4 损失

(解码)

5 训练

6 推理


http://www.mrgr.cn/news/62665.html

相关文章:

  • 如何在本地搭建一个three.js的开发环境
  • C语言日记 2024年10月31日
  • Efficient Adaptive Matching for Real-Time City Express Delivery
  • 用Spring Boot实现的在线厨艺学习平台
  • 【Stable Diffusion】
  • c加加11第一弹~
  • LivePortrait代码调试—给图片实现动态表情
  • 2小时,我搭建了一整套车间生产看板
  • 做反向代购,采购订单应该怎么批量管理?
  • 一秒变高手!MODBUSTCP-DEVICENET网关与AB 1791D模块的完美搭档秘诀!
  • 内容聚合与RSS技术在信息时代的应用与发展分析
  • C语言日记 2024年10月30日
  • GenAI对就业市场的影响:哪些行业将受益?
  • 状态模式:封装对象状态并改变行为的设计模式
  • PySpark任务提交
  • Qt 坐标系统与坐标变换
  • 预处理详解(一)
  • 爬虫利器playwright
  • 独立站商业模式 :反向代购逆向海淘网站15个盈利点分析
  • Langchain调用模型使用FAISS
  • leetcode hot100(2)
  • Irqbalance处理中断迁移过程
  • [c++高阶]二叉搜索树深度剖析
  • 如何进行商标注册?
  • Vivo开奖了,劝退价。。
  • 【Nextcloud】在 Ubuntu 22.04.3 LTS 上的 Nextcloud Hub 8 (29.0.0) 优化