Skip to content

Latest commit

 

History

History
120 lines (99 loc) · 4.55 KB

5.1-dataset.md

File metadata and controls

120 lines (99 loc) · 4.55 KB

数据集管理

通用流程

  1. 将需要训练的数据上传到七牛 bucket, 并以相同的前缀开头, 比如上传到 mybucket 下面: mydataset1/xxx.jpg

  2. 利用数据集管理的新建数据集“样本数据”方式, 可以将 bucket 里的图片样本, 生成数据集索引文件 (jsonlist), 比如使用前缀: qiniu:///mybucket/mydataset1/

  1. 将生成数据集索引文件导入 LabelX 进行打标. 参考 82 - 03 LabelX 使用手册

  2. 利用数据集管理的新建数据集“源数据集列表”方式, 使用 LabelX 导出打标好的 jsonlist 新建训练用数据集.

新建数据集

可以有三种方式来新建一个数据集:

1. 源数据集列表

源数据集列表是一个文本索引文件, 文件中每行为一条 json 数据(结构展开如下), 代表一张样本图片(或视频), 其中包含图片的 url 和标签等信息. 这样的文本文件又称 jsonlist. 这是最常用的创建训练用数据集的方式.

{
  "url":  "qiniu:///bucketname/prefix/filename", //必填, 仅支持七牛云bucket的图片, 格式可以是图片的http链接和七牛协议.  私有bucket必须使用七牛协议, 格式为qiniu:///bucketname/prefix/filename, 例如qiniu:///newdata/0081.jpg_wh1200.jpg
  "type": "image",// 必填, 目前支持 "image"/"video"
  "source_url":"http://source_url", //图片的来源, augment等操作生成的图片, 来源为原图片url, 下载操作的图片, 来源为原url
  "ops":"augment(param1,param2...)", //图片上进行的操作, 下载为download()"
  "label": [
      {
         "name":"face"
         "type":"face"
         "version":"1",
         "data":[
              {
                  "bbox": [[10, 20], [21, 31], [81, 91]],
                  "bbox_score": 0.992,
                  "landmarks":[
                      {"index": 1, "pt": [1,2], "score": 0.91},
                      {"index": 2, "pt": [1,2], "score": 0.91},
                      {"index": 3, "pt": [1,2], "score": 0.91},
                      {"index": 4, "pt": [1,2], "score": 0.91},
                      ...
                  ],
                  "cluster": {"id": 1, "score": 0.3}
              }
          ]
       },
       {
          "name":"general_imagenet",
          "type":"detection",
           "version":"1",
          "data":
          [
              {
                  "bbox": [[10, 20], [21, 31], [81, 91]],
                  "class": "dog",
                  "score": 0.998
              }
          ]
        },
       {
           "name":"terror",
           "type":"classification",
           "version":"1",
           "data":[
              {
                  "class": "march",
                  "score": 0.998
              },
              ...
           ]
       },
       {
           "name":"pulp",
           "type":"classification",
           "version":"1",
           "data": [
              {
              "class": "sexy",
              "score": 0.998
              },
              ...]
       },
       {
           "name":"general",
           "type":"classification",
           "version":"1",
           "data":  [
         {
              "class": "dog",
              "score": 0.998
          },
          ...]
       },
  ]
}

2. 格式化数据集

格式化数据是指符合 Caffe 或 MXNet 训练框架所需的 LMDB 或 RecordIO 格式的数据.
可以直接上传其数据文件和索引文件, 直接用于训练.

3. 样本数据

样本数据方式是将符合 bucket 前缀的所有文件汇集起来组成的数据. 此方式主要用于生成 jsonlist, 导入 LabelX 进行打标. 注意: 汇集的数据是没有标签的, 不能用于训练. 新建并成功完成后可以看到生成的 jsonlist:

以及数据集里根据标签的统计信息:

格式化数据集

新建好的数据集还不能直接用于训练, 还需要格式化这一个步骤. 所谓格式化就是将数据集的图片生成符合 Caffe 或 MXNet 训练框所需的 LMDB 或 RecordIO 格式, 并保存在平台后端存储上. 如果不需要格式化为框架所需格式, 也可以选择原图方式, 直接将原始图片保存在平台后端存储上. 问题类型是分类还是检测取决于数据集的标签类型是 "type":"classification" 还是 "type":"detection". 这样, 训练时选择对应格式化数据集, 训练任务启动后就可以在 /mnt/data 下面找到并应用于训练.