PAI圖像語(yǔ)義分割訓(xùn)練
PAI-EasyVision提供圖像語(yǔ)義分割模型的訓(xùn)練及預(yù)測(cè)功能,本文為您介紹如何通過(guò)PAI命令進(jìn)行圖像語(yǔ)義分割模型訓(xùn)練。
圖像語(yǔ)義分割訓(xùn)練
圖像分割組件實(shí)現(xiàn)了基于DeepLab-V3的語(yǔ)義分割模型,詳情請(qǐng)參見(jiàn)Encoder-Decoder with Atrous Separable Convolution for Semantic Image Segmentation。您可以使用SQL腳本組件進(jìn)行PAI命令調(diào)用,也可以使用MaxCompute客戶端或DataWorks的開(kāi)發(fā)節(jié)點(diǎn)進(jìn)行PAI命令調(diào)用,詳情請(qǐng)參見(jiàn)使用本地客戶端(odpscmd)連接或開(kāi)發(fā)ODPS SQL任務(wù)。以單卡為例,您可以使用以下示例進(jìn)行圖像語(yǔ)義分割訓(xùn)練。
pai -name easy_vision_ext
-Dbuckets='oss://{bucket_name}.{oss_host}/{path}'
-Darn='acs:ram::*********:role/aliyunodpspaidefaultrole'
-DossHost='{oss_host}'
-DgpuRequired=100
-Dcmd train
-Dparam_config '--model_type DeeplabV3 --backbone resnet_v1_50 --backbone_feature_stride 16 --bn_trainable true --num_classes 21 --num_epochs 1 --model_dir oss://YOUR_BUCKET_NAME/test/test_deeplabv3 --train_data oss://YOUR_BUCKET_NAME/data/test/pascal_voc_seg_aug/voc_ev_train.tfrecord --test_data oss://YOUR_BUCKET_NAME/data/test/pascal_voc_seg_aug/voc_ev_train.tfrecord --num_test_example 2 --train_batch_size 6 --test_batch_size 1 --image_crop_size 513 --lr_type polynomial_decay --initial_learning_rate 0.007 --power 0.9'
參數(shù)說(shuō)明
參數(shù) | 是否必選 | 描述 | 參數(shù)值格式 | 默認(rèn)值 |
buckets | 是 | OSS Bucket地址。Bucket必須以正斜線(/)結(jié)尾。 | oss://{bucket_name}.{oss_host}/{path} | 無(wú) |
arn | 是 | 訪問(wèn)OSS的授權(quán)。您可以登錄PAI控制臺(tái),在全部產(chǎn)品依賴頁(yè)面的Designer區(qū)域,單擊操作列下的查看授權(quán)信息,獲取arn,具體操作請(qǐng)參見(jiàn)云產(chǎn)品依賴與授權(quán):Designer。 | acs:ram::*:role/AliyunODPSPAIDefaultRole | 無(wú) |
ossHost | 否 | OSS訪問(wèn)域名,詳情請(qǐng)參見(jiàn)訪問(wèn)域名和數(shù)據(jù)中心。 | oss-{region}.aliyuncs.com | 默認(rèn)從Buckets參數(shù)中獲取 |
cluster | 否 | 分布式訓(xùn)練參數(shù)相關(guān)配置。 | JSON格式字符串 | “” |
gpuRequired | 否 | 標(biāo)識(shí)是否使用GPU,默認(rèn)使用一張卡。如果取值為200,則一個(gè)Worker申請(qǐng)2張卡。 | 100 | 100 |
cmd | 是 | EasyVision任務(wù)類型。模型訓(xùn)練時(shí),該參數(shù)應(yīng)取值為train。 | train | 無(wú) |
param_config | 是 | 模型訓(xùn)練參數(shù),格式和python argparser參數(shù)格式一致,詳細(xì)說(shuō)明見(jiàn)param_config說(shuō)明。 | STRING | 無(wú) |
param_config說(shuō)明
param_config包含若干模型配置相關(guān)參數(shù),格式為Python Argparser,示例如下。
-Dparam_config = '--backbone resnet_v1_50 --num_classes 200 --model_dir oss://YOUR_BUCKET_NAME/exp_dir'
所有字符串類型的參數(shù),其取值均不加引號(hào)。
參數(shù) | 是否必選 | 描述 | 參數(shù)值格式 | 默認(rèn)值 |
model_type | 是 | 訓(xùn)練模型類型。進(jìn)行圖像語(yǔ)義分割訓(xùn)練時(shí),該參數(shù)的取值為DeeplabV3。 | STRING | 無(wú) |
backbone | 是 | 分割模型使用的Backbone,取值包括:
| STRING | 無(wú) |
weight_decay | 否 | L2 Regularization大小。 | FLOAT | 1e-4 |
num_classes | 是 | 分割類別數(shù)量(包括背景類)。 | 21 | 無(wú) |
backbone_feature_stride | 否 | 主干網(wǎng)絡(luò)的特征分辨率(下采樣步長(zhǎng))。 | INT,例如8或16。 | 16 |
bn_trainable | 否 | BN是否可以訓(xùn)練,通常train_batch_size大于8時(shí),將該參數(shù)配置為true。 | BOOL | true |
image_crop_size | 否 | 圖片裁剪后的大小。 | INT | 513 |
optimizer | 否 | 優(yōu)化方法,取值包括:
| STRING | momentum |
lr_type | 否 | 學(xué)習(xí)率調(diào)整策略,取值包括:
| STRING | exponential_decay |
initial_learning_rate | 否 | 初始學(xué)習(xí)率。 | FLOAT | 0.01 |
decay_epochs | 否 | 如果使用exponential_decay,該參數(shù)對(duì)應(yīng)tf.train.exponential.decay中的decay_steps,系統(tǒng)會(huì)自動(dòng)根據(jù)訓(xùn)練數(shù)據(jù)總數(shù)將decay_epochs轉(zhuǎn)換為decay_steps。例如,取值為10,通常是總Epoch數(shù)的1/2。如果使用manual_step,該參數(shù)表示需要調(diào)整學(xué)習(xí)率的迭代輪數(shù)。例如16 18表示在16 Epoch和18 Epoch對(duì)學(xué)習(xí)率進(jìn)行調(diào)整。通常將這兩個(gè)值配置為總Epoch的8/10和9/10。 | 整數(shù)列表,例如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學(xué)習(xí)率調(diào)整策略中使用的參數(shù),表示在指定Epoch中學(xué)習(xí)率的取值。 如果您指定的調(diào)整Epoch有兩個(gè),則需要在此指定兩個(gè)Epoch對(duì)應(yīng)的學(xué)習(xí)率。例如,如果decay_epoches為20 40,則該將參數(shù)配置為0.001 0.0001,表示在20 Epoch學(xué)習(xí)率調(diào)整為0.001,40 Epoch學(xué)習(xí)率調(diào)整為0.0001。建議幾次調(diào)整的學(xué)習(xí)率依次為初始學(xué)習(xí)率的1/10、1/100及1/1000。 | 浮點(diǎn)列表 | 無(wú) |
lr_warmup | 否 | 是否對(duì)學(xué)習(xí)率進(jìn)行Warmup。 | BOOL | false |
lr_warm_up_epochs | 否 | 學(xué)習(xí)率Warmup的輪數(shù)。 | FLOAT | 1 |
train_data | 是 | 訓(xùn)練數(shù)據(jù)文件的OSS路徑。 | oss://path/to/train_*.tfrecord | 無(wú) |
test_data | 是 | 訓(xùn)練過(guò)程中,評(píng)估數(shù)據(jù)的OSS路徑。 | oss://path/to/test_*.tfrecord | 無(wú) |
train_batch_size | 是 | 訓(xùn)練的Batch_size。 | INT, 例如32。 | 無(wú) |
test_batch_size | 是 | 評(píng)估的Batch_size。 | INT,例如32。 | 無(wú) |
train_num_readers | 否 | 訓(xùn)練數(shù)據(jù)并發(fā)讀取線程數(shù)。 | INT | 4 |
model_dir | 是 | 訓(xùn)練使用的OSS目錄。 | oss://path/to/model | 無(wú) |
pretrained_model | 否 | 預(yù)訓(xùn)練模型的OSS路徑。如果指定該參數(shù)值,則會(huì)在此模型基礎(chǔ)上進(jìn)行Finetune。 | oss://examplebucket/pretrained_models/inception_v4.ckpt | “” |
use_pretrained_model | 否 | 是否使用預(yù)訓(xùn)練模型。 | BOOL | true |
num_epochs | 是 | 訓(xùn)練迭代輪數(shù)。取值1表示對(duì)所有訓(xùn)練數(shù)據(jù)都進(jìn)行一次迭代。 | INT,例如40。 | 無(wú) |
num_test_example | 否 | 訓(xùn)練過(guò)程中評(píng)估數(shù)據(jù)條目數(shù)。取值 -1表示使用所有測(cè)試數(shù)據(jù)作為評(píng)估數(shù)據(jù)。 | INT,例如2000。 | -1 |
num_visualizations | 否 | 評(píng)估過(guò)程可視化顯示的樣本數(shù)量。 | INT | 10 |
save_checkpoint_epochs | 否 | 保存Checkpoint的頻率,以Epoch為單位。取值為1表示每完成一次訓(xùn)練就保存一次Checkpoint。 | INT | 1 |
save_summary_epochs | 否 | 保存Summary的頻率,以Epoch為單位。取值為0.01表示每迭代1%的訓(xùn)練數(shù)據(jù)就保存一次Summary。 | FLOAT | 0.01 |
num_train_images | 否 | 總的訓(xùn)練樣本數(shù)。如果使用自己生成的TFRecord,則需要指定該參數(shù)。 | INT | 0 |
label_map_path | 否 | 類別映射文件。如果使用自己生成的TFRecord,則需要指定該參數(shù)。 | STRING | ”” |