数据集格式转换一:DarkLabelToMOT

1. 背景

使用DarkLabel制作目标追踪数据集,在训练模型时需要用到MOT数据集格式,因此需要进行格式转换

2. 参考

参考pprpp大神的文章:https://www.jianshu.com/p/f36a45236044
先说区别:时间太长,我已经忘记了许多,似乎记得pprpp大神的代码应该是多个文件夹下的自动转换,而这里的代码是手动进行每个子文件夹的转换。pprpp大神的应该是单类别转换,这里的是多类别转换

3. 单个文件夹的gt文件转换

import os
'''
(1)区别如下:

dir_dl_gt.txt(转换前)
frame(从0开始计), 数量, id(从0开始), box(x1,y1,x2,y2), class=null
0,4,0,450,194,558,276,null,1,408,147,469,206,null,2,374,199,435,307,null,3,153,213,218,314,null
1,4,0,450,194,558,276,null,1,408,147,469,206,null,2,374,199,435,307,null,3,153,213,218,314,null
2,4,0,450,194,558,276,null,1,408,147,469,206,null,2,374,199,435,307,null,3,153,213,218,314,null

-----------------------------------------------------------------------------------------------

gt.txt(转换后)
frame(从1开始计), id(从1开始计), box(left top w, h),ignore=1(不忽略), class=1(从1开始),覆盖=1), 
1,1,1363,569,103,241,1,1,0.86014
2,1,1362,568,103,241,1,1,0.86173
3,1,1362,568,103,241,1,1,0.86173
4,1,1362,568,103,241,1,1,0.86173

(2)类别信息:
class1,class2,class3,class4,class5为追踪目标的类别
'''


def xyxy2xywh(x):
    # Convert bounding box format from [x1, y1, x2, y2] to [x, y, w, h]
    # y = torch.zeros_like(x) if isinstance(x,
    #                                       torch.Tensor) else np.zeros_like(x)
    y = [0, 0, 0, 0]

    y[0] = (x[0] + x[2]) / 2
    y[1] = (x[1] + x[3]) / 2
    y[2] = x[2] - x[0]
    y[3] = x[3] - x[1]
    return y

def process_darklabel(video_label_path, mot_label_path):
    f = open(video_label_path, "r")
    f_o = open(mot_label_path, "w")

    contents = f.readlines()

    for line in contents:
        line = line[:-1]
        num_list = [num for num in line.split(',')]
        frame_id = int(num_list[0]) + 1         # 帧id
        total_num = int(num_list[1])            # 图片中的目标个数
        base = 2                                # 从2开始
        for i in range(total_num):              # 多个目标
            _id = int(num_list[base + i * 6]) + 1
            _box_x1 = int(num_list[base + i * 6 + 1])
            _box_y1 = int(num_list[base + i * 6 + 2])
            _box_x2 = int(num_list[base + i * 6 + 3])
            _box_y2 = int(num_list[base + i * 6 + 4])
            y = xyxy2xywh([_box_x1, _box_y1, _box_x2, _box_y2])
            
            classname_str = num_list[base + i * 6 + 5]      # 多类别多目标追踪,帧id和fairmot一样从1开始,类别id从0开始
            if(classname_str=="class1"):
                class_index = 0
            elif(classname_str=="class2"):
                class_index = 1
            elif(classname_str=="class3"):
                class_index = 2
            elif (classname_str == "class4"):
                class_index = 3
            elif (classname_str == "class5"):
                class_index = 4
            else:
                class_index = 5
                print('warning:文件中存在未识别的类别信息——',classname_str)
                
            write_line = "%d,%d,%d,%d,%d,%d,1,%d,1\n" % (frame_id, _id, y[0], y[1], y[2], y[3], int(class_index))
            f_o.write(write_line)

    f.close()
    f_o.close()

if __name__ == "__main__":
    root_dir = "./path/work/"		# 图片文件所在文件夹
    video_label_path = os.path.join(root_dir, "VID10_dl_gt.txt")		# darklabel标注保存文件
    mot_label_path = os.path.join(root_dir, "gt.txt")					# 生成的mot标注文件
    process_darklabel(video_label_path, mot_label_path)

4. 转换效果截图

转换效果截图

5. 按照MOT数据集文件格式进行整理

将转换得到的gt.txt文件放到gt文件夹中;
img1中方放图片,记得删除dir_dl_gt.txt文件(darklabel标注文件);
seqinfo.ini文件保存的是该文件夹的信息,各种信息按照个人理解如下图所示;
det文件夹先不用管,我一般将darklabel标注文件放到这里,具体的MOT数据集格式讲解可自行百度。
在这里插入图片描述
PS:鼠标坏了总是连击,好几次截图在编辑过程中就跟确认了(QQ截图,双击完成),没有好好排版,各位别嫌弃丑啊 -_-| 。

  • 5
    点赞
  • 63
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
YOLOv5官方使用的数据集是COCO数据集格式,但是个人也可以选择使用PASCAL VOC数据集进行训练和测试。对于数据集格式转换,可以参考以下步骤: 1. 首先,将VOC格式的数据集转换为YOLOv5所需的darknet格式。可以参考引用\[1\]中提供的链接,其中详细介绍了如何将VOC格式数据集转换为YOLOv5格式。 2. 接下来,根据个人需求,对数据集进行划分。一般的划分比例是训练集:验证集:测试集=6:2:2。这个比例可以根据个人数据集的大小进行灵活调整。可以参考引用\[3\]中提到的比例设置。 3. 在划分数据集时,需要注意确保训练集、验证集和测试集的样本是相互独立的,以保证实验的科学性和准确性。 总结起来,要将数据集格式转换为YOLOv5所需的格式,首先将VOC格式的数据集转换为darknet格式,然后根据个人需求划分训练集、验证集和测试集。这样可以为YOLOv5算法的训练和测试提供合适的数据集。 #### 引用[.reference_title] - *1* *2* [【YOLOv5、YOLOv7、YOLOv8训练】——VOC数据集划分和YOLO格式转换](https://blog.csdn.net/retainenergy/article/details/124613553)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [学习经验分享之五:YOLOv5数据集划分以及YOLO格式转换](https://blog.csdn.net/m0_70388905/article/details/125733445)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值