华为云ModelArts-AI市场算法参数详解

举报
哈哈哈*3 发表于 2020/05/30 09:25:04 2020/05/30
【摘要】 ModelArts-AI市场汇集了各式场景,各式领域的模型及算法,官方也发布了大量的预置算法。包括图像分类,物体检测,文本分类,声音分类,分割等等。官方发布的算法都有详细的描述文档,并给出了大部分参数供用户调试,可以满足大部分用户的需求。 但还有些隐藏的参数没有公开。 已发布的算法都为用户预留了可增加自定义参数的权限,一些未定义的参数,使用时直接添加参数即可。

华为云ModelArts-AI市场算法参数详解

1. 概述

ModelArts-AI市场汇集了各式场景,各式领域的模型及算法,官方也发布了大量的预置算法。包括图像分类,物体检测,文本分类,声音分类,分割等等。官方发布的算法都有详细的描述文档,并给出了大部分参数供用户调试,可以满足大部分用户的需求。 但还有些隐藏的参数没有公开。 已发布的算法都为用户预留了可增加自定义参数的权限,一些未定义的参数,使用时直接添加参数即可。本文将以ModelArts官方发布的图像分类和物体检测两大领域算法进行参数讲解。主要以未公开的参数讲解为主。

ModelArts-AI市场算法链接请参考:https://console.huaweicloud.com/modelarts/?region=cn-north-1#/aiMarket/models/public

2. 基础概念

ModelArts-AI市场发布的图像分类,物体检测算法基本都支持迁移学习(Transfer learning),增量学习(Incremental learning),以及resume training。但是官方的发布的文档并没有做详细的说明。首先给大家解释一下三者的区别。

l  迁移学习:就是加载预训练模型在全新的数据集上做迁移训练,一般图像分类预训练模型都是在ImageNet上训练出的模型,物体检测一般在VOC或者coco数据集上做预训练,再迁移到其他类型数据集上做finetuning

l  增量学习:在这里可以理解为:已经用预训练模型在自己的数据训练好一个模型,数据扩充之后,基于之前已训练好的模型做finetuning,而不是用ImageNet等预训练出来的模型做训练。

l  resume training:在这里可以理解为训练中断,加载中间的模型继续训练。会加载之前训练的所有参数信息,包括step, lr, weights等。

如需使用请参考参数详解(train_url, checkpoint_url)。

3. 参数详解

3.1 图像分类

以下参数仅适用于ModelArts官方发布的图像分类-ResNet_v2_101,图像分类-Inception_v3,图像分类-MobileNet_v2,图像分类-ResNet_v2_50,图像分类-ResNet_v1_50,图像分类-ResNet_v1_101,图像分类-Inception_Resnet_V2。

仅支持Gpu训练的算法, MindSpore框架以及D910训练的算法未知。

l  train_url(模型输出)

·         默认值:None

·         参数类型:string

·         描述:train_url对应创建训练作业时选择的模型输出路径。如果训练一个新模型,一定要保证train_url是干净的,如果train_url有残留的模型,默认会去加载,可能导致训练失败或者精度有问题。如果训练不小心中断,想要继续训练,即做resume training,只要创建新的训练作业时选择和之前作业相同的train_url路径,就会加载原来train_url的参数继续训练。注意:做resume training一定要相同的数据集,label个数一定要相同,否则会导致训练作业失败。

l  checkpoint_url

·         默认值:None

·         参数类型:string

·         描述:预训练模型路径。算法本身会有一个默认路径去加载模型,如果想做增量学习,不想使用预置的模型,可以自己指定预训练模型路径。创建训练作业时添加一个checkpoint_url参数,指向自己的模型,例如:checkpoint_url=/xx/xx/resnet_v1_50。但是自定义的模型路径一定要是相同算法训练出来的模型,不匹配模型无法训练。注意:checkpoint_url默认会exclude最后分类层的参数。

l  do_eval_along_train:

·         默认值:True

·         参数类型:bool

·         描述:边训练边验证,目前很多算法无法修改此参数。如果可以修改并想做纯训练,可以将参数置为False, 不做验证learning_rate_strategy必须指定epoch。例如learning_rate_strategy=10:0.01,20:0.001,代表0-10epoch学习率0.0110-20epoch学习率0.001learning_rate_strategy默认值为0.002(不同算法值可能不同),没有给epoch, 会根据验证集精度自适应调整学习率,验证去掉之后,无法根据精度自动调整学习率,所以必须指定epoch 

l  learning_rate_strategy

·         默认值:0.002,或者其他

·         参数类型:string

·         描述:学习率策略,默认值为0.002(不同算法值可能不同),没有指定epoch, 会根据验证集精度自适应调整学习率,支持多种更新方式。以learning_rate_strategy=5:0.1->0.4,10:0.4=>0.8,15:0.8~>0.001,20:0.001为例。
    `->` 代表线性增长或衰减。0~5epoch0.1线性增长到0.4
   `=>` 代表指数增长或者衰减。5~10epoch0.4指数增长到0.8
    `~>` 代表cosine 增长或衰减。10~15epoch0.8consine衰减到0.001
   15~20epoch0.001不变。

l  weight_decay

·         默认值:0.00004

·         参数类型:float

·         描述: 权值衰减。 在损失函数中,weight decayL2正则化的一个系数,L2正则化是为了防止过拟合,正则项一般指模型的复杂度,所以weight decay的作用是调节模型复杂度对损失函数的影响,weight decay越大,模型复杂度对损失函数的影响越大。

l  Optimizer

·         默认值:momentum

·         参数类型:string

·         描述:优化器,支持 sgdadamradam

l  Momentum

·         默认值:0.9

·         参数类型:float

·         描述:当optimizer使用momentum时,momentum的取值。

l  num_readers

·         默认值:64

·         参数类型:int

·         描述:数据读取的线程数。

l  label_smoothing

·         默认值:0.0

·         参数类型:float

·         描述:标签平滑。通过对 label 进行 weighted sum,将 label由原来极端的one hot形式转化为较平滑的形式。减少了真实样本标签的类别在计算损失函数时的权重,最终起到抑制过拟合的效果。

l  use_mixup

·         默认值:Flase

·         参数类型:bool

·         描述:是否使用mixupmixup是一种对图像进行混类增强的算法,它可以将不同类之间的图像按比例进行混合,达到数据增强的目的,从而扩充训练数据集。

l  mixup_alpha

·         默认值:Flase

·         参数类型:bool

·         描述:启用mixup时,beta分布计算的入参,默认值0.2

l  use_sync_bn

·         默认值:Flase

·         参数类型:bool

·         描述:是否同步所有节点的BN层的参数。分布式时开启同步对模型精度有正向作用,但会影响训练性能。

l  ohem_top_ratio

·         默认值:0.9

·         参数类型:float

·         描述:ohemOnline Hard Example Mining)算法会自动地选择难分辨样本,剔除部分简易样本来进行训练,提升效率。ohem_top_ratio参数就是控制每步保留的样本占比,默认值0.9,则有0.1的简易样本loss被忽略。

l  max_training_time

·         默认值:None

·         参数类型:float(单位:h

·         描述:最大训练时长,为None时,直到训练完成正常退出。 如果设置最大训练时长,训练时间达到最大训练时长但训练还未完成时,训练会正常保存模型并自动退出。 如果在最大训练时长内,训练就已经完成,则参数无用。

l  label_balance

·         默认值:False

·         参数类型:bool

·         描述:是否做类别均衡。 开启后,每一步训练会覆盖所有label的样本,并且每个label样本数量一致。达到类别均衡。这在样本不均衡情况下可以使用。如果数据量很大,百万级、千万级,并且样本极度不均衡,做类别均衡可能会耗时。

l  use_cutmix

·         默认值:False

·         参数类型:bool

·         描述:是否使用cutmixcutmix是一种数据增强方法,就是将一部分区域cut掉但不填充0像素而是随机填充训练集中的其他数据的区域像素值,分类结果按一定的比例分配。

l  transform_normalize

·         默认值:False

·         参数类型:bool

·         描述:模型预处理数据归一化是否用均值和方差处理{(image/255-mean)/std}(mean0-1之间)。默认使用image-meanmean0-255之间)。

l  rescale_train_batch_size_factor

·         默认值:10

·         参数类型:int

·         描述:训练batch_size缩放系数。默认值10。数据量很小,batch_size很大可能会导致模型过拟合,所以算法里会根据数据量调整batch_size,如果总batch_sizebatch_size*num_gpu*num_worker)大于数据量的1/10,会调节batch_size=训练数据量/10,如果总batch_size小于数据量的1/10,不做调整。

l  max_to_keep

·         默认值:5

·         参数类型:float

·         描述:最多保存的模型个数。

l  allow_growth

·         默认值:Flase

·         参数类型:bool

·         描述:使用allow_growth option,一开始分配少量的GPU容量,然后按需慢慢的增加,但是不会释放内存,会导致碎片。

l  session_timeout

·         默认值:300000(5min)

·         参数类型:int(单位:ms)

·         描述:会话运行时等待时间(ms) 会话超时可适当延长等待时间。

l  gpu_memory_fraction

·         默认值:1

·         参数类型:float

·         描述:设置每个GPU应该拿出多少容量给进程使用。

3.2 物体检测

以下参数仅适用于ModelArts官方发布的物体检测-FasterRCNN_ResNet50,物体检测-RetinaNet_ResNet50。

仅支持Gpu训练的算法, MindSpore框架以及D910训练的算法未知。

物体检测算法参数较少,都配置在pipeline.config中。参考pipeline_config_path参数。

l  pipeline_config_path

·         默认值:None

·         参数类型:string

·         描述:pipeline.config物体检测训练配置文件路径。如果想要修改pipeline.config文件,可以提供自己的pipeline.config路径,例如:pipeline_config_path=/xx/xx/pipeline.config。如果不知道pipeline.config内容,可以先用默认算法跑一个训练作业,在模型输出路径下可以找到模型配置的pipeline.config

l  train_url(模型输出)

·         默认值:None

·         参数类型:string

·         描述:train_url对应创建训练作业时选择的模型输出路径。如果训练一个新模型,一定要保证train_url是干净的,如果train_url有残留的模型,默认会去加载,可能导致训练失败或者精度有问题。如果训练不小心中断,想要继续训练,即做resume training,只要创建新的训练作业时选择和之前作业相同的train_url路径,就会加载原来train_url的参数继续训练。注意:做resume training一定要相同的数据集,label个数一定要相同,否则会导致训练作业失败。

l  checkpoint_url

·         默认值:None

·         参数类型:string

·         描述:预训练模型路径。算法本身会有一个默认路径去加载模型,如果想做增量学习,不想使用预置的模型,可以自己指定预训练模型路径。创建训练作业时添加一个checkpoint_url参数,指向自己的模型。但是自定义的模型路径一定要是相同算法训练出来的模型,不匹配模型无法训练。

l  do_eval_along_train:

·         默认值:True

·         参数类型:bool

·         描述:边训练边验证,目前很多算法无法修改此参数。如果可以修改并想做纯训练,可以将参数置为False, 不做验证learning_rate_strategy必须指定epoch。例如learning_rate_strategy=10:0.01,20:0.001,代表0-10epoch学习率0.0110-20epoch学习率0.001learning_rate_strategy默认值为0.002(不同算法值可能不同),没有给epoch, 会根据验证集精度自适应调整学习率,验证去掉之后,无法根据精度自动调整学习率,所以必须指定epoch 

l  learning_rate_strategy

·         默认值:0.002,或者其他

·         参数类型:string

·         描述:学习率策略,支持多种更新方式。以learning_rate_strategy=5:0.1->0.4,10:0.4=>0.8,15:0.8~>0.001,20:0.001为例。
    `->` 代表线性增长或衰减。0~5epoch0.1线性增长到0.4
   `=>` 代表指数增长或者衰减。5~10epoch0.4指数增长到0.8
    `~>` 代表cosine 增长或衰减。10~15epoch0.8consine衰减到0.001
   15~20epoch0.001不变。

l  max_training_time

·         默认值:None

·         参数类型:float(单位:h

·         描述:最大训练时长,为None时,直到训练完成正常退出。 如果设置最大训练时长,训练时间达到最大训练时长但训练还未完成时,训练会正常保存模型并自动退出。 如果在最大训练时长内,训练就已经完成,则参数无用。

l  rescale_train_batch_size_factor

·         默认值:10

·         参数类型:int

·         描述:训练batch_size缩放系数。默认值10。数据量很小,batch_size很大可能会导致模型过拟合,所以算法里会根据数据量调整batch_size,如果总batch_size大于数据量的1/10,会调节batch_size=训练数据量/10,如果总batch_size小于数据量的1/10,不做调整。

l  max_to_keep

·         默认值:5

·         参数类型:float

·         描述:最多保存的模型个数。

l  allow_growth

·         默认值:Flase

·         参数类型:bool

·         描述:使用allow_growth option,一开始分配少量的GPU容量,然后按需慢慢的增加,但是不会释放内存,会导致碎片。

l  session_timeout

·         默认值:300000(5min)

·         参数类型:int(单位:ms)

·         描述:会话运行时等待时间(ms) 会话超时可适当延长等待时间。

l  gpu_memory_fraction

·         默认值:1

·         参数类型:float

·         描述:设置每个GPU应该拿出多少容量给进程使用。

 

4. 参考文档

[官方文档]使用云端算法训练模型:

https://support.huaweicloud.com/bestpractice-modelarts/modelarts_10_0025.html

ModelArts-AI市场算法使用流程可参考博客:https://bbs.huaweicloud.com/blogs/158092

 

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。