yolov5-tracking-xxxsort yolov5融合六种跟踪算法(二)--目标识别

news2024/12/28 18:07:50

本次开源计划主要针对大学生无人机相关竞赛的视觉算法开发。
开源代码仓库链接:https://github.com/zzhmx/yolov5-tracking-xxxsort.git
先按照之前的博客配置好环境:
yolov5-tracking-xxxsort yolov5融合六种跟踪算法(一)–环境配置GPU版本
yolov5-tracking-xxxsort yolov5融合六种跟踪算法(一)–环境配置CPU版本

1.训练模型

在下载好的代码包中,如果要训练自己的检测模型,需要在程序包中的yolov5文件夹中操作,这个文件夹里面的程序其实就是yolov5的开源代码,想要训练自己模型可以看下面的流程:
这是yolov5文件夹里面的文件。
在这里插入图片描述

1)在yolov5-5.0创建一个新的文件夹,比如person_data,在此文件夹下创建
labels (存放labelimg生成的标注文件)
images (存放你采集好的用于标注的图片)
ImageSets (在此文件夹再创建一个Main文件夹)

用手机拍摄两段包含你的识别目标的视频,一段40秒左右,一段10秒左右,40秒的视频用于训练。拍摄完成上传至电脑

2)安装darklabel,https://download.csdn.net/download/weixin_45398265/88860850
在这里插入图片描述

3)
标注完所有图像之后就可以查看标记结果了,最终得到txt格式的标注数据
在这里插入图片描述

运行下面的代码生成训练集、验证集和测试集:

# coding:utf-8
import os
import random
import argparse
from os import getcwd

parser = argparse.ArgumentParser()
#txt文件的地址,根据自己的数据进行修改
parser.add_argument('--xml_path', default='labels', type=str, help='input xml label path')
#数据集的划分,地址选择自己数据下的ImageSets/Main
parser.add_argument('--txt_path', default='ImageSets/Main', type=str, help='output txt label path')
opt = parser.parse_args()

trainval_percent = 0.8
train_percent = 0.8
xmlfilepath = opt.xml_path
txtsavepath = opt.txt_path
total_xml = os.listdir(xmlfilepath)
if not os.path.exists(txtsavepath):
    os.makedirs(txtsavepath)

num = len(total_xml)
list_index = range(num)
tv = int(num * trainval_percent)
tr = int(tv * train_percent)
trainval = random.sample(list_index, tv)
train = random.sample(trainval, tr)

file_trainval = open(txtsavepath + '/trainval.txt', 'w')
file_test = open(txtsavepath + '/test.txt', 'w')
file_train = open(txtsavepath + '/train.txt', 'w')
file_val = open(txtsavepath + '/val.txt', 'w')

for i in list_index:
    name = total_xml[i][:-4] + '\n'
    if i in trainval:
        file_trainval.write(name)
        if i in train:
            file_train.write(name)
        else:
            file_val.write(name)
    else:
        file_test.write(name)

file_trainval.close()
file_train.close()
file_val.close()
file_test.close()
 
sets = ['train', 'val', 'test']
abs_path = os.getcwd()
print(abs_path)
for image_set in sets:
    image_ids = open('//home//jcfh//Desktop//yolov5-5.0//map_gongxunsai//ImageSets//Main//%s.txt' % (image_set)).read().strip().split()# 改成你自己的Main路径
    list_file = open('//home//jcfh//Desktop//yolov5-5.0//map_gongxunsai//%s.txt' % (image_set), 'w')# 改成你自己的ImageSets路径
    for image_id in image_ids:
        list_file.write(abs_path + '//images//%s.jpg\n' % (image_id))
    list_file.close()

运行代码后,生成三个txt文件
在这里插入图片描述

3)在yolov5目录下的data文件夹下新建一个person.yaml文件(可以自定义命名)
在这里插入图片描述

按照这种格式,改上你自己的路径,nc为你训练的模型一共有几类,如果只是检测人那就是1,names是你的目标的名字,如person。

4)在yolov5-5.0目录下的model文件夹下是模型的配置文件,这边提供s、m、l、x版本,逐渐增大(随着架构的增大,训练时间也是逐渐增大),假设采用yolov5s.yaml,只用修改一个参数,把nc改成自己的类别数;
在这里插入图片描述

自定义数据集就算是创建完毕了,接下来就是训练模型了。

当然标注视频文件也可以使用基于大模型的自动标注的软件会省力一些,有兴趣的同学自己探索。数据集整理好,yaml配置文件改好,将train.py中的参数改好就可以跑起来进行训练了。

5)在跟踪那一层文件夹里面weights文件夹里面有三个预训练模型:yolov5s.pt、yolov5m.pt、yolov5l.pt,官方还有一个yolov5x.pt是最大的一个,可以自己去官方下载。s是最轻量化的,我们假设使用该模型。我们需要修改train.py程序里面的几个参数:
在这里插入图片描述

epochs:指的就是训练过程中整个数据集将被迭代多少次,也就是训练轮次。第一次可以先设成100,生成的文件在runs/train文件夹的exp文件下,每运行一次训练代码,exp的序列号就会加一,如exp1,exp2。。。。里面的weights文件夹保存的best.pt就是你训练生成的最优模型。
batch-size:一次看完多少张图片才进行权重更新,梯度下降的mini-batch,显卡不行你就调小点,尽量调到让GPU所有显存都被用满,可以在任务管理器查看gpu使用情况。
cfg:存储模型结构的配置文件
data:存储训练、测试数据的文件
img-size:输入图片宽高,显卡不行你就调小点。
rect:进行矩形训练
resume:恢复最近保存的模型开始训练
nosave:仅保存最终checkpoint
notest:仅测试最后的epoch
evolve:进化超参数
bucket:gsutil bucket
cache-images:缓存图像以加快训练速度
weights:权重文件路径
name: 重命名results.txt to results_name.txt
device:cuda device, i.e. 0 or 0,1,2,3 or cpu
adam:使用adam优化
multi-scale:多尺度训练,img-size +/- 50%
single-cls:单类别的训练集

如果有报错:ImportError: cannot import name ‘COMMON_SAFE_ASCII_CHARACTERS’ from ‘charset_normalizer.constant’
可以在你的虚拟环境中运行:

pip install chardet

6)运行detect.py程序
在这里插入图片描述

weights为你要使用的yolov5模型路径
source为你要推理的视频或者图像或者摄像头路径,摄像头的话填0即可。在这里可以放上那段10秒视频的路径。可以选中你的视频文件,右击鼠标,在属性里面看路径,但是别忘了路径要加上你的文件名,例如你的test.mp4文件在属性里看到的路径是F:\yolo_tracking-8.0但是填写的时候要写成:F:\yolo_tracking-8.0\test.mp4
data 改成你之前创建的person.yaml的路径
conf-thres 是检测的阈值,置信度超过这个数才会显示对象
view-img 是设置检测视频的时候是否实时展示结果,在view-img逗号后面可以加一个:

default=True,

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

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

相关文章

Canvas绘制

Canvas绘制 一、介绍效果图 二、画圆1 写一个页面2 画一个圆(点)3 效果 三 画直线1 写一个页面2 画直线3 效果 四 用直线连接两个点1 写一个页面2 连线3 效果 五 画随机点1 写一个页面2 随机点3 效果 六 画随机点并连线1 写一个页面2 画点连线3 效果 七 …

GEE使用 Sentinel-1 SAR影像 和 Otsu 方法绘制洪水地图

洪水是世界上最常见、破坏性最大的自然灾害之一,造成了巨大的生命和财产损失。此外,随着气候变化的影响,近年来,洪灾变得更加频繁和不可预测。为了最大限度地减少生命和财产损失,必须迅速发现洪水蔓延的情况,并及时采取必要的干预措施。洪水蔓延探测大多使用光学传感器或…

如何批量注册多个Google账号?

电子邮件地址对于在线帐户至关重要,但它们可能被滥用于发送垃圾邮件。因此Google使用先进的算法来检测可疑的注册和验证尝试,保护用户免受垃圾邮件和其他有害活动的侵害,所以如果需要批量注册多个Google帐户,需要做好账号防关联&a…

QT 文本编辑框textBrowser接收数据保持光标在底部的方法

目录 1.实现效果2.代码 1.实现效果 2.代码 右键textBrowser加入触发信号textChanged: 双击,跳转到槽函数:(文本更改时执行该函数) void Widget::updata_textBrowser() void Widget::on_textBrowser_textChanged() {//光标移动至底部ui->…

Py之pydantic:pydantic的简介、安装、使用方法之详细攻略

Py之pydantic:pydantic的简介、安装、使用方法之详细攻略 目录 pydantic的简介 1、Pydantic V1.10 vs. V2 pydantic的安装 pydantic的使用方法 1、简单的示例 pydantic的简介 pydantic是使用Python类型提示进行数据验证。快速且可扩展,Pydantic与您…

【云原生】Docker 安全与CA证书生成

目录 容器的安全行问题 Docker 容器与虚拟机的区别 Docker 存在的安全问题 1.Docker 自身漏洞 2.Docker 源码问题 Docker 架构缺陷与安全机制 1. 容器之间的局域网攻击 2. DDoS 攻击耗尽资源 3. 有漏洞的系统调用 4. 共享root用户权限 Docker 安全基线标准 1. 内…

【UI自动化】八大元素定位方式|xpath css id name...

目录 一、基础元素定位 二、cssSelector元素定位——通过元素属性定位 三、xpath元素定位——通过路径 1 、xpath绝对定位 (用的不多) 缺点:一旦页面结构发生变化(比如重新设计时,路径少两节)&#x…

HGAME 2024 WEEK 2

hgame2024官方题解-week2.pdf Misc ek1ng_want_girlfriend 打开流量包后点击“导出对象” 打开这张图片就是flag Web What the cow say?

粉丝2000 啦,选对赛道,做正确的事情,粉丝涨到2000说明大家对我做的事情还是非常的认可的,继续坚持中,将相关资料做了视频整理

1,见证历史成长,粉丝涨到 2000 啦 2,把视频进行分类,研究xinference相关视频 【xinference】(1):在autodl上,使用xinference部署chatglm3大模型,支持函数调用&#xff0…

(一)全连接神经网络

参考资料:https://zhuanlan.zhihu.com/p/273595649 一、前向传播 1、第一层 (1)线性层 { z 1 ( 1 ) w 11 ( 1 ) ∗ x 1 w 12 ( 1 ) ∗ x 2 b 1 ( 1 ) z 2 ( 1 ) w 21 ( 1 ) ∗ x 1 w 22 ( 1 ) ∗ x 2 b 2 ( 1 ) z 3 ( 1 ) w 31 ( …

CCF-B类SGP‘24 4月10日截稿!速速行动!

会议之眼 快讯 第22届SGP(Eurographics Symposium on Geometry Processing)即欧洲图形学几何处理专题讨论会将于 2024 年 6月24 -日至26日在美国麻省理工学院举行!SGP是传播几何处理新研究想法和尖端成果的首要学术会议。作为该领域的重要学术盛事,SGP会…

IO 作业 24/2/21

1、使用多线程完成两个文件的拷贝&#xff0c;第一个线程拷贝前一半&#xff0c;第二个线程拷贝后一半&#xff0c;主线程回收两个线程的资源 #include <myhead.h> //定义分支线程1 void *task1(void *arg) {int fdr-1;//只读打开被复制文件if((fdropen("./111.txt…

sora生成高质量视频的原理

Sora是怎样生成视频的&#xff1f; 写在前面 Sora 是 OpenAI 在日前发布的超强视频生成 AI&#xff0c;旨在探索 AI 如何在理解真实世界运动和交互方面做得更好Sora目前无灰度体验 面临挑战 Sora面对的挑战就像是需要处理和理解来自世界各地、不同设备拍摄的数以百万计的图…

Java SourceDataLine 播放MP3音频 显示频谱

Java SourceDataLine 播放MP3音频 显示频谱 1 添加依赖2 快速傅里叶变换2.1 FFT.java2.2 Complex.java 3 音频播放3.1 Player.java3.1 XPlayer.java 4 显示频谱5 结果 项目Value音频格式 添加依赖*.wav(JDK 原生支持)*.pcm(JDK 原生支持)*.au(JDK 原生支持)*.aiff(JDK 原生支持…

2024 年 6 个变革性大型机预测

当今数字经济中组织的成功需要速度&#xff0c;即通过新应用程序和服务快速响应市场趋势、即时访问关键数据以及在问题影响服务之前解决问题的能力。进入新的一年&#xff0c;大型机上新兴技术的采用和适应将使企业能够拥抱不断变化的市场力量&#xff0c;并将其转化为竞争优势…

JVM对象的创建流程与内存分配

对象的创建流程与内存分配 创建流程对象内存分配方式内存分配安全问题对象内存分配流程【重要】:对象怎样才会进入老年代?重点 案例演示:对象分配过程大对象直接进入老年代02-对象内存分配的过程: 创建流程 加载 验证 解析 准备 初始化 使用 写在 对象内存分配方式 内存分配…

C语言系列(所需基础:大学C语言及格)-3-字符串/ASCII码表

文章目录 一、字符串二、ASCII码表 一、字符串 用" "来定义字符串&#xff1a; #include <stdio.h>int main() {"";//空字符串"hkl";//由""定义的字符串return(0); }用数组来存储字符串&#xff0c;并打印&#xff1a; #incl…

箱形理论在交易策略中的实战应用与优化

箱形理论&#xff0c;简单来说&#xff0c;就是将价格波动分成一段一段的方框&#xff0c;研究这些方框的高点和低点&#xff0c;来推测价格的趋势。 在上升行情中&#xff0c;价格每突破新高价后&#xff0c;由于群众惧高心理&#xff0c;可能会回跌一段&#xff0c;然后再上升…

jenkins远程触发构建报:Error 403 No valid crumb was included in the request

最近在跨jenkins触发构建的时候发现不能触发相应的项目&#xff0c;报如下图错误 解决方案&#xff1a; 1、安装Build Authorization Token Root Plugin插件 安装完成后去配置API Token&#xff0c;用户列表&#xff0c;配置用户的API Token&#xff0c;生成后记得保存 2、项…

Windows Server 2012 安装

1.镜像安装 镜像安装:Windows Server 2012 2.安装过程(直接以图的形式呈现) 2012激活秘钥:J7TJK-NQPGQ-Q7VRH-G3B93-2WCQD