PAI-EasyVision提供图像检测模型的训练功能,本文为您介绍如何通过PAI命令进行图像检测模型训练。
PAI-EasyVision简化了配置,您只需通过-Dparam_config
配置常用参数,无需了解PAI-EasyVision的配置文件规则和逻辑。图像检测训练支持的模型如下表所示。
模型 | Backbone | 是否支持FPN |
FasterRCNN |
| 是 |
RFCN |
| 否 |
SSD |
| 是 |
| 否 |
图像检测训练
您可以使用SQL脚本组件进行PAI命令调用,也可以使用MaxCompute客户端或DataWorks的开发节点进行PAI命令调用。如何使用MaxCompute客户端和创建DataWorks的开发节点,详情请参见使用本地客户端(odpscmd)连接或创建并管理MaxCompute节点。
单卡示例
pai -name easy_vision_ext -Dbuckets='oss://{bucket_name}.{oss_host}/{path}' -Darn='acs:ram::*********:role/aliyunodpspaidefaultrole' -DgpuRequired=100 -Dcmd train -Dparam_config '--model_type SSD --backbone resnet_v1_50 --num_classes 20 --model_dir oss://YOUR_BUCKET_NAME/test/ssd_fpn_resnet50 --train_data oss://YOUR_BUCKET_NAME/data/voc0712_tfrecord/voc0712_part_*.tfrecord --test_data oss://YOUR_BUCKET_NAME/data/voc0712_tfrecord/VOC2007_test.tfrecord --num_test_example 2 --train_batch_size 32 --test_batch_size 1 --image_sizes 300 --lr_type exponential_decay --initial_learning_rate 0.001 --decay_epochs 20'
多卡示例
pai -name easy_vision_ext -Dbuckets='oss://{bucket_name}.{oss_host}/{path}' -Darn='acs:ram::*********:role/aliyunodpspaidefaultrole' -Dcmd train -Dcluster='{ \"ps\": { \"count\" : 1, \"cpu\" : 600 }, \"worker\" : { \"count\" : 3, \"cpu\" : 800, \"gpu\" : 100 } }' -Dparam_config '--model_type SSD --backbone resnet_v1_50 --num_classes 20 --model_dir oss://YOUR_BUCKET_NAME/test/ssd_fpn_resnet50 --train_data oss://YOUR_BUCKET_NAME/data/voc0712_tfrecord/voc0712_part_*.tfrecord --test_data oss://YOUR_BUCKET_NAME/data/voc0712_tfrecord/VOC2007_test.tfrecord --num_test_example 2 --train_batch_size 32 --test_batch_size 1 --image_sizes 300 --lr_type exponential_decay --initial_learning_rate 0.001 --decay_epochs 20 --staircase true'
参数说明
参数 | 是否必选 | 描述 | 参数值格式 | 默认值 |
buckets | 是 | OSS Bucket地址。Bucket必须以正斜线(/)结尾。 其中oss_host表示OSS访问域名,详情请参见OSS地域和访问域名。 | oss://{bucket_name}.{oss_host}/{path} | 无 |
arn | 是 | 访问OSS的授权。您可以登录PAI控制台,在全部产品依赖页面的Designer区域,单击操作列下的查看授权信息,获取arn,具体操作请参见云产品依赖与授权:Designer。 | acs:ram::*:role/aliyunodpspaidefaultrole | 无 |
cluster | 否 | 分布式训练参数相关配置。 | JSON字符串 | “” |
gpuRequired | 否 | 标识是否使用GPU,默认使用一张卡。如果取值为200,则一个Worker申请2张卡。 | 100 | 100 |
cmd | 是 | EasyVision任务类型。模型训练时,该参数应取值为train。 | train | 无 |
param_config | 是 | 模型训练参数,其格式与Python Argparser参数格式一致,详情请参见param_config说明。 | STRING | 无 |
param_config说明
param_config包含若干模型配置相关参数,格式为Python Argparser,示例如下。
-Dparam_config = '--backbone resnet_v1_50 --num_classes 200 --model_dir oss://YOUR_BUCKET_NAME/exp_dir'
所有字符串类型的参数,其取值均不加引号。
参数名称 | 是否必选 | 描述 | 参数值格式 | 默认值 |
model_type | 是 | 训练模型类型,取值范围:
| STRING | 无 |
backbone | 是 | 检测模型使用的Backbone,取值:
| STRING | 无 |
weight_decay | 否 | L2 Regularization的大小。 | FLOAT | 1e-4 |
use_fpn | 否 | 是否使用FPN。 | BOOL | false |
num_classes | 否 | 检测类别数目,不包括默认背景分类。 | INT,例如21 | 无 |
anchor_scales | 否 | Anchor框大小,与Resize后的输入图片尺度相同。
| 浮点列表。例如,32(单一尺度 )或128 256 512( 多个尺度 )。 |
|
anchor_ratios | 否 | Anchor宽高比。 | 浮点列表 | 0.5 1 2 |
image_sizes | 否 | 输入图片缩放大小,仅使用SSD时,该参数生效。取值为长度等于2的列表,分别表示高和宽。 | 浮点列表 | 300 300 |
image_min_sizes | 否 | 图片缩放大小最短边(FasterRCNN和RFCN使用该参数)。为支持Multi-Scale Training,如果输入多个Size时,则前N-1个作为训练配置,最后一个作为评估测试配置。否则训练与评估使用相同配置。 | 浮点列表 | 600 |
image_max_sizes | 否 | 图片缩放大小最长边(FasterRCNN和RFCN使用该参数)。为支持Multi-Scale Training,如果输入多个Size时,则前N-1个作为训练配置,最后一个作为评估测试配置。否则训练与评估使用相同配置。 | 浮点列表 | 1024 |
optimizer | 否 | 优化方法,取值:
| STRING | momentum |
lr_type | 否 | 学习率调整策略,取值:
| STRING | exponential_decay |
initial_learning_rate | 否 | 初始学习率。 | 浮点数 | 0.01 |
decay_epochs | 否 |
| 整数列表,例如20 20 40 60。 | 20 |
decay_factor | 否 | tf.train.exponential.decay中的decay_factor。 | FLOAT | 0.95 |
staircase | 否 | tf.train.exponential.decay中的staircase。 | BOOL | true |
power | 否 | tf.train.polynomial.decay中的power。 | FLOAT | 0.9 |
learning_rates | 否 | manual_step学习率调整策略中使用的参数,表示在指定Epoch中学习率的取值。如果您指定的调整Epoch有两个,则需要在此指定两个Epoch对应的学习率。例如,如果decay_epochs为20 40,则该参数配置为0.001 0.0001,表示在20 Epoch学习率调整为0.001,40 Epoch学习率调整为0.0001。建议几次调整的学习率依次为初始学习率的1/10、1/100及1/1000。 | 浮点列表 | 无 |
lr_warmup | 否 | 是否对学习率进行Warmup。 | BOOL | false |
lr_warm_up_epochs | 否 | 学习率Warmup的轮数。 | FLOAT | 1 |
train_data | 是 | 训练数据文件的OSS路径。 | oss://path/to/train_*.tfrecord | 无 |
test_data | 是 | 训练过程中评估数据的OSS路径。 | oss://path/to/test_*.tfrecord | 无 |
train_batch_size | 是 | 训练的batch_size。 | INT,例如32。 | 无 |
test_batch_size | 是 | 评估的batch_size。 | INT,例如32。 | 无 |
train_num_readers | 否 | 训练数据并发读取线程的数量。 | INT | 4 |
model_dir | 是 | 训练使用的OSS目录。 | oss://path/to/model | 无 |
pretrained_model | 否 | 预训练模型的OSS路径。如果指定该参数,则系统在此模型基础上进行微调。 | oss://examplebucket/pretrained_models/inception_v4.ckpt | "" |
use_pretrained_model | 否 | 是否使用预训练模型。 | BOOL | true |
num_epochs | 是 | 训练迭代轮数。取值1表示对所有训练数据都进行一次迭代。 | INT,例如40。 | 无 |
num_test_example | 否 | 训练过程中评估数据条目数。取值 -1表示使用所有测试数据作为评估数据。 | INT,例如2000。 | -1 |
num_visualizations | 否 | 评估过程可视化显示的样本数量。 | INT | 10 |
save_checkpoint_epochs | 否 | 保存Checkpoint的频率,以Epoch为单位。取值为1表示每完成一次训练就保存一次Checkpoint。 | INT | 1 |
save_summary_epochs | 否 | 保存Summary的频率,以epoch为单位。 取值为0.01表示每迭代1%的训练数据就保存一次Summary。 | FLOAT | 0.01 |
num_train_images | 否 | 总的训练样本数。如果使用自己生成的TFRecord,则需要指定该参数。 | INT | 0 |
label_map_path | 否 | 类别映射文件。如果使用自己生成的TFRecord,则需要指定该参数。 | STRING | ”” |