将INRIA数据集改为PascalVOC格式

INRIA数据集链接:https://pan.baidu.com/s/1Z2TVvGuuvor7juqj3uPG-g
提取码:07ed

我制作的PascalVOC格式的INRIA数据集链接:https://pan.baidu.com/s/1licLJkXICcwSdAwMb8B0OA
提取码:3rh2

目录

  • 将INRIA数据集改为PascalVOC格式
    • PascalVOC格式介绍
    • INRIA数据集介绍
    • 分别创建对应文件夹
    • JPEGImages
      • 将原图像处理为jpg格式保存在JPEGImages文件夹中
    • Annotations
      • 将图片信息提取并保存到txt文件中
      • 将txt文本中的信息保存为xml文件
    • ImageSets
      • trainval.txt
      • train.txt
      • val.txt

PascalVOC格式介绍

PascalVOC格式数据集由三个部分构成,JPEGImages,Annotations,ImageSets。
JPEGImages:存放的是训练与测试的所有图片。
Annotations:里面存放的是每张图片打完标签所对应的XML文件
ImageSets:里面有个Main文件夹,其中包含存储着图片名称的txt文件,分为训练与测试。

INRIA数据集介绍

此处参考行人检测数据集汇总

该数据库是目前使用最多的静态行人检测数据库,提供原始图片及相应的标注文件。训练集有正样本614张(包含2416个行人),负样本1218张;测试集有正样本288张(包含1126个行人),负样本453张。图片中人体大部分为站立姿势且高度大于100个象素,部分标注可能不正确。图片主要来源于GRAZ-01、个人照片及google,因此图片的清晰度较高。在XP操作系统下部分训练或者测试图片无法看清楚,但可用OpenCV正常读取和显示。

分别创建对应文件夹

JPEGImages

将原图像处理为jpg格式保存在JPEGImages文件夹中

(因为第一次制作数据集,为了省事,我直接把INRIA数据集中的70X134H96和96X160H96中的图片全部放到JPEGImages文件夹中了)

import os
from PIL import Imageimage_path = "JPEGImages/"   # 修改为图片保存路径
image_list = os.listdir(image_path)   # 以列表保存图片名for img in image_list:img = image_path + img   # 图片路径new_img = img[:-3] + "jpg"   # 新图片名im = Image.open(img)   # 打开图片im = im.convert("RGB")   # png为四通道RGBA,jpg为三通道RGBim.save(new_img)   # 保存if img[-3:] == "png":os.remove(img)   # 删除png图片

Annotations

这个地方有点问题,我直接对所有图片进行了批量处理,导致没有提取图片的特征,如果要进行特征提取,就需要一张张处理图片

(此处参考博客:Python 提取图像信息保存为TXT、xml格式)

将图片信息提取并保存到txt文件中

import os
import cv2# 图像处理类  内置各种函数
class image_processing():def __init__(self):self.img_path = "./JPEGImages/"   # 修改为jpg图片保存的路径self.annotations_txt_path = "./"   # 修改为txt文件保存的路径self.annotations_xml_path = "./Annotations/"   # 修改为xml文件保存的路径if not os.path.exists(self.annotations_xml_path):os.makedirs(self.annotations_xml_path)# 图像批量重命名def rename(self):imagelist = os.listdir(self.img_path)total_num = len(imagelist)  # 得到图像数量大小i = 4500for item in imagelist:# print itemif item.endswith('.jpg'):src = os.path.join(os.path.abspath(self.img_path), item)dst = os.path.join(os.path.abspath(self.img_path), '00' + format(str(i), '0>4s') + '.jpg')os.rename(src, dst)print('converting %s to %s ...' % (src, dst))i = i + 1print('total %d to rename & converted %d jpgs' % (total_num, i))# 提取图像的shape到txt文件里def get_image_information(self):image_list = os.listdir(self.img_path)print(len(image_list))file_txt = open('./sex_image_txt.txt', "w")for i in range(len(image_list)):img = cv2.imread(os.path.join(self.img_path + image_list[i]))image_shape = img.shapeprint(image_shape)file_txt.write(image_list[i] + ' ' + '3 ' + '5 ' + '5 ' + str(image_shape[0] - 5) + str(image_shape[1] - 5) + '\n')file_txt.close()if __name__ == '__main__':newname = image_processing()# newname.rename()newname.get_image_information()

将txt文本中的信息保存为xml文件

from xml.dom.minidom import Document
import os
from PIL import Imageann_path = "./sex_image_txt.txt"   # 修改为txt文件路径
img_path = "./JPEGImages/"   # 修改为jpg图片路径
xml_path = "./Annotations/"   # 修改为xml文件路径
database_name = "INRIAPerson Database"# 标签的类别
label_list = ["person"]if not os.path.exists(xml_path):os.mkdir(xml_path)def writeXml(imgname, imgpath, w, h, label_list, wxml, database_name):doc = Document()# ownerannotation = doc.createElement('annotation')doc.appendChild(annotation)# ownerfolder = doc.createElement('folder')annotation.appendChild(folder)folder_txt = doc.createTextNode(database_name)folder.appendChild(folder_txt)filename = doc.createElement('filename')annotation.appendChild(filename)filename_txt = doc.createTextNode(imgname)filename.appendChild(filename_txt)path = doc.createElement('path')annotation.appendChild(path)path_txt = doc.createTextNode(imgpath)path.appendChild(path_txt)# ones#source = doc.createElement('source')annotation.appendChild(source)database = doc.createElement('database')source.appendChild(database)database_txt = doc.createTextNode(database_name)database.appendChild(database_txt)# onee## twos#size = doc.createElement('size')annotation.appendChild(size)width = doc.createElement('width')size.appendChild(width)width_txt = doc.createTextNode(str(w))width.appendChild(width_txt)height = doc.createElement('height')size.appendChild(height)height_txt = doc.createTextNode(str(h))height.appendChild(height_txt)depth = doc.createElement('depth')size.appendChild(depth)depth_txt = doc.createTextNode("3")depth.appendChild(depth_txt)# twoe#segmented = doc.createElement('segmented')annotation.appendChild(segmented)segmented_txt = doc.createTextNode("0")segmented.appendChild(segmented_txt)# objectobject = doc.createElement('object')annotation.appendChild(object)name = doc.createElement('name')object.appendChild(name)name_content = doc.createTextNode(label_list[0])name.appendChild(name_content)pose = doc.createElement('pose')object.appendChild(pose)pose_content = doc.createTextNode("0")pose.appendChild(pose_content)truncated = doc.createElement('truncated')object.appendChild(truncated)truncated_content = doc.createTextNode("0")truncated.appendChild(truncated_content)difficult = doc.createElement('difficult')object.appendChild(difficult)difficult_content = doc.createTextNode("0")difficult.appendChild(difficult_content)bndbox = doc.createElement('bndbox')object.appendChild(bndbox)xmin = doc.createElement('xmin')bndbox.appendChild(xmin)xmin_content = doc.createTextNode(str(5))xmin.appendChild(xmin_content)ymin = doc.createElement('ymin')bndbox.appendChild(ymin)ymin_content = doc.createTextNode(str(5))ymin.appendChild(ymin_content)xmax = doc.createElement('xmax')bndbox.appendChild(xmax)xmax_content = doc.createTextNode(str(w - 5))xmax.appendChild(xmax_content)ymax = doc.createElement('ymax')bndbox.appendChild(ymax)ymax_content = doc.createTextNode(str(h - 5))ymax.appendChild(ymax_content)# threee#with open(wxml, "wb") as f:f.write(doc.toprettyxml(indent='\t', encoding='utf-8'))# f.write(doc.toprettyxml())f.close()returnf = open(ann_path, 'r')
txt_list = f.readlines()
f.close()
im_name_list = []for line in txt_list:line = line.strip()line_split = line.split(' ')# print  lineimg_name = line_split[0]im_name_list.append(img_name)fileimgpath = os.path.join(img_path, img_name)im = Image.open(fileimgpath)width = int(im.size[0])height = int(im.size[1])# print width,height# print label_listsavename = os.path.join(xml_path, img_name.split('.')[0] + '.xml')writeXml(img_name, fileimgpath, width, height, label_list, savename, database_name)

ImageSets

这个文件夹里可以添加其他文件,但只用Main文件就足够运行
Main文件夹下要有三个txt文件,分别是train.txt,val.txt,trainval.txt
train.txt - 训练集图片文件名
val.txt - 测试集图片文件名
trainval.txt - 完整数据集图片文件名

此处我把数据集划分的比例为训练集:测试集=2:1

trainval.txt

import osimage_path = "JPEGImages/"   # 图片路径
filename = "trainval.txt"image_list = os.listdir(image_path)
with open(filename, "w") as f:for im in image_list:s = im[:-4] + " " + "\n"f.write(s)

train.txt

import osimage_path = "JPEGImages/"   # 图片路径
filename = "train.txt"image_list = os.listdir(image_path)i = 0
with open(filename, "w") as f:for im in image_list:if i == 2:i = 0continuei += 1s = im[:-4] + " " + "\n"f.write(s)

val.txt

import osimage_path = "JPEGImages/"   # 图片路径
filename = "val.txt"image_list = os.listdir(image_path)i = 0
with open(filename, "w") as f:for im in image_list:i += 1if i != 3:continueif i == 3:s = im[:-4] + " " + "\n"f.write(s)i = 0

将INRIA数据集改为PascalVOC格式相关推荐

  1. INRIA数据集转换成VOC格式

    背景 下面的代码是将INRIA数据集转换成VOC格式.图片是614张. 其中,使用OinginImage文件夹里的Train中Pos和Annotations作为训练,利用Test里的Pos作为测试. ...

  2. 提取INRIA数据集的box

    前面讲到了INRIA数据集转换为VOC2007数据集格式:点击打开链接,本文和前面有点类似,只是做了进一步的精简,有点画蛇添足的感觉.不过还是希望能够帮到大家!因为比较简单,下面直接上代码. # -* ...

  3. 用DPM(Deformable Part Model,voc-release3.1)算法在INRIA数据集上训练自己的人体检测模型

    我的环境 DPM源码版本:voc-release3.1 VOC开发包版本:VOC2007_devkit_08-Jun Matlab版本:MatlabR2012b c++编译器:VS2010 系统:Wi ...

  4. 数据集转换成LMDB格式

    文章来源https://www.cnblogs.com/dengshunge/p/10841108.html略加修改和补充. 介绍两种LMDB格式数据集的生成,一种是自己的数据集,一种是下载wider ...

  5. Python实现Excel改为txt格式

    将excel存储的数据改为txt格式的数据集 import xlrdfileName = "9类情感-筛选语料2.28.xlsx" fileHandler = xlrd.open_ ...

  6. python将scikit-learn自带数据集转换为pandas dataframe格式

    python将scikit-learn自带数据集转换为pandas dataframe格式 目录 python将scikit-learn自带数据集转换为pandas dataframe格式 #仿真数据

  7. jfif怎么改成jpg格式

    jfif怎么改成jpg格式?有很多小伙伴常常抱怨说自己用浏览器浏览网页保存的图片是jfif格式的,jfif比起jpg格式的图片,在使用时往往会受到限制,使得很多小伙伴不得不放弃使用jfif格式的图片, ...

  8. isf文件格式改为csv格式

    isf文件格式改为csv格式 泰克示波器波形数据导出至U盘.可将数据保存方式从isf格式改为csv格式 在menu-存储波形---文件细节里面修改存储格式

  9. 利用Python将图片批量改成任意格式

    将图片格式改成任意格式,如将bmp改成jpg格式 代码如下: import glob import os import threading from PIL import Imagedef creat ...

最新文章

  1. Python趣味编程小技巧,图片转炫酷字符画,一看就是高手
  2. JavaScript数据运算
  3. C++ Primer 5th笔记(chap 19 特殊工具与技术)链接指示: extern “C“
  4. MySQL in语句内参数个数限制
  5. 记录今天学习SQL遇到的一个小问题
  6. linux 如何打包分区文件,Linux基础------文件打包解包---tar命令,文件压缩解压---命令gzip,vim编辑器创建和编辑正文件,磁盘分区/格式化,软/硬链接...
  7. eclipse maven项目 class类部署不到tomcat下_Servlet tomcat部署
  8. docker 部署_Nginx K8s + Docker 部署 ,虚拟机部署教程。
  9. java的uuid有什么用_java – 什么是有效的UUID?
  10. 数据结构与算法14-栈和队列练习题
  11. 在64位linux上编译曾经在32位linux编译过,含有32位目标文件的错误的解决办法
  12. AccuMark 7.6.2 格柏服装软件
  13. 快速入门Maxwell基本操作流程(2D部分)
  14. 基于链表结构实现二路归并排序详解(C++实现)
  15. 音频变压器阻抗匹配及案例
  16. 设计原则之合成复用原则
  17. APP测试点总结(全面)
  18. platform设备驱动简介
  19. Global Illumination_Voxel Global Illumintaion (VXGI)
  20. CREO3.0二次开发+VS2012环境配置

热门文章

  1. firebug兼容的firefox版本
  2. 路内停车物联网扫码支付平板车位锁(技术调研)
  3. QT基于QPolarChart封装一个极坐标系类(控件显示)
  4. 实验报告:RC电路的充放电过程仿真实验
  5. 金半接触-肖特基接触(Schottky contact)-欧姆接触(Ohmic contact)
  6. 【JPCS出版】2022年第三届控制理论与应用国际会议(ICoCTA 2022)
  7. SpringMVC对JSP的支持---Spring的JSP标签库---Spring通用标签库
  8. 腾讯AI Lab赠票 | 相约腾讯全球合作伙伴大会,南京见!
  9. 用php的定界符EOT需要留个心眼
  10. 广州市白云计算机职业学院,广州市白云区职业学校名单