PaddleOCR/test/test.sh

196 lines
10 KiB
Bash
Raw Normal View History

2021-06-08 16:07:24 +08:00
#!/bin/bash
2021-06-08 16:13:28 +08:00
# Usage:
2021-06-09 14:48:56 +08:00
# bash test/test.sh ./test/paddleocr_ci_params.txt 'lite_train_infer'
2021-06-08 16:13:28 +08:00
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
2021-06-09 13:02:34 +08:00
wget -nc -P ./pretrain_models/ https://paddleocr.bj.bcebos.com/dygraph_v2.0/en/det_mv3_db_v2.0_train.tar
cd pretrain_models && tar xf det_mv3_db_v2.0_train.tar && cd ../
2021-06-09 10:12:32 +08:00
2021-06-08 16:07:24 +08:00
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
2021-06-09 10:12:32 +08:00
cd ./train_data/ && tar xf icdar2015_lite.tar
2021-06-08 16:07:24 +08:00
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 21:22:54 +08:00
epoch=500
2021-06-08 16:29:22 +08:00
eval_batch_step=200
2021-06-08 16:07:24 +08:00
else
2021-06-09 10:12:32 +08:00
rm -rf ./train_data/icdar2015
wget -nc -P ./train_data/ https://paddleocr.bj.bcebos.com/dygraph_v2.0/test/icdar2015_infer.tar
cd ./train_data/ && tar xf icdar2015_infer.tar
ln -s ./icdar2015_infer ./icdar2015
cd ../
epoch=10
eval_batch_step=10
2021-06-08 16:07:24 +08:00
fi
2021-06-09 10:12:32 +08:00
img_dir="./train_data/icdar2015/text_localization/ch4_test_images/"
2021-06-08 16:07:24 +08:00
dataline=$(cat ${FILENAME})
# parser params
IFS=$'\n'
lines=(${dataline})
function func_parser(){
strs=$1
2021-06-09 10:12:32 +08:00
IFS=": "
2021-06-08 16:07:24 +08:00
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-09 10:12:32 +08:00
log_path=$(func_parser "${lines[13]}")
2021-06-09 14:48:56 +08:00
status_log="${log_path}/result.log"
2021-06-08 21:22:54 +08:00
2021-06-09 11:27:36 +00:00
# install requirments
${python} -m pip install pynvml;
${python} -m pip install psutil;
${python} -m pip install GPUtil;
2021-06-10 15:49:33 +08:00
${python} -m pip install paddlesim==2.0.0
2021-06-09 11:27:36 +00:00
2021-06-08 21:22:54 +08:00
function status_check(){
2021-06-08 21:24:43 +08:00
last_status=$1 # the exit code
2021-06-08 21:22:54 +08:00
run_model=$2
run_command=$3
2021-06-09 15:38:54 +08:00
run_log=$4
2021-06-08 21:22:54 +08:00
if [ $last_status -eq 0 ]; then
2021-06-09 15:38:54 +08:00
echo -e "\033[33m $run_model successfully with command - ${run_command}! \033[0m" | tee -a ${run_log}
2021-06-08 21:22:54 +08:00
else
2021-06-09 15:38:54 +08:00
echo -e "\033[33m $case failed with command - ${run_command}! \033[0m" | tee -a ${run_log}
2021-06-08 21:22:54 +08:00
fi
}
2021-06-08 16:07:24 +08:00
2021-06-09 11:59:04 +08:00
IFS="|"
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
use_gpu=False
env=""
2021-06-08 16:07:24 +08:00
elif [ ${#gpu} -le 1 ];then
env="CUDA_VISIBLE_DEVICES=${gpu}"
2021-06-08 16:07:24 +08:00
else
IFS=","
array=(${gpu})
env="CUDA_VISIBLE_DEVICES=${array[0]}"
IFS="|"
2021-06-08 16:07:24 +08:00
fi
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"
2021-06-09 13:02:34 +08:00
pretrain="./pretrain_models/MobileNetV3_large_x0_5_pretrained"
2021-06-08 16:07:24 +08:00
elif [ ${slim_trainer} = "quant" ]; then
trainer="deploy/slim/quantization/quant.py"
export_model="deploy/slim/quantization/export_model.py"
2021-06-09 13:02:34 +08:00
pretrain="./pretrain_models/det_mv3_db_v2.0_train/best_accuracy"
2021-06-08 16:07:24 +08:00
elif [ ${slim_trainer} = "prune" ]; then
trainer="deploy/slim/prune/sensitivity_anal.py"
export_model="deploy/slim/prune/export_prune_model.py"
2021-06-09 13:02:34 +08:00
pretrain="./pretrain_models/det_mv3_db_v2.0_train/best_accuracy"
2021-06-08 16:07:24 +08:00
elif [ ${slim_trainer} = "distill" ]; then
trainer="deploy/slim/distill/train_dml.py"
export_model="deploy/slim/distill/export_distill_model.py"
2021-06-09 13:02:34 +08:00
pretrain=""
2021-06-08 16:07:24 +08:00
else
trainer="tools/train.py"
export_model="tools/export_model.py"
2021-06-09 13:02:34 +08:00
pretrain="./pretrain_models/MobileNetV3_large_x0_5_pretrained"
2021-06-08 16:07:24 +08:00
fi
2021-06-09 11:59:04 +08:00
save_log="${log_path}/${model_name}_${slim_trainer}_autocast_${auto_cast}_gpuid_${gpu}"
2021-06-10 14:19:52 +08:00
if [ ${#gpu} -le 2 ];then
command="${python} ${trainer} -c ${yml_file} -o Global.epoch_num=${epoch} Global.eval_batch_step=${eval_batch_step} Global.auto_cast=${auto_cast} Global.pretrained_model=${pretrain} Global.save_model_dir=${save_log} Global.use_gpu=${use_gpu} Train.loader.batch_size_per_card=2"
${python} ${trainer} -c ${yml_file} -o Global.epoch_num=${epoch} Global.eval_batch_step=${eval_batch_step} Global.auto_cast=${auto_cast} Global.pretrained_model=${pretrain} Global.save_model_dir=${save_log} Global.use_gpu=${use_gpu} Train.loader.batch_size_per_card=2
else
command="${python} -m paddle.distributed.launch --log_dir=./debug/ --gpus ${gpu} ${trainer} -c ${yml_file} -o Global.epoch_num=${epoch} Global.eval_batch_step=${eval_batch_step} Global.auto_cast=${auto_cast} Global.pretrained_model=${pretrain} Global.save_model_dir=${save_log} Global.use_gpu=${use_gpu} Train.loader.batch_size_per_card=2"
${python} -m paddle.distributed.launch --log_dir=./debug/ --gpus ${gpu} ${trainer} -c ${yml_file} -o Global.epoch_num=${epoch} Global.eval_batch_step=${eval_batch_step} Global.auto_cast=${auto_cast} Global.pretrained_model=${pretrain} Global.save_model_dir=${save_log} Global.use_gpu=${use_gpu} Train.loader.batch_size_per_card=2
fi
2021-06-09 14:48:56 +08:00
status_check $? "${trainer}" "${command}" "${status_log}"
2021-06-08 21:22:54 +08:00
2021-06-09 10:03:27 +00:00
command="${python} ${export_model} -c ${yml_file} -o Global.pretrained_model=${save_log}/latest Global.save_inference_dir=${save_log}_infer/ Global.save_model_dir=${save_log}"
${python} ${export_model} -c ${yml_file} -o Global.pretrained_model=${save_log}/latest Global.save_inference_dir=${save_log}_infer/ Global.save_model_dir=${save_log}
2021-06-09 14:48:56 +08:00
status_check $? "${trainer}" "${command}" "${status_log}"
2021-06-08 18:24:21 +08:00
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-09 10:03:27 +00:00
det_model_dir=${save_log}_infer
2021-06-08 20:42:11 +08:00
rec_model_dir=""
2021-06-08 16:07:24 +08:00
elif [ "${model_name}" = "rec" ]; then
inference="tools/infer/predict_rec.py"
2021-06-09 10:03:27 +00:00
rec_model_dir=${save_log}_infer
2021-06-08 20:42:11 +08:00
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
2021-06-08 21:22:54 +08:00
save_log_path="${log_path}/${model_name}_${slim_trainer}_cpu_usemkldnn_${use_mkldnn}_cputhreads_${threads}_recbatchnum_${rec_batch_size}_infer.log"
2021-06-09 10:03:27 +00:00
command="${python} ${inference} --enable_mkldnn=${use_mkldnn} --use_gpu=False --cpu_threads=${threads} --benchmark=True --det_model_dir=${det_model_dir} --rec_batch_num=${rec_batch_size} --rec_model_dir=${rec_model_dir} --image_dir=${img_dir} --save_log_path=${save_log_path}"
${python} ${inference} --enable_mkldnn=${use_mkldnn} --use_gpu=False --cpu_threads=${threads} --benchmark=True --det_model_dir=${det_model_dir} --rec_batch_num=${rec_batch_size} --rec_model_dir=${rec_model_dir} --image_dir=${img_dir} --save_log_path=${save_log_path}
2021-06-09 14:48:56 +08:00
status_check $? "${inference}" "${command}" "${status_log}"
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
2021-06-08 21:22:54 +08:00
save_log_path="${log_path}/${model_name}_${slim_trainer}_gpu_usetensorrt_${use_trt}_usefp16_${precision}_recbatchnum_${rec_batch_size}_infer.log"
2021-06-09 10:03:27 +00:00
command="${python} ${inference} --use_gpu=True --use_tensorrt=${use_trt} --precision=${precision} --benchmark=True --det_model_dir=${det_model_dir} --rec_batch_num=${rec_batch_size} --rec_model_dir=${rec_model_dir} --image_dir=${img_dir} --save_log_path=${save_log_path}"
${python} ${inference} --use_gpu=True --use_tensorrt=${use_trt} --precision=${precision} --benchmark=True --det_model_dir=${det_model_dir} --rec_batch_num=${rec_batch_size} --rec_model_dir=${rec_model_dir} --image_dir=${img_dir} --save_log_path=${save_log_path}
2021-06-09 14:48:56 +08:00
status_check $? "${inference}" "${command}" "${status_log}"
2021-06-08 16:07:24 +08:00
done
done
done
fi
done
done
done
done
done