首页/下载资源/人工智能/YOLO系列算法使用bdd100k数据集训练的数据预处理及格式转换python代码

ZIPYOLO系列算法使用bdd100k数据集训练的数据预处理及格式转换python代码

baidu_412843154.31KB需要积分:1

资源文件列表:

bdd100k_data_cv.zip 大约有8个文件
  1. bdd100k_data_cv/.vscode/
  2. bdd100k_data_cv/.vscode/settings.json 70B
  3. bdd100k_data_cv/bdd100k2yolo.py 3.35KB
  4. bdd100k_data_cv/change_txt_cls.py 487B
  5. bdd100k_data_cv/readpicpath.py 417B
  6. bdd100k_data_cv/split_data_yolov5.py 2.43KB
  7. bdd100k_data_cv/togray.py 436B
  8. bdd100k_data_cv/

资源介绍:

内容简介 本资源提供了一套针对BDD100K数据集的Python代码,旨在辅助用户完成YOLO系列算法训练前的数据预处理及格式转换工作。内容概要上,该代码能够处理BDD100K数据集的复杂标注信息,包括图像路径、类别标签、边界框坐标等,并将其转换为YOLO算法训练所需的特定格式(如TXT文件),同时可能包括图像增强、归一化等预处理步骤,以优化训练效果。 适用人群: 深度学习爱好者与研究者,特别是专注于目标检测领域的学者和学生。 开发人员,需要利用BDD100K数据集进行YOLO算法训练的工程师。 寻求提升数据处理效率与准确性的数据科学家。 能学到什么: 了解BDD100K数据集的标注结构与特点。 掌握将BDD100K数据集转换为YOLO训练格式的方法。 学习图像预处理技术,如数据增强、归一化等,在目标检测训练中的应用。 提升Python编程能力,特别是文件操作、数据处理及条件逻辑的实现。 阅读建议: 在阅读前,建议对BDD100K数据集和YOLO算法有一定的了解。 逐步执行代码,理解每一步的作用,特别是数据解析、预处理和格式转换的逻辑。 尝试修改代码中的参数,如调整数据增强的
#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright @ 2021 zuosi <807269961@qq.com> # Distributed under terms of the MIT license import re import os import json def search_file(data_dir, pattern=r'\.jpg$'): root_dir = os.path.abspath(data_dir) for root, dirs, files in os.walk(root_dir): for f in files: if re.search(pattern, f, re.I): abs_path = os.path.join(root, f) #print('new file %s' % absfn) yield abs_path class Bdd2yolov5: def __init__(self): self.bdd100k_width = 1280 self.bdd100k_height = 720 self.select_categorys=["person", "car", "bus", "truck"] self.cat2id = { "person": 0, "car": 1, "bus": 1, "truck": 1 } @property def all_categorys(self): return ["person", "rider", "car", "bus", "truck", "bike", "motor", "traffic light", "traffic sign","train"] def _filter_by_attr(self, attr=None): if attr is None: return False #过滤掉晚上的图片 if attr['timeofday'] == 'night': return True return False def _filter_by_box(self, w, h): #size ratio #过滤到过于小的小目标 threshold = 0.001 if float(w*h)/(self.bdd100k_width*self.bdd100k_height) < threshold: return True return False def bdd2yolov5(self, path): lines = "" with open(path) as fp: j = json.load(fp) # if self._filter_by_attr(j['attributes']): //去掉晚上的 # return for fr in j["frames"]: dw = 1.0 / self.bdd100k_width dh = 1.0 / self.bdd100k_height for obj in fr["objects"]: if obj["category"] in self.select_categorys: idx = self.cat2id[obj["category"]] cx = (obj["box2d"]["x1"] + obj["box2d"]["x2"]) / 2.0 cy = (obj["box2d"]["y1"] + obj["box2d"]["y2"]) / 2.0 w = obj["box2d"]["x2"] - obj["box2d"]["x1"] h = obj["box2d"]["y2"] - obj["box2d"]["y1"] if w<=0 or h<=0: continue # if self._filter_by_box(w,h)://去掉小目标 # continue #根据图片尺寸进行归一化 cx,cy,w,h = cx*dw,cy*dh,w*dw,h*dh line = f"{idx} {cx:.6f} {cy:.6f} {w:.6f} {h:.6f}\n" lines += line if len(lines) != 0: #转换后的以*.txt结尾的标注文件我就直接和*.json放一具目录了 #yolov5中用到的时候稍微挪一下就行了 yolo_txt = path.replace(".json",".txt") print(yolo_txt) with open(yolo_txt, 'w') as fp2: fp2.writelines(lines) #print("%s has been dealt!" % path) if __name__ == "__main__": bdd_label_dir = "E:\\数据集\\bdd100k\\bdd100k_labels\\bdd100k\\labels\\100k\\val" cvt=Bdd2yolov5() for path in search_file(bdd_label_dir, r"\.json$"): cvt.bdd2yolov5(path)
100+评论
captcha