bdd100k数据集中目标检测标签格式转换(json转txt)用于yolov5和yolov8

bdd100k数据集中目标检测标签格式转换(json转txt)用于yolov5和yolov8


最近在用bdd100k的目标检测数据集测试自己训练的模型,但是bdd100k中有些类别与我的不一样,我有的他没有,他有的我不需要,为了统一标签序号,仅 保留bdd100k中我需要的类别,将 json转成txt格式,设置了如下代码,需要的朋友看懂代码后自行修改使用。
代码没啥技巧,如果有更简单的写法,欢迎在评论区留言,我也想学习学习。

import json
import os

def bdd100k_json_txt(categorys,jsonFile,writepath):
    f = open(jsonFile)
    info = json.load(f)
    #print(len(info))
    #print(info["name"])

    for obj in info["frames"]:
        #print(obj["objects"])
        strs = ""
        for objects in obj["objects"]:
            #print(objects)
            if objects["category"] in categorys:
                dw = 1.0 / 1280
                dh = 1.0 / 720
                strs += str(categorys.index(objects["category"]))
                strs += " "
                strs += str(((objects["box2d"]["x1"] + objects["box2d"]["x2"]) / 2.0) * dw)[0:8]
                strs += " "
                strs += str(((objects["box2d"]["y1"] + objects["box2d"]["y2"]) / 2.0) * dh)[0:8]
                strs += " "
                strs += str(((objects["box2d"]["x2"] - objects["box2d"]["x1"])) * dw)[0:8]
                strs += " "
                strs += str(((objects["box2d"]["y2"] - objects["box2d"]["y1"])) * dh)[0:8]
                strs += "\n"
        if strs!="":
            write = open(writepath + "%s.txt" % info["name"], 'w')
            write.writelines(strs)
            write.close()
            # print("%s has been dealt!" % info["name"])
        else:
            print("%s has been dealt!" % info["name"])


if __name__ == "__main__":
    ####################args#####################
    categorys = ['traffic light', 'traffic sign', 'car', 'person', 'bus', 'truck', 'riderss',
                 'bike', 'motor', 'cone', 'barrier', 'opendoor', 'wheel', 'tail']    # 自己需要从BDD数据集里提取的目标类别
    readpath = r"D:\yolo\yolov8\data\bdd100k\det_annotations\train/"   # BDD数据集标签读取路径,这里需要分两次手动去修改train、val的地址
    writepath = r"D:\yolo\yolov8\data\bdd100k\labels\train/"	# BDD数据集转换后的标签保存路径

    fileList = os.listdir(readpath)
    #print(fileList)
    for file in fileList:
        # print(file)
        filepath = readpath + file
        bdd100k_json_txt(categorys, filepath, writepath)

  • 12
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
要使用YOLOv5进行BDD100K数据集的训练,可以按照以下步骤进行: 1. 下载BDD100K数据集,并将其换为YOLOv5所需的格式。可以使用官方提供的脚本进行换,具体步骤可以参考官方文档:https://github.com/ultralytics/yolov5/wiki/Train-Custom-Data。 2. 安装YOLOv5及其依赖项。可以使用pip进行安装:`pip install -r requirements.txt`。具体安装步骤可以参考官方文档:https://github.com/ultralytics/yolov5。 3. 创建一个训练配置文件,该文件包含有关训练参数、数据集路径等信息。可以使用官方提供的示例配置文件进行修改:https://github.com/ultralytics/yolov5/blob/master/models/yolov5s.yaml。 4. 运行训练命令,开始训练网络。可以使用以下命令进行训练: ``` python train.py --img 640 --batch 16 --epochs 50 --data /path/to/data.yaml --cfg ./models/yolov5s.yaml --weights '' --name bdd100k_yolov5s ``` 其,`--img`参数指定训练图像的大小,`--batch`参数指定训练批次的大小,`--epochs`参数指定训练轮数,`--data`参数指定数据集配置文件的路径,`--cfg`参数指定网络配置文件的路径,`--weights`参数指定预训练权重的路径,`--name`参数指定训练过程保存的模型名称。 5. 等待训练完成后,可以使用训练好的网络进行目标检测任务。可以使用以下命令进行测试: ``` python detect.py --weights /path/to/weights.pt --img 640 --conf 0.4 --source /path/to/images/ ``` 其,`--weights`参数指定训练好的权重文件的路径,`--img`参数指定测试图像的大小,`--conf`参数指定目标检测置信度的阈值,`--source`参数指定测试图像的路径。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值