test.sh 10.7 KB
Newer Older
L
LDOUBLEV 已提交
1
#!/bin/bash 
L
LDOUBLEV 已提交
2
# Usage:
L
LDOUBLEV 已提交
3
# bash test/test.sh ./test/paddleocr_ci_params.txt 'lite_train_infer'
L
LDOUBLEV 已提交
4

L
LDOUBLEV 已提交
5 6 7 8 9 10
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
L
LDOUBLEV 已提交
11 12
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 ../
L
LDOUBLEV 已提交
13

L
LDOUBLEV 已提交
14 15 16 17
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
L
LDOUBLEV 已提交
18
    cd ./train_data/ && tar xf icdar2015_lite.tar
L
LDOUBLEV 已提交
19 20
    ln -s ./icdar2015_lite ./icdar2015
    cd ../
L
LDOUBLEV 已提交
21 22
    epoch=10
    eval_batch_step=10
L
LDOUBLEV 已提交
23 24 25 26
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 ../
L
LDOUBLEV 已提交
27
    epoch=500
L
LDOUBLEV 已提交
28
    eval_batch_step=200
L
LDOUBLEV 已提交
29
else
L
LDOUBLEV 已提交
30 31 32 33 34 35 36
    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
L
LDOUBLEV 已提交
37 38
fi

L
LDOUBLEV 已提交
39 40
img_dir="./train_data/icdar2015/text_localization/ch4_test_images/"

L
LDOUBLEV 已提交
41 42 43 44 45 46 47

dataline=$(cat ${FILENAME})
# parser params
IFS=$'\n'
lines=(${dataline})
function func_parser(){
    strs=$1
L
LDOUBLEV 已提交
48
    IFS=": "
L
LDOUBLEV 已提交
49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67
    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]}")
L
LDOUBLEV 已提交
68

69
log_path=$(func_parser "${lines[13]}")
L
LDOUBLEV 已提交
70
status_log="${log_path}/result.log"
L
LDOUBLEV 已提交
71

L
LDOUBLEV 已提交
72 73 74 75
# install requirments
${python} -m pip install pynvml;
${python} -m pip install psutil;
${python} -m pip install GPUtil;
L
LDOUBLEV 已提交
76
${python} -m pip install paddlesim==2.0.0
L
LDOUBLEV 已提交
77

L
LDOUBLEV 已提交
78 79 80 81 82 83
paddle_info="$(python3.7 -c "import paddle;print(f'paddle_version:{paddle.__version__}');print(f'paddle_commit:{paddle.__git_commit__}')")"
echo -e "\033[33m $paddle_info \033[0m" | tee -a ${status_log}
cpu_model=`cat /proc/cpuinfo | grep "model name" | awk -F ':' '{print $2}' | sort | uniq`
echo -e "\033[33m cpu_info:$cpu_model \033[0m" | tee -a ${status_log}
ip=`ifconfig| grep -A 1 'eth0'|grep 'inet'|awk -F ':' '{print $2}'|awk '{print $1}'`
echo -e "\033[33m ip_info:$ip \033[0m" | tee -a ${status_log}
L
LDOUBLEV 已提交
84

L
LDOUBLEV 已提交
85
function status_check(){
L
LDOUBLEV 已提交
86
    last_status=$1   # the exit code
L
LDOUBLEV 已提交
87 88
    run_model=$2
    run_command=$3
L
LDOUBLEV 已提交
89
    run_log=$4
L
LDOUBLEV 已提交
90
    if [ $last_status -eq 0 ]; then
L
LDOUBLEV 已提交
91
        echo -e "\033[33m $run_model successfully with command - ${run_command}!  \033[0m" | tee -a ${run_log}
L
LDOUBLEV 已提交
92
    else
L
LDOUBLEV 已提交
93
        echo -e "\033[33m $case failed with command - ${run_command}!  \033[0m" | tee -a ${run_log}
L
LDOUBLEV 已提交
94 95
    fi
}
L
LDOUBLEV 已提交
96

L
LDOUBLEV 已提交
97
IFS="|"
L
LDOUBLEV 已提交
98
for train_model in ${train_model_list[*]}; do 
L
LDOUBLEV 已提交
99
    if [ ${train_model} = "ocr_det" ];then
L
LDOUBLEV 已提交
100 101
        model_name="det"
        yml_file="configs/det/det_mv3_db.yml"
L
LDOUBLEV 已提交
102
    elif [ ${train_model} = "ocr_rec" ];then
L
LDOUBLEV 已提交
103 104 105 106 107 108 109 110 111 112 113
        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
114
            env=""
L
LDOUBLEV 已提交
115
        elif [ ${#gpu} -le 1 ];then
116
            env="CUDA_VISIBLE_DEVICES=${gpu}"
L
LDOUBLEV 已提交
117
        else
118 119 120 121
            IFS=","
            array=(${gpu})
            env="CUDA_VISIBLE_DEVICES=${array[0]}"
            IFS="|"
L
LDOUBLEV 已提交
122 123 124 125 126 127
        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"
L
LDOUBLEV 已提交
128
                    pretrain="./pretrain_models/MobileNetV3_large_x0_5_pretrained"
L
LDOUBLEV 已提交
129
                elif [ ${slim_trainer} = "pact" ]; then
L
LDOUBLEV 已提交
130 131
                    trainer="deploy/slim/quantization/quant.py"
                    export_model="deploy/slim/quantization/export_model.py"
L
LDOUBLEV 已提交
132
                    pretrain="./pretrain_models/det_mv3_db_v2.0_train/best_accuracy"
L
LDOUBLEV 已提交
133
                elif [ ${slim_trainer} = "fpgm" ]; then
L
LDOUBLEV 已提交
134 135
                    trainer="deploy/slim/prune/sensitivity_anal.py"
                    export_model="deploy/slim/prune/export_prune_model.py"
L
LDOUBLEV 已提交
136
                    pretrain="./pretrain_models/det_mv3_db_v2.0_train/best_accuracy"
L
LDOUBLEV 已提交
137
                    wget -nc -P https://paddleocr.bj.bcebos.com/dygraph_v2.0/test/sen.pickle
L
LDOUBLEV 已提交
138 139 140
                elif [ ${slim_trainer} = "distill" ]; then
                    trainer="deploy/slim/distill/train_dml.py"
                    export_model="deploy/slim/distill/export_distill_model.py"
L
LDOUBLEV 已提交
141
                    pretrain=""
L
LDOUBLEV 已提交
142 143 144
                else
                    trainer="tools/train.py"
                    export_model="tools/export_model.py"
L
LDOUBLEV 已提交
145
                    pretrain="./pretrain_models/MobileNetV3_large_x0_5_pretrained"
L
LDOUBLEV 已提交
146
                fi
L
LDOUBLEV 已提交
147
                save_log="${log_path}/${model_name}_${slim_trainer}_autocast_${auto_cast}_gpuid_${gpu}"
L
LDOUBLEV 已提交
148 149 150 151 152 153 154
                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
L
LDOUBLEV 已提交
155
                status_check $? "${trainer}" "${command}" "${status_log}"
L
LDOUBLEV 已提交
156

L
LDOUBLEV 已提交
157 158
                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} 
L
LDOUBLEV 已提交
159
                status_check $? "${trainer}" "${command}" "${status_log}"
L
LDOUBLEV 已提交
160
               
L
LDOUBLEV 已提交
161 162 163
                if [ "${model_name}" = "det" ]; then 
                    export rec_batch_size_list=( "1" )
                    inference="tools/infer/predict_det.py"
L
LDOUBLEV 已提交
164
                    det_model_dir=${save_log}_infer
L
LDOUBLEV 已提交
165
                    rec_model_dir=""
L
LDOUBLEV 已提交
166 167
                elif [ "${model_name}" = "rec" ]; then
                    inference="tools/infer/predict_rec.py"
L
LDOUBLEV 已提交
168
                    rec_model_dir=${save_log}_infer
L
LDOUBLEV 已提交
169
                    det_model_dir=""
L
LDOUBLEV 已提交
170 171 172 173 174 175 176
                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    
L
LDOUBLEV 已提交
177
                                    save_log_path="${log_path}/${model_name}_${slim_trainer}_cpu_usemkldnn_${use_mkldnn}_cputhreads_${threads}_recbatchnum_${rec_batch_size}_infer.log"
L
LDOUBLEV 已提交
178 179
                                    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}
L
LDOUBLEV 已提交
180
                                    status_check $? "${inference}" "${command}" "${status_log}"
L
LDOUBLEV 已提交
181 182 183 184 185 186 187 188 189 190
                                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
L
LDOUBLEV 已提交
191
                                    save_log_path="${log_path}/${model_name}_${slim_trainer}_gpu_usetensorrt_${use_trt}_usefp16_${precision}_recbatchnum_${rec_batch_size}_infer.log"
L
LDOUBLEV 已提交
192 193
                                    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}
L
LDOUBLEV 已提交
194
                                    status_check $? "${inference}" "${command}" "${status_log}"
L
LDOUBLEV 已提交
195 196 197 198 199 200 201 202 203
                                done
                            done
                        done
                    fi
                done
            done
        done
    done
done