您对华为云开发者网站的整体评价?

非常不满意 非常满意

0

1

2

3

4

5

6

7

8

9

10

*您遇到了哪些问题?(最多选三项)
*您感到满意的原因是?(最多选三项)
*请针对您所遇到的问题给出具体的反馈
200/200
算法
物体检测-EfficientDet
支持TensorFlow, GPU训练, 支持CPU, GPU推理, 知识蒸馏
ModelArts
43个月以前
2GB 10689 3063
  • 标签
    图片目标检测GPU训练CPU推理GPU推理公有云TensorFlow-1.x深度学习ModelArts目标检测TensorFlowGPUCPU
  • 资产ID e48f4e4d-5ebb-4753-a613-b44a5d965e7c

描述

EfficientDet(物体检测/TensorFlow)

适用的案例

适用的数据集

1. 概述

此模型基于Scalable and Efficient Object Detection中提出的模型结构实现,EfficientDet是一个总称,可以分为 EfficientDet D1 ~ EfficientDet D7,速度逐渐变慢,但是精度也逐渐提高。 以EfficientNet作为Backbone。该算法会载入在COCO上的预训练模型,在用户数据集上做迁移学习。我们提供了训练代码和可用于训练的模型,用于实际场景的微调训练。训练后生成的模型可直接在ModelArts平台部署成在线服务。

2. 训练

2.1. 算法基本信息

  • 任务类型:物体检测
  • 支持的框架引擎:Tensorflow-2.1.0-python3.6
  • 算法输入:
    • 目前该算法仅支持ModelArts数据管理平台发布的manifest格式的检测数据集(必须是切分成训练集+验证集的),建议用户以8:2或9:1的比例进行切分,暂不支持用户自定义数据。
  • 算法输出:
    • 用于TF-Serving推理的saved_model模型
Model mAP (coco开源数据集) P4推理速度(ms/pic)
EfficientDet-D0 33.8 29.48
EfficientDet-D1 39.6 55.21
EfficientDet-D2 43.0 75.66
EfficientDet-D3 45.8 146.69
EfficientDet-D4 49.4 232.33
EfficientDet-D5 50.7 464.53
EfficientDet-D6 51.7 631.41
EfficientDet-D7 53.7 851.40

2.2. 训练参数说明

名称 默认值 类型 是否必填 是否可修改 描述
mode train string 是否边训练边验证,默认训练, 可选参数为train和train_and_eval,如果选择train,那么在模型训练结束的时候,统一做一次eval,如果选择train_and_eval,那么每次训练迭代一个epoch,就做一次eval,耗时比较久。
model_name efficientdet-d0 string EfficientDet训练选择的模型种类,目前可选项为efficientdet-d0,efficientdet-d1,efficientdet-d2,efficientdet-d3,efficientdet-d4,efficientdet-d5,efficientdet-d6,efficientdet-d7
train_batch_size 8 int 每步训练的图片数量(单卡)
eval_batch_size 8 int 每步验证的图片数量(单卡)
num_epochs 100 int 模型训练最大的迭代数
do_data_cleaning True bool 是否开启数据清洗功能
hparams moving_average_decay=0 string 键值对参数,可选择的有label_smoothing(默认是0,0),box_loss_weight(默认是50),learning_rate(默认是0.08),lr_warmup_init(默认是0.008),lr_warmup_epoch(默认是1),first_lr_drop_epoch(默认是200),second_lr_drop_epoch(默认是250),在使用的时候,需要用逗号隔开,中间不能有空格,moving_average_decay=0必须包含,例如"moving_average_decay=0,label_smoothing=0.08"
  • 注意:1、设置model_name尤其需要注意train_batch_size和eval_batch_size的大小,相同的batch size对于越高级别的EfficientDet,更加容易出现OOM,需要适当的减小使用的batch size;对于batch size较小的模型,需要加大epoch数来保证精度。
    2、在开启数据清洗的情况下,如果数据集中脏数据比较多,那么可能会对训练产生影响,用户如果想对过滤掉的数据进行分析,可以在训练的时候,增加deps_save_path的目录参数来保存json结果文件。

2.3. 训练输出文件

训练完成后的输出文件如下

训练输出目录
  |- model
    |- variables
      |- variables.data-00000-of-00001
      |- variables.index
    |- customize_service.py
    |- index
    |- config.json
    |- saved_model.pb
  |- archive
    |- model.ckpt-xxx
    |- checkpoint
    |- best_eval.txt
  |- checkpoint
  |- model.ckpt-xxx
  |- ...
  |- ...
  |- events...
  |- graph.pbtxt

3. GPU/CPU推理

元模型来源 选择 从训练中选择,选择训练作业及版本。

. 案例指导:

CPU/GPU训练+CPU/GPU推理,可参考图像分类案例指导

4. 模型评估

目前EfficientDet预置算法支持模型评估自调优,用户在训练结束之后,可根据推理评估的建议进行训练优化。

5. 蒸馏

针对移动端以及视频类的检测,ModelArts版的EfficientDet针对模型时延对Google版的EfficientDet进行了优化,开发了具有低时延的网络结构tiny EfficientDet,具体时延对比参加下表:

模型名称(model_name) P4推理速度(ms/pic)
efficientdet-d0 29.48
efficientdet-t0 23.69
efficientdet-t1 14.10
efficientdet-t2 13.16

5.1 离线蒸馏

离线蒸馏,即two stage knowledge distillation,指的是用户需要提前训练一个teacher模型,然后利用这个teacher模型对student模型进行训练,目前ModelArts上的EfficientDet已经支持了该功能,目前支持的网络模型只有efficientdet-d0,具体使用流程如下:

步骤一:

用户按照正常使用AI市场的流程创建一个efficientdet-d0的训练作业

步骤二:

用户需要创建一个teacher网络的训练作业,需要加一个参数,export_teacher_model=True,表示该模型是作为teacher模型使用的,目前可供选择的模型以及参数如下:

模型名称 填写的参数
efficientdet-d2 model_name=efficientdet-d2; export_teacher_model=True
efficientdet-d3 model_name=efficientdet-d3; export_teacher_model=True
efficientdet-d4 model_name=efficientdet-d4; export_teacher_model=True
efficientdet-d5 model_name=efficientdet-d5; export_teacher_model=True
efficientdet-d6 model_name=efficientdet-d6; export_teacher_model=True

可以看到在输出路径train_url下面有一个model目录,下面会有一个frozenPB推理文件,为接下来做准备。

步骤三:

用户需要重新创建一个efficientdet-d0的作业,另外需要填写两个参数teacher_model_urluse_offline_kd=True,其中teacher_model_url填写的内容是步骤二训练teacher输出路径的model目录,注意需要填写model的那一层级。按照正常创建训练作业即可。

至此,用户完成使用离线蒸馏的功能。

在训练过程中可能会出现NaN的情况,需要调整蒸馏loss的权重,修改soft_cls_losssoft_box_loss的值,默认soft_cls_loss=2,soft_box_loss=200,用户也可以根据自己的选择将某一个权重设置为0,即在蒸馏的时候不去训练,防止出现NaN,具体添加方式如下所示:

hparams =moving_average_decay=0,soft_box_loss=50,soft_cls_loss=1

在日志中会打印loss_soft_clsloss_soft_box的值,不同的数据集可能会有不同的数量级,一般需要按照自己的数据集通过修改soft_cls_losssoft_box_loss的值将上述两个loss的值调整到合适的值,比如5以下。

  • 备注:考虑到模型训练时间的约束,目前仅efficientdet-d0网络模型支持离线蒸馏。使用蒸馏提升精度的前提是,训练的teacher模型的精度比student的精度要高,并且差距越大蒸馏的效果越好。

5.2 在线蒸馏

目前tiny EfficientDet算法里面增加了在线蒸馏的功能,相比于传统的离线蒸馏,用户不需要传入预训练好的pb文件,而是在之前训练版本的基础上,直接起一个在线蒸馏任务,用来提升模型训练精度。

用户在选用tiny EfficientDet模型进行在线蒸馏的时候,需要添加参数use_online_kd,即可体验模型的在线蒸馏功能,目前支持在线蒸馏的网络模型以及具体使用方法如下所示:

模型名称 参数传入(不使用在线蒸馏) 参数传入(使用在线蒸馏)
efficientdet-t0 model_name=efficientdet-t0 model_name=efficientdet-t0; use_online_kd=True
efficientdet-t1 model_name=efficientdet-t1 model_name=efficientdet-t1; use_online_kd=True
efficientdet-t2 model_name=efficientdet-t2 model_name=efficientdet-t2; use_online_kd=True
  • 备注:考虑到GPU显存占用,目前仅efficientdet-t0, efficientdet-t1,efficientdet-t2三个网络模型支持在线蒸馏

交付

华为云ModelArts

华北-北京一华北-北京四华北-乌兰察布一华东-上海一cn-east-4华南-广州西南-贵阳一

您可以在华为云ModelArts控制台直接使用资产,但无法下载资产

限制

公开

免费

无时长限制

版本

版本号
版本ID
发布时间
状态
版本说明
使用约束
9.0.0
9.0.0
2021-07-26 14:18
已完成
更新评估脚本映射以及OBS_SDK版本

若您怀疑合法知识产权遭受侵犯,可以通过此链接进行投诉与建议。