在PaddleX中,目标检测支持PascalVOC数据集格式。
数据集按照如下方式进行组织,原图均放在同一目录,如JPEGImages
,标注的同名xml文件均放在同一目录,如Annotations
,示例如下:
MyDataset/ # 目标检测数据集根目录
|--JPEGImages/ # 原图文件所在目录
| |--1.jpg
| |--2.jpg
| |--...
| |--...
|
|--Annotations/ # 标注文件所在目录
| |--1.xml
| |--2.xml
| |--...
| |--...
为了用于训练,我们需要在MyDataset
目录下准备train_list.txt
, val_list.txt
和labels.txt
三个文件,分别用于表示训练集列表,验证集列表和类别标签列表。点击下载目标检测示例数据集查看具体的数据格式。
- labels.txt
labels.txt用于列出所有类别,类别对应行号表示模型训练过程中类别的id(行号从0开始计数),例如labels.txt为以下内容
dog
cat
snake
表示该检测数据集中共有3个目标类别,分别为dog
,cat
和snake
,在模型训练中dog
对应的类别id为0, cat
对应1,以此类推
- train_list.txt
train_list.txt列出用于训练时的图片集合,与其对应的标注文件,示例如下
JPEGImages/1.jpg Annotations/1.xml
JPEGImages/2.jpg Annotations/2.xml
... ...
其中第一列为原图相对MyDataset
的相对路径,第二列为标注文件相对MyDataset
的相对路径
- val_list.txt
val_list列出用于验证时的图片集成,与其对应的标注文件,格式与val_list.txt一致
训练过程中,PaddleX加载数据集的示例代码如下:
import paddlex as pdx
from paddlex import transforms as T
train_transforms = T.Compose([
T.RandomResizeByShort(
short_sizes=[640, 672, 704, 736, 768, 800],
max_size=1333,
interp='CUBIC'),
T.RandomHorizontalFlip(),
T.Normalize(
mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])
])
eval_transforms = T.Compose([
T.ResizeByShort(
short_size=800, max_size=1333, interp='CUBIC'),
T.Normalize(
mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])
])
train_dataset = pdx.datasets.VOCDetection(
data_dir='./MyDataset',
file_list='./MyDataset/train_list.txt',
label_list='./MyDataset/labels.txt',
transforms=train_transforms)
eval_dataset = pdx.datasets.VOCDetection(
data_dir='./MyDataset',
file_list='./MyDataset/val_list.txt',
label_list='MyDataset/labels.txt',
transforms=eval_transforms)