提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

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训练格式相关推荐

  1. INRIAPerson数据集转化为yolo训练格式并可视化

    记录贴:将inria行人检测数据集转化为YOLO可以训练的txt格式 inria行人检测数据集解压后有train和test文件,将里面的标注信息提取出来 转化代码 # coding=UTF-8impo ...

  2. 用Python对我们自己标注的数据集转化为YOLO训练需要的txt文件

    用Python对我们自己标注的数据集转化为YOLO训练需要的txt文件 一. 数据分类 在项目的根目录下新建一个maketxt.py文件. 该脚本会在straw/ImageSets文件夹下生成:tra ...

  3. 如何转换为YOLO txt格式

    YOLO训练的label bbox格式是txt文档,如果是PASCAL VOC XML格式的文档或者其他类型文档,需要另外转换格式. YOLO格式要求 YOLO txt文档格式,它是由class id ...

  4. 【目标检测数据集汇总】YOLO txt格式各种数据集

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 [目标检测数据集汇总]目标检测YOLO txt格式数据集~各种数据集 前言 相关连接: 一.安全帽数据集(10755张,nc2) 二. ...

  5. inria数据集下载及转换成yolo训练格式

    部分转载自:https://zhuanlan.zhihu.com/p/31836357 6.INRIA Person Dataset(INRIA行人数据库) 该数据库是目前使用最多的静态行人检测数据库 ...

  6. 分割数据集label转换为目标检测boundingbox

    实现功能 将分割的label图转换为目标检测boundingbox标注文件(VOC格式). 注: 1.分割样本里一张图片只有同一类别的多个目标. 2.转换为boundingbox标注通过连通域实现,所 ...

  7. INRIA DataSet数据集label转换为VOC2007数据集形式

    这里纯属是一个数据集标签的格式转换,所有直接上代码: # -*- coding: utf-8 -*- """ Created on Wed Apr 4 15:10:06 ...

  8. widerface人脸数据集,yolo训练集格式,voc训练集格式

    在wideface官网下载测试集1.2万张和验证集0.3万,直接下载的数据集不符合自己训练集格式要求,需要进行格式转换.YOLO需要TXT格式,有些算法需要voc格式.转换为YOLO格式后进行训练RT ...

  9. 【深度学习】【Python】【Widerface数据集】 转VOC格式,VOC 转YOLOv5格式,YOLOv5训练WiderFace数据集,检查yolo labels对不对

    文章目录 Widerface数据集转VOC格式 VOC 转YOLO格式 数据集的imageslisttxt YOLOv5训练 检查yolo labels对不对 并行训练 Widerface数据集转VO ...

最新文章

  1. 高效办公,如何利用Python自动发送邮件
  2. 同一AppDomain内的SharpGL的FrameBuffer会相互影响?
  3. 计算机网络是啥意思啊,no signal是什么意思啊
  4. 夯实“茄克”核心竞争力,高端新国货谋图百年基业
  5. 小学毕业能学php吗,将来没出息的娃,多半从小就有这些缺点,小学毕业前还不改就晚了...
  6. 异常值处理 - iterrows()对 DataFrame 进行遍历,并修改遍历中的异常值 - Python代码
  7. TextRank、BM25算法提取关键字、文章自动摘要优秀文章保存
  8. Python logging模块实现同时向控制台和文件打印日志
  9. 分布式锁实现的几种方式(DB,Redis,Zookeeper)
  10. 快速排序C++方法(3种)
  11. php去掉省市区,省市区后面的字符隐藏的php代码
  12. HbuilderX 2.6.15 版本说明
  13. 计算机鼠标滚轮不流畅,鼠标滚轮不灵敏怎么办_鼠标中间的滚轮不灵敏了如何解决...
  14. /*CS5460_Note_1*/
  15. 获取多边形的最大最小坐标
  16. java模拟手机号码发短信_java实现发送手机短信
  17. 小米5 android 4.1.2,三星GALAXY NOTE i9220 Miui V5完美运行 Android4.1.2 华丽流畅体验
  18. java中SSM环境搭建
  19. 【物联网中间件平台-05】YFIOs策略开发指南
  20. python从键盘输入一个字符串、将小写字母全部_从键盘输入一个字符串,将其中的小写字母全部转换成大写字母...

热门文章

  1. 通过Horizon Connection 下载Horizon Client(含UAG场景)
  2. lisp封装为vlx方法_将VLDCL的FAS编译进VLX
  3. 第一个C语言程序编写
  4. 雄关漫道 我为磐石 | 介入手术机器人定义医学领域新格局
  5. 华为突破分布式数据库和存储技术,打通数字化转型“雄关漫道”
  6. 简历 解析 技术总结
  7. CSS3简单特效--animation实现流光按钮
  8. 一文解决中文在Eclipse中显示乱码的问题
  9. 嵌入式系统开发笔记77:认识电磁波
  10. vue的v-model双向数据绑定原理