Skip to content

Latest commit

 

History

History
1244 lines (706 loc) · 59.7 KB

使用说明.md

File metadata and controls

1244 lines (706 loc) · 59.7 KB

基于ultralytics的YOLOV8改进项目

------- From 哔哩哔哩 魔鬼面具UP -------
本项目使用的ultralytics版本为8.1.9,在ultralytics/__init__.py中的__version__有标识.
本项目使用方法与官方一致,我会提供一个我自己常用的方法,或者自己喜欢怎么使用方便就怎么来就行.

我的实验环境:
python: 3.8.16
torch: 1.13.1+cu117
torchvision: 0.14.1+cu117
timm: 0.9.8
mmcv: 2.1.0
mmengine: 0.9.0

YOLOV8环境配置

1. 执行pip uninstall ultralytics把安装在环境里面的ultralytics库卸载干净.<这里需要注意,如果你也在使用yolov8,最好使用anaconda创建一个虚拟环境供本代码使用,避免环境冲突导致一些奇怪的问题>
2. 卸载完成后同样再执行一次,如果出现WARNING: Skipping ultralytics as it is not installed.证明已经卸载干净.
3. 如果需要使用官方的CLI运行方式,需要把ultralytics库安装一下,执行命令:<pip install -e .>,当然安装后对本代码进行修改依然有效.注意:不需要使用官方的CLI运行方式,可以选择跳过这步
4. 额外需要的包安装命令:
    pip install timm==0.9.8 thop efficientnet_pytorch==0.7.1 einops grad-cam==1.4.8 dill==0.3.6 albumentations==1.3.1 pytorch_wavelets==1.3.0 -i https://pypi.tuna.tsinghua.edu.cn/simple
    以下主要是使用dyhead必定需要安装的包,如果安装不成功dyhead没办法正常使用!如果执行了还是不成功,可看最下方mmcv安装问题.
    pip install -U openmim
    mim install mmengine -i https://pypi.tuna.tsinghua.edu.cn/simple
    mim install "mmcv>=2.0.0" -i https://pypi.tuna.tsinghua.edu.cn/simple
5. 运行时候如果还缺什么包就请自行安装即可.

AutoDL环境推荐教程:https://www.bilibili.com/video/BV1tT4y1b75q/

需要编译才能运行的一些模块:
    1. mamba
    2. dcnv3
    3. dcnv4

自带的一些文件说明

  1. train.py 训练模型的脚本
  2. main_profile.py 输出模型和模型每一层的参数,计算量的脚本
  3. val.py 使用训练好的模型计算指标的脚本
  4. detect.py 推理的脚本
  5. track.py 跟踪推理的脚本
  6. test_yaml.py 用来测试所有yaml是否能正常运行的脚本
  7. heatmap.py
    生成热力图的脚本
  8. get_FPS.py 计算模型储存大小、模型推理时间、FPS的脚本
  9. get_COCO_metrice.py 计算COCO指标的脚本
  10. plot_result.py 绘制曲线对比图的脚本
  11. transform_PGI.py 去掉PGI模块.

模型配置文件

模型配置文件都在ultralytics/cfg/models/v8中. yolov8有五种大小的模型,以下模型参数量和计算量均为类别80的时候计算.

YOLOv8n summary: 225 layers,  3157200 parameters,  3157184 gradients,   8.9 GFLOPs
YOLOv8s summary: 225 layers, 11166560 parameters, 11166544 gradients,  28.8 GFLOPs
YOLOv8m summary: 295 layers, 25902640 parameters, 25902624 gradients,  79.3 GFLOPs
YOLOv8l summary: 365 layers, 43691520 parameters, 43691504 gradients, 165.7 GFLOPs
YOLOv8x summary: 365 layers, 68229648 parameters, 68229632 gradients, 258.5 GFLOPs

关闭AMP混合精度训练

参考train.py

怎么像yolov5那样输出每一层的参数,计算量?

参考main_profile.py,选择自己的配置文件路径即可

如何替换主干?

可以看项目视频-替换主干示例教程.

如何绘制曲线对比图?

在plot_result.py中的names指定runs/train中的训练结果名字name即可.
比如目前runs/train中有exp,exp1,exp2这三个文件夹,plot_result.py中names中的值为:['exp', 'exp1', 'exp2'],运行后会自动保存为metrice_curve.png和loss_curve.png在当前运行的目录下.

如何计算COCO指标?

可以看项目视频-计算COCO指标教程.
python dataset/yolo2coco.py --image_path dataset/images/test --label_path dataset/labels/test
python get_COCO_metrice.py --pred_json runs/val/exp/predictions.json --anno_json data.json
新旧版的差异就在于 predictions.json的生成方式,新版就是在val.py中把save_json设置为True即可

目前自带的一些改进方案(持续更新)

目前支持的一些block (yolov5默认C3,yolov8默认C2f) (部分block可能会与主结构有冲突,具体以是否能运行为主)

C2f系列

C2f, C2f_Faster, C2f_ODConv, C2f_Faster_EMA, C2f_DBB, C2f_CloAtt, C2f_SCConv, C2f_ScConv, C2f_EMSC, C2f_EMSCP, C2f_KW, C2f_DCNv2, C2f_DCNv3, C2f_OREPA, C2f_REPVGGOREPA, C2f_DCNv2_Dynamic, C2f_MSBlock, C2f_ContextGuided, C2f_DLKA, C2f_EMBC, C2f_Parc, C2f_DWR, C2f_RFAConv, C2f_RFCBAMConv, C2f_RFCAConv, C2f_MLCA, C2f_AKConv, C2f_UniRepLKNetBlock, C2f_DRB, C2f_DWR_DRB, C2f_AggregatedAtt....

C3系列

C3, C3Ghost, C3_CloAtt, C3_SCConv, C3_ScConv, C3_EMSC, C3_EMSCP, C3_KW, C3_ODConv, C3_Faster, C3_Faster_EMA, C3_DCNv2, C3_DCNv3, C3_DBB, C3_OREPA, C3_REPVGGOREPA, C3_DCNv2_Dynamic, C3_MSBlock, C3_ContextGuided, C3_DLKA, C3_EMBC, C3_Parc, C3_DWR, C3_RFAConv, C3_RFCBAMConv, C3_RFCAConv, C3_MLCA, C3_AKConv, C3_UniRepLKNetBlock, C3_DRB, C3_DWR_DRB, C3_AggregatedAtt....

其他系列

VoVGSCSP, VoVGSCSPC, RCSOSA, CSP_EDLAN

目前整合的一些注意力机制 还需要别的注意力机制可从github拉取对应的代码到ultralytics/nn/extra_modules/attention.py即可. 视频教程可看项目视频中的(如何在yaml配置文件中添加注意力层)

EMA, SimAM, SpatialGroupEnhance, BiLevelRoutingAttention, BiLevelRoutingAttention_nchw, TripletAttention, CoordAtt, CBAM, BAMBlock, EfficientAttention(CloFormer中的注意力), LSKBlock, SEAttention, CPCA, deformable_LKA, EffectiveSEModule, LSKA, SegNext_Attention, DAttention(Vision Transformer with Deformable Attention CVPR2022), FocusedLinearAttention(ICCV2023), MLCA

YOLOV5 (AnchorFree+DFL+TAL) 官方预训练权重github链接

YOLOV5的使用方式跟YOLOV8一样,就是选择配置文件选择v5的即可.

  1. ultralytics/cfg/models/v5/yolov5-fasternet.yaml

    fasternet替换yolov5主干.

  2. ultralytics/cfg/models/v5/yolov5-timm.yaml

    使用timm支持的主干网络替换yolov5主干.timm的内容可看这期视频

  3. ultralytics/cfg/models/v5/yolov5-dyhead.yaml

    添加基于注意力机制的目标检测头到yolov5中.

  4. 增加Adaptive Training Sample Selection匹配策略.

    在ultralytics/utils/loss.py中的class v8DetectionLoss中自行选择对应的self.assigner即可.
    此ATSS匹配策略目前占用显存比较大,因此使用的时候需要设置更小的batch,后续会进行优化这一功能.

  5. Asymptotic Feature Pyramid Networkreference

    a. ultralytics/cfg/models/v5/yolov5-AFPN-P345.yaml
    b. ultralytics/cfg/models/v5/yolov5-AFPN-P345-Custom.yaml
    c. ultralytics/cfg/models/v5/yolov5-AFPN-P2345.yaml
    d. ultralytics/cfg/models/v5/yolov5-AFPN-P2345-Custom.yaml
    其中Custom中的block具体支持链接

  6. ultralytics/cfg/models/v5/yolov5-bifpn.yaml

    添加BIFPN到yolov5中.
    其中BIFPN中有三个可选参数:

    1. Fusion
      其中BIFPN中的Fusion模块支持四种: weight, adaptive, concat, bifpn(default), SDI
      其中weight, adaptive, concat出自paper链接-Figure 3, SDI出自U-NetV2
    2. node_mode
      其中目前(后续会更新喔)支持这些结构
    3. head_channel
      BIFPN中的通道数,默认设置为256.
  7. ultralytics/cfg/models/v5/yolov5-C3-CloAtt.yaml

    使用C3-CloAtt替换C3.(使用CloFormer中的具有全局和局部特征的注意力机制添加到C3中的Bottleneck中)(需要看常见错误和解决方案的第五点)

  8. ultralytics/cfg/models/v5/yolov5-RevCol.yaml

    使用(ICLR2023)Reversible Column Networks对yolov5主干进行重设计.

  9. ultralytics/cfg/models/v5/yolov5-LSKNet.yaml

    LSKNet(2023旋转目标检测SOTA的主干)替换yolov5主干.

  10. ultralytics/cfg/models/v5/yolov5-C3-SCConv.yaml

    SCConv(CVPR2020 http://mftp.mmcheng.net/Papers/20cvprSCNet.pdf)与C3融合.

  11. ultralytics/cfg/models/v5/yolov5-C3-SCcConv.yaml

    ScConv(CVPR2023 https://openaccess.thecvf.com/content/CVPR2023/papers/Li_SCConv_Spatial_and_Channel_Reconstruction_Convolution_for_Feature_Redundancy_CVPR_2023_paper.pdf)与C3融合.
    (取名为SCcConv的原因是在windows下命名是不区分大小写的)

  12. MPDiou.论文链接

    在ultralytics/utils/loss.py中的BboxLoss class中的forward函数里面进行更换对应的iou计算方式.

  13. ultralytics/cfg/models/v5/yolov5-LAWDS.yaml

    Light Adaptive-weight downsampling.自研模块,具体讲解请看百度云链接中的视频.

  14. ultralytics/cfg/models/v5/yolov5-C3-EMSC.yaml

    Efficient Multi-Scale Conv.自研模块,具体讲解请看百度云链接中的视频.

  15. ultralytics/cfg/models/v5/yolov5-C3-EMSCP.yaml

    Efficient Multi-Scale Conv Plus.自研模块,具体讲解请看百度云链接中的视频.

  16. ultralytics/cfg/models/v5/yolov5-RCSOSA.yaml

    使用RCS-YOLO中的RCSOSA替换C3.

  17. ultralytics/cfg/models/v5/yolov5-KernelWarehouse.yaml

    使用Towards Parameter-Efficient Dynamic Convolution添加到yolov5中.
    使用此模块需要注意,在epoch0-20的时候精度会非常低,过了20epoch会正常.

  18. Normalized Gaussian Wasserstein Distance.论文链接

    在Loss中使用: 在ultralytics/utils/loss.py中的BboxLoss class中的__init__函数里面设置self.nwd_loss为True.
    比例系数调整self.iou_ratio, self.iou_ratio代表iou的占比,(1-self.iou_ratio)为代表nwd的占比.
    在TAL标签分配中使用: 在ultralytics/utils/tal.py中的def get_box_metrics函数中进行更换即可.
    以上这两可以配合使用,也可以单独使用.

  19. SlideLoss and EMASlideLoss.Yolo-Face V2

    在ultralytics/utils/loss.py中的class v8DetectionLoss进行设定.

  20. ultralytics/cfg/models/v5/yolov5-C3-DySnakeConv.yaml

    DySnakeConv与C3融合.

  21. ultralytics/cfg/models/v5/yolov5-EfficientHead.yaml

    对检测头进行重设计,支持10种轻量化检测头.详细请看ultralytics/nn/extra_modules/head.py中的Detect_Efficient class.

  22. ultralytics/cfg/models/v5/yolov5-aux.yaml

    参考YOLOV7-Aux对YOLOV5添加额外辅助训练头,在训练阶段参与训练,在最终推理阶段去掉.
    其中辅助训练头的损失权重系数可在ultralytics/utils/loss.py中的class v8DetectionLoss中的__init__函数中的self.aux_loss_ratio设定,默认值参考yolov7为0.25.

  23. ultralytics/cfg/models/v5/yolov5-C3-DCNV2.yaml

    使用C3-DCNV2替换C3.(DCNV2为可变形卷积V2)

  24. ultralytics/cfg/models/v5/yolov5-C3-DCNV3.yaml

    使用C3-DCNV3替换C3.(DCNV3为可变形卷积V3(CVPR2023,众多排行榜的SOTA))
    官方中包含了一些指定版本的DCNV3 whl包,下载后直接pip install xxx即可.具体和安装DCNV3可看百度云链接中的视频.

  25. ultralytics/cfg/models/v5/yolov5-C3-Faster.yaml

    使用C3-Faster替换C3.(使用FasterNet中的FasterBlock替换C3中的Bottleneck)

  26. ultralytics/cfg/models/v5/yolov5-C3-ODConv.yaml

    使用C3-ODConv替换C3.(使用ODConv替换C3中的Bottleneck中的Conv)

  27. ultralytics/cfg/models/v5/yolov5-C3-Faster-EMA.yaml

    使用C3-Faster-EMA替换C3.(C3-Faster-EMA推荐可以放在主干上,Neck和head部分可以选择C3-Faster)

  28. ultralytics/cfg/models/v5/yolov5-dyhead-DCNV3.yaml

    使用DCNV3替换DyHead中的DCNV2.

  29. ultralytics/cfg/models/v5/yolov5-FocalModulation.yaml

    使用Focal Modulation替换SPPF.

  30. ultralytics/cfg/models/v5/yolov5-C3-DBB.yaml

    使用C3-DBB替换C3.(使用DiverseBranchBlock替换C3中的Bottleneck中的Conv)

  31. ultralytics/cfg/models/v5/yolov5-C3-OREPA.yaml

    使用C3-OREPA替换C2f.Online Convolutional Re-parameterization (CVPR2022)

  32. ultralytics/cfg/models/v5/yolov5-C3-REPVGGOREPA.yaml

    使用C3-REPVGGOREPA替换C3.Online Convolutional Re-parameterization (CVPR2022)

  33. ultralytics/cfg/models/v5/yolov5-swintransformer.yaml

    SwinTransformer-Tiny替换yolov5主干.

  34. ultralytics/cfg/models/v5/yolov5-repvit.yaml

    CVPR2024 RepViT替换yolov5主干.

  35. ultralytics/cfg/models/v5/yolov5-fasternet-bifpn.yaml

    fasternet与bifpn的结合.
    其中BIFPN中有三个可选参数:

    1. Fusion
      其中BIFPN中的Fusion模块支持四种: weight, adaptive, concat, bifpn(default), SDI
      其中weight, adaptive, concat出自paper链接-Figure 3, SDI出自U-NetV2
    2. node_mode
      其中目前(后续会更新喔)支持这些结构
    3. head_channel
      BIFPN中的通道数,默认设置为256.
  36. ultralytics/cfg/models/v5/yolov5-C3-DCNV2-Dynamic.yaml

    利用自研注意力机制MPCA强化DCNV2中的offset和mask.

  37. ultralytics/cfg/models/v5/yolov5-goldyolo.yaml

    利用华为2023最新GOLD-YOLO中的Gatherand-Distribute进行改进特征融合模块

  38. ultralytics/cfg/models/v5/yolov5-C3-ContextGuided.yaml

    使用CGNet中的Light-weight Context Guided改进C3.

  39. ultralytics/cfg/models/v5/yolov5-ContextGuidedDown.yaml

    使用CGNet中的Light-weight Context Guided DownSample进行下采样.

  40. ultralytics/cfg/models/v5/yolov5-C3-MSBlock.yaml

    使用YOLO-MS中的MSBlock改进C3.

  41. ultralytics/cfg/models/v5/yolov5-C3-DLKA.yaml

    使用deformableLKA改进C3.

  42. ultralytics/cfg/models/v5/yolov5-GFPN.yaml

    使用DAMO-YOLO中的RepGFPN改进Neck.

  43. ultralytics/cfg/models/v5/yolov5-SPDConv.yaml

    使用SPDConv进行下采样.

  44. ultralytics/cfg/models/v5/yolov5-EfficientRepBiPAN.yaml

    使用YOLOV6中的EfficientRepBiPAN改进Neck.

  45. ultralytics/cfg/models/v5/yolov5-C3-EMBC.yaml

    使用Efficientnet中的MBConv与EffectiveSE改进C3.

  46. ultralytics/cfg/models/v5/yolov5-SPPF-LSKA.yaml

    使用LSKA注意力机制改进SPPF,增强多尺度特征提取能力.

  47. ultralytics/cfg/models/v5/yolov5-C3-DAttention.yaml

    使用Vision Transformer with Deformable Attention(CVPR2022)改进C2f.(需要看常见错误和解决方案的第五点)
    使用注意点请看百度云视频.使用注意点请看百度云视频.(DAttention(Vision Transformer with Deformable Attention CVPR2022)使用注意说明.)

  48. ultralytics/cfg/models/v5/yolov5-CSwinTransformer.yaml

    使用CSWin-Transformer(CVPR2022)替换yolov5主干.(需要看常见错误和解决方案的第五点)

  49. ultralytics/cfg/models/v5/yolov5-AIFI.yaml

    使用RT-DETR中的Attention-based Intrascale Feature Interaction(AIFI)改进yolov5.

  50. ultralytics/cfg/models/v5/yolov5-C3-Parc.yaml

    使用ParC-Net中的ParC_Operator改进C3.(需要看常见错误和解决方案的第五点)
    使用注意点请看百度云视频.(20231031更新说明)

  51. ultralytics/cfg/models/v5/yolov5-C3-DWR.yaml

    使用DWRSeg中的Dilation-wise Residual(DWR)模块,加强从网络高层的可扩展感受野中提取特征.

  52. ultralytics/cfg/models/v5/yolov5-C3-RFAConv.yaml

    使用RFAConv中的RFAConv改进yolov5.

  53. ultralytics/cfg/models/v5/yolov5-C3-RFCBAMConv.yaml

    使用RFAConv中的RFCBAMConv改进yolov5.

  54. ultralytics/cfg/models/v8/yolov5-C3-RFCAConv.yaml

    使用RFAConv中的RFCAConv改进yolov5.

  55. ultralytics/cfg/models/v5/yolov5-HGNetV2.yaml

    使用HGNetV2作为YOLOV5的backbone.

  56. ultralytics/cfg/models/v5/yolov5-GhostHGNetV2.yaml

    使用Ghost_HGNetV2作为YOLOV5的backbone.

  57. ultralytics/cfg/models/v5/yolov5-RepHGNetV2.yaml

    使用Rep_HGNetV2作为YOLOV5的backbone.

  58. ultralytics/cfg/models/v5/yolov5-C3-FocusedLinearAttention.yaml

    使用FLatten Transformer(ICCV2023)中的FocusedLinearAttention改进C3.(需要看常见错误和解决方案的第五点) 使用注意点请看百度云视频.(20231114版本更新说明.)

  59. IoU,GIoU,DIoU,CIoU,EIoU,SIoU更换方法.

    请看百度云视频.(20231114版本更新说明.)

  60. Inner-IoU,Inner-GIoU,Inner-DIoU,Inner-CIoU,Inner-EIoU,Inner-SIoU更换方法.

    请看百度云视频.(20231114版本更新说明.)

  61. Inner-MPDIoU更换方法.

    请看百度云视频.(20231114版本更新说明.)

  62. ultralytics/cfg/models/v5/yolov5-C3-MLCA.yaml

    使用Mixed Local Channel Attention 2023改进C3.(用法请看百度云视频-20231129版本更新说明)

  63. ultralytics/cfg/models/v5/yolov5-C3-AKConv.yaml

    使用AKConv 2023改进C3.(用法请看百度云视频-20231129版本更新说明)

  64. ultralytics/cfg/models/v5/yolov5-unireplknet.yaml

    使用UniRepLKNet替换yolov5主干.

  65. ultralytics/cfg/models/v5/yolov5-C3-UniRepLKNetBlock.yaml

    使用UniRepLKNet中的UniRepLKNetBlock改进C3.

  66. ultralytics/cfg/models/v5/yolov5-C3-DRB.yaml

    使用UniRepLKNet中的DilatedReparamBlock改进C3.

  67. ultralytics/cfg/models/v5/yolov5-C3-DWR-DRB.yaml

    使用UniRepLKNet中的DilatedReparamBlock对DWRSeg中的Dilation-wise Residual(DWR)的模块进行二次创新后改进C3.

  68. ultralytics/cfg/models/v5/yolov5-ASF.yaml

    使用使用ASF-YOLO中的Attentional Scale Sequence Fusion改进yolov5.

  69. ultralytics/cfg/models/v5/yolov5-ASF-P2.yaml

    在ultralytics/cfg/models/v8/yolov8-ASF.yaml的基础上进行二次创新,引入P2检测层并对网络结构进行优化.

  70. ultralytics/cfg/models/v5/yolov5-CSP-EDLAN.yaml

    使用DualConv打造CSP Efficient Dual Layer Aggregation Networks改进yolov5.

  71. ultralytics/cfg/models/v5/yolov5-TransNeXt.yaml

    使用TransNeXt改进yolov5的backbone.(需要看常见错误和解决方案的第五点)

  72. ultralytics/cfg/models/v5/yolov5-AggregatedAttention.yaml

    使用TransNeXt中的聚合感知注意力改进yolov5的backbone.(需要看常见错误和解决方案的第五点)

  73. ultralytics/cfg/models/v5/yolov5-C3-AggregatedAtt.yaml

    使用TransNeXt中的聚合感知注意力改进C3.(需要看常见错误和解决方案的第五点)

  74. ultralytics/cfg/models/v5/yolov5-bifpn-SDI.yaml

    使用U-NetV2中的 Semantics and Detail Infusion Module对BIFPN进行二次创新.

  75. ultralytics/cfg/models/v5/yolov5-SDI.yaml

    使用U-NetV2中的 Semantics and Detail Infusion Module对yolov5中的feature fusion部分进行重设计.

  76. Shape-IoU,Inner-Shape-IoU更换方法.

    请看百度云视频.(20240104版本更新说明.)

  77. FocalLoss,VarifocalLoss,QualityfocalLoss更换方法.

    请看百度云视频.(20240111版本更新说明.)

  78. Wise-IoU(v1,v2,v3)系列(IoU,WIoU,EIoU,GIoU,DIoU,CIoU,SIoU,MPDIoU,ShapeIoU)更换方法.

    请看百度云视频.(20240111版本更新说明.)

  79. Inner-Wise-IoU(v1,v2,v3)系列(IoU,WIoU,EIoU,GIoU,DIoU,CIoU,SIoU,MPDIoU,ShapeIoU)更换方法.

    请看百度云视频.(20240111版本更新说明.)

  80. ultralytics/cfg/models/v8/yolov8-goldyolo-asf.yaml

    利用华为2023最新GOLD-YOLO中的Gatherand-Distribute与ASF-YOLO中的Attentional Scale Sequence Fusion进行二次创新改进yolov8的neck.

  81. ultralytics/cfg/models/v5/yolov5-C2-DCNV4.yaml

    使用DCNV4改进C3.(请关闭AMP进行训练,使用教程请看20240116版本更新说明)

  82. ultralytics/cfg/models/v5/yolov5-dyhead-DCNV4.yaml

    使用DCNV4对DyHead进行二次创新.(请关闭AMP进行训练,使用教程请看20240116版本更新说明)

  83. ultralytics/cfg/models/v5/yolov5-HSFPN.yaml

    使用MFDS-DETR中的HS-FPN改进yolov5的neck.

  84. ultralytics/cfg/models/v5/yolov5-HSPAN.yaml

    MFDS-DETR中的HS-FPN进行二次创新后得到HSPAN改进yolov5的neck.

  85. soft-nms(IoU,GIoU,DIoU,CIoU,EIoU,SIoU,ShapeIoU)

    soft-nms替换nms.(建议:仅在val.py时候使用,具体替换请看20240122版本更新说明)

  86. ultralytics/cfg/models/v5/yolov5-dysample.yaml

    使用ICCV2023 DySample改进yolov5-neck中的上采样.

  87. ultralytics/cfg/models/v5/yolov5-CARAFE.yaml

    使用ICCV2019 CARAFE改进yolov5-neck中的上采样.

  88. ultralytics/cfg/models/v5/yolov5-HWD.yaml

    使用Haar wavelet downsampling改进yolov5的下采样.(请关闭AMP情况下使用)

  89. Focaler-IoU系列(IoU,GIoU,DIoU,CIoU,EIoU,SIoU,WIoU,MPDIoU,ShapeIoU)

    请看百度云视频.

  90. ultralytics/cfg/models/v5/yolov5-GDFPN.yaml

    使用DAMO-YOLO中的RepGFPN与ICCV2023 DySample进行二次创新改进Neck.

  91. ultralytics/cfg/models/v5/yolov5-HSPAN-DySample.yaml

    MFDS-DETR中的HS-FPN进行二次创新后得到HSPAN再进行创新,使用ICCV2023 DySample改进其上采样模块.

  92. ultralytics/cfg/models/v5/yolov5-ASF-DySample.yaml

    使用ASF-YOLO中的Attentional Scale Sequence Fusion与ICCV2023 DySample组合得到Dynamic Sample Attentional Scale Sequence Fusion.

  93. ultralytics/cfg/models/v5/yolov5-SEAMHead.yaml

    使用YOLO-Face V2中的遮挡感知注意力改进Head,使其有效地处理遮挡场景.

  94. ultralytics/cfg/models/v5/yolov5-MultiSEAMHead.yaml

    使用YOLO-Face V2中的遮挡感知注意力改进Head,使其有效地处理遮挡场景.

  95. ultralytics/cfg/models/v5/yolov5-C3-SWC.yaml

    使用shift-wise conv改进yolov5中的C3.

  96. ultralytics/cfg/models/v5/yolov5-C3-iRMB.yaml

    使用EMO ICCV2023中的iRMB改进C3.

  97. ultralytics/cfg/models/v5/yolov5-C3-iRMB-Cascaded.yaml

    使用EfficientViT CVPR2023中的CascadedGroupAttention对EMO ICCV2023中的iRMB进行二次创新来改进C3.

  98. ultralytics/cfg/models/v5/yolov5-C3-iRMB-DRB.yaml

    使用UniRepLKNet中的DilatedReparamBlock对EMO ICCV2023中的iRMB进行二次创新来改进C3.

  99. ultralytics/cfg/models/v5/yolov5-C3-iRMB-SWC.yaml

    使用shift-wise convEMO ICCV2023中的iRMB进行二次创新来改进C3.

  100. ultralytics/cfg/models/v5/yolov5-C3-VSS.yaml

使用最新的Mamba架构[Mamba-UNet中的VSS](https://github.com/ziyangwang007/Mamba-UNet)对C2f中的BottleNeck进行改进,使其能更有效地捕获图像中的复杂细节和更广泛的语义上下文.
  1. ultralytics/cfg/models/v5/yolov5-C3-LVMB.yaml
使用最新的Mamba架构[Mamba-UNet中的VSS](https://github.com/ziyangwang007/Mamba-UNet)与Cross Stage Partial进行结合,使其能更有效地捕获图像中的复杂细节和更广泛的语义上下文.
  1. ultralytics/cfg/models/v5/yolov5-RepNCSPELAN.yaml
使用[YOLOV9](https://github.com/WongKinYiu/yolov9)中的RepNCSPELAN进行改进yolov5.

YOLOV8

  1. ultralytics/cfg/models/v8/yolov8-efficientViT.yaml

    (CVPR2023)efficientViT替换yolov8主干.

  2. ultralytics/cfg/models/v8/yolov8-fasternet.yaml

    (CVPR2023)fasternet替换yolov8主干.

  3. ultralytics/cfg/models/v8/yolov8-timm.yaml

    使用timm支持的主干网络替换yolov8主干.timm的内容可看这期视频

  4. ultralytics/cfg/models/v8/yolov8-convnextv2.yaml

    使用convnextv2网络替换yolov8主干.

  5. ultralytics/cfg/models/v8/yolov8-dyhead.yaml

    添加基于注意力机制的目标检测头到yolov8中.

  6. ultralytics/cfg/models/v8/yolov8-bifpn.yaml

    添加BIFPN到yolov8中.
    其中BIFPN中有三个可选参数:

    1. Fusion
      其中BIFPN中的Fusion模块支持四种: weight, adaptive, concat, bifpn(default), SDI
      其中weight, adaptive, concat出自paper链接-Figure 3, SDI出自U-NetV2
    2. node_mode
      其中目前(后续会更新喔)支持这些结构
    3. head_channel
      BIFPN中的通道数,默认设置为256.
  7. ultralytics/cfg/models/v8/yolov8-C2f-Faster.yaml

    使用C2f-Faster替换C2f.(使用FasterNet中的FasterBlock替换C2f中的Bottleneck)

  8. ultralytics/cfg/models/v8/yolov8-C2f-ODConv.yaml

    使用C2f-ODConv替换C2f.(使用ODConv替换C2f中的Bottleneck中的Conv)

  9. ultralytics/cfg/models/v8/yolov8-EfficientFormerV2.yaml

    使用EfficientFormerV2网络替换yolov8主干.(需要看常见错误和解决方案的第五点)

  10. ultralytics/cfg/models/v8/yolov8-C2f-Faster-EMA.yaml

    使用C2f-Faster-EMA替换C2f.(C2f-Faster-EMA推荐可以放在主干上,Neck和head部分可以选择C2f-Faster)

  11. ultralytics/cfg/models/v8/yolov8-C2f-DBB.yaml

    使用C2f-DBB替换C2f.(使用DiverseBranchBlock替换C2f中的Bottleneck中的Conv)

  12. 增加Adaptive Training Sample Selection匹配策略.

    在ultralytics/utils/loss.py中的class v8DetectionLoss中自行选择对应的self.assigner即可.
    此ATSS匹配策略目前占用显存比较大,因此使用的时候需要设置更小的batch,后续会进行优化这一功能.

  13. ultralytics/cfg/models/v8/yolov8-slimneck.yaml

    使用VoVGSCSP\VoVGSCSPC和GSConv替换yolov8 neck中的C2f和Conv.

  14. ultralytics/cfg/models/v8/yolov8-attention.yaml

    可以看项目视频-如何在yaml配置文件中添加注意力层
    多种注意力机制在yolov8中的使用. 多种注意力机制github地址
    目前内部整合的注意力可看链接

  15. Asymptotic Feature Pyramid Networkreference

    a. ultralytics/cfg/models/v8/yolov8-AFPN-P345.yaml
    b. ultralytics/cfg/models/v8/yolov8-AFPN-P345-Custom.yaml
    c. ultralytics/cfg/models/v8/yolov8-AFPN-P2345.yaml
    d. ultralytics/cfg/models/v8/yolov8-AFPN-P2345-Custom.yaml
    其中Custom中的block支持这些结构

  16. ultralytics/cfg/models/v8/yolov8-vanillanet.yaml

    vanillanet替换yolov8主干.

  17. ultralytics/cfg/models/v8/yolov8-C2f-CloAtt.yaml

    使用C2f-CloAtt替换C2f.(使用CloFormer中的具有全局和局部特征的注意力机制添加到C2f中的Bottleneck中)(需要看常见错误和解决方案的第五点)

  18. ultralytics/cfg/models/v8/yolov8-RevCol.yaml

    使用(ICLR2023)Reversible Column Networks对yolov8主干进行重设计.

  19. ultralytics/cfg/models/v8/yolov8-LSKNet.yaml

    LSKNet(2023旋转目标检测SOTA的主干)替换yolov8主干.

  20. ultralytics/cfg/models/v8/yolov8-C2f-SCConv.yaml

    SCConv(CVPR2020 http://mftp.mmcheng.net/Papers/20cvprSCNet.pdf)与C2f融合.

  21. ultralytics/cfg/models/v8/yolov8-C2f-SCcConv.yaml

    ScConv(CVPR2023 https://openaccess.thecvf.com/content/CVPR2023/papers/Li_SCConv_Spatial_and_Channel_Reconstruction_Convolution_for_Feature_Redundancy_CVPR_2023_paper.pdf)与C2f融合.
    (取名为SCcConv的原因是在windows下命名是不区分大小写的)

  22. MPDiou.论文链接

    在ultralytics/utils/loss.py中的BboxLoss class中的forward函数里面进行更换对应的iou计算方式.

  23. ultralytics/cfg/models/v8/yolov8-LAWDS.yaml

    Light Adaptive-weight downsampling.自研模块,具体讲解请看百度云链接中的视频.

  24. ultralytics/cfg/models/v8/yolov8-C2f-EMSC.yaml

    Efficient Multi-Scale Conv.自研模块,具体讲解请看百度云链接中的视频.

  25. ultralytics/cfg/models/v8/yolov8-C2f-EMSCP.yaml

    Efficient Multi-Scale Conv Plus.自研模块,具体讲解请看百度云链接中的视频.

  26. ultralytics/cfg/models/v8/yolov8-RCSOSA.yaml

    使用RCS-YOLO中的RCSOSA替换C2f.

  27. ultralytics/cfg/models/v8/yolov8-KernelWarehouse.yaml

    使用Towards Parameter-Efficient Dynamic Convolution添加到yolov8中.
    使用此模块需要注意,在epoch0-20的时候精度会非常低,过了20epoch会正常.

  28. Normalized Gaussian Wasserstein Distance.论文链接

    在Loss中使用: 在ultralytics/utils/loss.py中的BboxLoss class中的__init__函数里面设置self.nwd_loss为True.
    比例系数调整self.iou_ratio, self.iou_ratio代表iou的占比,(1-self.iou_ratio)为代表nwd的占比.
    在TAL标签分配中使用: 在ultralytics/utils/tal.py中的def get_box_metrics函数中进行更换即可. 以上这两可以配合使用,也可以单独使用.

  29. SlideLoss and EMASlideLoss.Yolo-Face V2

    在ultralytics/utils/loss.py中的class v8DetectionLoss进行设定.

  30. ultralytics/cfg/models/v8/yolov8-C2f-DySnakeConv.yaml

    DySnakeConv与C2f融合.

  31. ultralytics/cfg/models/v8/yolov8-EfficientHead.yaml

    对检测头进行重设计,支持10种轻量化检测头.详细请看ultralytics/nn/extra_modules/head.py中的Detect_Efficient class.YOLOV8改进-带你分析V8的检测头并重设计10种结构轻量化检测头

  32. ultralytics/cfg/models/v8/yolov8-aux.yaml

    参考YOLOV7-Aux对YOLOV8添加额外辅助训练头,在训练阶段参与训练,在最终推理阶段去掉.
    其中辅助训练头的损失权重系数可在ultralytics/utils/loss.py中的class v8DetectionLoss中的__init__函数中的self.aux_loss_ratio设定,默认值参考yolov7为0.25.

  33. ultralytics/cfg/models/v8/yolov8-C2f-DCNV2.yaml

    使用C2f-DCNV2替换C2f.(DCNV2为可变形卷积V2)

  34. ultralytics/cfg/models/v8/yolov8-C2f-DCNV3.yaml

    使用C2f-DCNV3替换C2f.(DCNV3为可变形卷积V3(CVPR2023,众多排行榜的SOTA))
    官方中包含了一些指定版本的DCNV3 whl包,下载后直接pip install xxx即可.具体和安装DCNV3可看百度云链接中的视频.

  35. ultralytics/cfg/models/v8/yolov8-dyhead-DCNV3.yaml

    使用DCNV3替换DyHead中的DCNV2.

  36. ultralytics/cfg/models/v8/yolov8-FocalModulation.yaml

    使用Focal Modulation替换SPPF.

  37. ultralytics/cfg/models/v8/yolov8-C2f-OREPA.yaml

    使用C2f-OREPA替换C2f.Online Convolutional Re-parameterization (CVPR2022)

  38. ultralytics/cfg/models/v8/yolov8-C2f-REPVGGOREPA.yaml

    使用C2f-REPVGGOREPA替换C2f.Online Convolutional Re-parameterization (CVPR2022)

  39. ultralytics/cfg/models/v8/yolov8-swintransformer.yaml

    SwinTransformer-Tiny替换yolov8主干.

  40. ultralytics/cfg/models/v8/yolov8-repvit.yaml

    CVPR2024 RepViT替换yolov8主干.

  41. ultralytics/cfg/models/v8/yolov8-fasternet-bifpn.yaml

    fasternet与bifpn的结合.
    其中BIFPN中有三个可选参数:

    1. Fusion
      其中BIFPN中的Fusion模块支持四种: weight, adaptive, concat, bifpn(default), SDI
      其中weight, adaptive, concat出自paper链接-Figure 3, SDI出自U-NetV2
    2. node_mode
      其中目前(后续会更新喔)支持这些结构
    3. head_channel
      BIFPN中的通道数,默认设置为256.
  42. ultralytics/cfg/models/v8/yolov8-C2f-DCNV2-Dynamic.yaml

    利用自研注意力机制MPCA强化DCNV2中的offset和mask.

  43. ultralytics/cfg/models/v8/yolov8-goldyolo.yaml

    利用华为2023最新GOLD-YOLO中的Gatherand-Distribute进行改进特征融合模块

  44. ultralytics/cfg/models/v8/yolov8-C2f-ContextGuided.yaml

    使用CGNet中的Light-weight Context Guided改进C2f.

  45. ultralytics/cfg/models/v8/yolov8-ContextGuidedDown.yaml

    使用CGNet中的Light-weight Context Guided DownSample进行下采样.

  46. ultralytics/cfg/models/v8/yolov8-C2f-MSBlock.yaml

    使用YOLO-MS中的MSBlock改进C2f.

  47. ultralytics/cfg/models/v8/yolov8-C2f-DLKA.yaml

    使用deformableLKA改进C2f.

  48. ultralytics/cfg/models/v8/yolov8-GFPN.yaml

    使用DAMO-YOLO中的RepGFPN改进Neck.

  49. ultralytics/cfg/models/v8/yolov8-SPDConv.yaml

    使用SPDConv进行下采样.

  50. ultralytics/cfg/models/v8/yolov8-EfficientRepBiPAN.yaml

    使用YOLOV6中的EfficientRepBiPAN改进Neck.

  51. ultralytics/cfg/models/v8/yolov8-C2f-EMBC.yaml

    使用Efficientnet中的MBConv与EffectiveSE改进C2f.

  52. ultralytics/cfg/models/v8/yolov8-SPPF-LSKA.yaml

    使用LSKA注意力机制改进SPPF,增强多尺度特征提取能力.

  53. ultralytics/cfg/models/v8/yolov8-C2f-DAttention.yaml

    使用Vision Transformer with Deformable Attention(CVPR2022)改进C2f.(需要看常见错误和解决方案的第五点)
    使用注意点请看百度云视频.(DAttention(Vision Transformer with Deformable Attention CVPR2022)使用注意说明.)

  54. ultralytics/cfg/models/v8/yolov8-CSwinTransformer.yaml

    使用CSWin-Transformer(CVPR2022)替换yolov8主干.(需要看常见错误和解决方案的第五点)

  55. ultralytics/cfg/models/v8/yolov8-AIFI.yaml

    使用RT-DETR中的Attention-based Intrascale Feature Interaction(AIFI)改进yolov8.

  56. ultralytics/cfg/models/v8/yolov8-C2f-Parc.yaml

    使用ParC-Net中的ParC_Operator改进C2f.(需要看常见错误和解决方案的第五点)
    使用注意点请看百度云视频.(20231031更新说明)

  57. ultralytics/cfg/models/v8/yolov8-C2f-DWR.yaml

    使用DWRSeg中的Dilation-wise Residual(DWR)模块,加强从网络高层的可扩展感受野中提取特征.

  58. ultralytics/cfg/models/v8/yolov8-C2f-RFAConv.yaml

    使用RFAConv中的RFAConv改进yolov8.

  59. ultralytics/cfg/models/v8/yolov8-C2f-RFCBAMConv.yaml

    使用RFAConv中的RFCBAMConv改进yolov8.

  60. ultralytics/cfg/models/v8/yolov8-C2f-RFCAConv.yaml

    使用RFAConv中的RFCAConv改进yolov8.

  61. ultralytics/cfg/models/v8/yolov8-HGNetV2.yaml

    使用HGNetV2作为YOLOV8的backbone.

  62. ultralytics/cfg/models/v8/yolov8-GhostHGNetV2.yaml

    使用Ghost_HGNetV2作为YOLOV8的backbone.

  63. ultralytics/cfg/models/v8/yolov8-RepHGNetV2.yaml

    使用Rep_HGNetV2作为YOLOV8的backbone.

  64. ultralytics/cfg/models/v8/yolov8-seg-EfficientHead.yaml(实例分割)

    对检测头进行重设计,支持10种轻量化检测头.详细请看ultralytics/nn/extra_modules/head.py中的Detect_Efficient class.YOLOV8改进-带你分析V8的检测头并重设计10种结构轻量化检测头

  65. ultralytics/cfg/models/v8/yolov8-C2f-FocusedLinearAttention.yaml

    使用FLatten Transformer(ICCV2023)中的FocusedLinearAttention改进C2f.(需要看常见错误和解决方案的第五点)
    使用注意点请看百度云视频.(20231114版本更新说明.)

  66. IoU,GIoU,DIoU,CIoU,EIoU,SIoU更换方法.

    请看百度云视频.(20231114版本更新说明.)

  67. Inner-IoU,Inner-GIoU,Inner-DIoU,Inner-CIoU,Inner-EIoU,Inner-SIoU更换方法.

    请看百度云视频.(20231114版本更新说明.)

  68. Inner-MPDIoU更换方法.

    请看百度云视频.(20231114版本更新说明.)

  69. ultralytics/cfg/models/v8/yolov8-C2f-MLCA.yaml

    使用Mixed Local Channel Attention 2023改进C2f.(用法请看百度云视频-20231129版本更新说明)

  70. ultralytics/cfg/models/v8/yolov8-C2f-AKConv.yaml

    使用AKConv 2023改进C2f.(用法请看百度云视频-20231129版本更新说明)

  71. ultralytics/cfg/models/v8/yolov8-unireplknet.yaml

    使用UniRepLKNet替换yolov8主干.

  72. ultralytics/cfg/models/v8/yolov8-C2f-UniRepLKNetBlock.yaml

    使用UniRepLKNet中的UniRepLKNetBlock改进C2f.

  73. ultralytics/cfg/models/v8/yolov8-C2f-DRB.yaml

    使用UniRepLKNet中的DilatedReparamBlock改进C2f.

  74. ultralytics/cfg/models/v8/yolov8-C2f-DWR-DRB.yaml

    使用UniRepLKNet中的DilatedReparamBlock对DWRSeg中的Dilation-wise Residual(DWR)的模块进行二次创新后改进C2f.

  75. ultralytics/cfg/models/v8/yolov8-ASF.yaml

    使用ASF-YOLO中的Attentional Scale Sequence Fusion改进yolov8.

  76. ultralytics/cfg/models/v8/yolov8-ASF-P2.yaml

    在ultralytics/cfg/models/v8/yolov8-ASF.yaml的基础上进行二次创新,引入P2检测层并对网络结构进行优化.

  77. ultralytics/cfg/models/v8/yolov8-CSP-EDLAN.yaml

    使用DualConv打造CSP Efficient Dual Layer Aggregation Networks改进yolov8.

  78. ultralytics/cfg/models/v8/yolov8-TransNeXt.yaml

    使用TransNeXt改进yolov8的backbone.(需要看常见错误和解决方案的第五点)

  79. ultralytics/cfg/models/v8/yolov8-AggregatedAttention.yaml

    使用TransNeXt中的聚合感知注意力改进yolov8的backbone.(需要看常见错误和解决方案的第五点)

  80. ultralytics/cfg/models/v8/yolov8-C2f-AggregatedAtt.yaml

    使用TransNeXt中的聚合感知注意力改进C2f.(需要看常见错误和解决方案的第五点)

  81. ultralytics/cfg/models/v8/yolov8-bifpn-SDI.yaml

    使用U-NetV2中的 Semantics and Detail Infusion Module对BIFPN进行二次创新.

  82. ultralytics/cfg/models/v8/yolov8-SDI.yaml

    使用U-NetV2中的 Semantics and Detail Infusion Module对yolov8中的feature fusion部分进行重设计.

  83. Shape-IoU,Inner-Shape-IoU更换方法.

    请看百度云视频.(20240104版本更新说明.)

  84. FocalLoss,VarifocalLoss,QualityfocalLoss更换方法.

    请看百度云视频.(20240111版本更新说明.)

  85. Wise-IoU(v1,v2,v3)系列(IoU,WIoU,EIoU,GIoU,DIoU,CIoU,SIoU,MPDIoU,ShapeIoU)更换方法.

    请看百度云视频.(20240111版本更新说明.)

  86. Inner-Wise-IoU(v1,v2,v3)系列(IoU,WIoU,EIoU,GIoU,DIoU,CIoU,SIoU,MPDIoU,ShapeIoU)更换方法.

    请看百度云视频.(20240111版本更新说明.)

  87. ultralytics/cfg/models/v8/yolov8-goldyolo-asf.yaml

    利用华为2023最新GOLD-YOLO中的Gatherand-Distribute与ASF-YOLO中的Attentional Scale Sequence Fusion进行二次创新改进yolov8的neck.

  88. ultralytics/cfg/models/v8/yolov8-C2f-DCNV4.yaml

    使用DCNV4改进C2f.(请关闭AMP进行训练,使用教程请看20240116版本更新说明)

  89. ultralytics/cfg/models/v8/yolov8-dyhead-DCNV4.yaml

    使用DCNV4对DyHead进行二次创新.(请关闭AMP进行训练,使用教程请看20240116版本更新说明)

  90. ultralytics/cfg/models/v8/yolov8-HSFPN.yaml

    使用MFDS-DETR中的HS-FPN改进yolov8的neck.

  91. ultralytics/cfg/models/v8/yolov8-HSPAN.yaml

    MFDS-DETR中的HS-FPN进行二次创新后得到HSPAN改进yolov8的neck.

  92. soft-nms(IoU,GIoU,DIoU,CIoU,EIoU,SIoU,ShapeIoU)

    soft-nms替换nms.(建议:仅在val.py时候使用,具体替换请看20240122版本更新说明)

  93. ultralytics/cfg/models/v8/yolov8-dysample.yaml

    使用ICCV2023 DySample改进yolov8-neck中的上采样.

  94. ultralytics/cfg/models/v8/yolov8-CARAFE.yaml

    使用ICCV2019 CARAFE改进yolov8-neck中的上采样.

  95. ultralytics/cfg/models/v8/yolov8-HWD.yaml

    使用Haar wavelet downsampling改进yolov8的下采样.(请关闭AMP情况下使用)

  96. Focaler-IoU系列(IoU,GIoU,DIoU,CIoU,EIoU,SIoU,WIoU,MPDIoU,ShapeIoU)

    请看百度云视频.(20240203更新说明)

  97. ultralytics/cfg/models/v8/yolov8-GDFPN.yaml

    使用DAMO-YOLO中的RepGFPN与ICCV2023 DySample进行二次创新改进Neck.

  98. ultralytics/cfg/models/v8/yolov8-HSPAN-DySample.yaml

    MFDS-DETR中的HS-FPN进行二次创新后得到HSPAN再进行创新,使用ICCV2023 DySample改进其上采样模块.

  99. ultralytics/cfg/models/v8/yolov8-ASF-DySample.yaml

    使用ASF-YOLO中的Attentional Scale Sequence Fusion与ICCV2023 DySample组合得到Dynamic Sample Attentional Scale Sequence Fusion.

  100. ultralytics/cfg/models/v8/yolov8-SEAMHead.yaml

使用[YOLO-Face V2](https://arxiv.org/pdf/2208.02019v2.pdf)中的遮挡感知注意力改进Head,使其有效地处理遮挡场景.
  1. ultralytics/cfg/models/v8/yolov8-MultiSEAMHead.yaml
使用[YOLO-Face V2](https://arxiv.org/pdf/2208.02019v2.pdf)中的遮挡感知注意力改进Head,使其有效地处理遮挡场景.
  1. ultralytics/cfg/models/v8/yolov8-C2f-SWC.yaml
使用[shift-wise conv](https://arxiv.org/abs/2401.12736)改进yolov8中的C2f.(详细请看20240216更新说明)
  1. ultralytics/cfg/models/v8/yolov8-C2f-iRMB.yaml
使用[EMO ICCV2023](https://github.com/zhangzjn/EMO)中的iRMB改进C2f.(详细请看20240216更新说明)
  1. ultralytics/cfg/models/v8/yolov8-C2f-iRMB-Cascaded.yaml
使用[EfficientViT CVPR2023](https://github.com/microsoft/Cream/tree/main/EfficientViT)中的CascadedGroupAttention对[EMO ICCV2023](https://github.com/zhangzjn/EMO)中的iRMB进行二次创新来改进C2f.(详细请看20240216更新说明)
  1. ultralytics/cfg/models/v8/yolov8-C2f-iRMB-DRB.yaml
使用[UniRepLKNet](https://github.com/AILab-CVC/UniRepLKNet/tree/main)中的DilatedReparamBlock对[EMO ICCV2023](https://github.com/zhangzjn/EMO)中的iRMB进行二次创新来改进C2f.(详细请看20240216更新说明)
  1. ultralytics/cfg/models/v8/yolov8-C2f-iRMB-SWC.yaml
使用[shift-wise conv](https://arxiv.org/abs/2401.12736)对[EMO ICCV2023](https://github.com/zhangzjn/EMO)中的iRMB进行二次创新来改进C2f.(详细请看20240216更新说明)
  1. ultralytics/cfg/models/v8/yolov8-C2f-VSS.yaml
使用最新的Mamba架构[Mamba-UNet中的VSS](https://github.com/ziyangwang007/Mamba-UNet)对C2f中的BottleNeck进行改进,使其能更有效地捕获图像中的复杂细节和更广泛的语义上下文.
  1. ultralytics/cfg/models/v8/yolov8-C2f-LVMB.yaml
使用最新的Mamba架构[Mamba-UNet中的VSS](https://github.com/ziyangwang007/Mamba-UNet)与Cross Stage Partial进行结合,使其能更有效地捕获图像中的复杂细节和更广泛的语义上下文.
  1. Powerful-IoU系列.
请看百度云视频.(20240219更新说明)
  1. ultralytics/cfg/models/v8/yolov8-RepNCSPELAN.yaml
使用[YOLOV9](https://github.com/WongKinYiu/yolov9)中的RepNCSPELAN进行改进yolov8.
  1. ultralytics/cfg/models/v8/yolov8-DBBNCSPELAN.yaml
使用[Diverse Branch Block CVPR2021](https://arxiv.org/abs/2103.13425)对[YOLOV9](https://github.com/WongKinYiu/yolov9)中的RepNCSPELAN进行二次创新后改进yolov8.
  1. ultralytics/cfg/models/v8/yolov8-OREPANCSPELAN.yaml
使用[Online Convolutional Re-parameterization (CVPR2022)](https://github.com/JUGGHM/OREPA_CVPR2022/tree/main)对[YOLOV9](https://github.com/WongKinYiu/yolov9)中的RepNCSPELAN进行二次创新后改进yolov8.
  1. ultralytics/cfg/models/v8/yolov8-DRBNCSPELAN.yaml
使用[UniRepLKNet](https://github.com/AILab-CVC/UniRepLKNet/tree/main)中的DilatedReparamBlock对[YOLOV9](https://github.com/WongKinYiu/yolov9)中的RepNCSPELAN进行二次创新后改进yolov8.
  1. ultralytics/cfg/models/v8/yolov8-v7DS.yaml
使用[YOLOV7 CVPR2023](https://arxiv.org/abs/2207.02696)的下采样结构改进YOLOV8中的下采样.
  1. ultralytics/cfg/models/v8/yolov8-ADown.yaml
使用[YOLOV9](https://github.com/WongKinYiu/yolov9)的下采样结构改进YOLOV8中的下采样.
  1. ultralytics/cfg/models/v8/yolov8-PGI.yaml
使用[YOLOV9](https://github.com/WongKinYiu/yolov9)的programmable gradient information改进YOLOV8.(PGI模块可在训练结束后去掉)
  1. ultralytics/cfg/models/v8/yolov8-C2f-DynamicConv.yaml
使用[CVPR2024 parameternet](https://arxiv.org/pdf/2306.14525v2.pdf)中的DynamicConv改进C2f.
  1. ultralytics/cfg/models/v8/yolov8-C2f-GhostDynamicConv.yaml
使用[CVPR2024 parameternet](https://arxiv.org/pdf/2306.14525v2.pdf)中的GhostModule改进C2f.
  1. ultralytics/cfg/models/v8/yolov8-DynamicHGNetV2.yaml
使用[CVPR2024 parameternet](https://arxiv.org/pdf/2306.14525v2.pdf)中的DynamicConv对[CVPR2024 RTDETR](https://arxiv.org/abs/2304.08069)中的HGBlokc进行二次创新.
  1. ultralytics/cfg/models/v8/yolov8-C2f-RVB.yaml
使用[CVPR2024 RepViT](https://github.com/THU-MIG/RepViT/tree/main)中的RepViTBlock改进C2f.
  1. ultralytics/cfg/models/v8/yolov8-C2f-RVB-EMA.yaml
使用[CVPR2024 RepViT](https://github.com/THU-MIG/RepViT/tree/main)中的RepViTBlock和EMA注意力机制改进C2f.
  1. Lightweight Shared Convolutional Detection Head
自研轻量化检测头.
detect:ultralytics/cfg/models/v8/yolov8-LSCD.yaml
seg:ultralytics/cfg/models/v8/yolov8-seg-LSCD.yaml
pose:ultralytics/cfg/models/v8/yolov8-pose-LSCD.yaml
obb:ultralytics/cfg/models/v8/yolov8-obb-LSCD.yaml
1. GroupNorm在FCOS论文中已经证实可以提升检测头定位和分类的性能.
2. 通过使用共享卷积,可以大幅减少参数数量,这使得模型更轻便,特别是在资源受限的设备上.
3. 在使用共享卷积的同时,为了应对每个检测头所检测的目标尺度不一致的问题,使用Scale层对特征进行缩放.
综合以上,我们可以让检测头做到参数量更少、计算量更少的情况下,尽可能减少精度的损失.
  1. ultralytics/cfg/models/v8/yolov8-DGCST.yaml
使用[Lightweight Object Detection](https://arxiv.org/abs/2403.01736)中的Dynamic Group Convolution Shuffle Transformer改进yolov8.
  1. Task Align Dynamic Detection Head
自研任务对齐动态检测头
detect:ultralytics/cfg/models/v8/yolov8-TADDH.yaml
seg:ultralytics/cfg/models/v8/yolov8-seg-TADDH.yaml
pose:ultralytics/cfg/models/v8/yolov8-pose-TADDH.yaml
obb:ultralytics/cfg/models/v8/yolov8-obb-TADDH.yaml
1. GroupNorm在FCOS论文中已经证实可以提升检测头定位和分类的性能.
2. 通过使用共享卷积,可以大幅减少参数数量,这使得模型更轻便,特别是在资源受限的设备上.并且在使用共享卷积的同时,为了应对每个检测头所检测的目标尺度不一致的问题,使用Scale层对特征进行缩放.
3. 参照TOOD的思想,除了标签分配策略上的任务对齐,我们也在检测头上进行定制任务对齐的结构,现有的目标检测器头部通常使用独立的分类和定位分支,这会导致两个任务之间缺乏交互,TADDH通过特征提取器从多个卷积层中学习任务交互特征,得到联合特征,定位分支使用DCNV2和交互特征生成DCNV2的offset和mask,分类分支使用交互特征进行动态特征选择.
  1. ultralytics/cfg/models/rt-detr/yolov8-rmt.yaml
使用[CVPR2024 RMT](https://arxiv.org/abs/2309.11523)改进rtdetr的主干.
  1. ultralytics/cfg/models/v8/yolov8-C2f-RetBlock.yaml
使用[CVPR2024 RMT](https://arxiv.org/abs/2309.11523)中的RetBlock改进C2f.
  1. ultralytics/cfg/models/v8/yolov8-ELA-HSFPN.yaml
使用[Efficient Local Attention](https://arxiv.org/abs/2403.01123)改进HSFPN.
  1. ultralytics/cfg/models/v8/yolov8-CA-HSFPN.yaml
使用[Coordinate Attention CVPR2021](https://github.com/houqb/CoordAttention)改进HSFPN.
  1. ultralytics/cfg/models/v8/yolov8-ELA-HSFPN-TADDH.yaml
使用[Efficient Local Attention](https://arxiv.org/abs/2403.01123)改进HSFPN,使用自研动态动态对齐检测头改进Head.
  1. ultralytics/cfg/models/v8/yolov8-pkinet.yaml
使用[CVPR2024 PKINet](https://github.com/PKINet/PKINet)改进backbone.(需要安装mmcv和mmengine)
  1. ultralytics/cfg/models/v8/yolov8-C2f-PKI.yaml
使用[CVPR2024 PKINet](https://github.com/PKINet/PKINet)中的PKIModule和CAA模块改进C2f.
  1. ultralytics/cfg/models/v8/yolov8-RepNCSPELAN_CAA.yaml
使用[CVPR2024 PKINet](https://github.com/PKINet/PKINet)中的CAA模块改进RepNCSPELAN.
  1. ultralytics/cfg/models/v8/yolov8-CAA-HSFPN.yaml
使用[CVPR2024 PKINet](https://github.com/PKINet/PKINet)中的CAA模块HSFPN.

常见错误和解决方案(如果是跑自带的一些配置文件报错可以先看看第十大点对应的配置文件是否有提示需要修改内容)

  1. RuntimeError: xxxxxxxxxxx does not have a deterministic implementation, but you set 'torch.use_deterministic_algorithms(True)'.....

    解决方案:在ultralytics/utils/torch_utils.py中init_seeds函数中把torch.use_deterministic_algorithms里面的True改为False

  2. ModuleNotFoundError:No module named xxx

    解决方案:缺少对应的包,先把YOLOV8环境配置的安装命令进行安装一下,如果还是缺少显示缺少包,安装对应的包即可(xxx就是对应的包).

  3. OMP: Error #15: Initializing libiomp5md.dll, but found libiomp5md.dll already initialized.

    解决方案:https://zhuanlan.zhihu.com/p/599835290

  4. 训练过程中loss出现nan.

    可以尝试关闭AMP混合精度训练.

  1. 固定640x640尺寸的解决方案.

    运行train.py中的时候需要在ultralytics/models/yolo/detect/train.py的DetectionTrainer class中的build_dataset函数中的rect=mode == 'val'改为rect=False.其他模型可以修改回去.
    运行val.py的时候,把val.py的rect=False注释取消即可.其他模型可以修改回去.
    运行detect.py中的时候需要在ultralytics/engine/predictor.py找到函数def pre_transform(self, im),在LetterBox中的auto改为False,其他模型可以修改回去.

  2. 多卡训练问题.参考链接

    python -m torch.distributed.run --nproc_per_node 2 train.py

  3. 指定显卡训练.

    1. 使用device参数进行指定.
    2. 参考链接:https://blog.csdn.net/m0_55097528/article/details/130323125, 简单来说就是用这个来代替device参数.
  4. ValueError: Expected more than 1 value per channel when training, got input size torch.Size...

    如果是在训练情况下的验证阶段出现的话,大概率就是最后一个验证的batch为1,这种情况只需要把验证集多一张或者少一张即可,或者变更batch参数.

  5. AttributeError: Can't pickle local object 'EMASlideLoss.init..'

    可以在ultralytics/utils/loss.py中添加import dill as pickle,然后装一下dill这个包.
    pip install dill -i https://pypi.tuna.tsinghua.edu.cn/simple

  6. RuntimeError: Dataset 'xxxxx' error ❌

    将data.yaml中的路径都改为绝对路径.

常见疑问

  1. Fuse指的是什么?

    Fuse是指模型的一些模块进行融合,最常见的就是conv和bn层进行融合,在训练的时候模型是存在conv和bn的,但在推理的过程中,模型在初始化的时候会进行模型fuse,把其中的conv和bn进行融合,通过一些数学转换把bn层融合到conv里面,还有一些例如DBB,RepVGG等等模块支持融合的,这些在fuse阶段都会进行融合,融合后可以一般都可以得到比融合前更快的推理速度,而且基本不影响精度.

  2. FPS如何计算?

    1. 在运行val.py后最后会出来Speed: 0.1ms preprocess, 5.4ms inference, 0.0ms loss, 0.4ms postprocess per image这行输出,这行输出就代表了每张图的前处理,推理,loss,后处理的时间,当然在val.py过程中是不需要计算loss的,所以为0,FPS最严谨来说就是1000(1s)/(preprocess+inference+postprocess),没那么严谨的话就是只除以inference的时间,还有一个问题就是batchsize应该设置为多少,其实这行输出就已经是每张图的时间了,但是batchsize还是会对这个时间有所影响,主要是关于并行处理的问题,GPU中可以一次处理多个batch的数据,也可以只处理一个数据,但是处理多batch的数据比处理一个数据的时候整体速度要快,举个例子,比如我有1000张图,我分别设置batchsize为32和batchsize为1,整体运行的时间百分之99都是batchsize为32的快,因此这就导致不同batch输出的时间不同,至于该设置多少来计算FPS,貌似众说纷纭,所以这里我也不好给意见.
      附上yolov5作者对于FPS和Batch的一个实验链接: ultralytics/yolov5#6649
    2. 项目中的get_FPS.py是只算推理时间.
    3. batch问题,比如你设置为16,那所有对比的模型都在同一个batch来计算即可.
    4. 小模型尽量要大bs(16,32)测.
  3. 训练的时候出现两次结构打印是什么情况?

    第一次打印的和第二次打印的主要不同地方就是类别数,第一次打印的是yaml配置文件中的nc参数的类别数的结构,第二次打印的是你实际数据集类别数的结构,其差异就在类别数,实际使用的是第二次打印的结构.

  4. 怎么找到之前更新的视频说明?

    视频都在本项目下的项目视频百度云链接.txt,然后可以看这里的更新公告来确定哪些改进点是哪一期更新的,然后可以直接找到对应的视频链接下载看即可.

  5. 保存的模型存储大小问题.

    在训练图中看保存的模型大小是会比训练结束后的偏大,因为其会保存一些过程中的一些其他信息,但这些不会影响原本模型的参数量和计算量,等训练结束后,其会自己读取清除额外的信息.

  6. 怎么指定使用哪一种大小的模型呢?

    假设我选择的配置文件是yolov8.yaml,我想选择m大小的模型,则train.py中的指定为ultralytics/cfg/models/v8/yolov8m.yaml即可,同理,如果我想指定s大小的模型,则指定为ultralytics/cfg/models/v8/yolov8s.yaml即可,如果直接设置为ultralytics/cfg/models/v8/yolov8.yaml,则默认使用n大小模型,又或者我需要使用ultralytics/cfg/models/v8/yolov8-bifpn.yaml,我需要设定为s模型,则应该为ultralytics/cfg/models/v8/yolov8s-bifpn.yaml.(V5同理)

  7. 热力图使用脚本相关问题.

    1. 需要安装grad-cam==1.4.8
    2. 使用示例:https://www.bilibili.com/video/BV1fU421o7jH/ 如果更换了主干还需看:https://www.bilibili.com/video/BV1F6421V77v/
    3. 进度条不满是正常现象,只要进度条不是0,都可以进行出图.
  8. 怎么判断模型收敛了?模型会不会过拟合?

    1. 主要看训练结束后的result.png中的精度曲线,精度曲线收敛了就可以了.
    2. 很多场景的数据下在曲线上都会呈现像过拟合的趋势,但是代码中已经会自动保存best.pt,用best.pt可以避免训练后期过拟合导致的精度下降等等影响,简单来说就是只需要用best.pt即可,不需要理会过拟合的问题.
  9. 曲线震荡问题.

    这类问题都不好解决,如果基础模型就震荡很厉害,基本都是跟数据集有关系,如果改进后的模型后出现,基本都是改进模型不合适的问题.

  10. 绘制结构图问题.

    可看以下这两个视频:

    1. https://www.bilibili.com/video/BV1X94y1K76Z/
    2. https://www.bilibili.com/video/BV1WA4m1V7nQ/
  11. mmcv安装问题.

    可以看官方文档:https://mmcv.readthedocs.io/en/latest/get_started/installation.html#install-with-pip

  12. 预训练权重相关问题.

    可以看这个视频:https://www.bilibili.com/video/BV1Q1421Q7Zw/

  13. 绘制结构图教程.

    1. 什么?你说你不会画模型结构图?行吧,那你进来看看吧,手把手教你画YAML结构图!
    2. 什么?你说你更换主干后看不懂配置文件也不懂画结构图?那你快点进来看看了!
    3. 从简到难手把手教你画Pytorch模块内的结构图!
  14. 配置文件整合问题.

    1. YOLOV8-不会把多个改进整合到一个yaml配置文件里面?那来看看这个吧!从简到难手把手带你整合三个yaml