【总结】CycleGAN+YOLOv8+DeepSORT

news2025/2/24 23:30:19

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

文章目录

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

1、CycleGAN

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

1.1 数据集配置

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

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 -m visdom.server

在这里插入图片描述
点击链接即可打开网页,此时页面内是空白的,运行训练代码后刷新网页即可看到训练过程。

1.5 训练结果

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

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

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数据集可作为模型性能的验证数据集

# 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

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

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中写好数据集路径及网络结构路径即可开始训练

## 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',
            )
。。。
## 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保存

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1628458.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

IDEA生成JavaDoc注释

1、新建java文件时默认在主类头上生成描述、作者、时间 /*** 总体描述** author CountryStrong* date ${DATE} ${TIME}</p>*/2、对java方法进行doc注释&#xff0c;并动态生成作用描述、请求参数、返回类型、抛出异常 直接去插件商店下载JavaDoc即可&#xff0c;有时间…

Python 中方法调用的求值顺序

问题背景 在 Python 中&#xff0c;方法调用的求值顺序可能会令人困惑&#xff0c;尤其是当涉及到嵌套方法调用时。例如&#xff0c;在下面的代码中&#xff0c;我们有一个 Card 类&#xff0c;它表示一张扑克牌&#xff0c;一个 Hand 类&#xff0c;它表示一组扑克牌&#xff…

【科学研究】读博:一场精神赌博❓

::: block-1 “时问桫椤”是一个致力于为本科生到研究生教育阶段提供帮助的不太正式的公众号。我们旨在在大家感到困惑、痛苦或面临困难时伸出援手。通过总结广大研究生的经验&#xff0c;帮助大家尽早适应研究生生活&#xff0c;尽快了解科研的本质。祝一切顺利&#xff01;—…

Java | Leetcode Java题解之第52题N皇后II

题目&#xff1a; 题解&#xff1a; class Solution {public int totalNQueens(int n) {Set<Integer> columns new HashSet<Integer>();Set<Integer> diagonals1 new HashSet<Integer>();Set<Integer> diagonals2 new HashSet<Integer>…

炒股自动化:券商官方,散户可用,查询订单状态API如何用?

券商官方的接口&#xff0c;个人账户可申请&#xff0c;入金门槛低&#xff0c;接入文档完善&#xff0c;技术支持好的&#xff0c;经过我们筛选后&#xff0c;只有一家符合 会编程&#xff0c;有基础&#xff0c;只是需要API接口的朋友不用看这些&#xff0c;不会写程序的朋友…

数据结构五:线性表之带头结点的双向链表的设计

我们在单链表中&#xff0c;有了next指针,这就使得我们要查找下一结点的时间复杂度为O(1)。可是如果我们要查找的是上一结点的话&#xff0c;那最坏的时间复杂度就是0[n)了&#xff0c;因为我们每次都要从头开始遍历查找。为了克服单向性这一缺点&#xff0c; 我们的老科学家们…

springcloud按版本发布微服务达到不停机更新的效果

本文基于以下环境完成 spring-boot 2.3.2.RELEASEspring-cloud Hoxton.SR9spring-cloud-alibaba 2.2.6.RELEASEspring-cloud-starter-gateway 2.2.6.RELEASEspring-cloud-starter-loadbalancer 2.2.6.RELEASEnacos 2.0.3 一、思路 实现思路&#xff1a; 前端项目在请求后端接…

【优质书籍推荐】AIGC时代的PyTorch 深度学习与企业级项目实战

大家好&#xff0c;我是herosunly。985院校硕士毕业&#xff0c;现担任算法研究员一职&#xff0c;热衷于机器学习算法研究与应用。曾获得阿里云天池比赛第一名&#xff0c;CCF比赛第二名&#xff0c;科大讯飞比赛第三名。拥有多项发明专利。对机器学习和深度学习拥有自己独到的…

Facebook的未知力量:数字世界的新引擎

在数字化的时代&#xff0c;社交媒体已经成为了我们日常生活中不可或缺的一部分&#xff0c;而Facebook作为其中的巨头&#xff0c;其影响力远远超出了我们的想象。但是&#xff0c;Facebook背后隐藏的力量和影响远不止于此&#xff0c;它正逐渐成为数字世界的新引擎&#xff0…

设计模式:单例、原型和生成器

在这篇文章中&#xff0c;我们将重点介绍其余的创建模式&#xff1a;Singleton&#xff0c;Builder和Prototype。 在我看来&#xff0c;这些模式不如工厂重要。然而&#xff0c;了解它们仍然很有用。我将提供UML描述&#xff0c;简单的java示例&#xff08;这样即使你不了解jav…

stm32 hid自定义接收发送程序开发过程记录

cubleMX配置如下 修改端点描述符一次传输的数据大小 根据cubelMX标准在这里修改 编译错误 直接修改&#xff08;因为没有使用nodef &#xff09;编译通过 修改报告描述符&#xff08;默认的描述符无法传输数据&#xff09; 参考&#xff1a;USB协议详解第10讲&#xff08;USB描…

基于SpringBoot的“在线BLOG网”的设计与实现(源码+数据库+文档+PPT)

基于SpringBoot的“在线BLOG网”的设计与实现&#xff08;源码数据库文档PPT) 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SpringBoot 工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 在线BLOG网结构功能图 管理员登录功能界面 用户信息…

电脑屏幕监控软件有哪些?大型企业都在用的电脑屏幕监控软件

电脑监控软件&#xff0c;这个东西真的很重要&#xff0c;就像保镖一样&#xff0c;保护我们的电脑和数据安全。它能预防坏事发生&#xff0c;还能在事情发生时及时控制&#xff0c;事后还能帮我们找出问题的根源。对于那些经常担心数据泄密的企业来说&#xff0c;电脑屏幕监控…

2024 XYCTF Web 方向 wp 全解

2024 XYCTF Web 方向 全解 文章目录 2024 XYCTF Web 方向 全解Webezhttp考点:信息泄露基础发包 warm up考点:php黑魔法变量覆盖 ezRCE考点:无字母RCE(bashfuck)shell变量构造RCE ezmd5考点:md5文件强相等 ezunserilze考点&#xff1a;引用绕过强相等php原生类读文件 牢牢记住&a…

【加密周报】中美下周有“大事”发生!准备联手引爆比特币大行情?美国大型养老基金和梅隆银行已持有比特币ETF!

自减半之后&#xff0c;比特币便进入了横盘状态&#xff0c;始终在6-6.5万美元价格区间震荡。4月24日&#xff0c;香港证监会官网正式公示虚拟资产现货ETF获批名单&#xff0c;华夏&#xff08;香港&#xff09;、嘉实国际、博时国际旗下相关产品均在其列&#xff0c;并计划将于…

打印给定数组中每一个数字

如何给定1-10的数字 #include<stdio.h> int main() {int arr[] { 1,2,3,4,5,6,7,8,9,10 };// 0 9//[]--下标引用操作符int i;int sz sizeof(arr) / sizeof(arr[0]);//10个数for (i 0; i < sz; i){printf("%d ", arr[i]);}re…

【项目分享】用 Python 写一个桌面倒计日程序!

事情是这样的&#xff0c;我们班主任想委托我做一个程序&#xff0c;能显示还有几天考试。我立即理解了这个意思&#xff0c;接下了这个项目。 话不多说&#xff0c;来看看这个项目吧—— 项目简介 仓库地址&#xff1a;https://gitee.com/yaoqx/desktop-countdown-day 这是 …

排序 “肆” 之归并排序

1. 归并排序 1.1 原理介绍 归并排序的基本原理是将一个未排序的数组分解为较小的子数组&#xff0c;然后递归地对这些子数组进行排序&#xff0c;最后再将排好序的子数组合并成一个有序数组。其核心操作是将一维数组中前后相邻的两个有序序列归并为一个有序序列。 其主要步骤包…

C++链表操作入门

数据结构基础&#xff1a;链表操作入门 数据结构基础&#xff1a;链表操作入门链表的基本概念链表的基本操作输出链表插入节点删除节点查找值 完整的链表操作示例结语 数据结构基础&#xff1a;链表操作入门 在计算机科学中&#xff0c;数据结构是组织和存储数据的方式&#x…

监控上网行为的软件 五款上网行为监控软件推荐

在这个数字化时代&#xff0c;员工上网行为的管理与监控变得越来越重要。市面上涌现出众多监控员工上网的软件&#xff0c;它们各具特色&#xff0c;各有千秋。接下来&#xff0c;就让我们一起探索一下这些神奇的软件吧&#xff01; 1、安企神点击领取免费试用版 这是一款功能…