[关闭]
@wanghuijiao 2021-11-17T14:34:15.000000Z 字数 8254 阅读 595

“数据闭环” 开发规范

技术文档


前言

从0集成分割模型步骤

  1. 数据集发布
  2. 代码库发布
  3. 基础模型发布
  4. 准备基础模型启动脚本,准备模型训练接口
  5. 模型训练
  6. 模型测试
  7. 应用模型发布

1. 数据集发布

角色分工

操作步骤:

  1. 确定数据集格式,输出文档
  2. 运行数据集发布脚本

示例说明

以yolo格式的目标检测人头数据集发布为例,对以上步骤进行详细说明。

  1. 确定数据集格式 预先确定数据集标签格式,每种格式对应的文件组织结构不同,对数据集的解析需要固定的格式。因此第一步先确认“数据闭环”工具是否支持现有格式,否则需要先转换成支持的格式。以yolo格式为例:

    1. | -- head_RGB
    2. | -- images
    3. | -- 0000001.jpg # 图片,或者其他格式 .png .jpeg ...
    4. | -- 0000002.jpg # 图片
    5. | -- ...
    6. | -- labels
    7. | -- 0000001.txt # 标签
    8. | -- 0000002.txt # 标签
    9. | -- ...
    10. | -- train.txt # 存放训练集图片相对路径
    11. | -- val.txt # 存放验证集图片相对路径
    12. | -- test.txt # 存放测试集图片相对路径
    13. | -- class.names # 存放类别名称,一类一行,序号与标签文件对应
    14. | -- data.data # 存放数据集类别信息和路径
    • 准备数据集配置文件等组成的文件夹:这一步是准备一些记录了数据集位置、类别信息等基础配置信息的文件,并不是数据集包含的图片和标签,目的是为了能让模型通过这些配置文件解析出数据集的内容,用于训练和测试等。

      • 文件夹命名格式:{传感器}_{目标类别}_{任务类型},如目标检测人头数据集为 RGB_head_detection,文件夹命名说明:
        • 传感器:表示由于获取图像时传感器的不同,造成图像所在光域的不同,目前有 RGB\IR (可见光\热红外)两种选项
        • 目标类别:检测的类别,或者分割的目标,比如“passable-area”或“head-car”等
        • 任务类型:按照视觉任务分,比如 detection\segmentation\classification (目标检测\分割\分类)
      • 数据集配置文件示例

        1. | -- RGB_head_detection # 配置文件组成的文件夹
        2. | -- RGB_head_detection.data # 记录训练集和测试集路径,类别信息等
        3. | -- RGB_head_detection.names # 记录数据集的类别名称
        • RGB_head_detection.data 内容示例

          1. classes = 1 # 类别数量
          2. train = /ssd01/wanghuijiao/dataset/head_RGB/v1.0/train.txt # 训练图片路径列表文绝对路径
          3. valid = /ssd01/wanghuijiao/dataset/head_RGB/v1.0/val.txt # 测试图片路径列表文件绝对路径
          4. names = /ssd01/wanghuijiao/dataset/head_RGB/v1.0/RGB_head_detection.names # 类别信息文件绝对路径
        • RGB_head_detection.names 内容示例

          1. head
  2. 运行数据集发布脚本 准备好上述文件后,通过运行此脚本,可以实现将配置文件复制到服务器指定路径,以及将数据集基本信息添加到数据库的操作。至此,数据发布完成。

    • 最终数据集发布前将组织成如下格式:

      1. | -- RGB_head_detection # 配置文件组成的文件夹
      2. | -- RGB_head_detection.data # 记录训练集和测试集路径,类别信息等
      3. | -- RGB_head_detection.names # 记录数据集的类别名称
      4. | -- RGB_head_detection_info.json # 基本信息配置文件
    • 基本信息配置文件:此文件的内容记录了本数据集的基本信息,比如数据集的任务类型、使用场景、标签格式等等,大部分内容将会被写入数据库,作为日后选择数据集的重要信息来源。

      • 文件命名:“{数据集名称}_info.json” , 人头数据集示例:RGB_head_detection_info.json
      • 格式示例:
        1. {
        2. "name": "RGB_head_detection", # 数据集名称
        3. "version": "v1.0", # 数据集版本号
        4. "task_type": "Object_Detection", # 任务类型,比如目标检测(Object_Detection)、分割(Segmentation)
        5. "scene": "Outdoor", # 应用场景描述,比如“Outdoor”
        6. "anno_type": "yolo", # 标签格式,比如“yolo” 、“COCO”
        7. "number": {"head": 19370,}, # 各类别出现的标签数量
        8. "size": "1GB", # 数据集大小
        9. "source_dir": "/ssd01/wanghuijiao/pose_detector02/rgb_head_detect", # 数据集文件所在的绝对路径
        10. "release_person": "Wanghuijiao", # 发布人姓名全拼
        11. "release_time": "2021/11/11", # 发布时间:{年}/{月}/{日}
        12. "description": "This is used for head detection in the wild scene where people are blocked by bushes.", # 数据集描述,比如详细用途说明、版本间的改动或者对此数据集的其他补充说明等信息
        13. }
    • 脚本功能:
      • 检查配置文件是否合法
      • 将文件夹压缩复制到目标位置
      • 解析json文件内容,将数据集基本信息添加到数据库中。
    • 脚本输入参数:
      • $1 上述文件 RGB_head_detectionRGB_head_detection_info.json 所在路径
      • $2 目标路径
  3. 数据集发布脚本使用说明:后续给别人使用的时候需要写,目前可以先没有

2. 制作代码库image,代码库发布

角色分工

操作步骤:

  1. 制作代码库镜像
  2. 准备基本信息配置文件
  3. 运行代码库发布脚本(by王提供)

示例说明

3. 基础模型发布

角色分工

操作步骤:

  1. 准备模型配置文件
  2. 准备基本信息配置文件
  3. 运行基础模型发布脚本

示例说明

4. 准备启动脚本和训练接口

角色分工

准备基础模型启动脚本和配置文件

  1. 准备构建训练bash命令的配置文件:tdlp_train_config.json,此文件中存放模型训练时需要的参数,比如gpu、训练批次、图片输入尺寸等与训练命令相关的参数

    • 以yolov4为例内容示例如下:
      1. {
      2. "exp_uri": "/hdd03/minio/data/tdlp/tasks/5/yolov4_tiny_v1.0_rgb_head_detect_v1.1_20211011180550", # (必须有)此次实验路径存储路径,在启动脚本中根据时间戳自动生成,格式为:基础模型名称_基础模型版本_数据集名称_数据集版本_时间戳.
      3. "data_file": "/hdd03/minio/data/tdlp/tasks/5/yolov4_tiny_v1.0_rgb_head_detect_v1.1_20211011180550/yolov4_tiny.data", # (可选)yolov4数据集配置文件路径,在启动脚本中解析生成
      4. "cfg_file": "/hdd03/minio/data/tdlp/tasks/5/yolov4_tiny_v1.0_rgb_head_detect_v1.1_20211011180550/yolov4_tiny.cfg", # (可选)yolov4基础模型配置文件路径,在启动脚本中解析生成
      5. "path_file": "/hdd03/minio/data/tdlp/tasks/5/yolov4_tiny_v1.0_rgb_head_detect_v1.1_20211011180550/yolov4_tiny.path", # # (可选)yolov4数据集配置文件路径,在启动脚本中解析生成
      6. "default_paras": [ # (必须有)以下是训练命令相关的默认参数,键需要根据基础模型类型人为设置,键值可以根据训练脚本设置为输入参数。
      7. {
      8. "-gpus": "0,1,2,3" # (可选)
      9. },
      10. {
      11. "-dont_show": "" # (可选)
      12. },
      13. {
      14. "-map": "" # (可选)
      15. }
      16. ]
      17. }
  2. 准备基础模型启动脚本tdlp_start_train.py

    • 参考yolov4的启动脚本
    • 功能:供TDLP框架调用,使用Docker启动一个新的容器开始模型训练
    • 代码思路:
      • 1、解析tdlp_train_config.json
      • 2、构建执行训练的bash命令,保存为sh文件
      • 3、使用docker run命令加载该sh文件

准备模型训练接口

  1. from tools.start_exp import Tdlp
  2. # 类名自行根据基础模型名称定义
  3. class mmseg(Tdlp):
  4. def __init__(self):
  5. pass
  6. def start_train(self, task_id, alg_name, alg_vs, dataset_name, dataset_vs, config_path):
  7. """模型训练接口
  8. Args:
  9. task_id: int, # 任务ID,根据数据库任务表单选择, 待讨论?
  10. alg_name: str, # 基础模型名称
  11. alg_vs: str, # 基础模型版本
  12. dataset_name: str, # 数据集名称
  13. dataset_vs: str, # 数据集版本
  14. config_path: str, # 第5节中的配置文件:tdlp_train_config.json 路径
  15. """
  16. pass

5. 模型训练

角色分工

具体说明

  1. python train.py --model_name "" --model_version "" --dataset_name "" --dataset_version "" --config_path "" # config_path是5中定义的tdlp_train_config.json路径

6. 模型测试

角色分工

具体说明

7. 应用模型发布

角色分工

操作步骤:

  1. 准备应用模型配置文件
  2. 准备基本信息配置文件
  3. 运行基础模型发布脚本

示例说明

附录

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注