VOC数据集解析--python实现分离图片训练分类网络

以voc2007数据为例,下载后的数据格式如下:

VOC数据集解析--python实现分离图片训练分类网络_第1张图片

Annotations文件夹里保存的是目标检测用到的.xml文件,文件名是图像名称

ImageSets文件夹里面是图像划分的集合 ,打开之后有3个文件夹:Layout 、 Main、 Segmentation,这3个文件夹对应的是 VOC challenge 3类不同的任务。

VOC challenge的Main task,其实是classification和detection,所以在Main文件夹中,包含的就是这两个任务要用到的图像集合,如下图所示。共有84个.txt文件,其中4个文件为训练集train.txt、验证集val.txt、训练集和验证集汇总trainval.txt、测试集test.txt,这4个文件里面保存的是图像的ID号;还有20类目标,每个类别有该类的类别名_train.txt类别名_val.txt类别名_trainval.txt类别名_test.txt这4个文本,共80个文件。这80个文件中每一行的图像ID后面还跟了一个数字,要么是-1, 要么是1,有时候也可能会出现0,意义为:-1表示当前图像中,没有该类物体;1表示当前图像中有该类物体;0表示当前图像中,该类物体只露出了一部分。

此外还有两个taster tasks :Layout和Segmentation,这两个任务也有各自需要用到的图像,就分别存于LayoutSegmentation两个文件夹中,如下图所示,分别有4个文件:训练集train.txt、验证集val.txt、训练集和验证集汇总trainval.txt、测试集test.txt

通过Main中txt文件,根据类别名称从ImageSets中讲对应类别的图片提取存放,用于训练分类网络:

# 从VOC数据集中把分类用的图片提取出来
import os
import shutil
from tqdm import tqdm

classes = ['aeroplane', 'bicycle', 'bird', 'boat', 'bottle', 'bus',
           'car', 'cat', 'chair', 'cow', 'diningtable', 'dog', 'horse',
            'motorbike', 'person', 'pottedplant', 'sheep', 'sofa', 'train', 'tvmonitor']

img_path = 'D:\\Maserati_Projects\\Open_Dataset\\VOC数据\\VOCdevkit\\VOC2007\\JPEGImages\\'
class_path = 'D:\\Maserati_Projects\\Open_Dataset\\VOC数据\\VOCdevkit\\VOC2007\\ImageSets\\Main\\'
save_path = 'D:\\Maserati_Projects\\Open_Dataset\\VOC数据\\VOCdevkit\\VOC2007\\val\\'

for c in tqdm(classes):
    txt_path = os.path.join(class_path, c+'_val.txt')

    move_image = os.path.join(save_path, c)
    if not os.path.exists(move_image):
        os.makedirs(move_image)

    with open(txt_path, 'r') as f:
        img_files = f.readlines()

    for name in img_files:
        img_name = name.split(' ')[0]

        src_img = os.path.join(img_path, img_name+'.jpg')
        target_img = os.path.join(move_image, img_name+'.jpg')
        shutil.copy(src_img, target_img)

你可能感兴趣的:(编程学习,深度学习,人工智能,voc)