目录

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.txtval.txttrainval.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格式相关推荐

  1. labelImg的VOC格式转化为labelme的json格式

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.安装labelme 二.VOC转化为JSON的代码 1.代码: 2.用labelme查看转化完成的文件 前言    ...

  2. [数据集][目标检测]篮球数据集VOC格式7398张

    数据集格式:Pascal VOC格式(不包含分割路径的txt文件和yolo格式的txt文件,仅仅包含jpg图片和对应的xml) 图片数量(jpg文件个数):7398 标注数量(xml文件个数):739 ...

  3. 英文数据集txt_如何用自己的数据制作 Pascal VOC 格式的数据集 详细教程(文中有所有代码)...

    目前object detection这块主流的数据集主要就是COCO和Pascal VOC格式的.github上现成的检测算法基本都是自带VOC格式数据集的输入接口的,所以想要跑起来一个算法,我们需要 ...

  4. 建立自己的voc数据集_一次将自己的数据集制作成PASCAL VOC格式的惨痛经历

    因为准备训练keras-yolo3,开源代码上给出了voc_annotation.py文件,只要将自己的数据格式处理成PASCAL VOC格式,那么运行voc_annotation.py就可以将自己的 ...

  5. python transformer category_Python 生成VOC格式的标签实例

    常用目标检测模型基本都是读取的PASCAL VOC格式的标签,下面代码用于生成VOC格式的代码,根据需要修改即可: from lxml import etree, objectify def gen_ ...

  6. 将widerface标注转换为VOC格式

    验证工具代码: https://github.com/wondervictor/WiderFace-Evaluation 将widerface标注转换为VOC格式 原文:https://blog.cs ...

  7. 把LabelImg标注的YOLO格式标签转化为VOC格式标签 和 把VOC格式标签转化为YOLO格式标签

    把LabelImg标注的YOLO格式标签转化为VOC格式标签 和 把VOC格式标签转化为YOLO格式标签 文章目录: 1 用LabelImgvoc和yolo标注标签格式说明 1.1 LabelImg标 ...

  8. voc格式的图片训练集相对普通训练集有何优点?

    原提问: voc格式的图片训练集相对普通训练集有何优点? 描述: 普通的训练集指的是包含一堆一一对应的.jpg文件和.txt位置框信息文件,还有train.txt和test.txt以及obj.name ...

  9. 【Python】随机划分数据集并生成VOC格式列表

    1.Introduction 做目标检测时,用LabelImg生成的 xml 文件需要和对应的图片文件名,生成VOC格式列表.同时需要按照一定比例划分为训练集.验证集和测试集. 2.Materials ...

  10. labelme的 json格式转化成自己的json格式

    labelme的json格式: {"version": "4.5.6","flags": {},"shapes": [{ ...

最新文章

  1. 其他算法-PCA主成分分析
  2. 万能媒体播放器 PotPlayer
  3. 如何一夜暴富?深度学习教你预测比特币价格
  4. asp中正则表达式应用
  5. 学嵌入式有两个诀窍:勤奋刻苦+不要脸
  6. 4邻接、8邻接、m邻接
  7. 高仿人人Android梦想版终极源码发送(转)
  8. mysql5.7.14安装版_MySql5.7.14安装教程详解(解压版)_MySQL
  9. 继苏宁京东后 拼多多也宣布下调新款iPhone售价
  10. 《小团团团队》【Alpha】Scrum Meeting 3
  11. 哪位有Castle Project Generators,邮给我一份 (deerchao at gmail dot com),谢谢。
  12. 2022最新版VMware虚拟机及CentOS-7安装教程
  13. 天涯论坛邮箱采集器1.0
  14. 学习《自己动手写网络爬虫》之记录1
  15. AD15 PCB笔记
  16. linux 下动手实现bash -lR 命令
  17. Python视频抽帧,视频转图片帧并保存
  18. Python简单网页抽奖
  19. SQL Server实现split函数分割字符串功能及用法示例
  20. 树莓派上的软件安装和卸载命令汇总

热门文章

  1. iOS Facebook pop动画进阶
  2. 活动回顾 | 大咖云集“开源安全治理模型和工具”线上研讨会
  3. php随机发牌游戏,JavaScript_javascript实例--教你实现扑克牌洗牌功能,我们一般都会按照顺序把随机 - phpStudy...
  4. 【Linux学习笔记】last命令
  5. 计算机cmd测试,电脑cmd命令怎么测试网速详细步骤
  6. pro android python with sl4a,Pro Android Python with SL4A
  7. 国外各国统计机构网址
  8. oracle redo查询,ORACLE UNDO REDO查看
  9. 戴尔便携式计算机 故障,老DELL笔记本电脑常见故障“通病”问题
  10. java源文件只能有一import_Java源文件的声明规则