diff --git a/configs/rec/rec_icdar15_train.yml b/configs/rec/rec_icdar15_train.yml index 20f758c20da9547486d7492d6a09cceb2b937e4e..500d2333f217008b2abf352b0ccd29a43ec24fd5 100644 --- a/configs/rec/rec_icdar15_train.yml +++ b/configs/rec/rec_icdar15_train.yml @@ -10,7 +10,7 @@ Global: cal_metric_during_train: True pretrained_model: checkpoints: - save_inference_dir: + save_inference_dir: ./ use_visualdl: False infer_img: doc/imgs_words_en/word_10.png # for data or label process @@ -60,8 +60,8 @@ Metric: Train: dataset: name: SimpleDataSet - data_dir: ./train_data/ - label_file_list: ["./train_data/train_list.txt"] + data_dir: ./train_data/ic15_data/ + label_file_list: ["./train_data/ic15_data/rec_gt_train.txt"] transforms: - DecodeImage: # load image img_mode: BGR @@ -81,8 +81,8 @@ Train: Eval: dataset: name: SimpleDataSet - data_dir: ./train_data/ - label_file_list: ["./train_data/val_list.txt"] + data_dir: ./train_data/ic15_data + label_file_list: ["./train_data/ic15_data/rec_gt_test.txt"] transforms: - DecodeImage: # load image img_mode: BGR diff --git a/deploy/cpp_infer/CMakeLists.txt b/deploy/cpp_infer/CMakeLists.txt index 4f2dc88a8f1a9d185b7274a1a723c0e670bd1bf1..0cf20635f8849cbb405118fd0e2fa8538eb3fa06 100644 --- a/deploy/cpp_infer/CMakeLists.txt +++ b/deploy/cpp_infer/CMakeLists.txt @@ -37,10 +37,8 @@ endif() if (WIN32) - include_directories("${PADDLE_LIB}/paddle/fluid/inference") include_directories("${PADDLE_LIB}/paddle/include") link_directories("${PADDLE_LIB}/paddle/lib") - link_directories("${PADDLE_LIB}/paddle/fluid/inference") find_package(OpenCV REQUIRED PATHS ${OPENCV_DIR}/build/ NO_DEFAULT_PATH) else () diff --git a/deploy/cpp_infer/src/config.cpp b/deploy/cpp_infer/src/config.cpp index a0ac1d08c93d1ff1e51f769465b2df2b4355fbc0..050b75ede9475432f250cafac2cd5fbed17fea0a 100644 --- a/deploy/cpp_infer/src/config.cpp +++ b/deploy/cpp_infer/src/config.cpp @@ -21,12 +21,18 @@ std::vector OCRConfig::split(const std::string &str, std::vector res; if ("" == str) return res; - char strs[str.length() + 1]; + + int strlen = str.length() + 1; + chars *strs = new char[strlen]; std::strcpy(strs, str.c_str()); - char d[delim.length() + 1]; + int delimlen = delim.length() + 1; + char *d = new char[delimlen]; std::strcpy(d, delim.c_str()); + delete[] strs; + delete[] d; + char *p = std::strtok(strs, d); while (p) { std::string s = p; diff --git a/doc/joinus.PNG b/doc/joinus.PNG index b45f006c1850f39af4d4eb85279df3953331f7f7..33f5badb61e9d5c5be5439be861beee3dcf7bcf2 100644 Binary files a/doc/joinus.PNG and b/doc/joinus.PNG differ diff --git a/requirements.txt b/requirements.txt index 8aaf43ac6eda9494b4a6cce967482aee18a66e9f..2c7baa8516932f56f77b71b4e6dc7d45cd43072e 100644 --- a/requirements.txt +++ b/requirements.txt @@ -7,7 +7,7 @@ tqdm numpy visualdl python-Levenshtein -opencv-contrib-python==4.2.0.32 +opencv-contrib-python==4.4.0.46 lxml premailer openpyxl \ No newline at end of file diff --git a/tests/ocr_det_params.txt b/tests/ocr_det_params.txt index 6ef5230f6bbe2f0125d6d17a45c9036f7a7476df..6aff66c6aa8591c9f48c81cf857809f956a3cda2 100644 --- a/tests/ocr_det_params.txt +++ b/tests/ocr_det_params.txt @@ -49,3 +49,4 @@ inference:tools/infer/predict_det.py --save_log_path:null --benchmark:True null:null + diff --git a/tests/ocr_rec_params.txt b/tests/ocr_rec_params.txt new file mode 100644 index 0000000000000000000000000000000000000000..71d12f90b3bda128c3f6047c6740911dac417954 --- /dev/null +++ b/tests/ocr_rec_params.txt @@ -0,0 +1,51 @@ +===========================train_params=========================== +model_name:ocr_rec +python:python3.7 +gpu_list:0|2,3 +Global.use_gpu:True|True +Global.auto_cast:null +Global.epoch_num:lite_train_infer=2|whole_train_infer=300 +Global.save_model_dir:./output/ +Train.loader.batch_size_per_card:lite_train_infer=128|whole_train_infer=128 +Global.pretrained_model:null +train_model_name:latest +train_infer_img_dir:./train_data/ic15_data/train +null:null +## +trainer:norm_train|pact_train +norm_train:tools/train.py -c configs/rec/rec_icdar15_train.yml -o +pact_train:deploy/slim/quantization/quant.py -c configs/rec/rec_icdar15_train.yml -o +fpgm_train:null +distill_train:null +null:null +null:null +## +===========================eval_params=========================== +eval:tools/eval.py -c configs/rec/rec_icdar15_train.yml -o +null:null +## +===========================infer_params=========================== +Global.save_inference_dir:./output/ +Global.pretrained_model: +norm_export:tools/export_model.py -c configs/rec/rec_icdar15_train.yml -o +quant_export:deploy/slim/quantization/export_model.py -c configs/rec/rec_icdar15_train.yml -o +fpgm_export:null +distill_export:null +export1:null +export2:null +## +infer_model:./inference/ch_ppocr_mobile_v2.0_rec_infer/ +infer_export:null +infer_quant:False +inference:tools/infer/predict_rec.py +--use_gpu:True|False +--enable_mkldnn:True|False +--cpu_threads:1|6 +--rec_batch_num:1 +--use_tensorrt:True|False +--precision:fp32|fp16|int8 +--rec_model_dir: +--image_dir:./inference/rec_inference +--save_log_path:./test/output/ +--benchmark:True +null:null diff --git a/tests/prepare.sh b/tests/prepare.sh index c105d8f43287a61dffbf813e0665a6200bccc348..d27a051cb0a7effc50305db8e2268ad36492d6cb 100644 --- a/tests/prepare.sh +++ b/tests/prepare.sh @@ -35,32 +35,42 @@ if [ ${MODE} = "lite_train_infer" ];then # pretrain lite train data wget -nc -P ./pretrain_models/ https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/MobileNetV3_large_x0_5_pretrained.pdparams rm -rf ./train_data/icdar2015 + rm -rf ./train_data/ic15_data 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 + wget -nc -P ./train_data/ https://paddleocr.bj.bcebos.com/dygraph_v2.0/test/ic15_data.tar # todo change to bcebos + + cd ./train_data/ && tar xf icdar2015_lite.tar && tar xf ic15_data.tar ln -s ./icdar2015_lite ./icdar2015 cd ../ elif [ ${MODE} = "whole_train_infer" ];then wget -nc -P ./pretrain_models/ https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/MobileNetV3_large_x0_5_pretrained.pdparams rm -rf ./train_data/icdar2015 + rm -rf ./train_data/ic15_data wget -nc -P ./train_data/ https://paddleocr.bj.bcebos.com/dygraph_v2.0/test/icdar2015.tar - cd ./train_data/ && tar xf icdar2015.tar && cd ../ + wget -nc -P ./train_data/ https://paddleocr.bj.bcebos.com/dygraph_v2.0/test/ic15_data.tar + cd ./train_data/ && tar xf icdar2015.tar && tar xf ic15_data.tar && cd ../ elif [ ${MODE} = "whole_infer" ];then wget -nc -P ./pretrain_models/ https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/MobileNetV3_large_x0_5_pretrained.pdparams rm -rf ./train_data/icdar2015 + rm -rf ./train_data/ic15_data 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 + wget -nc -P ./train_data/ https://paddleocr.bj.bcebos.com/dygraph_v2.0/test/ic15_data.tar + cd ./train_data/ && tar xf icdar2015_infer.tar && tar xf ic15_data.tar ln -s ./icdar2015_infer ./icdar2015 cd ../ else - rm -rf ./train_data/icdar2015 - if [[ ${model_name} = "ocr_det" ]]; then - wget -nc -P ./inference https://paddleocr.bj.bcebos.com/dygraph_v2.0/test/ch_det_data_50.tar + if [ ${model_name} = "ocr_det" ]; then eval_model_name="ch_ppocr_mobile_v2.0_det_infer" + rm -rf ./train_data/icdar2015 + wget -nc -P ./train_data https://paddleocr.bj.bcebos.com/dygraph_v2.0/test/ch_det_data_50.tar wget -nc -P ./inference https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_mobile_v2.0_det_infer.tar cd ./inference && tar xf ${eval_model_name}.tar && tar xf ch_det_data_50.tar && cd ../ else - eval_model_name="ch_ppocr_mobile_v2.0_rec_train" - wget -nc -P ./inference https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_mobile_v2.0_rec_train.tar - cd ./inference && tar xf ${eval_model_name}.tar && cd ../ + rm -rf ./train_data/ic15_data + eval_model_name="ch_ppocr_mobile_v2.0_rec_infer" + wget -nc -P ./train_data/ https://paddleocr.bj.bcebos.com/dygraph_v2.0/test/ic15_data.tar + wget -nc -P ./inference https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_mobile_v2.0_rec_infer.tar + cd ./inference && tar xf ${eval_model_name}.tar && tar xf ic15_data.tar && cd ../ fi fi + diff --git a/tests/test.sh b/tests/test.sh index c57532fd370b03b86af4e5bd0855a53e1cbbce9c..9888e0faabb13b00acdf41ad154ba0a0e7ec2b63 100644 --- a/tests/test.sh +++ b/tests/test.sh @@ -234,18 +234,21 @@ if [ ${MODE} = "infer" ]; then for infer_model in ${infer_model_dir_list[*]}; do # run export if [ ${infer_run_exports[Count]} != "null" ];then + save_infer_dir=$(dirname $infer_model) set_export_weight=$(func_set_params "${export_weight}" "${infer_model}") - set_save_infer_key=$(func_set_params "${save_infer_key}" "${infer_model}") + set_save_infer_key=$(func_set_params "${save_infer_key}" "${save_infer_dir}") export_cmd="${python} ${norm_export} ${set_export_weight} ${set_save_infer_key}" eval $export_cmd status_export=$? if [ ${status_export} = 0 ];then status_check $status_export "${export_cmd}" "${status_log}" fi + else + save_infer_dir=${infer_model} fi #run inference is_quant=${infer_quant_flag[Count]} - func_inference "${python}" "${inference_py}" "${infer_model}" "${LOG_PATH}" "${infer_img_dir}" ${is_quant} + func_inference "${python}" "${inference_py}" "${save_infer_dir}" "${LOG_PATH}" "${infer_img_dir}" ${is_quant} Count=$(($Count + 1)) done diff --git a/tools/infer/utility.py b/tools/infer/utility.py index 2e708d204192f62a44e8de04635fc43b2d3e29b6..1c82280099f17f6d3bf848669e47439505f10576 100755 --- a/tools/infer/utility.py +++ b/tools/infer/utility.py @@ -51,7 +51,7 @@ def init_args(): parser.add_argument("--det_db_box_thresh", type=float, default=0.6) parser.add_argument("--det_db_unclip_ratio", type=float, default=1.5) parser.add_argument("--max_batch_size", type=int, default=10) - parser.add_argument("--use_dilation", type=bool, default=False) + parser.add_argument("--use_dilation", type=str2bool, default=False) parser.add_argument("--det_db_score_mode", type=str, default="fast") # EAST parmas parser.add_argument("--det_east_score_thresh", type=float, default=0.8) @@ -61,7 +61,7 @@ def init_args(): # SAST parmas parser.add_argument("--det_sast_score_thresh", type=float, default=0.5) parser.add_argument("--det_sast_nms_thresh", type=float, default=0.2) - parser.add_argument("--det_sast_polygon", type=bool, default=False) + parser.add_argument("--det_sast_polygon", type=str2bool, default=False) # params for text recognizer parser.add_argument("--rec_algorithm", type=str, default='CRNN') @@ -90,7 +90,7 @@ def init_args(): parser.add_argument( "--e2e_char_dict_path", type=str, default="./ppocr/utils/ic15_dict.txt") parser.add_argument("--e2e_pgnet_valid_set", type=str, default='totaltext') - parser.add_argument("--e2e_pgnet_polygon", type=bool, default=True) + parser.add_argument("--e2e_pgnet_polygon", type=str2bool, default=True) parser.add_argument("--e2e_pgnet_mode", type=str, default='fast') # params for text classifier @@ -111,7 +111,7 @@ def init_args(): parser.add_argument("--total_process_num", type=int, default=1) parser.add_argument("--process_id", type=int, default=0) - parser.add_argument("--benchmark", type=bool, default=False) + parser.add_argument("--benchmark", type=str2bool, default=False) parser.add_argument("--save_log_path", type=str, default="./log_output/") parser.add_argument("--show_log", type=str2bool, default=True) @@ -210,22 +210,22 @@ def create_predictor(args, mode, logger): "nearest_interp_v2_0.tmp_0": [1, 256, 40, 40] } min_pact_shape = { - "nearest_interp_v2_26.tmp_0":[1,256,20,20], - "nearest_interp_v2_27.tmp_0":[1,64,20,20], - "nearest_interp_v2_28.tmp_0":[1,64,20,20], - "nearest_interp_v2_29.tmp_0":[1,64,20,20] + "nearest_interp_v2_26.tmp_0": [1, 256, 20, 20], + "nearest_interp_v2_27.tmp_0": [1, 64, 20, 20], + "nearest_interp_v2_28.tmp_0": [1, 64, 20, 20], + "nearest_interp_v2_29.tmp_0": [1, 64, 20, 20] } max_pact_shape = { - "nearest_interp_v2_26.tmp_0":[1,256,400,400], - "nearest_interp_v2_27.tmp_0":[1,64,400,400], - "nearest_interp_v2_28.tmp_0":[1,64,400,400], - "nearest_interp_v2_29.tmp_0":[1,64,400,400] + "nearest_interp_v2_26.tmp_0": [1, 256, 400, 400], + "nearest_interp_v2_27.tmp_0": [1, 64, 400, 400], + "nearest_interp_v2_28.tmp_0": [1, 64, 400, 400], + "nearest_interp_v2_29.tmp_0": [1, 64, 400, 400] } opt_pact_shape = { - "nearest_interp_v2_26.tmp_0":[1,256,160,160], - "nearest_interp_v2_27.tmp_0":[1,64,160,160], - "nearest_interp_v2_28.tmp_0":[1,64,160,160], - "nearest_interp_v2_29.tmp_0":[1,64,160,160] + "nearest_interp_v2_26.tmp_0": [1, 256, 160, 160], + "nearest_interp_v2_27.tmp_0": [1, 64, 160, 160], + "nearest_interp_v2_28.tmp_0": [1, 64, 160, 160], + "nearest_interp_v2_29.tmp_0": [1, 64, 160, 160] } min_input_shape.update(min_pact_shape) max_input_shape.update(max_pact_shape)