以voc2007数据为例,下载后的数据格式如下:
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,这两个任务也有各自需要用到的图像,就分别存于 Layout
和 Segmentation
两个文件夹中,如下图所示,分别有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)
Original: https://blog.csdn.net/hesongzefairy/article/details/124520573
Author: Forizon
Title: VOC数据集解析–python实现分离图片训练分类网络
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/667267/
转载文章受原作者版权保护。转载请注明原作者出处!