问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

YOLOv8改进版Drone-YOLO复现详解:从论文到代码实现

创作时间:
作者:
@小白创作中心

YOLOv8改进版Drone-YOLO复现详解:从论文到代码实现

引用
CSDN
1.
https://blog.csdn.net/weixin_45679938/article/details/139077352

YOLOv8作为当前主流的目标检测算法之一,其改进版本Drone-YOLO在无人机场景下的目标检测性能有了显著提升。本文将详细介绍Drone-YOLO的三个主要改进点:主干网络添加RepVGG、增强小目标检测头、三明治结构,并提供具体的复现步骤和代码实现。

1. 论文Drone-YOLO解析

Drone-YOLO的主要改进点包括:

  1. 在网络的主干部分,使用RepVGG结构的重新参数化卷积模块作为下采样层。这种卷积结构在训练过程中同时训练3×3和1×1卷积,在推理过程中将两个卷积核合并为一个3×3卷积层。这种机制使网络能够在不影响推理速度或扩大模型大小的情况下学习更稳健的特征。

  2. 三明治结构:相比于原先的concat操作,多融合了一个上层大尺度特征(深度可分离卷积下采样),增强了多尺度检测头收集待检测对象的空间定位信息的能力。

  3. 加了一个小目标分支160*160(P2):这是论文中提升性能的核心改进。

2. 实验结果

实验结果1

在YOLOv8-n基础上的改进效果如下图所示:

实验结果2(消融实验)

改进3(加小目标分支)提升最显著,为6.8个点;作者主要提出的三明治改进提升最小,为0.2个点;RepVGG是常用的涨点操作,训练时通过增加模型复杂度来提升模型效果,为0.6个点。

3. 结构复现

3.1 加小目标层

YOLOv8自带yolov8-p2.yaml文件,可以直接使用。

3.2 主干网络下采样换成RepVGG模块

步骤:

  1. 复制1份P2.yaml文件改名为yolov8-p2-repvgg.yaml
  2. 在block.py中添加RepVGGBlock模块
  3. 修改tasks.py中的parse_model函数
  4. 运行python setup.py

3.3 三明治结构

主要修改配置文件中head部分,注意YOLOv8s三明治DW通道为L的一半,同时论文DW卷积核大小存在疑点(无法进行特征图concat操作),均改用3*3。

4. YOLOv8s版本复现结果

新建train.py,内容如下:

import os
os.environ['CUDA_VISIBLE_DEVICES'] = '0'
from ultralytics import YOLO

model = YOLO(model="yolov8s-p2-repvgg-sf.yaml")  # yolov8s+repvgg+sf
model.train(data="VisDrone.yaml", imgsz=640, epochs=300, workers=8, batch=8, cache=True, project='runs/train')

复现结果:针对无人机数据集Visdrone训练复现结果接近。

5. 结论

  1. 性能主要提升来自增加对小目标检测的P2层(即增加一个160*160的大尺度检测头),因为无人机数据集小目标偏多,该P2层改进对小目标能够有效提升。
  2. 增加P2分支与多支路融合虽然在模型参数方面略微增加,但推理耗时显著增加,不利于实时部署。
  3. 加P2分支会对大目标识别精度略微降低【小目标较多的场景可以借鉴一下】;
  4. 三明治改进几乎无效果,且增加推理耗时【不建议使用】;
  5. RepVGG在不带来推理耗时成本前提下,一般能够提升模型性能。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号