PaddleDetection进阶教程1#数据处理模块

本文深入解析PaddleDetection的数据处理模块,涵盖数据解析、预处理及Reader迭代器的构建,提供训练、评估与推理的配置指导。

注: 本博客参考https://github.com/PaddlePaddle,仅为学习交流使用,如有侵权,请联系删除!

目录

1. 简介

PaddleDetection的数据处理模块是一个Python模块,所有代码逻辑在ppdet/data/中,数据处理模块用于加载数据并将其转换成适用于物体检测模型的训练、评估、推理所需要的格式。
数据处理模块的主要构成如下架构所示:

  ppdet/data/
  ├── reader.py     # 数据处理模块的总接口
  ├── shared_queue  # 共享内存管理模块
  │   ├── queue.py        # 定义共享内存队列
  │   ├── sharedmemory.py # 负责分配内存
  ├── source  # 数据源管理模块
  │   ├── dataset.py      # 定义数据源基类,各类数据集继承于此
  │   ├── coco.py         # COCO数据集解析与格式化数据
  │   ├── voc.py          # Pascal VOC数据集解析与格式化数据
  │   ├── widerface.py    # WIDER-FACE数据集解析与格式化数据
  ├── tests  # 单元测试模块
  │   ├── test_dataset.py # 对数据集解析、加载等进行单元测试
  │   │   ...
  ├── tools  # 一些有用的工具
  │   ├── x2coco.py       # 将其他数据集转换为COCO数据集格式
  ├── transform  # 数据预处理模块
  │   ├── batch_operators.py  # 定义各类基于批量数据的预处理算子
  │   ├── op_helper.py    # 预处理算子的辅助函数
  │   ├── operators.py    # 定义各类基于单张图片的预处理算子
  ├── parallel_map.py     # 在多进程/多线程模式中对数据预处理操作进行加速

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hjdTtDqD-1594623286674)(C:/Users/Administrator/Desktop/PaddleDetection-release-0.3/PaddleDetection-release-0.3/docs/images/reader_figure.png)]

2. 数据准备

PaddleDetection目前支持COCOPascal VOC
WIDER-FACE数据源,默认数据集可自动下载,请参考默认数据集安装方法
同时我们还支持自定义数据源,包括(1)自定义数据源转换成COCO数据集;(2)定义新的数据源。

数据准备分为三步:

下面为您分别介绍下这三步的具体内容:

2.1 数据解析

数据解析逻辑在source目录中,其中,dataset.py是数据源定义的基类,所有数据集继承于此,DataSet基类里定义了如下等方法:

方法 输入 输出 备注
load_roidb_and_cname2cid() 加载DataSet中Roidb数据源list, 类别名到id的映射dict
get_roidb() list[dict], Roidb数据源 获取数据源
get_cname2cid() dict,类别名到id的映射 获取标签ID
get_anno() str, 标注文件路径 获取标注文件路径
get_imid2path() dict, 图片路径 获取图片路径

几点解释:

  • load_roidb_and_cname2cid()在Dataset基类中并没有做实际的操作,需要在子类中重写实际操作。
  • roidbs:
    代表数据源列表。load_roidb_and_cname2cid方法中根据数据集标注文件(anno_path),将每张标注好的图片解析为字典coco_recvoc_rec等:
xxx_rec = {
   
   
    'im_file': im_fname,         # 一张图像的完整路径
    'im_id': np.array([img_id]), # 一张图像的ID序号
    'h': im_h,                   # 图像高度
    'w': im_w,                   # 图像宽度
    'is_crowd': is_crowd,        # 是否是群落对象, 默认为0 (VOC中无此字段,为了使个别模型同时适配于COCO与VOC)
    'gt_class': gt_class,        # 标注框标签名称的ID序号
    'gt_bbox': gt_bbox,          # 标注框坐标(xmin, ymin, xmax, ymax)
    'gt_score': gt_score,        # 标注框置信度得分 (此字段为了适配Mixup操作)
    'gt_poly': gt_poly,          # 分割掩码,此字段只在coco_rec中出现,默认为None
    'difficult': difficult       # 是否是困难样本,此字段只在voc_rec中出现,默认为0
}

然后将所有xxx_rec字典封装到records列表中,最后传入self.roidbs中方便后续调用。

  • cname2cid:
    保存了类别名到id的映射的一个dict。
    • COCO数据集中:会根据COCO API自动加载cname2cid。
    • VOC数据集中:如果在yaml配置文件中设置use_default_label=False,将从label_list.txt中读取类别列表,
      反之则可以没有label_list.txt文件,PaddleDetection会使用source/voc.py里的默认类别字典。
      label_list.txt的格式如下所示,每一行文本表示一个类别:
aeroplane
bicycle
bird
...
2.1.1 CO
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我是天才很好

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值