Shortcuts

HFAI X MMCV

为了让用户能够方便的在 mmdetection, mmsegmentation 等框架上使用 FFRecord,我们提供了 FFRecordClient 接口, 用户能够在配置文件中选择使用 FFRecordClient 来替换默认的读取后端。

在使用 FFRecordClient 之前,建议先了解一下 mmcv FileClient 的原理

使用方法

  1. 使用 FFRecord 打包整个数据集文件夹:

    import ffrecord
    ffrecord.pack_folder("/path/to/dataset", "packed.ffr")
    
  2. 在训练中使用我们提供的 FFRecordClient 读取后端

    • 在训练代码中导入 FFRecordClient:

      import hfai.utils.mm
      
    • 修改配置文件,为所有的读取小文件的操作添加 file_client_args 参数,比如在 mmseg 中:

      file_client_args=dict(
          backend="ffrecord",
          fname="packed.ffr",
      )
      
      train_pipeline = [
          dict(type='LoadImageFromFile', file_client_args=file_client_args),
          dict(type='LoadAnnotations', reduce_zero_label=True, file_client_args=file_client_args),
          dict(type='Resize', img_scale=(2048, 512), ratio_range=(0.5, 2.0)),
          ...
      ]
      

使用示例

本示例使用以下版本的包:

mmcv==1.6.2
mmdet==2.25.2
mmseg==0.28.0

mmdetection

以 coco 数据集为例,假设我们已经有 coco 的原始数据集,目录结构如下:

coco/
├── annotations
├── train2017
└── val2017
  1. 我们先打包整个数据集到 data/coco/coco.ffr 中:

    import ffrecord
    ffrecord.pack_folder("coco/", "data/coco/coco.ffr")
    
  2. 然后把 annotations 文件夹单独拷贝出来放到 data/coco/annotations,现在目录结构如下:

    data
    └── coco
        ├── annotations
        └── coco.ffr
    
  3. 在训练代码中导入 FFRecordClient:

    import hfai.utils.mm
    
  4. 修改配置文件 configs/_base_/datasets/coco_detection.py 的内容为: coco_detection.py

mmsegmentation

以 ADE20k 数据集为例,假设我们已经有 ADE20k 的原始数据集,目录结构如下:

ADEChallengeData2016
├── annotations
├── images
├── objectInfo150.txt
└── sceneCategories.txt
  1. 我们先打包整个数据集到 data/ade20k.ffr 中:

    import ffrecord
    ffrecord.pack_folder("ADEChallengeData2016/", "data/ade20k.ffr")
    
  2. 在训练代码中导入 FFRecordClient:

    import hfai.utils.mm
    
  3. 修改配置文件 configs/_base_/datasets/ade20k.py 的内容为: ade20k.py