Labelme转VOC格式
目录
1.VOC的数据内容
2.创建自己数据集
1.VOC的数据内容
VOC数据集的下载路径: The PASCAL Visual Object Classes Challenge 2012 (VOC2012)
打开链接后如下图所示,只用下载training/validation data (2GB tar file)
文件即可。
VOCdevkit└── VOC2012├── Annotations 所有的图像标注信息(XML文件)├── ImageSets │ ├── Action 人的行为动作图像信息│ ├── Layout 人的各个部位图像信息│ ││ ├── Main 目标检测分类图像信息│ │ ├── train.txt 训练集(5717)│ │ ├── val.txt 验证集(5823)│ │ └── trainval.txt 训练集+验证集(11540)│ ││ └── Segmentation 目标分割图像信息│ ├── train.txt 训练集(1464)│ ├── val.txt 验证集(1449)│ └── trainval.txt 训练集+验证集(2913)│ ├── JPEGImages 所有图像文件├── SegmentationClass 语义分割png图(基于类别)└── SegmentationObject 实例分割png图(基于目标)
注意,train.txt
、val.txt
和trainval.txt
文件里记录的是对应图片的图片名,每一行对应一个图片名信息。我们需要关注的是ImageSets/ImageSets、JPEGImages、SegmentationClass这三个文件夹中的内容。
2.创建自己数据集
2.1 将数据在labelme中做标签,具体如何使用labelme转看另外一篇博客labelme使用教程,但是标注后只是josn格式的;
2.2 将josn格式的数据转为png格式的,采用labelme的github中转VOC的py文件josn转voc的py文件,生成JPEGImages、SegmentationClass文件。
#运行命令
#data_annotated是标注图像的名字,data_dataset_voc是新创建的VOC格式的文件名字。
python labelme2voc.py data_annotated data_dataset_voc --labels labels.txt
2.3 生成ImageSets/ImageSets文件。
代码如下:
import os
import randomimport numpy as np
from PIL import Image
from tqdm import tqdm#-------------------------------------------------------#
# 想要增加测试集修改trainval_percent
# 修改train_percent用于改变验证集的比例 9:1
#
# 当前该库将测试集当作验证集使用,不单独划分测试集
#-------------------------------------------------------#
trainval_percent = 1
train_percent = 0.9
#-------------------------------------------------------#
# 指向VOC数据集所在的文件夹
# 默认指向根目录下的VOC数据集
#-------------------------------------------------------#
VOCdevkit_path = '/data/lifei/XinCode/compar code/dataset_VOC'if __name__ == "__main__":random.seed(0)print("Generate txt in ImageSets.")segfilepath = os.path.join(VOCdevkit_path, 'SegmentationClass')saveBasePath = os.path.join(VOCdevkit_path, 'ImageSets/Segmentation')temp_seg = os.listdir(segfilepath)total_seg = []for seg in temp_seg:if seg.endswith(".png"):total_seg.append(seg)num = len(total_seg) list = range(num) tv = int(num*trainval_percent) tr = int(tv*train_percent) trainval= random.sample(list,tv) train = random.sample(trainval,tr) print("train and val size",tv)print("traub suze",tr)ftrainval = open(os.path.join(saveBasePath,'trainval.txt'), 'w') ftest = open(os.path.join(saveBasePath,'test.txt'), 'w') ftrain = open(os.path.join(saveBasePath,'train.txt'), 'w') fval = open(os.path.join(saveBasePath,'val.txt'), 'w') for i in list: name = total_seg[i][:-4]+'\n' if i in trainval: ftrainval.write(name) if i in train: ftrain.write(name) else: fval.write(name) else: ftest.write(name) ftrainval.close() ftrain.close() fval.close() ftest.close()print("Generate txt in ImageSets done.")print("Check datasets format, this may take a while.")print("检查数据集格式是否符合要求,这可能需要一段时间。")classes_nums = np.zeros([256], np.int)for i in tqdm(list):name = total_seg[i]png_file_name = os.path.join(segfilepath, name)if not os.path.exists(png_file_name):raise ValueError("未检测到标签图片%s,请查看具体路径下文件是否存在以及后缀是否为png。"%(png_file_name))png = np.array(Image.open(png_file_name), np.uint8)if len(np.shape(png)) > 2:print("标签图片%s的shape为%s,不属于灰度图或者八位彩图,请仔细检查数据集格式。"%(name, str(np.shape(png))))print("标签图片需要为灰度图或者八位彩图,标签的每个像素点的值就是这个像素点所属的种类。"%(name, str(np.shape(png))))classes_nums += np.bincount(np.reshape(png, [-1]), minlength=256)print("打印像素点的值与数量。")print('-' * 37)print("| %15s | %15s |"%("Key", "Value"))print('-' * 37)for i in range(256):if classes_nums[i] > 0:print("| %15s | %15s |"%(str(i), str(classes_nums[i])))print('-' * 37)if classes_nums[255] > 0 and classes_nums[0] > 0 and np.sum(classes_nums[1:255]) == 0:print("检测到标签中像素点的值仅包含0与255,数据格式有误。")print("二分类问题需要将标签修改为背景的像素点值为0,目标的像素点值为1。")elif classes_nums[0] > 0 and np.sum(classes_nums[1:]) == 0:print("检测到标签中仅仅包含背景像素点,数据格式有误,请仔细检查数据集格式。")print("JPEGImages中的图片应当为.jpg文件、SegmentationClass中的图片应当为.png文件。")print("如果格式有误,参考:")print("https://github.com/bubbliiiing/segmentation-format-fix")
可以根据自己的需求更改训练集以及验证集,修改对应的trainval_percent = 1
train_percent = 0.9代码即可;
修改为自己的数据路径VOCdevkit_path = 'compar code/dataset_VOC'
修改为自己的SegmentationClass路径segfilepath = os.path.join(VOCdevkit_path, 'SegmentationClass');
修改为自己的txt路径 saveBasePath = os.path.join(VOCdevkit_path, 'ImageSets/Segmentation');
运行上边的代码即可,就可以将自己的数据划分为指定比例的TXT文件。
Labelme转VOC格式相关推荐
- labelImg的VOC格式转化为labelme的json格式
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.安装labelme 二.VOC转化为JSON的代码 1.代码: 2.用labelme查看转化完成的文件 前言 ...
- [数据集][目标检测]篮球数据集VOC格式7398张
数据集格式:Pascal VOC格式(不包含分割路径的txt文件和yolo格式的txt文件,仅仅包含jpg图片和对应的xml) 图片数量(jpg文件个数):7398 标注数量(xml文件个数):739 ...
- 英文数据集txt_如何用自己的数据制作 Pascal VOC 格式的数据集 详细教程(文中有所有代码)...
目前object detection这块主流的数据集主要就是COCO和Pascal VOC格式的.github上现成的检测算法基本都是自带VOC格式数据集的输入接口的,所以想要跑起来一个算法,我们需要 ...
- 建立自己的voc数据集_一次将自己的数据集制作成PASCAL VOC格式的惨痛经历
因为准备训练keras-yolo3,开源代码上给出了voc_annotation.py文件,只要将自己的数据格式处理成PASCAL VOC格式,那么运行voc_annotation.py就可以将自己的 ...
- python transformer category_Python 生成VOC格式的标签实例
常用目标检测模型基本都是读取的PASCAL VOC格式的标签,下面代码用于生成VOC格式的代码,根据需要修改即可: from lxml import etree, objectify def gen_ ...
- 将widerface标注转换为VOC格式
验证工具代码: https://github.com/wondervictor/WiderFace-Evaluation 将widerface标注转换为VOC格式 原文:https://blog.cs ...
- 把LabelImg标注的YOLO格式标签转化为VOC格式标签 和 把VOC格式标签转化为YOLO格式标签
把LabelImg标注的YOLO格式标签转化为VOC格式标签 和 把VOC格式标签转化为YOLO格式标签 文章目录: 1 用LabelImgvoc和yolo标注标签格式说明 1.1 LabelImg标 ...
- voc格式的图片训练集相对普通训练集有何优点?
原提问: voc格式的图片训练集相对普通训练集有何优点? 描述: 普通的训练集指的是包含一堆一一对应的.jpg文件和.txt位置框信息文件,还有train.txt和test.txt以及obj.name ...
- 【Python】随机划分数据集并生成VOC格式列表
1.Introduction 做目标检测时,用LabelImg生成的 xml 文件需要和对应的图片文件名,生成VOC格式列表.同时需要按照一定比例划分为训练集.验证集和测试集. 2.Materials ...
- labelme的 json格式转化成自己的json格式
labelme的json格式: {"version": "4.5.6","flags": {},"shapes": [{ ...
最新文章
- 其他算法-PCA主成分分析
- 万能媒体播放器 PotPlayer
- 如何一夜暴富?深度学习教你预测比特币价格
- asp中正则表达式应用
- 学嵌入式有两个诀窍:勤奋刻苦+不要脸
- 4邻接、8邻接、m邻接
- 高仿人人Android梦想版终极源码发送(转)
- mysql5.7.14安装版_MySql5.7.14安装教程详解(解压版)_MySQL
- 继苏宁京东后 拼多多也宣布下调新款iPhone售价
- 《小团团团队》【Alpha】Scrum Meeting 3
- 哪位有Castle Project Generators,邮给我一份 (deerchao at gmail dot com),谢谢。
- 2022最新版VMware虚拟机及CentOS-7安装教程
- 天涯论坛邮箱采集器1.0
- 学习《自己动手写网络爬虫》之记录1
- AD15 PCB笔记
- linux 下动手实现bash -lR 命令
- Python视频抽帧,视频转图片帧并保存
- Python简单网页抽奖
- SQL Server实现split函数分割字符串功能及用法示例
- 树莓派上的软件安装和卸载命令汇总
热门文章
- iOS Facebook pop动画进阶
- 活动回顾 | 大咖云集“开源安全治理模型和工具”线上研讨会
- php随机发牌游戏,JavaScript_javascript实例--教你实现扑克牌洗牌功能,我们一般都会按照顺序把随机 - phpStudy...
- 【Linux学习笔记】last命令
- 计算机cmd测试,电脑cmd命令怎么测试网速详细步骤
- pro android python with sl4a,Pro Android Python with SL4A
- 国外各国统计机构网址
- oracle redo查询,ORACLE UNDO REDO查看
- 戴尔便携式计算机 故障,老DELL笔记本电脑常见故障“通病”问题
- java源文件只能有一import_Java源文件的声明规则