YOLOv8改进:融合Gold-YOLO Neck(RepGDNeck)


非常重要

由于ulralytics在不断更新,所以下列直接替换可能会导致一系列的错误,所以建议大家在尝试之前先新建一个虚拟环境,然后安装ultralytics 8.0.164版本的,最新版本安装后续会出错。因为咱新建了一个新虚拟环境,所以咱没必要备份,直接跳过备份做下面,但别忘了先引入mmcv库。

讲解视频链接(2024.1.22更新)

基于YOLOV8,从零开始搭建的GOLD-YOLO颈部的一个视频讲解(但是讲解能力有限,可能讲解的并不是太好)
https://space.bilibili.com/368873460/channel/seriesdetail?sid=3921374

前言

备份!备份!备份!!!
替换文件前记得先备份
例如:
在这里插入图片描述


一、ultralytics\ultralytics\nn\modules

在这里插入图片描述
gold_yolo.py复制到ultralytics\ultralytics\nn\modules下,_init_.py进行替换(该备份备份)
复制后的文件夹目录
在这里插入图片描述

from mmcv.cnn import ConvModule, build_norm_layer

由于gold_yolo中存在这一句代码,我们需要引入mmcv库

pip install -U openmim
mim install mmcv

二、ultralytics\ultralytics\nn

tasks.py复制到该ultralytics\ultralytics\nn下
在这里插入图片描述

三、ultralytics\cfg\models\v8

yolov8n_gold_yolo_neck_v2.yaml复制到该ultralytics\cfg\models\v8下
注意:记得先改文件中的nc参数,改为你的数据集的类别
在这里插入图片描述
在这里插入图片描述

四、训练

from ultralytics import YOLO

if __name__ == '__main__':
    model = YOLO('yolov8n_gold_yolo_neck_v2.yaml')
    results = model.train(data='coco128.yaml', epochs=5, deterministic=False)

deterministic设置为False,不然会报下面的警告

D:\anaconda3\envs\yolov8\lib\site-packages\torch\autograd\__init__.py:200: UserWarning: upsample_bilinear2d_backward_out_cuda does not have a deterministic implementation, but you set 'torch.use_deterministic_algorithms(True, warn_only=True)'. You can file an issue at https://github.com/pytorch/pytorch/issues to help us prioritize adding deterministic support for this operation. (Triggered internally at C:\actions-runner\_work\pytorch\pytorch\builder\windows\pytorch\aten\src\ATen\Context.cpp:75.)
  Variable._execution_engine.run_backward(  # Calls into the C++ engine to run the backward pass
D:\anaconda3\envs\yolov8\lib\site-packages\torch\autograd\__init__.py:200: UserWarning: adaptive_avg_pool2d_backward_cuda does not have a deterministic implementation, but you set 'torch.use_deterministic_algorithms(True, warn_only=True)'. You can file an issue at https://github.com/pytorch/pytorch/issues to help us prioritize adding deterministic support for this operation. (Triggered internally at C:\actions-runner\_work\pytorch\pytorch\builder\windows\pytorch\aten\src\ATen\Context.cpp:75.)
  Variable._execution_engine.run_backward(  # Calls into the C++ engine to run the backward pass

意思是upsample_bilinear2d_backward_out_cuda和adaptive_avg_pool2d_backward_cuda都不是采用一个确定性的算法实现对应gold_yolo.py中的nn.functional.adaptive_avg_pool2d和F.interpolate(xxx, size=(H, W), mode='bilinear', align_corners=False)也就是说,结果不可复现,代码每次运行的结果都有所不同,但最终结果是差不多的。

                   from  n    params  module                                       arguments                     
  0                  -1  1       464  ultralytics.nn.modules.conv.Conv             [3, 16, 3, 2]                 
  1                  -1  1      4672  ultralytics.nn.modules.conv.Conv             [16, 32, 3, 2]                
  2                  -1  1      7360  ultralytics.nn.modules.block.C2f             [32, 32, 1, True]             
  3                  -1  1     18560  ultralytics.nn.modules.conv.Conv             [32, 64, 3, 2]                
  4                  -1  2     49664  ultralytics.nn.modules.block.C2f             [64, 64, 2, True]             
  5                  -1  1     73984  ultralytics.nn.modules.conv.Conv             [64, 128, 3, 2]               
  6                  -1  2    197632  ultralytics.nn.modules.block.C2f             [128, 128, 2, True]           
  7                  -1  1    295424  ultralytics.nn.modules.conv.Conv             [128, 256, 3, 2]              
  8                  -1  1    460288  ultralytics.nn.modules.block.C2f             [256, 256, 1, True]           
  9                  -1  1    164608  ultralytics.nn.modules.block.SPPF            [256, 256, 5]                 
 10       [2, 4, 6, -1]  1         0  ultralytics.nn.modules.gold_yolo.Low_FAM     []                            
 11                  -1  1    343296  ultralytics.nn.modules.gold_yolo.Low_IFM     [480, 96, 3, 192]             
 12                  -1  1         0  ultralytics.nn.modules.gold_yolo.Split       [[128, 64]]                   
 13                   9  1     33024  ultralytics.nn.modules.gold_yolo.SimConv     [256, 128, 1, 1]              
 14          [4, 6, -1]  1     57856  ultralytics.nn.modules.gold_yolo.Low_LAF     [128, 128]                    
 15            [-1, 12]  1     49920  ultralytics.nn.modules.gold_yolo.Inject      [128, 128, 0]                 
 16                  -1  1    658432  ultralytics.nn.modules.gold_yolo.RepBlock    [128, 128, 4]                 
 17                  -1  1      8320  ultralytics.nn.modules.gold_yolo.SimConv     [128, 64, 1, 1]               
 18          [2, 4, -1]  1     14592  ultralytics.nn.modules.gold_yolo.Low_LAF     [64, 64]                      
 19            [-1, 12]  1     12672  ultralytics.nn.modules.gold_yolo.Inject      [64, 64, 1]                   
 20                  -1  1    165376  ultralytics.nn.modules.gold_yolo.RepBlock    [64, 64, 4]                   
 21         [-1, 16, 9]  1         0  ultralytics.nn.modules.gold_yolo.High_FAM    [1, 'torch']                  
 22                  -1  1    989696  ultralytics.nn.modules.gold_yolo.High_IFM    [2, 448, 8, 4, 1, 2, 0, 0, [0.1, 2]]
 23                  -1  1    172416  torch.nn.modules.conv.Conv2d                 [448, 384, 1, 1, 0]           
 24                  -1  1         0  ultralytics.nn.modules.gold_yolo.Split       [[128, 256]]                  
 25            [20, 17]  1         0  ultralytics.nn.modules.gold_yolo.High_LAF    []                            
 26            [-1, 24]  1     49920  ultralytics.nn.modules.gold_yolo.Inject      [128, 128, 0]                 
 27                  -1  1    658432  ultralytics.nn.modules.gold_yolo.RepBlock    [128, 128, 4]                 
 28            [-1, 13]  1         0  ultralytics.nn.modules.gold_yolo.High_LAF    []                            
 29            [-1, 24]  1    198144  ultralytics.nn.modules.gold_yolo.Inject      [256, 256, 1]                 
 30                  -1  1   2627584  ultralytics.nn.modules.gold_yolo.RepBlock    [256, 256, 4]                 
 31        [20, 27, 30]  1    897664  ultralytics.nn.modules.head.Detect           [80, [64, 128, 256]]          
YOLOv8n_gold_YOLO_neck_v2 summary: 498 layers, 8210000 parameters, 8209984 gradients

Neck visio

这里附上一张Neck部分执行流程图。
在这里插入图片描述
进一步了解Neck部分各个模块可参考: Gold-YOLO RepGDNeck类解析

资源下载

戳这里下载blog中所需资源

参考资料

(1)Gold-YOLO源码
(1)Gold-YOLO论文
(3)YOLO v8源码
(4)ModuleNotFoundError: No module named ‘mmcv‘

实验结果(23.11.28更新)

这里阐明下我自己的实验结果
数据集TT100K_2021数据集(这是一个交通标志数据集,原本有232类交通标志。但是原始交通标志类别数目极不均衡,我只提取了大于等于100个实例数的交通标志,共有45类)
用于对比的模型配置文件YOLOv8n_tt100k_mt100_P2.yaml(解释一下哈:YOLOv8n:采用YOLOv8n做基准,tt100k_mt100:选择大于等于100(more than 100)的实例数的tt100k数据集,P2: 这个其实很简单的,原本的YOLOv8n.yaml不是输出P3/P4/P5嘛,就在上面一层仿照弄一个P2层,最后多输出一个P2,因为tt100k数据集的图片都是2048*2048的,交通标志大都比较小,多输出P2,就是为了得到更大的特征图,保留小目标的特征。
在这里插入图片描述

model cfgbatchimgszprecisionrecallmap50map50-95GPU
YOLOv8n_tt100k_mt100_P2326400.80.70.7840.5982080Ti,11G
YOLOv8n_tt100k_mt100_P2420480.9090.8850.9440.7492080Ti,11G
yolov8n_gold_yolo_neck_v2486400.7570.6260.7140.5472080Ti,11G
yolov8n_gold_yolo_neck_v21620480.9410.9120.9620.766A40,48G

由于显存的原因,这里并没有严格按照单一变量原则来。

  • 5
    点赞
  • 50
    收藏
    觉得还不错? 一键收藏
  • 77
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 77
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值