UAVDT数据集转化为MOT数据集(用作MOTR模型训练)

news2024/9/23 13:26:45

文章目录

  • UAVDT数据集转化为MOT数据集
    • MOT17 数据集格式
      • train
        • det.txt
        • gt.txt
        • seqinfo.ini
      • test
        • det.txt
    • UAVDT
      • 1. 自行创建下面文件夹路径
      • 2. 操作并得到gt.txt
      • seqinfo.ini
    • 代码

UAVDT数据集转化为MOT数据集

MOT17 数据集格式

├── MOT17
│   ├── images
│   ├── labels_with_ids

train

det.txt

10个参数 或者 8个参数

<frame>, <id>, <bb_left>, <bb_top>, <bb_width>, <bb_height>, <conf>, <x>, <y>, <z> 
  • 第1个代表第几帧
  • 第2个代表轨迹编号(在这个文件里总是为-1)
  • bb开头的4个数代表物体框的左上角坐标及长宽
  • conf代表置信度
  • 最后3个是MOT3D用到的内容,2D检测总是为-1.

在这里插入图片描述

gt.txt

9个参数

  • 第1个代表第几帧
  • 第2个值为目标运动轨迹的ID号
  • 第3个到第6个数代表物体框的左上角坐标及长宽
  • 第7个值为目标轨迹是否进入考虑范围内的标志,0表示忽略,1表示active
  • 第8个值为该轨迹对应的目标种类(种类见下面的表格中的label-ID对应情况)
  • 第9个值为box的visibility ratio,表示目标运动时被其他目标box包含/覆盖或者目标之间box边缘裁剪情况。

在这里插入图片描述

seqinfo.ini

主要介绍视频的帧率、分辨率等基本信息。

在这里插入图片描述

test

det.txt

数据标签含义与train相同。

在这里插入图片描述

UAVDT

其中,gt.txt 与 det.txt 中标签的含义在 readme.txt 中已经详细给出,现需要进行MOT17对应的格式。

1. 自行创建下面文件夹路径

├── UAVDT-MOT
│   ├── images
│   │   ├──train
│   │   │   ├──XXX(视频的文件夹名称)
│   │   │   │   ├──det
│   │   │   │   │   ├──det.txt(目标跟踪不需要)
│   │   │   │   ├──gt
│   │   │   │   │   ├──gt.txt
│   │   │   │   ├──img1
│   │   │   │   │   ├──XXX(jpg文件,其中名称与txt文件名称对应)
│   │   │   │   ├──seqinfo.ini
│   │   ├──test
│   │   │   ├──XXX(视频的文件夹名称)
│   │   │   │   ├──det
│   │   │   │   │   ├──det.txt(目标跟踪不需要)
│   │   │   │   ├──img1
│   │   │   │   │   ├──XXX(jpg文件,其中名称与txt文件名称对应)
│   │   │   │   ├──seqinfo.ini
│   ├── labels_with_ids
│   │   ├──train
│   │   │   ├──XXX(视频的文件夹名称)
│   │   │   │   ├──image1
│   │   │   │   │   ├──XXX(txt文件,其中名称与jpg文件名称对应)

目前UAVDT的文件路径如下,

├── UAVDT
│   ├── UAV-benchmark-M
│   │   ├── XXX(视频的文件夹名称)
│   │   │   ├──XXX(jpg文件,其中名称与txt文件名称对应)
│   ├── UAV-benchmark-MOTD_v1.0
│   │   ├──GT
│   │   │   ├──XXX_gt.txt
│   │   │   ├──XXX_gt_ignore.txt
│   │   │   ├──XXX_gt_whole.txt

需要进行的工作:
jpg文件已有,

  • gt.txt
  • seqinfo.ini
  • txt文件(无法获得)

2. 操作并得到gt.txt

gt.txt 的前7个标签是 *_gt.txt 的前7个标签;
gt.txt 的第8个标签是 *_gt_whole.txt 的第9个标签;
gt.txt 的前9个标签是 *_gt_whole.txt 的第7和第8个标签决定,共有12种情况;对应关系如下:

out-of-viewocclusionvisibility ratio
111
120.8
130.85
140.95
210.85
220.5
230.6
240.7
310.85
320.6
33065
340.75

seqinfo.ini

代码

import os
from tqdm import tqdm
import shutil

def del_filefolder(path):
    list = ['M0403', 'M1301', 'M0203', 'M0701', 'M0209', 'M0208', 'M1009', 'M0802', 'M0602', 'M1001', 'M1401', 'M0606',
            'M1101', 'M1302', 'M1303', 'M1007', 'M1004', 'M0205', 'M0801', 'M0601']
    for i in list:
        folder_path=os.path.join(path,'UAV-benchmark-M',i)
        print(folder_path)
        if os.path.exists(folder_path):
            shutil.rmtree(folder_path)
    print('del folder over!')

def del_file(path):
    list = ['M0403', 'M1301', 'M0203', 'M0701', 'M0209', 'M0208', 'M1009', 'M0802', 'M0602', 'M1001', 'M1401', 'M0606',
            'M1101', 'M1302', 'M1303', 'M1007', 'M1004', 'M0205', 'M0801', 'M0601']
    for i in list:
        gt_txt_path=os.path.join(path,'GT',str(i)+'_gt.txt')
        gt_whole_txt_path=os.path.join(path,'GT',str(i)+'_gt_whole.txt')
        if os.path.exists(gt_txt_path):
            os.remove(gt_txt_path)
            print('del gt_file over!')
        if os.path.exists(gt_whole_txt_path):
            os.remove(gt_whole_txt_path)
            print('del gt_whole_file over!')

def count(path):
    '''

    :param path: "1.txt"
    :return:
    '''
    vedio_path = os.path.join(path, "UAV-benchmark-M")
    vedio_set = os.listdir(vedio_path)
    print(vedio_set)
    gt_path = os.path.join(path, 'GT')
    print(gt_path)

    # file_path=os.path.join(path,'sequences')
    # file_set=os.listdir(file_path)
    # # print(file_set)
    for i in tqdm(vedio_set):
        txt_path=os.path.join(gt_path,str(i)+'_gt.txt')
        whole_txt_path=os.path.join(gt_path,str(i)+'_gt_whole.txt')
        txt_count = len(open(txt_path,'rU').readlines())
        whole_txt_count = len(open(whole_txt_path,'rU').readlines())
        print('txt_count:',txt_count)
        print('whole_txt_count:',whole_txt_count)
        if(txt_count==whole_txt_count):
            print('ok')
        else:
            print(str(i)+'XXXXXXXXXXXXXX')
        print('----------------------------------------------')


if __name__ == '__main__':
    del_filefolder('/home/course/ldw/dataset/UAVDT_MOT/')
    del_file('/home/course/ldw/dataset/UAVDT_MOT/')
    # count('/home/course/ldw/dataset/UAVDT_MOT/')
import os
import shutil
import time

from tqdm import tqdm
from PIL import Image


def process(path):
    vedio_path = os.path.join(path, "UAV-benchmark-M")
    vedio_set = os.listdir(vedio_path)
    print(vedio_set)
    gt_path = os.path.join(path, 'GT')
    print(gt_path)

    # file_path=os.path.join(path,'sequences')
    # file_set=os.listdir(file_path)
    # # print(file_set)
    for i in tqdm(vedio_set):
        file_path = os.path.join(path, 'train', str(i))
        makedir(file_path)
        file_gt_path = os.path.join(file_path, 'gt')
        makedir(file_gt_path)

        gt_url = file_gt_path + '\\gt.txt'
        print(gt_url)  # E:\Projects\pythonprojects\Test\uavdt2mot\train\M0101\gt\gt.txt
        if not os.path.isfile(gt_url):
            fd = open(gt_url, mode="w", encoding="utf-8")
        file = open(gt_url, 'w').close()

        gt1_url = file_gt_path + '\\gt1.txt'
        print(gt1_url)  # E:\Projects\pythonprojects\Test\uavdt2mot\train\M0101\gt\gt.txt
        if not os.path.isfile(gt1_url):
            fd = open(gt1_url, mode="w", encoding="utf-8")
        file = open(gt1_url, 'w').close()
        gt2_url = file_gt_path + '\\gt2.txt'
        print(gt2_url)  # E:\Projects\pythonprojects\Test\uavdt2mot\train\M0101\gt\gt.txt
        if not os.path.isfile(gt2_url):
            fd = open(gt2_url, mode="w", encoding="utf-8")
        file = open(gt2_url, 'w').close()
        gt_txt_name = os.path.join(gt_path, i + '_gt.txt')
        print(gt_txt_name)
        gt_whole_name = os.path.join(gt_path, i + '_gt_whole.txt')
        print(gt_whole_name)
        f_gt = open(gt_txt_name, "r")
        f_whole_gt = open(gt_whole_name, 'r')
        for line2 in f_whole_gt.readlines():
            line2 = line2.replace("\n", "")
            if line2.endswith(","):  # filter data
                line2 = line2.rstrip(",")
            line_list2 = [int(i) for i in line2.split(",")]
            if (line_list2[6] == 1 and line_list2[7] == 1):
                line_list2[7] = 1
            if (line_list2[6] == 1 and line_list2[7] == 2):
                line_list2[7] = 0.8
            if (line_list2[6] == 1 and line_list2[7] == 3):
                line_list2[7] = 0.85
            if (line_list2[6] == 1 and line_list2[7] == 4):
                line_list2[7] = 0.95
            if (line_list2[6] == 2 and line_list2[7] == 1):
                line_list2[7] = 0.85
            if (line_list2[6] == 2 and line_list2[7] == 2):
                line_list2[7] = 0.5
            if (line_list2[6] == 2 and line_list2[7] == 3):
                line_list2[7] = 0.6
            if (line_list2[6] == 2 and line_list2[7] == 4):
                line_list2[7] = 0.7
            if (line_list2[6] == 3 and line_list2[7] == 1):
                line_list2[7] = 0.85
            if (line_list2[6] == 3 and line_list2[7] == 2):
                line_list2[7] = 0.6
            if (line_list2[6] == 3 and line_list2[7] == 3):
                line_list2[7] = 0.65
            if (line_list2[6] == 3 and line_list2[7] == 4):
                line_list2[7] = 0.75
            str_text2 = ',' + str(line_list2[8]) + ',' + str(line_list2[7])
            print(str_text2)
            with open(gt1_url, 'a') as file_name:
                file_name.write(str_text2 + '\n')

        for line in f_gt.readlines():
            line = line.replace("\n", "")
            if line.endswith(","):  # filter data
                line = line.rstrip(",")
            line_list = [int(i) for i in line.split(",")]
            # print(line_list)
            str_text = str(line_list[0]) + ',' + str(line_list[1]) + ',' + str(line_list[2]) + ',' + str(
                line_list[3]) + ',' + str(line_list[4]) + ',' + str(line_list[5]) + ',' + str(
                line_list[6])
            print(str_text)

            with open(gt2_url, 'a') as file_name:
                file_name.write(str_text + '\n')

        com(gt1_url,gt2_url,gt_url)


def del_file(path):
    if os.path.exists(path):
        os.remove(path)
        print('del over!')



def move(old_path, new_path):
    makedir(new_path)
    copyfile(old_path, new_path)


def copyfile(old_folder_path, new_folder_path):
    print('---------------------')
    for file in os.listdir(old_folder_path):
        old_file_path = os.path.join(old_folder_path, file)
        # print(file)
        # print(new_folder_path)
        shutil.copy(old_file_path, new_folder_path)


def makedir(filepath):
    if not os.path.exists(filepath):
        os.mkdir(filepath)

def com(file1path,file2path,file_path):
    file_1 = open(file1path, 'r', encoding='utf-8')
    file_2 = open(file2path, 'r', encoding='utf-8')
    list1 = []
    for line in file_1.readlines():
        ss = line.strip()
        list1.append(ss)
    file_1.close()

    list2 = []
    for line in file_2.readlines():
        ss = line.strip()
        list2.append(ss)
    file_2.close()
    file_new = open(file_path, 'w', encoding='utf-8')
    for i in range(len(list1)):
        # 将两个txt文件合并到一行 中间用分隔符隔开
        sline = list2[i] + list1[i]
        # 写入新的txt文件 换行
        file_new.write(sline + '\n')
    file_new.close()

if __name__ == '__main__':
    path = r'E:\Projects\pythonprojects\Test\uavdt2mot'
    process(path)

from main1_win import *


def process(path):
    vedio_path = os.path.join(path, "UAV-benchmark-M")
    vedio_set = os.listdir(vedio_path)
    print(vedio_set)
    gt_path = os.path.join(path, 'GT')
    print(gt_path)

    # file_path=os.path.join(path,'sequences')
    # file_set=os.listdir(file_path)
    # # print(file_set)
    for i in tqdm(vedio_set):
        file_path = os.path.join(path, 'train', str(i))
        print('file_path:',file_path)
        makedir(file_path)
        file_gt_path = os.path.join(file_path, 'gt')
        makedir(file_gt_path)

        gt_url = file_gt_path + '\\gt.txt'
        print(gt_url)  # E:\Projects\pythonprojects\Test\uavdt2mot\train\M0101\gt\gt.txt
        gt1_url = file_gt_path + '\\gt1.txt'
        print(gt1_url)  # E:\Projects\pythonprojects\Test\uavdt2mot\train\M0101\gt\gt.txt
        gt2_url = file_gt_path + '\\gt2.txt'
        print(gt2_url)
        # del_file(gt1_url)
        # del_file(gt2_url)
        print('***********************************')
        img_path = os.path.join(vedio_path,str(i))
        img_set = os.listdir(img_path)
        img = Image.open(os.path.join(img_path, img_set[0]))
        ini_path = file_path
        print(ini_path)
        ini_file = ini_path + '\\seqinfo.ini'
        print(ini_file)

        if not os.path.isfile(ini_file):
            fd = open(ini_file, mode="w", encoding="utf-8")
        with open(ini_file, 'a') as ini_name:
            ini_text = '[Sequence]\n' + 'name=' + i + '\n' + 'imDir=img1\n' + 'frameRate=30\n' + 'seqLength=' + str(
                len(img_set)) + '\n' + 'imWidth = ' + str(img.size[0]) + '\n' + 'imHeight = ' + str(
                img.size[1]) + '\n' + 'imExt =.jpg\n'
            print(ini_text)
            ini_name.write(ini_text + '\n')


if __name__ == '__main__':
    path = r'E:\Projects\pythonprojects\Test\uavdt2mot'
    process(path)

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

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

相关文章

人工智能期末考试

第一章-绪论 1. 人工智能的定义 定义&#xff1a;使机器的软件或程序&#xff0c;通过某些算法进行数据学习&#xff0c;并使用所学进行仿人决策。 2. 人工智能的各种认知观 符号主义(symbolism) 原理&#xff1a;基于物理符号系统假设和有限合理性原理&#xff0c;起源于数…

SoviChart数据可视化:燃尽图(Burn down chart)

在一个完美的世界里&#xff0c;敏捷项目中的每个Sprint都会完全按计划进行&#xff0c;用户将提供充足的时间表&#xff0c;项目的各个方面都将保持正轨。但是&#xff0c;在现实世界中&#xff0c;会出现范围变化和不可预见的问题&#xff0c;这可能会导致会议和项目时间表延…

Oracle数据表ID自增操作

1、SQL编写 -- 新建用户 create user root IDENTIFIED by 123456; -- 将默认的USERS空间分配给用户 alter user root default tablespace users; -- 授权角色以及权限&#xff08;默认三个角色&#xff1a;connect、resource、dba&#xff09; grant create session,create ta…

Java数据结构与Java算法学习Day07---优先队列(简略笔记记录)

目录 一、优先队列 106 1.1优先队列的概念 106 1.2最大优先队列API设计 107 1.3最小优先队列 109 1.3.1最小优先队列API设计 110 1.4索引优先队列 &#xff08;添加两个数组解决该问题&#xff09;112 1.4.1索引优先队列的原理 112 1.4.2 索引优先队列API设计 113 1…

Spark Windows10 安装

目录一、Scala的安装二、Spark的安装1、Spark的几个版本的意思2、Spark的最新版本&#xff1a;[Spark最新版](https://spark.apache.org/downloads.html)3、安装Spark4、下载winutils在我们安装Spark之前&#xff0c;由于Spark基于Scala的&#xff0c;所以我们需要先安装Scala。…

机床测头应用二:自动补偿功能,提升生产良率

机床测头仿形加工功能可以保证“第一件和第一百件尺寸一致”机床测头应用一&#xff1a;仿形加工功能&#xff0c;降低废品率&#xff0c;此外它的自动补偿功能&#xff0c;也是批量生产中不可缺少的重要质量控制手段。机床测头的自动补偿能实现加工前准确找到工件中心自动更新…

从零开始学习JMETER性能测试

从零开始学习JMETER性能测试 顶级 Jmeter 讲座通过实时示例解释负载测试&#xff0c;包括材料和查询支持 课程英文名&#xff1a;Learn JMETER from Scratch on Live Apps Performance Testing 此视频教程共17.0小时&#xff0c;中英双语字幕&#xff0c;画质清晰无水印&…

实战项目演练丨九哥带你搭建精美的博客后台管理系统!

本项目是一个博客后台管理系统&#xff0c;主要包含四个大模块&#xff1a;用户、分类、博客和评论。项目启动后需要通过管理员身份进入系统&#xff0c;进入系统后会呈现后台管理主界面&#xff0c;通过后左侧的导航菜单&#xff0c;实现不同模块的数据维护。 一. 基本简介 …

美食杰项目(七)菜谱大全

本文目录前言&#xff1a;1.具体样式2.实现的具体功能和代码思路3.element ui具体样式的网址4.相关代码5.总结&#xff1a;前言&#xff1a; 本文给大家讲的是美食杰项目中菜谱大全项目的具体样式&#xff0c;代码思路和具体代码&#xff0c;希望能帮助到你 1.具体样式 2.实现…

Zabbix6.0使用教程 (一)—zabbix新增功能介绍1

使用zabbix的小伙伴应该都有关注到目前zabbix的大版本已经更新到了6.0&#xff0c;后面乐乐将会对如何使用zabbix6.0做一个使用教程的系列&#xff0c;大家可以持续关注&#xff0c;这篇我们主要聊聊zabbix6.0新增的一些功能介绍。 一、Zabbix server 的高可用集群 新版本附带…

Hadoop Windows10 安裝

安裝Hadoop之前&#xff0c;我们先需要安装JDK&#xff0c;JDK的安装我就不多说了 一、安装JDK 1、到Oracle的官网中下载jdk&#xff0c;然后解压到一个指定的文件夹&#xff0c;如&#xff1a;D:\Program Files\Java\jdk-15.0.1 2、配置环境变量&#xff1a;在我的电脑中的高…

SCRM是什么,SCRM和CRM区别?

要想知道什么是SCRM&#xff1f;首先必须清楚SCRM和CRM的区别。 1、定义不同 CRM全称&#xff1a;Customer Relationship Management&#xff0c;中文叫“客户关系管理”&#xff0c;是指社会化客户关系管理。CRM一词流行至今已有20余年&#xff0c;是企业管理系统中专门针对客…

【MySQL】第01章_数据库概述

目录第01章_数据库概述1.为什么要使用数据库2.数据库与数据库管理系统2.1 数据库的相关概念2.2 数据库与数据库管理系统的关系3.MySQL介绍3.1 概述3.2 关于MySQL 8.04. RDBMS 与 非RDBMS4.1 关系型数据库(RDBMS)4.1.1 实质4.1.2 优势4.2 非关系型数据库(非RDBMS)4.2.1 介绍4.2.…

什么是JDBC?JDBC程序的具体实现步骤

什么是JDBC?JDBC程序的具体实现步骤JDBC的全称是Java数据库连接&#xff08;Java Database Connectivity)&#xff0c;它是一套用于执行SQL语句的Java API。应用程序可通过这套API连接到关系数据库&#xff0c;并使用SQL语句来完成对数据库中数据的查询、更新和删除等操作。应…

2-2-3-5-3、SynchronousQueue详解

简介 SynchronousQueue是一个没有数据缓冲的BlockingQueue&#xff0c;生产者线程对其的插入操作put必须等待消费者的移除操作take 如图所示&#xff0c;SynchronousQueue 最大的不同之处在于&#xff0c;它的容量为 0&#xff0c;所以没有一个地方来暂存元素&#xff0c;导…

排序算法-计数排序、桶排序、基数排序

计数排序、桶排序、基数排序 这三种排序算法都利用了桶的概念&#xff0c;都属于用空间换时间的算法。但对桶的使用方法上有明显差异&#xff1a; 计数排序&#xff1a;每个桶只存储单一键值&#xff1b;桶排序&#xff1a;每个桶存储一定范围的数值&#xff1b;基数排序&…

Linux网络基础(基础概念)

Linux网络基础(基础概念) 文章目录Linux网络基础(基础概念)1.计算机网络的发展过程1.1 独立模式1.2 网络互联模式1.3 局域网 LAN1.4 广域网 WAN2.计算机网络协议2.1 协议的概念2.2 什么是网络协议2.3 什么是网络协议簇2.4 OSI 七层模型2.5 TCP/IP 五层模型3.网络传输基本流程3.…

3M EDI 855 采购订单确认报文详解

3M公司&#xff0c;全称明尼苏达矿业及机器制造公司。它于1902年成立&#xff0c;总部现位于美国明尼苏达州首府圣保罗市&#xff0c;为世界著名的多元化跨国企业&#xff0c;并且是道琼斯30种工业成分指数股票之一。 3M为管理其庞大的供应链建立了EDI&#xff08;Electronic D…

微信小程序|使用小程序制作一个马赛克处理工具

此文主要使用微信小程序制作一个马赛克处理工具&#xff0c;这个场景在生活中也非常常见&#xff0c;例如新闻之类有些视频或者图片不想给大众展示就会将其和谐掉&#xff0c;这就是马赛克应用。 开发步骤创建小程序功能开发实现API接口响应开发步骤 创建小程序 准备百度以及微…

[附源码]Python计算机毕业设计Django医疗器械公司公告管理系统

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…