PAI-EasyVision提供圖像檢測模型的訓練及預測功能,本文為您介紹如何通過PAI命令進行圖像檢測模型訓練。

PAI-EasyVision對配置進行了簡化,您通過-Dparam_config即可配置常用參數,無需了解PAI-EasyVision的配置文件規則和邏輯。 如果需要嘗試更復雜的模型配置,您可以通過PAI-EasyVision命令中的-Dconfig直接傳遞配置文件進行圖像檢測模型訓練。圖像檢測訓練支持的模型如下表所示。

模型 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
SSD vgg16_reduce_fc
SSD mobilenet_v1

圖像檢測訓練

  • 單卡示例
    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://pai-vision-data-sh/data/voc0712_tfrecord/voc0712_part_*.tfrecord
                 --test_data oss://pai-vision-data-sh/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
               '
  • 多卡示例
    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://pai-vision-data-sh/data/voc0712_tfrecord/voc0712_part_*.tfrecord
                 --test_data oss://pai-vision-data-sh/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地址。 oss://{bucket_name}.{oss_host}/{path}
arn 訪問OSS的授權,其獲取方式請參見PAI-TF任務參數介紹的IO相關參數說明部分。 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/exp_dir
'
說明 所有字符串類型的參數,其取值均不加引號。
參數名稱 是否必選 描述 參數值格式 默認值
model_type 訓練模型類型,取值范圍包括:
  • SSD
  • FasterRCNN
  • RFCN
STRING
backbone 檢測模型使用的Bkbone,取值包括:
  • 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 檢測類別數目,不包括默認背景分類。 21
anchor_scales Anchor框大小,與Resize后的輸入圖片尺度相同。如果使用普通SSD,則無需指定該參數。如果使用FPN,則僅需為該參數指定一個值,表示分辨率最高Layer的Anchor大小,共5個Layer,后面每個Layer的Anchor大小為前一Layer的2倍。例如32,64,128,256,512。如果使用FasterRCNN或RFCN(不包括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]倍。
  • FNP:32
  • FasterRCNNFNP:32
  • FasterRCNNRFCN:[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 優化方法,取值包括:
  • 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 Epoch和18 Epoch對學習率進行調整。通常將這兩個值配置為總Epoch的8/10和9/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_epoches20 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路徑。如果指定該參數,則系統在此模型基礎上Finetune。 oss://pai-vision-data-sh/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 ””