文章目录

  • 关于PASCAL VOC数据集
    • 目录结构
  • ①创建VOC数据集的几个相关目录
    • XML文件的形式
  • ②读取dcm文件与xml文件的配对关系
  • ③创建VOC格式数据集
  • ④创建训练、验证集

本文所用代码见文末Github链接。

关于PASCAL VOC数据集

pascal voc数据集是关于计算机视觉,业内广泛使用的一套具有标准格式的数据集。包括了图像分类、目标检测、语义分割等任务。
许多深度学习框架如Pytorch中写好的一些模型都是可以默认读取这种Pascal VOC格式的数据集的,这样就方便我们对数据集进行各种处理、实验。

Pascal VOC2012 train/val数据集官方下载地址:http://host.robots.ox.ac.uk/pascal/VOC/voc2012/VOCtrainval_11-May-2012.tar
更多信息见:官网。下载更多内容可参考:镜像站(可下载测试集)。

目录结构

它的格式信息(目录结构)如下

我们目标检测主要使用上面的Annotation、JPEGImages、ImageSets/Main文件夹。
ImageSets/Main文件夹下train.txt包含了被纳入训练集的图片,里面是JPEGImages文件夹下图片的文件名。
val.txt则是验证集的图片文件名集合。
trainval.txt是以上两者的合集。

展示:



图片


标注文件。
可以见到标注文件xml的格式和Lung-PET-CT-Dx数据集中的标注文件格式基本是一样的。

①创建VOC数据集的几个相关目录

与目标检测相关的只有:
VOCdevkit/VOC2012/Annotation (存放xml标注文件)
VOCdevkit/VOC2012/ImageSets/Main (存放train.txt、val.txt)
VOCdevkit/VOC2012/JPEGImages (存放图像文件)

在上一节我们已经进行了数据整理,并建立了简易的Dataset数据集对象。
我们已创建了 [dcm图片集] 和 [xml标注集] 的一个对应关系,我们试者重新创建一个Pascal VOC格式的数据集,顺便可以给数据集瘦瘦身。

我们先在项目目录下创建如下目录:

Windows资源管理器界面:


XML文件的形式

我们知道VOC数据集中,所有的图片文件存在了JPEGImages文件夹,且有自己的文件名。
在Annotation文件夹下,xml标注文件的文件名对应了图片的文件名,且xml文件中的 [filename] 项对应了图片的文件名+扩展名。
我们的目标是让Lung-PET-CT-Dx也改成这样的形式。

②读取dcm文件与xml文件的配对关系

在上一篇文章已经创建了这一配对表,直接读取csv文件。

import pydicom
import matplotlib.pyplot as plt
import os
from tqdm import tqdm
import pandas as pd
import numpy as np
import cv2 as cv
from PIL import Image
import xml.etree.ElementTree as ETxml_file_dataset = pd.read_csv('xml_file_dataset.csv', index_col=0)
xml_file_dataset


我们添加新的一列,赋予它们新的名字:编号从 000000~03883。

xml_file_dataset['filename'] = xml_file_dataset.index.values
xml_file_dataset['filename'] = xml_file_dataset['filename'].astype(str)
xml_file_dataset['filename'] = xml_file_dataset['filename'].str.zfill(6)
xml_file_dataset

这列filename就是新的文件名。


③创建VOC格式数据集

思路:

  1. 将xml列的xml文件中的 [filename] 标签写入“filename列对应名称.jpg”(如:000000.jpg),并命名为“ filename列对应名称.xml” (如:000000.xml)保存到 VOCdevkit/VOC2012/Annotations 文件夹下。
  2. 将dcm列的dcm文件另存为 “filename列对应名称.jpg”(如:000000.jpg),存到 VOCdevkit/VOC2012/JPEGImages文件夹下。
xml_list = xml_file_dataset['xml'].values
dcm_list = xml_file_dataset['dcm'].values
filename_list = xml_file_dataset['filename'].values# 将xml文件中的[filename]标签写入“filename列对应名称.jpg”(如:000000.jpg),并命名为“ filename列对应名称.xml” (如:000000.xml)保存到 VOCdevkit/VOC2012/Annotations 文件夹下。
def to_switch_xml(xml, filename):tree = ET.parse(xml)root = tree.getroot()sub1 = root.find('filename')sub1.text = filename + '.jpg'tree.write('./VOCdevkit/VOC2012/Annotations/{}.xml'.format(filename))# 将dcm文件另存为 “filename列对应名称.jpg”(如:000000.jpg),存到 VOCdevkit/VOC2012/JPEGImages文件夹下。
def to_switch_dcm(dcm, filename):img_open=pydicom.read_file(dcm)img_array=img_open.pixel_array# 将PETCT的三通道格式转成单通道格式if len(img_array.shape) == 3:img_array = cv.cvtColor(img_array, cv.COLOR_BGR2GRAY)img_array = np.array(img_array, dtype=np.float32)img = Image.fromarray(img_array)img = img.convert('L')# quality参数: 保存图像的质量,值的范围从1(最差)到95(最佳)。 默认值为75,使用中应尽量避免高于95的值; 100会禁用部分JPEG压缩算法,并导致大文件图像质量几乎没有任何增益。img.save('./VOCdevkit/VOC2012/JPEGImages/{}.jpg'.format(filename), quality=95)img.close()
# 在SSD上预计需要跑2分钟
for xml, filename in tqdm(zip(xml_list, filename_list), total=len(xml_list)):to_switch_xml(xml, filename)# 在SSD上预计需要跑10分钟
for dcm, filename in tqdm(zip(dcm_list, filename_list), total=len(dcm_list)):to_switch_dcm(dcm, filename)

xml文件创建成功:

图像文件创建成功:


测试一下。
(测试的详细代码见文末的Github地址)


④创建训练、验证集

ImageSets/Main文件夹下创建 train.txt、val.txt

import os
import randomrandom.seed(0)  # 设置随机种子,保证随机结果可复现files_path = "./VOCdevkit/VOC2012/Annotations"
assert os.path.exists(files_path), "path: '{}' does not exist.".format(files_path)val_rate = 0.3  # 设置多少归为验证集files_name = sorted([file.split(".")[0] for file in os.listdir(files_path)])
files_num = len(files_name)
val_index = random.sample(range(0, files_num), k=int(files_num*val_rate))
train_files = []
val_files = []
for index, file_name in enumerate(files_name):if index in val_index:val_files.append(file_name)else:train_files.append(file_name)try:train_f = open("./VOCdevkit/VOC2012/ImageSets/Main/train.txt", "x")eval_f = open("./VOCdevkit/VOC2012/ImageSets/Main/val.txt", "x")train_f.write("\n".join(train_files))eval_f.write("\n".join(val_files))
except FileExistsError as e:print(e)exit(1)

创建成功!


本文所用代码: 我的Github

玩转肺癌目标检测数据集Lung-PET-CT-Dx ——④转换成PASCAL VOC格式数据集相关推荐

  1. 玩转肺癌目标检测数据集Lung-PET-CT-Dx ——①从TCIA获取影像数据集

    文章目录 数据集介绍 如何从TCIA下载数据集 下载数据集的一部分 数据集介绍 Lung-PET-CT-Dx是一个公开肺癌目标检测数据集,该公共数据集源自 The Cancer Imaging Arc ...

  2. 利用COCO API测试自己数据集训练的YOLOv3模型的mAP(VOC格式数据集)

    目录 工具 前言 生成标注集的json文件 数据集准备 将voc注解格式数据集的注解转换成txt注解格式 自定义数据集的注解转换成coco的注解格式 生成结果集的json文件 安装darknet 获取 ...

  3. 玩转肺癌目标检测数据集Lung-PET-CT-Dx ——③整理、验证数据,建立Dataset对象

    文章目录 数据整理 整理出所有的dcm文件 整理出所有的xml标注文件 整理数据①--舍弃错误的标注文件 整理数据②--两个标注文件指向同一个目标图片的情况 封装函数,传入xml文件,显示标注效果 整 ...

  4. 玩转肺癌目标检测数据集Lung-PET-CT-Dx ——②预览数据集,绘制锚框

    文章目录 数据集预览 CT图片和xml文件的对应关系 查看dcm文件信息 将dcm图像与xml标注文件配对 本文接着预览数据集的概况,看看图像文件和标注文件该如何处理. 本文所用代码: 我的Githu ...

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

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

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

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

  7. 【机器学习】 - 目标检测 - VOC格式数据集介绍与自己制作

    一.VOC数据集 PASCAL VOC 挑战赛主要有 Object Classification .Object Detection.Object Segmentation.Human Layout. ...

  8. 【目标检测实验系列】使用yolov3 spp训练西工大遥感数据集NWPU VHR-10(包括如何将NWPU VHR-10转为VOC格式和yolov3 spp实验调试的详细步骤,且附上训练完的权重文件)

    目录 1. 文章主要内容 2. 西工大数据集转换为VOC格式数据集 2.1 VOC数据集结构 2.2 西工大数据集 2.3 转换格式 2.3.1 构建与VOC类似的数据集文件结构(文件夹名可以自定义) ...

  9. 目标检测任务的标注标准(以火焰和烟雾的数据集标注为例)

    目标检测任务的标注标准(以火焰和烟雾的数据集标注为例) 对火焰和烟雾的数据集的标注工作 1.容易标注的图片 注意 标注的边框在目标外,不要压线. 2.小于10X10或者20X20像素的目标不方便标记可 ...

最新文章

  1. java string.indexof(string)_Java StringBuffer indexOf()方法
  2. 独家 | 6大角度击破数据科学面试套路!助你找到理想工作
  3. chrome谷歌浏览器用这种方式清除缓存比较方便了,必须是调试模式才行
  4. CString GetBuffer() GetString()
  5. cmd10与16进制的相互转换
  6. 诗歌rails之头像上传和调整
  7. “天才少年”刚毕业就拿到华为200万年薪:确认过眼神,是我羡慕不来的人
  8. Tomcat的bin文档下startup.bat启动后中文出现乱码
  9. 自动化SQL Server Analysis Server表格模型的文档
  10. 浅谈SQL Server中的事物日志(一)
  11. SSH Secure Shell Client安装和使用
  12. Java中获取request对象的几种方法
  13. [安全防护]诺顿产品之Symantec Endpoint Protection
  14. exchange2010安装
  15. Abobe Flash cs6 和 Abobe Flash Builder4.6 破解和许可证过期
  16. win10家庭版设置本地策略组
  17. 2、PM模块中的主数据
  18. Java高级编程9-姜国海 网络应用编程
  19. 条件格式实现ABC分析
  20. TensorFlow Serving

热门文章

  1. html5 canvas 椭圆,html5中怎么利用Canvas绘制椭圆
  2. 生命,感情,谁之脆弱
  3. android中按两次返回键返回桌面或退出程序
  4. 桥梁工程智慧工地管理系统,实现工程项目的精细化管理
  5. Ozone数据探查服务Recon的启用
  6. 【华人学者风采】俞汝勤 湖南大学
  7. 几年前的项目用了YYYY-MM-dd,跨年夜老板喊我回去改Bug
  8. kali linux窗口变大,kali怎么把屏幕放大
  9. 部分库函数的自我实现
  10. 电子招投标技术的五大好处