PAI图像检测训练

PAI-EasyVision提供图像检测模型的训练功能,本文为您介绍如何通过PAI命令进行图像检测模型训练。

PAI-EasyVision简化了配置,您只需通过-Dparam_config配置常用参数,无需了解PAI-EasyVision的配置文件规则和逻辑。图像检测训练支持的模型如下表所示。

模型

Backbone

是否支持FPN

FasterRCNN

  • resnet_v1_50

  • resnet_v1_101

  • resnet_v1a_18

  • resnet_v1a_34

  • resnet_v1d_50

  • resnet_v1d_101

  • resnet_v1d_152

RFCN

  • resnet_v1_50

  • resnet_v1_101

  • resnet_v1a_18

  • resnet_v1a_34

  • resnet_v1d_50

  • resnet_v1d_101

  • resnet_v1d_152

SSD

  • resnet_v1_50

  • resnet_v1d_50

  • vgg16_reduce_fc

  • mobilenet_v1

图像检测训练

您可以使用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

训练模型类型,取值范围:

  • SSD

  • FasterRCNN

  • RFCN

STRING

backbone

检测模型使用的Backbone,取值:

  • mobilenet_v1

  • resnet_v1_50

  • resnet_v1_101

  • resnet_v1a_18

  • resnet_v1a_34

  • resnet_v1d_50

  • resnet_v1d_101

  • vgg16 _reduce_fc

STRING

weight_decay

L2 Regularization的大小。

FLOAT

1e-4

use_fpn

是否使用FPN。

BOOL

false

num_classes

检测类别数目,不包括默认背景分类。

INT,例如21

anchor_scales

Anchor框大小,与Resize后的输入图片尺度相同。

  • 如果使用普通SSD,则无需指定该参数。

  • 如果使用FPN,则仅需为该参数指定一个值,表示分辨率最高LayerAnchor大小,共5Layer,后面每个LayerAnchor大小为前一Layer2倍。例如32,64,128,256,512

  • 如果使用FasterRCNNRFCN(不包括FPN),则可以任意指定多个Anchor大小。例如128 256 512

浮点列表。例如,32(单一尺度 )或128 256 512( 多个尺度 )。

  • SSD:输入大小的[0.1 0.2 0.37 0.54 0.71 0.88 0.96 1.0]倍。

  • FPN:32

  • FasterRCNNFPN:32

  • FasterRCNNRFCN:[128 256 512]

anchor_ratios

Anchor宽高比。

浮点列表

0.5 1 2

image_sizes

输入图片缩放大小,仅使用SSD时,该参数生效。取值为长度等于2的列表,分别表示高和宽。

浮点列表

300 300

image_min_sizes

图片缩放大小最短边(FasterRCNNRFCN使用该参数)。为支持Multi-Scale Training,如果输入多个Size时,则前N-1个作为训练配置,最后一个作为评估测试配置。否则训练与评估使用相同配置。

浮点列表

600

image_max_sizes

图片缩放大小最长边(FasterRCNNRFCN使用该参数)。为支持Multi-Scale Training,如果输入多个Size时,则前N-1个作为训练配置,最后一个作为评估测试配置。否则训练与评估使用相同配置。

浮点列表

1024

optimizer

优化方法,取值:

  • momentum:指sgd

  • adam

STRING

momentum

lr_type

学习率调整策略,取值:

  • exponential_decay:指数衰减。

  • polynomial_decay:多项式衰减。

    其中num_steps自动配置为总训练迭代次数,end_learning_rateinitial_learning_rate的千分之一

  • manual_step:手动指定各阶段的学习率。

    通过decay_epochs指定需要调整学习率的迭代轮数,通过learning_rates指定对应迭代轮数使用的学习率。

  • cosine_decay

    通过余弦曲线调整lr,详情请参见论文。通过decay_epochs指定需要调整学习率的迭代轮数。

STRING

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表示在16 Epoch18 Epoch对学习率进行调整。通常将这两个值配置为总Epoch8/109/10。

整数列表,例如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_epochs20 40,则该参数配置为0.001 0.0001,表示在20 Epoch学习率调整为0.001,40 Epoch学习率调整为0.0001。建议几次调整的学习率依次为初始学习率的1/10、1/1001/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

””