快速入门
本教程将使用 PASCAL VOC 2007
检测数据集为例,演示数据处理及模型训练全流程。
1. 数据集下载
出现如下日志,说明数据集已经下载完成。
saving to {your home path}/datasets/VOC07-det
preparing...
start download...
Download |██████████████████████████████████████████████████| 100.0%, Eta 0 seconds
Download Complete
register local dataset...
下载完成后需要进行解压(解压步骤可以参考教程数据集准备),解压完成后,原始数据集目录结构如下:
voc数据集原始目录结构
original/ # 原始数据集文件夹
├── Annotations/ # 里面存放的是每张图片打完标签所对应的XML文件
│ ├── 000001.xml # 某张图片的标注信息
│ └── ...
├── ImageSets/ # 图片划分的txt存放位置
│ ├── Layout # 包含Layout标注信息的图像文件名列表
│ │ ├── test.txt
│ │ ├── train.txt
│ │ ├── trainval.txt
│ │ └── val.txt
│ ├── Main # 包含所有文件的列表和划分
│ │ ├── aeroplane_test.txt # 按每个类别的训练集、测试集等划分
│ │ ├── aeroplane_train.txt
│ │ ├── ...
│ │ ├── test.txt # 全数据集的test划分
│ │ ├── train.txt # 全数据集的train划分
│ │ ├── trainval.txt
│ │ └── val.txt
│ ├── Segmentation # 包含语义分割信息图像文件的列表和划分
│ │ ├── test.txt
│ │ ├── train.txt
│ │ ├── trainval.txt
│ │ └── val.txt
├── JPEGImages/ # 存放的是训练与测试的所有图片
│ ├── 000001.jpg # 图片(序号作为图片名)
│ └── ...
├── SegmentationClass/ # 语义分割标注
│ ├── 000032.png # 某张图片的媒体文件
│ └── ...
└── SegmentationObject/ # 实例分割标注
├── 000032.png # 某张图片的媒体文件
└── ...
对应的DSDL标准化文件的目录结构如下:
dsdl-voc目录结构
dsdl/
├── defs/
│ ├── object-detection-def.yaml # 任务类型的定义
│ └── class-dom.yaml # 数据集的类别域
├── set-train/ # 训练集
│ ├── train.yaml # 训练的yaml文件
│ └── train_samples.json # 训练集sample的json文件
├── set-val/ # 验证集
│ ├── val.yaml
│ └── val_samples.json
├── set-test/ # 测试集
│ ├── test.yaml
│ └── test_samples.json
├── config.py # 数据集读取路径等config文件
└── README.md # 数据集简介
注: DSDL文件目录下各个文件的具体内容和解释可参考高阶教程。
2. 数据集配置
dsdl采用了【媒体数据】和【标注文件】分离这一设计理念,若用户之前已经下载过相关数据集媒体文件,只需下载dsdl标注文件即可使用该数据集。为了使用下载好的数据集,我们需要修改配置文件config.py
(位于VOC07-det/dsdl/config.py
)来进行对媒体数据的定位。举例来说,假如下载的VOC07-det
数据集位于~/datasets
路径下,则只需要将~/datasets/VOC07-det/dsdl/config.py
中的配置按照如下内容进行修改即可:
实际上,dsdl也支持从阿里云读取媒体数据,同样也只需要修改config.py
文件即可,详细内容可以参考数据集配置教程
3. 数据集简单使用
3.1. 数据集初始化
dsdl将dsdl数据集的使用接口封装进DSDLDataset类,初始化一个DSDLDataset类需要yaml文件和location config,这里仍然假设上面VOC数据集的存放路径为~/datasets/VOC07-det,则初始化代码如下:
from dsdl.dataset import DSDLDataset
# 1. 指定要加载数据的dsdl文件
train_yaml = "~/datasets/VOC07-det/dsdl/set-train/train.yaml"
val_yaml = "~/datasets/VOC07-det/dsdl/set-val/val.yaml"
# 2. 配置数据集路径(支持本地、阿里云oss等主流存储)
loc_config = dict(
type="LocalFileReader",
working_dir="~/datasets/VOC07-det/original"
)
ds_train = DSDLDataset(dsdl_yaml=train_yaml, location_config=loc_config)
ds_val = DSDLDataset(dsdl_yaml=val_yaml, location_config=loc_config)
3.2. 获取类别名称
获取数据集的类别名称列表,代码如下(这里只展示了VOC数据集的前10个标签):
输出如下所示:3.3. 获取样本信息
DSDLDataset使用索引的方式获取样本,如下展示了VOC数据集索引为0的样本的信息:
输出的内容如下所示:{'Image': [path:JPEGImages/000005.jpg],
'Label': [chair, chair, chair, chair, chair],
'Bbox': [[263.0, 211.0, 324.0, 339.0],
[165.0, 264.0, 253.0, 372.0],
[5.0, 244.0, 67.0, 374.0],
[241.0, 194.0, 295.0, 299.0],
[277.0, 186.0, 312.0, 220.0]]}
在此基础上,也可以获取样本的不同字段,比如要获取图片字段,可以采用如下命令:
得到输出如下:类似的,要获取所有标注框的类别属性和第一个标注框位置属性,则可以采用下面的语句:
得到输出分别如下: