EPAI-ALGORITHM:基于MMDET的训练平台

GITEE地址:https://gitee.com/Euler_liangjh/EPAI_ALGORITHM

简介


该仓库主要是基于MMDetection进行二次开发的一个中间件,用作项目的算法端。前端请求JAVA后端进行AI算法请求,然后JAVA后端将请求通过RabbitMQ进行发送,Python端收到信息后,完成算法操作后再重新返回给JAVA。

其他文档

各模块简介

coco格式解析和说明

AI模型可调参数表

服务器环境配置

结构说明

│  main.py  # 主函数
│  unit_test.py  # MQ单元测试
│          
├─doc  # 文档
├─mmdetection  #mmdet2.10源码
│              
└─utils  # 工具函数
    │  check_auth.py  # 检测传送过来的寻来模型pth是否又相应的meta
    │  test_manager.py  # 推理管理器
    │  train_manager.py  # 训练管理器
    │  
    ├─dataset_converters  # 数据类型转换管理
    │  │  convert2coco.py  # json2coco
    │          
    ├─epai_config  # 自动生成配置文件
    │  │  config_manager.py
    │          
    ├─MQ  # MQ封装好的包
    │  │  message.py
    │  │  MQ_class.py
    │          
    └─Mythread  # 封装好的线程包
            close_thread.py
            epai_thread.py

MQ通信说明

数据格式转化模块

CoverManager类
  • 功能说明
    将lableme的数据转换成coco数据集

  • 其他说明

    • 保证所有路径都存在,算法端也会做校验
    • 确保lebelme标注保存的格式必须是utf-8,gbk会出错,算法端不做校验
  • params

    参数 必选 类型 说明 举例
    task_id True int 任务id 777
    task_type True int 任务类型,根据类型调用不同的函数
    数据格式转化:0
    配置文件生成:1
    训练:2
    推理:3
    检测算法是否来自EPAI:4
    自动标注:5
    0
    aim True int 数据转化的方向,labelme->coco是0;voc->coco是1; 0
    lm_path True string labelme标注数据集的路径 /home/ubuntu/shareDisk/Datasets/Bridge_data/20210302_边坡数据汇总_rewrite
    /home/ubuntu/shareDisk/Datasets/PPAIdata/Datayantai_labelme
    coco_path True string 保存的coco数据集的路径 /home/ubuntu/shareDisk/Datasets/epai_test_coco
    /home/ubuntu/shareDisk/Datasets/epai_test_coco_ppai
    class_name True string 标注时标签的名字,多个用-分开 unnormal
    "unnormal-normal"
    test_size False float 生成coco数据时验证集的比例,默认0.1 0.2
  • return
    数据转换的成功的结果,task_id表示任务id,img_name表示图像名称,status表示是否转化成功,成功:1,失败:0

      {
          "task_id": 777,
          "task_type": "data_convert",
          "img_name": "2020-11-06-15-03-26_310979000900_ZL.bmp",
          "status": 1
       }

    结束返回结果

    {
      "task_id": 777,
      "task_type": "data_convert",
      "status": -1
    }

Train训练模块

含有2个类,分别是CfgManager以及TrainManager

1. CfgManager类
  • 功能说明
    在训练之前,后端创建算法任务,生成训练所需要的配置文件

  • params

    参数 必选 类型 说明 举例
    task_id True int 任务id 777
    task_type True int 任务类型,根据类型调用不同的函数
    数据格式转化:0
    配置文件生成:1
    训练:2
    推理:3
    检测算法是否来自EPAI:4
    自动标注:5
    0
    model_name True string 用户给定的模型名称 ppai_test_modelA
    cfg_dic True string 配置算法的选项,具体见下面说明 {
    "net_name": "faster_rcnn",
    "backbone": "ResNet50",
    "dcn": "True",
    "epoch": "1x",
    "lr_policy": "CosineAnealing"
    }
    classes True string 数据标注的标签名,类型为python中的元组,传字符串就可以,多个类别使用-分割, "unnormal"
    "normal-unnormal"
    data_root True string 用户coco数据集的根目录,注意最后需要以/结尾 /home/ubuntu/shareDisk/Datasets/iron/all_coco_format/
    out_path True string 生成配置文件的地址 /home/ubuntu/euler_workspce/epai_test/test_space/config/test_cgf.py
    • cgf_dic说明

      1. faster_rcnn模型示例
        net_name固定为faster_rcnn,backbone可以选择r50或者r101,dcn选择True或者False,epoch可以选择1x或者2x,lr_policy选择CosineAnealing或者step

        {
        "net_name": "faster_rcnn",
        "backbone": "ResNet50",
        "dcn": "True",
        "epoch": "1x",
        "lr_policy": "CosineAnealing"
        }
  • return

    {
    "task_id": 777,
    "task_type": "train",
    "model_name": "test_model_name",
    "status": -2,
    "cfg_file": "/home/ubuntu/euler_workspce/epai_test/test_space/config/test_cgf.py",
    "classes_name": "normal-unnormal"
    }
2. TrainManager类
  • 功能说明
    启动训练模块

  • params

    参数 必选 类型 说明 举例
    task_id True int 任务id 777
    task_type True int 任务类型,根据类型调用不同的函数
    数据格式转化:0
    配置文件生成:1
    训练:2
    推理:3
    检测算法是否来自EPAI:4
    自动标注:5
    0
    resume_from False string 继续训练的pth文件所在的路径,没有的话传"" /home/ubuntu/euler_workspce/baosteel_iron/code/model/iron.pth
    cfg_file True string 配置文件所在的路径 /home/ubuntu/euler_workspce/epai_test/test_space/config/test_cgf.py
    work_dir True string 模型训练的工作目录 /home/ubuntu/euler_workspce/epai_test/work_space
    log_file True string 模型训练的日志生成所在的文件 /home/ubuntu/euler_workspce/epai_test/work_space/20210406_162259_model01.log
  • return

    • 心跳信息

      • 开始训练
      {
        "task_id": 777,
        "status": 0,
        "task_type": "tarin"
      }
      • 训练过程
      {
        "task_id": 777,
        "status": 1,
        "task_type": "tarin",
        "log_file": "/home/ubuntu/euler_workspce/epai_test/work_space/20210406_162259.log"
      }
      • 结束训练
       {
         "task_id": 777,
         "status": -1,
         "task_type": "tarin",
         "cfg_file": "/home/ubuntu/euler_workspce/epai_test/test_space/config/test_cgf.py",
         "pth_file": "/home/ubuntu/euler_workspce/baosteel_iron/code/model/iron.pth",
         "log_file": "/home/ubuntu/euler_workspce/epai_test/work_space/20210406_162259.log"
       }

Test推理模块

TestManager
  • 功能说明
    启动测试模块或者自动标注模块

  • params

    参数 必选 类型 说明 举例
    task_id True int 任务id 777
    task_type True int 任务类型,根据类型调用不同的函数
    数据格式转化:0
    配置文件生成:1
    训练:2
    推理:3
    检测算法是否来自EPAI:4
    自动标注:5
    3
    data_set_name True string 数据集名称 test_dataset
    data_set_id True int 数据集id 666
    color_map True list 标注框和颜色的对应数组,其中"name"必须是原模型中的标签名。例如生成模型用的是unnormal,不能传nok。 [{"name":"unnormal","color":"green"},{"name":"normal","color":"red"}]
    data_dir True string 数据集所在路径 /home/ubuntu/euler_workspce/epai_test/dataset_test
    cfg_file True string 配置文件所在的路径 /home/ubuntu/euler_workspce/epai_test/test_space/config/test_cgf.py
    pth_file True string 模型pth文件所在的路径 /home/ubuntu/euler_workspce/epai_test/work_space/latest.pth
    model_id True int 模型id 6666666
    label_person True string 标注人 张三
    image_total int 图片总数
  • return

    • json结果
      ⚠注:返回的结果task_type在params为2时为"test",在5的时候为"auto_mark"

    • 识别返回的json

      {
          "task_id": 777,
          "task_ 666type": "auto_mark",
          "data_set_id": 666,
          "data_set_name": "data_set_name",
          "label_person": "p1",
          "model_id": 6666666,
          "image_name": "35041773573504177357b14021900640675_Pr40_14030142.20190214110222.jpg",
          "image_total ": 20,
          "image_sum":3,
          "box": {
              "version": "4.2.10",
              "flags": {},
              "shapes": [
                  {
                      "label": "unnormal",
                      "points": [
                          [
                              873.178466796875,
                              400.04193115234375
                          ],
                          [
                              1166.8538818359375,
                              1855.6929931640625
                          ]
                      ],
                      "group_id": "red",
                      "shape_type": "rectangle",
                      "flags": {}
                  },
                  {
                      "label": "normal",
                      "points": [
                          [
                              321.6612854003906,
                              429.19775390625
                          ],
                          [
                              594.968994140625,
                              1872.13818359375
                          ]
                      ],
                      "group_id": "green",
                      "shape_type": "rectangle",
                      "flags": {}
                  },
                  {
                      "label": "normal",
                      "points": [
                          [
                              1430.3631591796875,
                              395.2777099609375
                          ],
                          [
                              1707.4918212890625,
                              1841.00244140625
                          ]
                      ],
                      "group_id": "green",
                      "shape_type": "rectangle",
                      "flags": {}
                  }
              ],
              "imagePath": "35041773573504177357b14021900640675_Pr40_14030142.20190214110222.jpg",
              "imageHeight": 2448,
              "imageWidth": 2048
          }
      }
    • 说明

    • imageName字段为图像名称

    • box内的为labelme格式的标注,特别的,group_id为为前端回显的颜色。

isHYCX接口

  • 功能说明
    判断是否是EPAI训练出来的pth文件

  • params

    参数 必选 类型 说明 举例
    task_id True int 任务id 777
    task_type True int 任务类型,根据类型调用不同的函数
    数据格式转化:0
    配置文件生成:1
    训练:2
    推理:3
    检测算法是否来自EPAI:4
    自动标注:5
    4
    model_path True string 模型所在的位置 /home/ubuntu/euler_workspce/epai_test/work_space/test.pth
    /home/ubuntu/euler_workspce/epai_test/work_space/latest.pth
  • return

    • json结果
    {
      "task_id":777,
      "task_type":"chack_isHYCX",
      "model_path": "/home/ubuntu/euler_workspce/epai_test/work_space/test.pth",
      "result": "True"
    }
    • 说明
    • task_id 任务id
    • task_type 任务类型
    • modelPath pth文件所在的地址
    • result 是否是EPAI训练出来的pth文件(True:是 False :否)

算法异常捕获返回

对每一次任务,如果有报错,算法会对异常进行捕获,并通过MQ发给后端,格式如下:

{
    "task_id": 777,
    "task_type": "test",
    "msg": "data cover error"
}

其中task_type为任务类型的字符串,可以是data_convert、train、test、auto_mark、chack_isHYCX,msg是捕获的异常

开源许可证

该项目采用 AGPL

引用

如果你在研究中使用了本项目的代码,请参考如下 bibtex 引用 EPAI-ALGORITHM。

@article{epai-algorithm,
  title   = {{EPAI-ALGORITHM}: Object Detection Backend Tools package},
  author  = {HYCX, Bosch HUAYU Steering Systems},
  year={2022}
}
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇