全部产品
云市场

PAI 图像分类(多标签分类)训练

更新时间:2020-05-11 14:26:12

PAI 图像分类(多标签分类)训练

PAI平台提供图像多标签分类相关算法,可以基于用户的图片数据生成图像多标签分类模型,支持千万级别差大规模的图片样本训练,生成的模型可以部署到PAI-EAS成为Restful API服务供调用。服务调用方式可使用MaxCompute console工具或者Dataworks SQL节点,详见:https://help.aliyun.com/document_detail/154185.html

与图像分类模型不同的是,多标签分类的多个类别是不互斥的,模型会输出识别概率在一定阈值上的所有类别。

pai命令示例

图像分类单机训练

  1. pai -name easy_vision_ext
  2. -Dbuckets='{bucket_name}.{oss_host}/{path}'
  3. -Darn='acs:ram::*********:role/aliyunodpspaidefaultrole'
  4. -DossHost='{oss_host}'
  5. -DgpuRequired=100
  6. -Dcmd train
  7. -Dparam_config '
  8. --model_type MultiLabelClassification
  9. --backbone inception_v4
  10. --num_classes 10
  11. --num_epochs 1
  12. --model_dir oss://pai-vision-data-sh/test/cifar_inception_v4
  13. --use_pretrained_model true
  14. --train_data oss://pai-vision-data-sh/data/test/cifar10/*.tfrecord
  15. --test_data oss://pai-vision-data-sh/data/test/cifar10/*.tfrecord
  16. --num_test_example 20
  17. --train_batch_size 32
  18. --test_batch_size=32
  19. --image_size 299
  20. --initial_learning_rate 0.01
  21. --staircase true '

图像分类多机训练

  1. pai -name easy_vision_ext
  2. -Dbuckets='{bucket_name}.{oss_host}/{path}'
  3. -Darn='acs:ram::*********:role/aliyunodpspaidefaultrole'
  4. -DossHost='{oss_host}'
  5. -Dcmd train
  6. -Dcluster='{
  7. \"ps\": {
  8. \"count\" : 1,
  9. \"cpu\" : 600
  10. },
  11. \"worker\" : {
  12. \"count\" : 3,
  13. \"cpu\" : 800,
  14. \"gpu\" : 100
  15. }
  16. }'
  17. -Dparam_config='
  18. --model_type MultiLabelClassification
  19. --backbone inception_v4
  20. --num_classes 10
  21. --num_epochs 1
  22. --model_dir oss://pai-vision-data-sh/test/cifar_inception_v4_dis
  23. --use_pretrained_model true
  24. --train_data oss://pai-vision-data-sh/data/test/cifar10/*.tfrecord
  25. --test_data oss://pai-vision-data-sh/data/test/cifar10/*.tfrecord
  26. --num_test_example 20
  27. --train_batch_size 32
  28. --test_batch_size=32
  29. --image_size 299
  30. --initial_learning_rate 0.01
  31. --staircase true
  32. '

图像多标签单机训练

  1. pai -name easy_vision_ext
  2. -Dbuckets='{bucket_name}.{oss_host}/{path}'
  3. -Darn='acs:ram::*********:role/aliyunodpspaidefaultrole'
  4. -DossHost='{oss_host}'
  5. -DgpuRequired=100
  6. -Dcmd train
  7. -Dparam_config '
  8. --model_type Classification
  9. --backbone inception_v4
  10. --num_classes 10
  11. --num_epochs 1
  12. --model_dir oss://pai-vision-data-sh/test/cifar_inception_v4
  13. --use_pretrained_model true
  14. --train_data oss://pai-vision-data-sh/data/test/cifar10/*.tfrecord
  15. --test_data oss://pai-vision-data-sh/data/test/cifar10/*.tfrecord
  16. --num_test_example 20
  17. --train_batch_size 32
  18. --test_batch_size=32
  19. --image_size 299
  20. --initial_learning_rate 0.01
  21. --staircase true '

图像多标签多机训练

  1. pai -name easy_vision_ext
  2. -Dbuckets='{bucket_name}.{oss_host}/{path}'
  3. -Darn='acs:ram::*********:role/aliyunodpspaidefaultrole'
  4. -DossHost='{oss_host}'
  5. -Dcmd train
  6. -Dcluster='{
  7. \"ps\": {
  8. \"count\" : 1,
  9. \"cpu\" : 600
  10. },
  11. \"worker\" : {
  12. \"count\" : 3,
  13. \"cpu\" : 800,
  14. \"gpu\" : 100
  15. }
  16. }'
  17. -Dparam_config='
  18. --model_type Classification
  19. --backbone inception_v4
  20. --num_classes 10
  21. --num_epochs 1
  22. --model_dir oss://pai-vision-data-sh/test/cifar_inception_v4_dis
  23. --use_pretrained_model true
  24. --train_data oss://pai-vision-data-sh/data/test/cifar10/*.tfrecord
  25. --test_data oss://pai-vision-data-sh/data/test/cifar10/*.tfrecord
  26. --num_test_example 20
  27. --train_batch_size 32
  28. --test_batch_size=32
  29. --image_size 299
  30. --initial_learning_rate 0.01
  31. --staircase true
  32. '

参数说明

参数名称 参数描述 参数值格式 默认值
buckets 使用的oss bucket地址 oss://{bucket_name}.{oss_host}/{path} 无,必选参数
arn 访问OSS的授权,可以在https://help.aliyun.com/document_detail/154186.html 的IO相关参数说明中找到获取方法 acs:ram::*:role/aliyunodpspaidefaultrole 无,必选参数
host oss的域名 oss-{region}.aliyuncs.com 可选参数,不填默认从buckets参数中获取
cluster 分布式训练参数配置,具体说明参考这里 json格式字符串 “”
gpuRequired 可选,标识是否使用GPU。默认是一张卡,200表示一个worker申请2张卡。 100 “”, 默认使用一张卡
cmd easy-vision任务类型, 训练时填train train 无,必选参数
param_config 模型训练参数,格式和python argparser参数格式一致,详细说明见本文后续的param_config说明 字符串 无,必选参数

param_config说明

param_config 包含若干模型配置参数,格式遵循python argparser格式,示例如下,所有字符串均不需要加引号

  1. -Dparam_config = '
  2. --model_type MultiLabelClassification
  3. --backbone inception_v4
  4. --num_classes 200
  5. --model_dir oss://your/bucket/exp_dir
  6. '
参数名称 参数描述 参数值格式 默认值
model_type 训练模型类型 字符串,可选范围MultiLabelClassification 无,必选参数
backbone 识别模型的网络名称 字符串格式,可取值范围:lenetcifarnetalexnetvgg_16vgg_19inception_v1inception_v2inception_v3inception_v4mobilenet_v1mobilenet_v2resnet_v1_50resnet_v1_101resnet_v1_152 “inception_v4”
num_classes 分类类别数目 100 无,必选参数
image_size 图片resize后大小 整型 例如224 224
use_crop 是否使用crop进行数据增强 布尔型 true
eval_each_category 是否针对每个类别单独做评估 布尔型 false
optimizer 优化方法,其中momentum就是sgd 字符串,可选方法如下:momentumadam momentum
lr_type 学习率调整策略exponential_decay, 指数衰减,详细参考tf.train.exponential_decay polynomial_decay, 多项式衰减,详细参考tf.train.polynomial_decay, 其中num_steps自动设置为总的训练迭代次数,end_learning_rate为initial_learning_rate的千分之一 manual_step, 人工指定各阶段的学习率,通过decay_epochs 指定需要调整学习率的迭代轮数,通过learning_rates指定对应迭代轮数使用的学习率 cosine_decay, 按照余弦曲线调整lr,详细参考论文 字符串,可选方法如下:exponential_decaypolynomial_decaymanual_step exponential_decay
initial_learning_rate 初始学习率 浮点数 0.01
decay_epochs 如果使用exponential_decay, 参数对应 tf.train.exponential_decay中的decay_steps,后端会自动根据训练数据总数把decay_epochs转换为decay_steps。例如数值可填:10,一般是总epoch数的1/2。 如果使用manual_step, 参数表示需要调整学习率的迭代轮数, “16 18”表示在16epoch 18 epoch对学习率进行调整。一般这两个值取总设置的总epoch的8/10、9/10 整数列表20 20 40 60 20
decay_factor tf.train.exponential_decay 中的decay_factor 浮点数 0.95
staircase tf.train.exponential_decay 中的staircase 布尔 true
power tf.train.polynomial_decay 中的power float 0.9
learning_rates manual_step学习率调整策略中使用的参数,表示在指定epoch 学习率调整为多少. 如果您指定的调整epoch有两个,则需要在此也填写两个对应的学习率。例:decay_epoches为20 40,此处填写0.001 0.0001,则代表在20epoch学习率调整为0.001,40epoch学习率调整为0.0001。建议这几次调整的学习率是初始学习率的1/10、1/100、1/1000…… manual_step学习率调整策略中使用的参数,表示在指定epoch 学习率调整为多少 浮点列表
train_data 训练数据文件oss路径 oss://path/to/train_*.tfrecord 无,必选参数
test_data 训练过程中评估数据oss路径 oss://path/to/test_*.tfrecord 无,必选参数
train_batch_size 训练batch_size 整型, 例如32 无,必选参数
test_batch_size 评估batch_size 整型, 例如32 无,必选参数
train_num_readers 训练数据并发读取线程数 整型 4
model_dir 训练所用oss目录 oss://path/to/model 无,必选参数
pretrained_model 预训练模型oss路径,如果提供,会在此模型基础上finetune oss://pai-vision-data-sh/pretrained_models/inception_v4.ckpt “”
use_pretrained_model 是否使用预训练模型 布尔型 true
num_epochs 训练迭代轮数,1表示所有训练数据过了一遍 整型 40 无,必选参数
num_test_example 训练过程中评估数据条目数, -1表示使用所有测试数据集数据 整型,例如2000 可选,默认-1
num_visualizations 评估过程可视化显示的样本数目 整型 10
save_checkpoint_epochs 保存checkpoint的频率,以epoch为单位, 1表示每过一遍训练数据保存一次checkpoint 整型 1
num_train_images 总的训练样本数,如果使用自己生成的tfrecord需要提供该信息 整型 可选,默认0
label_map_path 类别映射文件,如果使用自己生成的tfrecord需要提供该信息 字符串 可选,默认””