2021-06-08 16:07:24 +08:00
#!/bin/bash
2021-06-08 16:13:28 +08:00
# Usage:
# bash test/test.sh ./test/params.txt 'lite_train_infer'
2021-06-08 16:07:24 +08:00
FILENAME = $1
# MODE be one of ['lite_train_infer' 'whole_infer' 'whole_train_infer']
MODE = $2
# prepare pretrained weights and dataset
wget -nc -P ./pretrain_models/ https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/MobileNetV3_large_x0_5_pretrained.pdparams
if [ ${ MODE } = "lite_train_infer" ] ; then
# pretrain lite train data
rm -rf ./train_data/icdar2015
wget -nc -P ./train_data/ https://paddleocr.bj.bcebos.com/dygraph_v2.0/test/icdar2015_lite.tar
cd ./train_data/ && tar xf icdar2015_lite.tar &&
ln -s ./icdar2015_lite ./icdar2015
cd ../
2021-06-08 16:29:22 +08:00
epoch = 10
eval_batch_step = 10
2021-06-08 16:07:24 +08:00
elif [ ${ MODE } = "whole_train_infer" ] ; then
rm -rf ./train_data/icdar2015
wget -nc -P ./train_data/ https://paddleocr.bj.bcebos.com/dygraph_v2.0/test/icdar2015.tar
cd ./train_data/ && tar xf icdar2015.tar && cd ../
2021-06-08 16:29:22 +08:00
epoch = 300
eval_batch_step = 200
2021-06-08 16:07:24 +08:00
else
echo "Do Nothing"
fi
dataline = $( cat ${ FILENAME } )
# parser params
IFS = $'\n'
lines = ( ${ dataline } )
function func_parser( ) {
strs = $1
IFS = ":"
array = ( ${ strs } )
tmp = ${ array [1] }
echo ${ tmp }
}
IFS = $'\n'
# The training params
train_model_list = $( func_parser " ${ lines [0] } " )
gpu_list = $( func_parser " ${ lines [1] } " )
auto_cast_list = $( func_parser " ${ lines [2] } " )
slim_trainer_list = $( func_parser " ${ lines [3] } " )
python = $( func_parser " ${ lines [4] } " )
# inference params
inference = $( func_parser " ${ lines [5] } " )
devices = $( func_parser " ${ lines [6] } " )
use_mkldnn_list = $( func_parser " ${ lines [7] } " )
cpu_threads_list = $( func_parser " ${ lines [8] } " )
rec_batch_size_list = $( func_parser " ${ lines [9] } " )
gpu_trt_list = $( func_parser " ${ lines [10] } " )
gpu_precision_list = $( func_parser " ${ lines [11] } " )
2021-06-08 16:18:08 +08:00
img_dir = "./train_data/icdar2015/text_localization/ch4_test_images/"
2021-06-08 16:07:24 +08:00
# train superparameters
2021-06-08 16:29:22 +08:00
#epoch=$(func_parser "${lines[12]}")
#checkpoints=$(func_parser "${lines[13]}")
2021-06-08 16:07:24 +08:00
for train_model in ${ train_model_list [*] } ; do
2021-06-08 16:11:20 +08:00
if [ ${ train_model } = "ocr_det" ] ; then
2021-06-08 16:07:24 +08:00
model_name = "det"
yml_file = "configs/det/det_mv3_db.yml"
2021-06-08 16:11:20 +08:00
elif [ ${ train_model } = "ocr_rec" ] ; then
2021-06-08 16:07:24 +08:00
model_name = "rec"
yml_file = "configs/rec/rec_mv3_none_bilstm_ctc.yml"
else
model_name = "det"
yml_file = "configs/det/det_mv3_db.yml"
fi
IFS = "|"
for gpu in ${ gpu_list [*] } ; do
use_gpu = True
if [ ${ gpu } = "-1" ] ; then
lanuch = ""
use_gpu = False
elif [ ${# gpu } -le 1 ] ; then
launch = ""
else
launch = " -m paddle.distributed.launch --log_dir=./debug/ --gpus ${ gpu } "
fi
# echo "model_name: ${model_name} yml_file: ${yml_file} launch: ${launch} gpu: ${gpu}"
for auto_cast in ${ auto_cast_list [*] } ; do
for slim_trainer in ${ slim_trainer_list [*] } ; do
if [ ${ slim_trainer } = "norm" ] ; then
trainer = "tools/train.py"
export_model = "tools/export_model.py"
elif [ ${ slim_trainer } = "quant" ] ; then
trainer = "deploy/slim/quantization/quant.py"
export_model = "deploy/slim/quantization/export_model.py"
elif [ ${ slim_trainer } = "prune" ] ; then
trainer = "deploy/slim/prune/sensitivity_anal.py"
export_model = "deploy/slim/prune/export_prune_model.py"
elif [ ${ slim_trainer } = "distill" ] ; then
trainer = "deploy/slim/distill/train_dml.py"
export_model = "deploy/slim/distill/export_distill_model.py"
else
trainer = "tools/train.py"
export_model = "tools/export_model.py"
fi
# dataset="Train.dataset.data_dir=${train_dir} Train.dataset.label_file_list=${train_label_file} Eval.dataset.data_dir=${eval_dir} Eval.dataset.label_file_list=${eval_label_file}"
save_log = ${ log_path } /${ model_name } _${ slim_trainer } _autocast_${ auto_cast } _gpuid_${ gpu }
2021-06-08 18:24:21 +08:00
2021-06-08 16:29:22 +08:00
${ python } ${ launch } ${ trainer } -c ${ yml_file } -o Global.epoch_num= ${ epoch } Global.eval_batch_step= ${ eval_batch_step } Global.auto_cast= ${ auto_cast } Global.save_model_dir= ${ save_log } Global.use_gpu= ${ use_gpu }
2021-06-08 18:24:21 +08:00
${ python } ${ export_model } -c ${ yml_file } -o Global.pretrained_model= ${ save_log } /best_accuracy Global.save_inference_dir= ${ save_log } /export_inference/ Global.save_model_dir= ${ save_log }
if [ $? -eq 0 ] ; then
echo -e " \033[33m training of $model_name successfully!\033[0m " | tee -a ${ save_log } /train.log
else
cat ${ save_log } /train.log
echo -e " \033[33m training of $model_name failed!\033[0m " | tee -a ${ save_log } /train.log
fi
2021-06-08 16:07:24 +08:00
if [ " ${ model_name } " = "det" ] ; then
export rec_batch_size_list = ( "1" )
inference = "tools/infer/predict_det.py"
2021-06-08 20:42:11 +08:00
det_model_dir = ${ save_log } /export_inference/
rec_model_dir = ""
2021-06-08 16:07:24 +08:00
elif [ " ${ model_name } " = "rec" ] ; then
inference = "tools/infer/predict_rec.py"
2021-06-08 20:42:11 +08:00
rec_model_dir = ${ save_log } /export_inference/
det_model_dir = ""
2021-06-08 16:07:24 +08:00
fi
# inference
for device in ${ devices [*] } ; do
if [ ${ device } = "cpu" ] ; then
for use_mkldnn in ${ use_mkldnn_list [*] } ; do
for threads in ${ cpu_threads_list [*] } ; do
for rec_batch_size in ${ rec_batch_size_list [*] } ; do
echo ${ python } ${ inference } --enable_mkldnn= ${ use_mkldnn } --use_gpu= False --cpu_threads= ${ threads } --benchmark= True --det_model_dir= ${ save_log } /export_inference/ --rec_batch_num= ${ rec_batch_size } --rec_model_dir= ${ rec_model_dir } --image_dir= ${ img_dir } --save_log_path= ${ log_path } /${ model_name } _${ slim_trainer } _cpu_usemkldnn_${ use_mkldnn } _cputhreads_${ threads } _recbatchnum_${ rec_batch_size } _infer.log
2021-06-08 18:37:56 +08:00
${ python } ${ inference } --enable_mkldnn= ${ use_mkldnn } --use_gpu= False --cpu_threads= ${ threads } --benchmark= True --det_model_dir= ${ save_log } /export_inference/ --rec_batch_num= ${ rec_batch_size } --rec_model_dir= ${ rec_model_dir } --image_dir= ${ img_dir } --save_log_path= ${ log_path } /${ model_name } _${ slim_trainer } _cpu_usemkldnn_${ use_mkldnn } _cputhreads_${ threads } _recbatchnum_${ rec_batch_size } _infer.log
2021-06-08 18:24:21 +08:00
if [ $? -eq 0 ] ; then
echo -e " \033[33m training of $model_name successfully!\033[0m " | tee -a ${ log_path } ${ model_name } _${ slim_trainer } _cpu_usemkldnn_${ use_mkldnn } _cputhreads_${ threads } _recbatchnum_${ rec_batch_size } _infer.log
else
cat ${ log_path } ${ model_name } _${ slim_trainer } _cpu_usemkldnn_${ use_mkldnn } _cputhreads_${ threads } _recbatchnum_${ rec_batch_size } _infer.log
echo -e " \033[33m training of $model_name failed!\033[0m " | tee -a ${ log_path } ${ model_name } _${ slim_trainer } _cpu_usemkldnn_${ use_mkldnn } _cputhreads_${ threads } _recbatchnum_${ rec_batch_size } _infer.log
fi
2021-06-08 16:07:24 +08:00
done
done
done
else
for use_trt in ${ gpu_trt_list [*] } ; do
for precision in ${ gpu_precision_list [*] } ; do
if [ ${ use_trt } = "False" ] && [ ${ precision } != "fp32" ] ; then
continue
fi
for rec_batch_size in ${ rec_batch_size_list [*] } ; do
# echo "${model_name} ${det_model_dir} ${rec_model_dir}, use_trt: ${use_trt} use_fp16: ${use_fp16}"
2021-06-08 16:08:52 +08:00
${ python } ${ inference } --use_gpu= True --use_tensorrt= ${ use_trt } --precision= ${ precision } --benchmark= True --det_model_dir= ${ save_log } /export_inference/ --rec_batch_num= ${ rec_batch_size } --rec_model_dir= ${ rec_model_dir } --image_dir= ${ img_dir } --save_log_path= ${ log_path } /${ model_name } _${ slim_trainer } _gpu_usetensorrt_${ use_trt } _usefp16_${ precision } _recbatchnum_${ rec_batch_size } _infer.log
2021-06-08 16:07:24 +08:00
done
done
done
fi
done
done
done
done
done