参考代码:https://github.com/JackWoo0831/Yolov7-tracker
本文是基于如上的程序,原程序是使用VisDrone2019-MOT-train进行YOLOv7检测器的训练,本文将介绍如何使用MOT17数据集训练YOLOv7检测器。
首先,应该将MOT17数据集中的labels转化为yolo格式。
labels为表示图片的类别,坐标的txt文件,yolo格式要求坐标必须归一化。
转化代码convert.py如下;
'''
创建以下四个目录,用于存放图片和标签
images/train
images/val
labels/train
labels/val
'''
import os
import shutil
import numpy as np
import configparser
if not os.path.exists('images'):
os.makedirs('images/train')
os.makedirs('images/val')
if not os.path.exists('labels'):
os.makedirs('labels/train')
os.makedirs('labels/val')
def convert(imgWidth, imgHeight, left, top, width, height):
x = (left + width / 2.0) / imgWidth
y = (top + height / 2.0) / imgHeight
w = width / imgWidth
h = height / imgHeight
return ('%.6f'%x, '%.6f'%y, '%.6f'%w, '%.6f'%h) # 保留6位小数
for mot_dir in os.listdir('test'): # mot_dir是例如MOT17-02-FRCNN这种
det_path = os.path.join('test', mot_dir, 'det/det.txt') # det.txt路径
dets = np.loadtxt(det_path, delimiter=',') # 读取det.txt文件
ini_path = os.path.join('test', mot_dir, 'seqinfo.ini') # seqinfo.ini路径
conf = configparser.ConfigParser()
conf.read(ini_path) # 读取seqinfo.ini文件
seqLength = int(conf['Sequence']['seqLength']) # MOT17-02-FRCNN序列的长度
imgWidth = int(conf['Sequence']['imWidth']) # 图片宽度
imgHeight = int(conf['Sequence']['imHeight']) # 图片长度
for det in dets:
frame_id, _, left, top, width, height = int(det[0]), det[1], det[2], det[3], det[4], det[5]
box = convert(imgWidth, imgHeight, left, top, width, height)
if '-' in ''.join(box) or float(box[0]) > 1.0 or float(box[1]) > 1.0 or float(box[2]) > 1.0 or float(
box[3]) > 1.0:
print(imgWidth, imgHeight, left, top, width, height)
print(box)
break
image_name = mot_dir + '-' + '%06d' % frame_id + '.jpg' # MOT17-02-FRCNN-000001.jpg
label_name = mot_dir + '-' + '%06d' % frame_id + '.txt' # MOT17-02-FRCNN-000001.txt
oldimgpath = os.path.join('test', mot_dir, 'img1',
'%06d' % frame_id + '.jpg') # train/MOT17-02-FRCNN/img1/000001.jpg
if frame_id <= seqLength//2: # 前一半划分给训练集
newimgpath = os.path.join('images', 'train', image_name) # images/train/MOT17-02-FRCNN-000001.jpg
labelpath = os.path.join('labels', 'train', label_name) # labels/train/MOT17-02-FRCNN-000001.txt
else: # 后一半划分给验证集
newimgpath = os.path.join('images', 'val', image_name) # images/val/MOT17-02-FRCNN-000001.jpg
labelpath = os.path.join('labels', 'val', label_name) # labels/val/MOT17-02-FRCNN-000001.txt
if not os.path.exists(newimgpath): # 如果图片没复制过去,就复制,
shutil.copyfile(oldimgpath, newimgpath) # 把旧图片复制到新的地方
with open(labelpath, 'a') as f: # 写label文件
f.write(f'0 {box[0]} {box[1]} {box[2]} {box[3]}\n')
convert.py要和数据集放在同一文件夹下,如下:
运行代码即可得到yolo格式的images和labels文件夹
注意:这个程序每次只能处理一个文件夹,当处理train时,要分出一定的比例作为验证集val,当处理test时,则全部都作为测试集,代码中可以修改。
在训练时需要制作索引文件,找到训练集和验证集的images和labels
文件内容如下:

通过name.py获得一个文件夹中的图片名称,程序如下:
import os
def generate(dir, label):
files = os.listdir(dir)
files.sort()
print
'****************'
print
'input :', dir
print
'start...'
listText = open('all_list.txt', 'a')
for file in files:
fileType = os.path.split(file)
if fileType[1] == '.txt':
continue
name = 'MOT17/images/test/'+file + '\n'
listText.write(name)
listText.close()
print
'down!'
print
'****************'
if __name__ == '__main__':
outer_path = './images' # 这里是你的图片的目录
i = 0
folderlist = os.listdir(outer_path) # 列举文件夹
for folder in folderlist:
generate(os.path.join(outer_path, folder), i)
i += 1
文件夹的放置顺序如下图所示:

我们可以把上一步划分好的数据集做好格式,运行程序生成索引。
注意:这个程序读取的名字是000001这种,但是我们需要的是MOT17/images/train/MOT17-02-SDP-000001.jpg这种。所以要修改程序中的这行代码
name = 'MOT17/images/test/'+file + '\n'
要在file前面加上路径,每个序列都不同,所以只能一次转换一个序列
在得到索引文件后,可以看到DPM,FRCNN,SDP三个序列的索引都在txt中,因为三组都是重复的,所以可以只保留FRCNN的索引,删除其他两种。
添加索引文件的路径;

mot就是专门放置索引文件的文件夹,如下:

然后,就可以开始测试了。

使用MOT17 train需要做成和viedrone相同的格式,其中annotations指的是每个序列的gt文件。
最后,附上我自己制作的数据集,仅供参考!
链接:https://pan.baidu.com/s/1mSMR6Gxpa0ErnY9N6kA6UQ
提取码:tr4k
–来自百度网盘超级会员V4的分享
我已经安装了最新版本的compass、sass和susy。但我仍然收到此错误:Unabletoactivatesusy-2.1.1,becausesass-3.2.17conflictswithsass(~>3.3.0)有人知道这个Ruby是如何工作的吗?这是我安装的gem的列表:***LOCALGEMS***CFPropertyList(2.2.0)chunky_png(1.3.0)compass(0.12.4)compass-core(1.0.0.alpha.19)compass-import-once(1.0.4)compass-rails(1.1.3)fssm(0.2.10)l
在神经网络方面,我完全是个初学者。我整天都在与ruby-fann和ai4r搏斗,不幸的是我没有任何东西可以展示,所以我想我会来到StackOverflow并询问这里的知识渊博的人。我有一组样本——每天都有一个数据点,但它们不符合我能够找出的任何明确模式(我尝试了几次回归)。不过,我认为看看是否有任何方法可以仅从日期预测future的数据会很好,而且我认为神经网络将是生成希望表达这种关系的函数的好方法.日期是DateTime对象,数据点是十进制数,例如7.68。我一直在将DateTime对象转换为float,然后除以10,000,000,000得到一个介于0和1之间的数字,我一直在将
我是Ruby和Watir-Webdriver的新手。我有一套用VBScript编写的站点自动化程序,我想将其转换为Ruby/Watir,因为我现在必须支持Firefox。我发现我真的很喜欢Ruby,而且我正在研究Watir,但我已经花了一周时间试图让Webdriver显示我的登录屏幕。该站点以带有“我同意”区域的“警告屏幕”开头。用户点击我同意并显示登录屏幕。我需要单击该区域以显示登录屏幕(这是同一页面,实际上是一个表单,只是隐藏了)。我整天都在用VBScript这样做:objExplorer.Document.GetElementsByTagName("area")(0).click
我正在尝试训练一个前馈网络来使用Ruby库AI4R执行异或运算。然而,当我在训练后评估XOR时。我没有得到正确的输出。有没有人以前使用过这个库并得到它来学习异或运算。我使用了两个输入神经元,一个隐藏层中的三个神经元,一个输出层,正如我看到的预计算XOR前馈神经网络就像这样。require"rubygems"require"ai4r"#Createthenetworkwith:#2inputs#1hiddenlayerwith3neurons#1outputsnet=Ai4r::NeuralNetwork::Backpropagation.new([2,3,1])example=[[0,
关于yolov5训练时参数workers和batch-size的理解yolov5训练命令workers和batch-size参数的理解两个参数的调优总结yolov5训练命令python.\train.py--datamy.yaml--workers8--batch-size32--epochs100yolov5的训练很简单,下载好仓库,装好依赖后,只需自定义一下data目录中的yaml文件就可以了。这里我使用自定义的my.yaml文件,里面就是定义数据集位置和训练种类数和名字。workers和batch-size参数的理解一般训练主要需要调整的参数是这两个:workers指数据装载时cpu所使
1.深度优先搜索(DFS)深度优先遍历主要思路是从图中一个未访问的顶点V开始,沿着一条路一直走到底,然后从这条路尽头的节点回退到上一个节点,再从另一条路开始走到底…,不断递归重复此过程,直到所有的顶点都遍历完成。例题P1605迷宫题目描述给定一个N×MN\timesMN×M方格的迷宫,迷宫里有TTT处障碍,障碍处不可通过。在迷宫中移动有上下左右四种方式,每次只能移动一个方格。数据保证起点上没有障碍。给定起点坐标和终点坐标,每个方格最多经过一次,问有多少种从起点坐标到终点坐标的方案。输入格式第一行为三个正整数N,M,TN,M,TN,M,T,分别表示迷宫的长宽和障碍总数。第二行为四个正整数SX,S
(我已经问过这个问题atRubyForum,但没有得到任何答案,所以我现在交叉发布)根据我的理解,下面的代码是等价的Ruby1.9及更高版本:#(1)casewhenxbbarelsebazend#(2)ifxbbarelsebazend到目前为止,出于习惯,我一直会使用(2)。有人能想到出于某种特殊原因,为什么(1)或(2)“更好”,或者只是品味问题?澄清:一些用户反对,这个问题只是“基于意见”,因此不适合这个论坛。因此,我认为我自己说得不够清楚:我不想开始讨论个人编程风格。我提出这个话题的原因是:令我惊讶的是,Ruby提供了两种截然不同的语法(target-lesscase和if-
我正在尝试执行教程的heroku设置部分http://ruby.railstutorial.org/.但是在https://toolbelt.heroku.com/,我注意到Fedora没有.rpm,所以我尝试分别安装Foreman和HerokuCLI。Foreman和Git安装正常,但我在使用HerokuCLI时遇到问题。当我尝试做的时候:$yuminstallrubygem-heroku然后简单地做$heroku我得到错误:/usr/share/rubygems/rubygems/dependency.rb:247:in`to_specs':Couldnotfindheroku(>
如何获取此URLhttp://t.co/yjgxz5Y并获取目标URL,即http://nickstraffictricks.com/4856_how-to-rank-1-in-google/ 最佳答案 require'net/http'require'uri'Net::HTTP.get_response(URI.parse('http://t.co/yjgxz5Y'))['location']#=>"http://nickstraffictricks.com/4856_how-to-rank-1-in-google/"
本文档适用于SOPHGO(算能)BM1684-SE5及对应通用云开发空间,主要内容:注意:由于SOPHGOSE5微服务器的CPU是基于ARM架构,部分步骤将在基于x86架构CPU的开发环境中完成初始化开发环境(基于x86架构CPU的开发环境中完成)YOLO3D目标检测算法模型转换(基于x86架构CPU的开发环境中完成)YOLO3D模型推理测试(处理后的YOLO3D项目文件将被拷贝至SOPHGOSE5微服务器上推理测试)1.初始化开发环境(基于x86架构CPU的开发环境中完成)1.1初始化开发环境(若wget后的地址不可用,请前往算能官网下载Docker镜像及SDK)#切换成root权限sudo