Use Custom Dataloaders

github链接

现有的数据读取器是怎么工作的呢?

Detectron2包含一个建好的数据读取管道,很容易明白其工作原理,也方便自己重写一个数据读取器。

Detectron2提供两个函数,build_detection_{train,test}_loader从给定的config文件中创建数据读取器,下面是它的原理:

  • 输入数据集名称,如"coco_2017_train",以一个轻量级的,标准的统一接口将数据读取为list[dict]。此时数据实际上还没有开始被模型使用,图片还没有读到内存中,随机的数据增强也没做。可以从之前的dataset教程中查看数据集的相关使用。

  • list中的每个字典对象都是mapper函数映射而来。

    • 用户可以通过指定build_detection_{train,test}_loader中的mapper参数来标准化mapping函数,,默认的mapper是DatasetMapper。
    • 输出格式没有限制,只要能被数据消费者使用,这里的消费者一般指模型。
    • mapper的作用是将每一个轻量、标准的数据表示方式转化成模型可以识别的格式,比如,读取图像,随机做增强。默认mapper的输出解释如下:
  • mapper的输出是batch形式,通常是一个list。

  • 一个batch的数据是数据读取器的输出,典型的,是model.forward()的输入。

写数据读取器

在现有数据读取器上实现一个新的mapper通常是我们需要的。

如果你想做些不一样的,比如用自己的数据或者不同的batch逻辑,可以自己写数据读取器。数据读取器是一个简单的迭代器,只要组织成模型需要的输入形式,可以使用任何你喜欢的工具。

使用一般的数据读取器

如果用的是DefaultTrainer,可以重写build_{train,test}__loader方法来使用自己的数据读取器。参见densepose的例子。

如果自己写训练逻辑,可以简单的使用自己的数据读取器。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章