Giter Site home page Giter Site logo

jiangdan2000 / yolov8-atten-frontend Goto Github PK

View Code? Open in Web Editor NEW

This project forked from bestsongc/yolov8-model-improvement

0.0 0.0 0.0 62.4 MB

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

License: GNU General Public License v3.0

Shell 0.36% JavaScript 2.15% Python 92.68% CSS 0.45% HTML 0.03% Vue 4.34%

yolov8-atten-frontend's Introduction

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文件即可开始训练!

yolov8-atten-frontend's People

Contributors

zwc2003 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.