怎么将标注好的图片和对应的 XML 文件组织成 Pascal VOC 数据集格式
需要按照特定的目录结构进行整理,并创建相应的索引文件。以下是详细的步骤:
1. 目录结构
Pascal VOC 数据集的目录结构通常如下:
/VOCdevkit
/VOC2007
/Annotations
000001.xml
000002.xml
...
/JPEGImages
000001.jpg
000002.jpg
...
/ImageSets
/Main
train.txt
val.txt
trainval.txt
test.txt
2. 整理文件
假设你已经使用 LabelImg 标注好了图片,并生成了对应的 XML 文件。接下来,按照上述目录结构进行整理:
2.1 创建目录
在你的工作目录下创建以下文件夹结构:
/VOCdevkit
/VOC2007
/Annotations
/JPEGImages
/ImageSets
/Main
2.2 移动图片和标注文件
将标注好的图片和对应的 XML 文件分别移动到
JPEGImages 和 Annotations 文件夹中。确保图片文件名和 XML 文件名一致,只是扩展名不同。例如:-
图片文件:
000001.jpg放在JPEGImages文件夹中。 -
对应的标注文件:
000001.xml放在Annotations文件夹中。
3. 创建索引文件
索引文件用于指定哪些图片用于训练、验证和测试。这些文件通常放在
ImageSets/Main 文件夹中。3.1 创建 train.txt、val.txt 和 trainval.txt
这些文件列出用于训练、验证和训练+验证的图片文件名(不带扩展名)。例如:
-
train.txt:包含用于训练的图片文件名。 -
val.txt:包含用于验证的图片文件名。 -
trainval.txt:包含用于训练和验证的图片文件名。 -
test.txt:包含用于测试的图片文件名(可选)。
假设你有以下图片文件:
000001.jpg
000002.jpg
000003.jpg
你可以将它们分配如下:
-
train.txt:000001 000002 -
val.txt:000003 -
trainval.txt:000001 000002 000003
3.2 创建索引文件的脚本
以下是一个简单的 Python 脚本,用于自动生成这些索引文件:
Python
import os
import random
# 数据集路径
dataset_path = 'VOCdevkit/VOC2007'
jpeg_images_path = os.path.join(dataset_path, 'JPEGImages')
annotations_path = os.path.join(dataset_path, 'Annotations')
image_sets_path = os.path.join(dataset_path, 'ImageSets/Main')
# 获取所有图片文件名
image_files = [f.split('.')[0] for f in os.listdir(jpeg_images_path) if f.endswith('.jpg')]
# 随机分配训练集和验证集
random.shuffle(image_files)
split = int(0.8 * len(image_files)) # 80% 用于训练,20% 用于验证
train_files = image_files[:split]
val_files = image_files[split:]
# 创建索引文件
def write_to_file(file_list, file_name):
with open(file_name, 'w') as f:
for file in file_list:
f.write(file + '\n')
write_to_file(train_files, os.path.join(image_sets_path, 'train.txt'))
write_to_file(val_files, os.path.join(image_sets_path, 'val.txt'))
write_to_file(train_files + val_files, os.path.join(image_sets_path, 'trainval.txt'))
4. 验证数据集
确保所有文件和目录都正确无误。你可以检查以下几点:
-
JPEGImages文件夹中包含所有图片文件。 -
Annotations文件夹中包含所有对应的 XML 文件。 -
ImageSets/Main文件夹中包含train.txt、val.txt和trainval.txt文件。 -
XML 文件的格式正确,包含正确的标注信息。
示例
假设你有以下文件:
-
图片:
000001.jpg、000002.jpg、000003.jpg -
标注:
000001.xml、000002.xml、000003.xml
最终的目录结构如下:
/VOCdevkit
/VOC2007
/Annotations
000001.xml
000002.xml
000003.xml
/JPEGImages
000001.jpg
000002.jpg
000003.jpg
/ImageSets
/Main
train.txt
val.txt
trainval.txt
索引文件内容:
-
train.txt:000001 000002 -
val.txt:000003 -
trainval.txt:000001 000002 000003
通过以上步骤,你可以将标注好的图片和对应的 XML 文件组织成 Pascal VOC 数据集格式,用于训练目标检测模型(如 Faster R-CNN)。
浙公网安备 33010602011771号