YOLOv8算法改进【NO.97】借鉴YOLOv7算法的方法添加辅助训练头

news/2024/7/11 1:29:15 标签: YOLO, 算法

 前   言
       YOLO算法改进系列出到这,很多朋友问改进如何选择是最佳的,下面我就根据个人多年的写作发文章以及指导发文章的经验来看,按照优先顺序进行排序讲解YOLO算法改进方法的顺序选择。具体有需求的同学可以私信我沟通:

第一,创新主干特征提取网络,将整个Backbone改进为其他的网络,比如这篇文章中的整个方法,直接将Backbone替换掉,理由是这种改进如果有效果,那么改进点就很值得写,不算是堆积木那种,也可以说是一种新的算法,所以做实验的话建议朋友们优先尝试这种改法。

第二,创新特征融合网络,这个同理第一,比如将原yolo算法PANet结构改进为Bifpn等。

第三,改进主干特征提取网络,就是类似加个注意力机制等。根据个人实验情况来说,这种改进有时候很难有较大的检测效果的提升,乱加反而降低了特征提取能力导致mAP下降,需要有技巧的添加。

第四,改进特征融合网络,理由、方法等同上。

第五,改进检测头,更换检测头这种也算个大的改进点。

第六,改进损失函数,nms、框等,要是有提升检测效果的话,算是一个小的改进点,也可以凑字数。

第七,对图像输入做改进,改进数据增强方法等。

第八,剪枝以及蒸馏等,这种用于特定的任务,比如轻量化检测等,但是这种会带来精度的下降。

...........未完待续

一、创新改进思路或解决的问题

       借鉴YOLOv7添加 Aux head 的方法,原因为让网络中间层学到更多信息,有更丰富的梯度信息帮助训练。这里要注意,好的梯度信息能够让相同参数量的网络学的更好。

作者原文为:

By letting the shallower auxiliary head directly learn the information that lead head has learned, lead head will be more able to focus on learning residual information that has not yet been learned.

二、基本原理

原文链接: [2207.02696] YOLOv7: Trainable bag-of-freebies sets new state-of-the-art for real-time object detectors (arxiv.org)

 ​摘要YOLOv7在5 FPS到160 FPS的范围内的速度和精度都超过了所有已知的对象检测器,并且在GPU V100上具有30 FPS或更高的所有已知实时对象检测器中具有最高的56.8%AP精度。YOLOv7-E6对象检测器(56 FPS V100,55.9%AP)在速度和精度上均优于基于变换器的检测器SWIN-L级联掩码R-CNN(9.2 FPS A100,53.9%AP)509%和2%,基于卷积的检测器ConvNeXt XL级联掩码R-CNN(8.6 FPS A100、55.2%AP)551%和0.7%AP,YOLOv7的性能优于:YOLOR、YOLOX、Scaled YOLOv4、YOLOv5、DETR,可变形DETR、DINO-5scaleR50、ViT-Adapter-B和许多其他物体探测器的速度和精度。此外,我们仅在MS COCO数据集上从头开始训练YOLOv7,而不使用任何其他数据集或预先训练的权重。

三、​添加方法

部分代码如下所示,详细改进代码可私信我获取。(扣扣2453038530)

# Ultralytics YOLO 🚀, AGPL-3.0 license
# YOLOv8 object detection model with P3-P5 outputs. For Usage examples see https://docs.ultralytics.com/tasks/detect

# Parameters
nc: 80  # number of classes
scales: # model compound scaling constants, i.e. 'model=yolov8n.yaml' will call yolov8.yaml with scale 'n'
  # [depth, width, max_channels]
  n: [0.33, 0.25, 1024]  # YOLOv8n summary: 225 layers,  3157200 parameters,  3157184 gradients,   8.9 GFLOPs
  s: [0.33, 0.50, 1024]  # YOLOv8s summary: 225 layers, 11166560 parameters, 11166544 gradients,  28.8 GFLOPs
  m: [0.67, 0.75, 768]   # YOLOv8m summary: 295 layers, 25902640 parameters, 25902624 gradients,  79.3 GFLOPs
  l: [1.00, 1.00, 512]   # YOLOv8l summary: 365 layers, 43691520 parameters, 43691504 gradients, 165.7 GFLOPs
  x: [1.00, 1.25, 512]   # YOLOv8x summary: 365 layers, 68229648 parameters, 68229632 gradients, 258.5 GFLOPs

# YOLOv8.0n 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.0n head
head:
  - [-1, 1, nn.Upsample, [None, 2, 'nearest']]
  - [[-1, 6], 1, Concat, [1]]  # cat backbone P4
  - [-1, 3, C2f, [512]]  # 12

  - [-1, 1, nn.Upsample, [None, 2, 'nearest']]
  - [[-1, 4], 1, Concat, [1]]  # cat backbone P3
  - [-1, 3, C2f, [256]]  # 15 (P3/8-small)

  - [-1, 1, Conv, [256, 3, 2]]
  - [[-1, 12], 1, Concat, [1]]  # cat head P4
  - [-1, 3, C2f, [512]]  # 18 (P4/16-medium)

  - [-1, 1, Conv, [512, 3, 2]]
  - [[-1, 9], 1, Concat, [1]]  # cat head P5
  - [-1, 3, C2f, [1024]]  # 21 (P5/32-large)

  - [[15, 18, 21, 15, 12, 9], 1, DetectAux, [nc]]  # Detect(P3, P4, P5)

四、总结

预告一下:下一篇内容将继续分享深度学习算法相关改进方法。有兴趣的朋友可以关注一下我,有问题可以留言或者私聊我哦

PS:该方法不仅仅是适用改进YOLOv8,也可以改进其他的YOLO网络以及目标检测网络,比如YOLOv7、v6、v4、v3,Faster rcnn ,ssd等。

最后,有需要的请关注私信我吧。关注免费领取深度学习算法学习资料!

http://www.niftyadmin.cn/n/5284357.html

相关文章

那些年的随笔

平安夜,没有下雪,也不冷,也没有女朋友。不知道来年是否会幸福。 单身这么多年,工作这么多年,知道了孤独,知道了辛苦,知道了人情冷暖。 我们每个人都有着自己的幸福选择。有的人追寻着此时此刻…

HarmonyOS - 基础组件绘制

文章目录 所有组件开发 tipsBlankTextImageTextInputButtonLoadingProgress 本文改编自&#xff1a;<HarmonyOS第一课>从简单的页面开始 https://developer.huawei.com/consumer/cn/training/course/slightMooc/C101667360160710997 所有组件 在 macOS 上&#xff0c;组…

Promise,async和js的事件循环机制

Promise Promise有等待&#xff0c;已成功&#xff0c;失败&#xff0c;三种状态&#xff0c;状态的改变会触发then回调函数和catch回调函数。 当执行一个Promise时&#xff0c;它会立刻返回一个Promise对象&#xff0c;并且不会阻塞后续代码执行。 当Promise的状态发生改变后…

Java多线程、线程池及线程同步(synchronized关键字、悲观锁、乐观锁)

1.进程与线程定义 进程包含线程&#xff0c;如一个百度网盘进程&#xff0c;该进程的线程可以有上传&#xff0c;下载。 2.创建线程的三种方式 方式1-继承Thread类 方式2-实现Runnabled接口 1.常规写法 2.匿名内部类写法 方式3-实现Callable接口 示例代码&#xff1a; f1.get…

通过JavaScript终止WebSocket数据传输

在JavaScript中&#xff0c;可以通过代码终止正在进行中的WebSocket&#xff08;WSS&#xff09;数据传输&#xff0c;通常需要使用WebSocket API和事件监听器。 WebSocket是一种网络通信协议&#xff0c;允许服务器和客户端之间进行全双工通信。在某些情况下&#xff0c;你可…

数学建模之聚类模型详解

聚类模型 引言 “物以类聚&#xff0c;人以群分”&#xff0c;所谓的聚类&#xff0c;就是将样本划分为由类似的对象组成的多个类的过程。聚类后&#xff0c;我们可以更加准确的在每个类中单独使用统计模型进行估计、分析或预测&#xff1b;也可以探究不同类之间的相关性和主…

vue3 配置 @符号

config,ts 配置 有 爆红 安装 npm install 一下 然后 配置 路径提示功能 tsconfig.json 配置 路径提示功能 一共这两个路径配置

DRF之请求与响应

目录 一、模块与包回顾 二、反序列化校验源码分析(了解) 三、断言 四、drf之请求 【1】源码分析 【2】配置视图类能处理的编码格式 五、drf之响应 【1】源码 【2】响应编码格式 一、模块与包回顾 模块与包 什么是模块&#xff1f; 一个py文件&#xff0c;被别的py文件…