【总结】CycleGAN+YOLOv8+DeepSORT

本文章仅对本人前期工作进行总结,文章内容供读者参考,代码不对外公开

文章目录

  • 1、CycleGAN
    • [1.1 数据集配置](#1.1 数据集配置)
    • [1.2 环境配置](#1.2 环境配置)
    • [1.3 参数配置](#1.3 参数配置)
    • [1.4 可视化训练过程](#1.4 可视化训练过程)
    • [1.5 训练结果](#1.5 训练结果)
    • [1.5 结果测试](#1.5 结果测试)
  • 2、YOLOv8
    • [2.1 数据集配置](#2.1 数据集配置)
    • [2.2 网络结构配置](#2.2 网络结构配置)
    • [2.3 训练细节](#2.3 训练细节)
    • [2.4 测试](#2.4 测试)
  • 3、DeepSORT

1、CycleGAN

CycleGAN是一种用于无配对图像风格转换的深度学习模型,能够在没有成对训练数据的情况下,实现不同域之间的图像风格转换。

1.1 数据集配置

在dataset文件夹下创建自己的数据文件夹mydata

python 复制代码
dataset
├── mydata
|   ├── trainA
|   ├── trainB
|   ├── testA
|   └── testB

其中,trainA和trainB文件夹分别放源域图片和目标域图片,testA和testB文件夹分别放要测试的图片。

1.2 环境配置

在菜单栏Run->Edit Configurations中进行数据集的配置

配置页面中选择train选项,进行配置

如果进入配置页面中没有出现train选项,可以先运行一下train.py,报错没有配置数据集路径,然后再次进入配置页面就出现train选项了。

1.3 参数配置

options文件下有train_options.py和test_options.py文件,分别用于训练和测试过程中的参数配置,训练时的参数主要修改opochs,这两个参数之和即为总的训练轮数,如图所示即为训练50轮。

测试过程中参数无需调整。

环境和数据配置好后直接运行train.py即可开始运行CycleGAN网络

1.4 可视化训练过程

如果想观察训练过程中的细节,则可以开启visdom服务(可视化界面),运行前在终端输入指令:

python 复制代码
python -m visdom.server

点击链接即可打开网页,此时页面内是空白的,运行训练代码后刷新网页即可看到训练过程。

1.5 训练结果

训练结束后,权重文件保存在checkpoints文件夹下的mydata_cyclegan中

python 复制代码
checkpoints
├── mydata_cyclegan
|   ├── 5_net_D_A.pth
|   ├── 5_net_D_B.pth
|   ├── 5_net_G_A.pth
|   └── 5_net_G_B.pth
|   ├── 10_net_D_A.pth
|   ├── 10_net_D_B.pth
|   ├── 10_net_G_A.pth
|   └── 10_net_G_B.pth
|   └── 。。。

默认是每隔5轮保存一次结果,也可以修改训练参数save_epoch_freq指定轮数间隔保存

其中,字母D表示判别器结果,G表示生成器结果,A、B代表域之间的转换方向

1.5 结果测试

测试时,首先将训练好的权重文件拷贝到checkpoints文件夹下的mydata_pretrained中,并且改名为latest_net_G.pth

python 复制代码
checkpoints
├── mydata_pretrained
|   ├── latest_net_G.pth
|   ├── test_opt.txt
├── mydata_cyclegan
|   ├── 5_net_D_A.pth
|   ├── 5_net_D_B.pth

例如,我要测试A->B的转换效果,将10_net_G_A.pth文件复制到mydata_pretrained中,并改名latest_net_G.pth

配置测试环境,和配置训练环境一样,在Edit Configurations中选择test,进行配置,数据路径写的是testA的路径

配置好后,运行test.py即可进行测试。

测试结果的保存地址为.\results\mydata_pretrained

在images文件夹中保存有原图和转换后的图,点击index.html可以在网页中查看对比效果

2、YOLOv8

YOLOv8网络架构可以分为主干网络(Backbone)、颈部(Neck)和头部(Head)三个主要部分,其自身包含了目标分类、目标检测、语义分割、姿态估计、目标跟踪。本人只使用到了目标检测和跟踪。

2.1 数据集配置

数据集配置文件为yaml格式,其内容如下,path指根目录,val为验证图片,test为测试图片,nc指目标类别,names为目标类别的名称。本人的任务为语义分割,故目标类别为1

其中train和val是模型训练过程中会用到的数据集,test数据集可作为模型性能的验证数据集

python 复制代码
# Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..]
path: D:\Desktop\gasdata\12remove_color_50  # dataset root dir
train: D:\Desktop\gasdata\12remove_color_50\images\train  # train images (relative to 'path') 4 images
val: D:\Desktop\gasdata\12remove_color_50\images\val  # val images (relative to 'path') 4 images
test:  D:\Desktop\gasdata\12remove_color_50\images\test  # test images (optional)

nc: 1

# Classes
names:
  0: gas

数据集实际目录结构如下:

python 复制代码
root
├── images
|   ├── train
|   |   ├── image01.jpg
|   |   ├── image02.jpg
|   ├── val
|   |   ├── image03.jpg
|   |   ├── image04.jpg
|   ├── test
|   |   ├── image05.jpg
|   |   ├── image06.jpg
├── labels
|   ├── train
|   |   ├── label01.txt
|   |   ├── label02.txt
|   ├── val
|   |   ├── label03.txt
|   |   ├── label04.txt
|   ├── test
|   |   ├── label05.txt
|   |   ├── label06.txt

本人任务是语义分割,故txt标签为多边形框构成的,每一行由目标标签值0开头

,后续跟着坐标点的值,具体json转txt代码见本人codes备份

2.2 网络结构配置

网络结构文件在ultralytics/cfg/models/v8中

添加注意力机制方法见本人的另一篇博客

2.3 训练细节

在train.py中写好数据集路径及网络结构路径即可开始训练

python 复制代码
## train.py
model = YOLO('yolov8-seg-SEAttention.yaml')  # 网络结构路径
model.train(data='mydata_low_color.yaml',    # 数据集路径
            cache=False,                       
            imgsz=640,                       # 网络输入图片大小
            epochs=800,                      # 训练轮数,可以写大一点,因为有早停机制
            batch=16,                        # 批大小
            close_mosaic=10,
            workers=4,
            device='0',
            optimizer='SGD', # using SGD
            project='runs/train',
            name='exp',
            )
。。。
python 复制代码
## default.yaml   ultralytics/cfg/default.yaml
有更多详细的训练参数,patience代表早停轮数

2.4 测试

detect.py对模型进行测试,输入需要测试的图片路径,直接输出检测的结果

val.py对模型的性能进行验证,输出具体的测试指标,使用的数据集是test

track.py输入视频文件,即可对目标进行跟踪

3、DeepSORT

使用改良的模型进行目标跟踪时,要注意在ultralytics/nn/modules中加入添加的模块,本人在项目D:\Desktop\yolov8\YOLOv8_Segmentation_DeepSORT_Object_Tracking-main\ultralytics\nn中已经添加好了

找到predict_3.py文件:

D:\Desktop\yolov8\YOLOv8_Segmentation_DeepSORT_Object_Tracking-main\ultralytics\yolo\v8\segment\predict_3.py

配置网络模型文件以及视频文件,即可对目标进行跟踪,

结果保存在同级文件夹runs中,detect中保存的是跟踪的视频,results中保存的是跟踪的数据,exp0016.json即为详细的数据,每次运行后都会自动+1保存

python 复制代码
01draw-count.py     # 目标数量变化
02draw-size.py      # 目标大小变化
03draw-move.py      # 目标位移变化
04draw-percent.py   # 目标占总面积百分比变化
05draw-ratio.py     # 目标占固定区域百分比变化

运行上述绘图代码后,自动保存到与数据文件exp016.json同名的文件夹exp016中

相关推荐
JicasdC123asd9 小时前
密集残差瓶颈网络改进YOLOv26特征复用与梯度传播双重优化
网络·yolo·目标跟踪
JicasdC123asd12 小时前
密集连接瓶颈模块改进YOLOv26特征复用与梯度流动双重优化
人工智能·yolo·目标跟踪
duyinbi751713 小时前
局部特征提取改进YOLOv26空间移位卷积与轻量化设计双重突破
人工智能·yolo·目标跟踪
张道宁14 小时前
基于Spring Boot与Docker的YOLOv8检测服务实战
spring boot·yolo·docker
duyinbi751718 小时前
大核瓶颈架构改进YOLOv26扩大感受野与多尺度特征提取双重突破
yolo·架构
孤狼warrior18 小时前
YOLO技术架构发展详解(从v1到v8)近万字底层实现逻辑解析
yolo
张张123y18 小时前
机器学习与深度学习:从基础概念到YOLOv8全解析
深度学习·yolo·机器学习
Dfreedom.2 天前
工具箱思维:在计算机视觉中如何选对工具、用好工具(计算机视觉篇)
人工智能·计算机视觉·目标跟踪
hans汉斯2 天前
基于区块链和语义增强的科研诚信智能管控平台
人工智能·算法·yolo·数据挖掘·区块链·汉斯出版社
乐迪信息2 天前
乐迪信息:AI防爆摄像机识别船舶违规明火作业
大数据·人工智能·安全·计算机视觉·目标跟踪