BDD 100K数据集label转换为yolo训练格式
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
BDD 100K数据集label转换为yolo训练格式
- 前言
- 数据集介绍:
- 代码如下:
- 补充说明:
- 总结
前言
因为最近要做车辆,行人,交通标志物等的目标检测+追踪,但是奈何找了好久也没有找到一个好的数据集,终于,在最后,发现了这个宝藏数据集,BDD 100K,这是一个在自动驾驶领域常用的也很受欢迎的数据集!但是,这个数据集的标签文件是采用json文件存取的,而我想采用的网络结构是yolo4网络结构,网上开源的代码要求是xml格式。因此,我自己想办法写了一个json转为xml数据集文件的py文件。仅限于目标检测部分哈!!!
数据集介绍:
这个数据集没啥好说的了,自动驾驶领域嘛,也就是啥都涉及了,目标检测,车道线检测,语义分割,都可以用这个数据集,目前我觉得挺好用的,效果也挺好的,话不多说,官网如下:入口
关于这个数据集介绍捏,我也不多BB,粘贴个链接,这个博客讲得很好
代码如下:
import json
import os
import numpy as np
import codecs
from glob import glob
import cv2
import shutil
from sklearn.model_selection import train_test_splitsaved_path = "./VOCdevkit/VOC2007/"
img_path = 'D:/bdd100k_images/bdd100k/images/100k/val/'
#2.创建要求文件夹
if not os.path.exists(saved_path + "Annotations"):os.makedirs(saved_path + "Annotations")
if not os.path.exists(saved_path + "JPEGImages/"):os.makedirs(saved_path + "JPEGImages/")
if not os.path.exists(saved_path + "ImageSets/Main/"):os.makedirs(saved_path + "ImageSets/Main/")with open("bdd100k_labels_images_val.json", 'r') as load_f:data = json.load(load_f) # data是一个列表for item in data: # item是一个字典path_name = item['name']with codecs.open(saved_path + "Annotations/" + path_name[:-4] + ".xml", "w", "utf-8") as xml:path = img_path + str(path_name)print(path)height, width, channels = cv2.imread(path).shape# print(height, width, channels)xml.write('<annotation>\n')xml.write('\t<folder>' + 'UAV_data' + '</folder>\n')xml.write('\t<filename>' + path_name + '</filename>\n')xml.write('\t<source>\n')xml.write('\t\t<database>The UAV autolanding</database>\n')xml.write('\t\t<annotation>UAV AutoLanding</annotation>\n')xml.write('\t</source>\n')xml.write('\t<owner>\n')xml.write('\t\t<flickrid>NULL</flickrid>\n')xml.write('\t\t<name>ChaojieZhu</name>\n')xml.write('\t</owner>\n')xml.write('\t<size>\n')xml.write('\t\t<width>' + str(width) + '</width>\n')xml.write('\t\t<height>' + str(height) + '</height>\n')xml.write('\t\t<depth>' + str(channels) + '</depth>\n')xml.write('\t</size>\n')xml.write('\t\t<segmented>0</segmented>\n')comments = item['labels'] # 是一个列表for _item in comments: # _item是一个一个的字典# print(_item)for _, x2 in enumerate(_item):# print(x2, _item[x2])if x2 == 'category' and _item[x2] != 'drivable area' and _item[x2] != 'lane':xml.write('\t<object>\n')xml.write('\t\t<name>' + _item[x2] + '</name>\n')xml.write('\t\t<pose>Unspecified</pose>\n')xml.write('\t\t<truncated>1</truncated>\n')xml.write('\t\t<difficult>0</difficult>\n')if x2 == 'box2d':dic = _item[x2]for _, j in enumerate(dic):if j == 'x1':xmin = int(dic[j])if j == 'y1':ymin = int(dic[j])if j == 'x2':xmax = int(dic[j])if j == 'y2':ymax = int(dic[j])if xmax <= xmin:passelif ymax <= ymin:passelse:xml.write('\t\t<bndbox>\n')xml.write('\t\t\t<xmin>' + str(xmin) + '</xmin>\n')xml.write('\t\t\t<ymin>' + str(ymin) + '</ymin>\n')xml.write('\t\t\t<xmax>' + str(xmax) + '</xmax>\n')xml.write('\t\t\t<ymax>' + str(ymax) + '</ymax>\n')xml.write('\t\t</bndbox>\n')xml.write('\t</object>\n')xml.write('</annotation>')
补充说明:
有几个地方需要注意一下,数据集是很大的,一共6.5个G左右,下载下来是这个样子:
我只采用了100k里面的val文件夹下面的10000张图片,其实做检测也够用了,其他的我是没有采用的!
然后就是标签文件的样子,下载下来是这样子:
里面有一个关于val文件夹里面的10000张图的json文件:
然后,就是路径问题,首先,你要看好你的标签文件保存路径在哪儿,我默认采用的是VOC数据集的格式,也就是这样子:
你要注意修改源代码中saved_path = "./VOCdevkit/VOC2007/"这一行代码哈。
还有就是图片路径,我采用的是绝对路径,img_path = ‘D:/bdd100k_images/bdd100k/images/100k/val/’,你自己也得注意修改一下,改成你自己的。
最后,看一下结果,
有个小bug:
就是我也不知道为啥,这10000张图片中,有3张图转换出来的xml文件没法使用,是无效的,也就是剩下了9997张图,我最终选择的是从根本上解决问题,我把这三张图和对应的xml文件删了!然后,我自己补充了3张图进去。凑够10000张!强迫症患者,哈哈哈!
最最最最后再强调一次,我是仅仅为了做检测的哈,仅用来做目标检测!可以食用!
总结
做目标检测+跟踪的小伙伴,欢迎一起学习呀!!!
BDD 100K数据集label转换为yolo训练格式相关推荐
- INRIAPerson数据集转化为yolo训练格式并可视化
记录贴:将inria行人检测数据集转化为YOLO可以训练的txt格式 inria行人检测数据集解压后有train和test文件,将里面的标注信息提取出来 转化代码 # coding=UTF-8impo ...
- 用Python对我们自己标注的数据集转化为YOLO训练需要的txt文件
用Python对我们自己标注的数据集转化为YOLO训练需要的txt文件 一. 数据分类 在项目的根目录下新建一个maketxt.py文件. 该脚本会在straw/ImageSets文件夹下生成:tra ...
- 如何转换为YOLO txt格式
YOLO训练的label bbox格式是txt文档,如果是PASCAL VOC XML格式的文档或者其他类型文档,需要另外转换格式. YOLO格式要求 YOLO txt文档格式,它是由class id ...
- 【目标检测数据集汇总】YOLO txt格式各种数据集
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 [目标检测数据集汇总]目标检测YOLO txt格式数据集~各种数据集 前言 相关连接: 一.安全帽数据集(10755张,nc2) 二. ...
- inria数据集下载及转换成yolo训练格式
部分转载自:https://zhuanlan.zhihu.com/p/31836357 6.INRIA Person Dataset(INRIA行人数据库) 该数据库是目前使用最多的静态行人检测数据库 ...
- 分割数据集label转换为目标检测boundingbox
实现功能 将分割的label图转换为目标检测boundingbox标注文件(VOC格式). 注: 1.分割样本里一张图片只有同一类别的多个目标. 2.转换为boundingbox标注通过连通域实现,所 ...
- INRIA DataSet数据集label转换为VOC2007数据集形式
这里纯属是一个数据集标签的格式转换,所有直接上代码: # -*- coding: utf-8 -*- """ Created on Wed Apr 4 15:10:06 ...
- widerface人脸数据集,yolo训练集格式,voc训练集格式
在wideface官网下载测试集1.2万张和验证集0.3万,直接下载的数据集不符合自己训练集格式要求,需要进行格式转换.YOLO需要TXT格式,有些算法需要voc格式.转换为YOLO格式后进行训练RT ...
- 【深度学习】【Python】【Widerface数据集】 转VOC格式,VOC 转YOLOv5格式,YOLOv5训练WiderFace数据集,检查yolo labels对不对
文章目录 Widerface数据集转VOC格式 VOC 转YOLO格式 数据集的imageslisttxt YOLOv5训练 检查yolo labels对不对 并行训练 Widerface数据集转VO ...
最新文章
- 高效办公,如何利用Python自动发送邮件
- 同一AppDomain内的SharpGL的FrameBuffer会相互影响?
- 计算机网络是啥意思啊,no signal是什么意思啊
- 夯实“茄克”核心竞争力,高端新国货谋图百年基业
- 小学毕业能学php吗,将来没出息的娃,多半从小就有这些缺点,小学毕业前还不改就晚了...
- 异常值处理 - iterrows()对 DataFrame 进行遍历,并修改遍历中的异常值 - Python代码
- TextRank、BM25算法提取关键字、文章自动摘要优秀文章保存
- Python logging模块实现同时向控制台和文件打印日志
- 分布式锁实现的几种方式(DB,Redis,Zookeeper)
- 快速排序C++方法(3种)
- php去掉省市区,省市区后面的字符隐藏的php代码
- HbuilderX 2.6.15 版本说明
- 计算机鼠标滚轮不流畅,鼠标滚轮不灵敏怎么办_鼠标中间的滚轮不灵敏了如何解决...
- /*CS5460_Note_1*/
- 获取多边形的最大最小坐标
- java模拟手机号码发短信_java实现发送手机短信
- 小米5 android 4.1.2,三星GALAXY NOTE i9220 Miui V5完美运行 Android4.1.2 华丽流畅体验
- java中SSM环境搭建
- 【物联网中间件平台-05】YFIOs策略开发指南
- python从键盘输入一个字符串、将小写字母全部_从键盘输入一个字符串,将其中的小写字母全部转换成大写字母...