华为云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-10个epoch学习率0.01,10-20个epoch学习率0.001。learning_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~5个epoch:0.1线性增长到0.4。
`=>` 代表指数增长或者衰减。5~10个epoch:0.4指数增长到0.8。
`~>` 代表cosine 增长或衰减。10~15个epoch:0.8consine衰减到0.001。
15~20个epoch:0.001不变。
l weight_decay
· 默认值:0.00004
· 参数类型:float
· 描述: 权值衰减。 在损失函数中,weight decay是L2正则化的一个系数,L2正则化是为了防止过拟合,正则项一般指模型的复杂度,所以weight decay的作用是调节模型复杂度对损失函数的影响,weight decay越大,模型复杂度对损失函数的影响越大。
l Optimizer
· 默认值:momentum
· 参数类型:string
· 描述:优化器,支持 sgd、adam、radam。
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
· 描述:是否使用mixup。mixup是一种对图像进行混类增强的算法,它可以将不同类之间的图像按比例进行混合,达到数据增强的目的,从而扩充训练数据集。
l mixup_alpha
· 默认值:Flase
· 参数类型:bool
· 描述:启用mixup时,beta分布计算的入参,默认值0.2。
l use_sync_bn
· 默认值:Flase
· 参数类型:bool
· 描述:是否同步所有节点的BN层的参数。分布式时开启同步对模型精度有正向作用,但会影响训练性能。
l ohem_top_ratio
· 默认值:0.9
· 参数类型:float
· 描述:ohem(Online 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
· 描述:是否使用cutmix。cutmix是一种数据增强方法,就是将一部分区域cut掉但不填充0像素而是随机填充训练集中的其他数据的区域像素值,分类结果按一定的比例分配。
l transform_normalize
· 默认值:False
· 参数类型:bool
· 描述:模型预处理数据归一化是否用均值和方差处理{(image/255-mean)/std}(mean在0-1之间)。默认使用image-mean(mean在0-255之间)。
l rescale_train_batch_size_factor
· 默认值:10
· 参数类型:int
· 描述:训练batch_size缩放系数。默认值10。数据量很小,batch_size很大可能会导致模型过拟合,所以算法里会根据数据量调整batch_size,如果总batch_size(batch_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-10个epoch学习率0.01,10-20个epoch学习率0.001。learning_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~5个epoch:0.1线性增长到0.4。
`=>` 代表指数增长或者衰减。5~10个epoch:0.4指数增长到0.8。
`~>` 代表cosine 增长或衰减。10~15个epoch:0.8consine衰减到0.001。
15~20个epoch:0.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
- 点赞
- 收藏
- 关注作者
评论(0)