Skip to content

YOLOv8检测模块组合优化改进(成功涨点):添加GAM注意力机制;添加小目标检测头;替换为Wise_IoU损失函数+完整web端展示(实现简单目标跟踪功能)

License

Notifications You must be signed in to change notification settings

Bestsongc/YOLOv8-model-improvement

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

13 Commits
 
 
 
 
 
 
 
 

Repository files navigation

YOLOv8-model-improvement

目录

项目基本介绍

本项目对著名的YOLOv8模型进行了多角度的改进优化,并在特定数据集上实现了精度的上涨

采用改进版本的YOLOv8模型与两个表现优良的跟踪器结合(botsort和bytetrack)

基于Vue和Flask开发了一个目标跟踪算法展示平台,平台提供了图像检测和视频跟踪两种功能

视频跟踪实现了在两种应用场景下简单功能(逆行检测和球员轨迹分析)

YOLOv8目标检测组合优化改进(成功涨点):

1、添加GAM注意力机制;

添加部位为backbone:

image

2、添加小目标检测头;

新增检测4X4以上目标的检测头,提高对小目标的检测能力 image

3、替换为Wise_IoU损失函数

本项目中已将YOLOv8内置的CIoU替换为Wise-IoU

实验数据集

yolo格式的人体头部数据集(主要由教室等场所的摄像头拍摄获得)

train:3475

val:868

历次有效提升的实验结果

image

注意!!!

1、项目中保留有其他修改实验的配置文件,如添加其他注意力机制的YAML文件,单独添加小目标检测头的YAML文件,可根据需要进行训练

2、需要注意的是,本项目使用的边界盒回归损失函数已经修改为Wise-IoU

3、本项目存放有使用头部数据集训练的改进版模型,并进行模型加速,结果存放于runs/detect/best-model/weigths中,分别是best.pt、best.onnx、best.engine(仅支持GPU)

完整web端展示界面

web端由Vue和Flask开发,基于目标跟踪实现了两个应用场景的简单功能,两种跟踪器可选(botsort,bytetrack)

image

球员运动轨迹分析

展示每个目标的运动轨迹及速度和加速度

不同目标的轨迹颜色不同

便于赛后复盘比赛和分析战术

逆行检测

检测目标的行进方向是否符合预先设定好的正确方向

在每个逆行目标位置标注其id和轨迹

在视频的左上角集中地展示所有逆行的id

启动前后端交互系统

启动后端

打开后端项目文件夹

app.py中指定ip地址和监听端口,需与前端一致,详情见下方前端的配置代理服务

if __name__ == '__main__':
    socketio.run(app, host="localhost", debug=True, port=5000, allow_unsafe_werkzeug=True)

修改推理使用模型

如果想用其他模型进行推理,请在functions下的三个py文件中修改加载模型的路径:

# Load the model
    model = YOLO('./runs/detect/best-model/weights/best.onnx')

在当前目录下终端运行python app.py即可启动后端服务

启动前端

打开前端项目文件夹

运行环境

Vue 2.x.x

Node >= 6.0.0

Npm >= 3.0.0

在当前目录下运行以下命令进行启动

# install dependencies
npm install

# serve with hot reload at localhost:8080
npm run dev

# build for production with minification
npm run build

# build for production and view the bundle analyzer report
npm run build --report

配置代理服务

需在config/index.js中进行配置,在配置完成后请重新启动项目方可生效

proxyTable: {
  '/api' : {
    // target需更换为后端实际局域网内IP,目前仅支持同一网段下的服务,端口(5000)也需和后端监听的端口一致
    target: 'http://localhost:5000',
    ws: true,
    secure: false,
    changeOrigin: true,
    pathRewrite: {
      '^/api': ''
    }
  }
},

如何训练自己的数据集

请在后端项目文件中进行以下操作

配置环境

需要的环境已在requirements.txt中声明

请在终端输入以下命令(在本项目的根目录下运行)

pip install -r requirements.txt

pip install ultralytics

准备数据集

在根目录下新建一个文件夹,命名为datasets

将准备好的yolo格式的数据集放入文件夹中

目录结构应该如下:

根目录

datasets

images

train

val

labels

train

val

修改配置文件

1、配置文件基本都在ultralytics/cfg的路径下

2、在ultralytics/cfg/datasets下设置datasets的路径,项目文件中已有demo.yaml,如果在上面的准备数据集的环节中你已经严格按照要求进行,那么demo.yaml的内容几乎不需要修改,若你的数据集放在了其他路径,请复制一份demo.yaml进行修改,根据真实路径模仿下列格式进行修改即可:

path: ../datasets/  # dataset root dir
train: images/train  # train images
val: images/val  # val images
test:  # test images (optional)

同时,根据你数据集里的目标类型及其对应的id设置下方的classes

name:
0 : person
1 : ......

调参

模型的参数调整集中在了ultralytics/cfg/default.yaml的文件中,请根据需要进行调整,其中前两个参数modeldata不需要填写

开始训练

打开项目根目录下的start_train.py

内容如下:

from ultralytics import YOLO

# Load a model
#1、 model = YOLO('yolov8n.yaml')  # build a new model from YAML
#2、 model = YOLO('yolov8n.pt')  # load a pretrained model (recommended for training)
model = YOLO('path/to/the/YAML').load(
             'path/to/the/pre_trained/weights')  # build from YAML and transfer weights

# Train the model
model.train(data='path/to/the/YAML/of/datasets')

提供了三种训练模式:(1)从头开始训练一个模型;(2)直接用预训练模型训练自己的数据集;(3)加载预训练权重,用修改后的yaml文件训练自己的数据集

如果没有修改模型,只是想用YOLOv8训练自己的数据集,那么请使用第2种,不建议用第1种,采用预训练模型可以加快收敛速度,而且效果比较好

如果修改了模型,那么请使用第3种,因为一般对模型的修改需要在yaml文件中重新声明模型的结构,一方面通过加载预训练模型来加快收敛提高效果,一方面需要引入修改后的模型的yaml文件

接下来只需要在对应的位置填写预训练权重/模型的yaml文件/数据集的yaml文件的路径即可

注意

注意\/的区别

预训练权重文件放在ultralytics/cfg/models/pretrained_models

模型的yaml文件放在ultralytics/cfg/models/v8

若需要使用GPU进行训练,请在default.yaml中指定device参数

运行start_train.py文件即可开始训练!

About

YOLOv8检测模块组合优化改进(成功涨点):添加GAM注意力机制;添加小目标检测头;替换为Wise_IoU损失函数+完整web端展示(实现简单目标跟踪功能)

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published