From e3f171a3bb8d13d8e2a005eae78518218c759e27 Mon Sep 17 00:00:00 2001 From: LDOUBLEV Date: Wed, 13 May 2020 16:05:00 +0800 Subject: [PATCH 1/3] fix det inference bug and optimize save path --- configs/det/det_db_mv3.yml | 4 ++-- configs/det/det_db_r50_vd.yml | 8 +++++--- configs/det/det_east_mv3.yml | 6 ++++-- configs/det/det_east_r50_vd.yml | 8 +++++--- configs/rec/rec_mv3_none_bilstm_ctc.yml | 6 ++++-- configs/rec/rec_mv3_none_none_ctc.yml | 6 ++++-- configs/rec/rec_mv3_tps_bilstm_attn.yml | 6 ++++-- configs/rec/rec_mv3_tps_bilstm_ctc.yml | 7 +++++-- configs/rec/rec_r34_vd_none_bilstm_ctc.yml | 6 ++++-- configs/rec/rec_r34_vd_none_none_ctc.yml | 6 ++++-- configs/rec/rec_r34_vd_tps_bilstm_attn.yml | 6 ++++-- configs/rec/rec_r34_vd_tps_bilstm_ctc.yml | 4 +++- ppocr/modeling/heads/det_db_head.py | 2 +- ppocr/postprocess/db_postprocess.py | 1 + tools/infer/predict_det.py | 9 +++++---- tools/program.py | 2 ++ 16 files changed, 57 insertions(+), 30 deletions(-) diff --git a/configs/det/det_db_mv3.yml b/configs/det/det_db_mv3.yml index 45e2ee17..583c1893 100755 --- a/configs/det/det_db_mv3.yml +++ b/configs/det/det_db_mv3.yml @@ -4,7 +4,7 @@ Global: epoch_num: 1200 log_smooth_window: 20 print_batch_step: 2 - save_model_dir: output + save_model_dir: ./output/det_db/ save_epoch_step: 200 eval_batch_step: 5000 train_batch_size_per_card: 16 @@ -13,7 +13,7 @@ Global: reader_yml: ./configs/det/det_db_icdar15_reader.yml pretrain_weights: ./pretrain_models/MobileNetV3_pretrained/MobileNetV3_large_x0_5_pretrained/ checkpoints: - save_res_path: ./output/predicts_db.txt + save_res_path: ./output/det_db/predicts_db.txt save_inference_dir: Architecture: diff --git a/configs/det/det_db_r50_vd.yml b/configs/det/det_db_r50_vd.yml index 1faecbb5..78550411 100755 --- a/configs/det/det_db_r50_vd.yml +++ b/configs/det/det_db_r50_vd.yml @@ -4,7 +4,7 @@ Global: epoch_num: 1200 log_smooth_window: 20 print_batch_step: 2 - save_model_dir: output + save_model_dir: ./output/det_db/ save_epoch_step: 200 eval_batch_step: 5000 train_batch_size_per_card: 8 @@ -12,8 +12,10 @@ Global: image_shape: [3, 640, 640] reader_yml: ./configs/det/det_db_icdar15_reader.yml pretrain_weights: ./pretrain_models/ResNet50_vd_pretrained/ - save_res_path: ./output/predicts_db.txt - + save_res_path: ./output/det_db/predicts_db.txt + checkpoints: + save_inference_dir: + Architecture: function: ppocr.modeling.architectures.det_model,DetModel diff --git a/configs/det/det_east_mv3.yml b/configs/det/det_east_mv3.yml index 6a77768e..b1129ce9 100755 --- a/configs/det/det_east_mv3.yml +++ b/configs/det/det_east_mv3.yml @@ -4,7 +4,7 @@ Global: epoch_num: 100000 log_smooth_window: 20 print_batch_step: 5 - save_model_dir: output + save_model_dir: ./output/det_east/ save_epoch_step: 200 eval_batch_step: 5000 train_batch_size_per_card: 16 @@ -12,7 +12,9 @@ Global: image_shape: [3, 512, 512] reader_yml: ./configs/det/det_east_icdar15_reader.yml pretrain_weights: ./pretrain_models/MobileNetV3_pretrained/MobileNetV3_large_x0_5_pretrained/ - save_res_path: ./output/predicts_east.txt + checkpoints: + save_res_path: ./output/det_east/predicts_east.txt + save_inference_dir: Architecture: function: ppocr.modeling.architectures.det_model,DetModel diff --git a/configs/det/det_east_r50_vd.yml b/configs/det/det_east_r50_vd.yml index 6e9d23c6..f0f6e4a4 100755 --- a/configs/det/det_east_r50_vd.yml +++ b/configs/det/det_east_r50_vd.yml @@ -4,7 +4,7 @@ Global: epoch_num: 100000 log_smooth_window: 20 print_batch_step: 5 - save_model_dir: output + save_model_dir: ./output/det_east/ save_epoch_step: 200 eval_batch_step: 5000 train_batch_size_per_card: 8 @@ -12,8 +12,10 @@ Global: image_shape: [3, 512, 512] reader_yml: ./configs/det/det_east_icdar15_reader.yml pretrain_weights: ./pretrain_models/ResNet50_vd_pretrained/ - save_res_path: ./output/predicts_east.txt - + save_res_path: ./output/det_east/predicts_east.txt + checkpoints: + save_inference_dir: + Architecture: function: ppocr.modeling.architectures.det_model,DetModel diff --git a/configs/rec/rec_mv3_none_bilstm_ctc.yml b/configs/rec/rec_mv3_none_bilstm_ctc.yml index 09479175..ea104638 100755 --- a/configs/rec/rec_mv3_none_bilstm_ctc.yml +++ b/configs/rec/rec_mv3_none_bilstm_ctc.yml @@ -4,7 +4,7 @@ Global: epoch_num: 72 log_smooth_window: 20 print_batch_step: 10 - save_model_dir: output + save_model_dir: output/rec save_epoch_step: 3 eval_batch_step: 2000 train_batch_size_per_card: 256 @@ -14,7 +14,9 @@ Global: character_type: en loss_type: ctc reader_yml: ./configs/rec/rec_benchmark_reader.yml - pretrain_weights: + pretrain_weights: + checkpoints: + save_inference_dir: Architecture: function: ppocr.modeling.architectures.rec_model,RecModel diff --git a/configs/rec/rec_mv3_none_none_ctc.yml b/configs/rec/rec_mv3_none_none_ctc.yml index ae926468..06622783 100755 --- a/configs/rec/rec_mv3_none_none_ctc.yml +++ b/configs/rec/rec_mv3_none_none_ctc.yml @@ -4,7 +4,7 @@ Global: epoch_num: 72 log_smooth_window: 20 print_batch_step: 10 - save_model_dir: output + save_model_dir: output/rec save_epoch_step: 3 eval_batch_step: 2000 train_batch_size_per_card: 256 @@ -15,7 +15,9 @@ Global: loss_type: ctc reader_yml: ./configs/rec/rec_benchmark_reader.yml pretrain_weights: - + checkpoints: + save_inference_dir: + Architecture: function: ppocr.modeling.architectures.rec_model,RecModel diff --git a/configs/rec/rec_mv3_tps_bilstm_attn.yml b/configs/rec/rec_mv3_tps_bilstm_attn.yml index 59cb3c2c..f5ba60d9 100755 --- a/configs/rec/rec_mv3_tps_bilstm_attn.yml +++ b/configs/rec/rec_mv3_tps_bilstm_attn.yml @@ -4,7 +4,7 @@ Global: epoch_num: 72 log_smooth_window: 20 print_batch_step: 10 - save_model_dir: output + save_model_dir: output/rec save_epoch_step: 3 eval_batch_step: 2000 train_batch_size_per_card: 256 @@ -14,7 +14,9 @@ Global: character_type: en loss_type: attention reader_yml: ./configs/rec/rec_benchmark_reader.yml - pretrain_weights: + pretrain_weights: + checkpoints: + save_inference_dir: Architecture: function: ppocr.modeling.architectures.rec_model,RecModel diff --git a/configs/rec/rec_mv3_tps_bilstm_ctc.yml b/configs/rec/rec_mv3_tps_bilstm_ctc.yml index 3acc2355..132320bc 100755 --- a/configs/rec/rec_mv3_tps_bilstm_ctc.yml +++ b/configs/rec/rec_mv3_tps_bilstm_ctc.yml @@ -4,7 +4,7 @@ Global: epoch_num: 72 log_smooth_window: 20 print_batch_step: 10 - save_model_dir: output + save_model_dir: output/rec save_epoch_step: 3 eval_batch_step: 2000 train_batch_size_per_card: 256 @@ -14,7 +14,10 @@ Global: character_type: en loss_type: ctc reader_yml: ./configs/rec/rec_benchmark_reader.yml - pretrain_weights: + pretrain_weights: + checkpoints: + save_inference_dir: + Architecture: function: ppocr.modeling.architectures.rec_model,RecModel diff --git a/configs/rec/rec_r34_vd_none_bilstm_ctc.yml b/configs/rec/rec_r34_vd_none_bilstm_ctc.yml index 20fb0c85..b784c7f8 100755 --- a/configs/rec/rec_r34_vd_none_bilstm_ctc.yml +++ b/configs/rec/rec_r34_vd_none_bilstm_ctc.yml @@ -4,7 +4,7 @@ Global: epoch_num: 72 log_smooth_window: 20 print_batch_step: 10 - save_model_dir: output + save_model_dir: output/rec save_epoch_step: 3 eval_batch_step: 2000 train_batch_size_per_card: 256 @@ -14,7 +14,9 @@ Global: character_type: en loss_type: ctc reader_yml: ./configs/rec/rec_benchmark_reader.yml - pretrain_weights: + pretrain_weights: + checkpoints: + save_inference_dir: Architecture: function: ppocr.modeling.architectures.rec_model,RecModel diff --git a/configs/rec/rec_r34_vd_none_none_ctc.yml b/configs/rec/rec_r34_vd_none_none_ctc.yml index 0de87aea..9d42e6d1 100755 --- a/configs/rec/rec_r34_vd_none_none_ctc.yml +++ b/configs/rec/rec_r34_vd_none_none_ctc.yml @@ -4,7 +4,7 @@ Global: epoch_num: 72 log_smooth_window: 20 print_batch_step: 10 - save_model_dir: output + save_model_dir: output/rec save_epoch_step: 3 eval_batch_step: 2000 train_batch_size_per_card: 256 @@ -14,7 +14,9 @@ Global: character_type: en loss_type: ctc reader_yml: ./configs/rec/rec_benchmark_reader.yml - pretrain_weights: + pretrain_weights: + checkpoints: + save_inference_dir: Architecture: function: ppocr.modeling.architectures.rec_model,RecModel diff --git a/configs/rec/rec_r34_vd_tps_bilstm_attn.yml b/configs/rec/rec_r34_vd_tps_bilstm_attn.yml index 71d770b9..a77e457b 100755 --- a/configs/rec/rec_r34_vd_tps_bilstm_attn.yml +++ b/configs/rec/rec_r34_vd_tps_bilstm_attn.yml @@ -4,7 +4,7 @@ Global: epoch_num: 72 log_smooth_window: 20 print_batch_step: 10 - save_model_dir: output + save_model_dir: output/rec save_epoch_step: 3 eval_batch_step: 2000 train_batch_size_per_card: 256 @@ -14,7 +14,9 @@ Global: character_type: en loss_type: attention reader_yml: ./configs/rec/rec_benchmark_reader.yml - pretrain_weights: + pretrain_weights: + checkpoints: + save_inference_dir: Architecture: function: ppocr.modeling.architectures.rec_model,RecModel diff --git a/configs/rec/rec_r34_vd_tps_bilstm_ctc.yml b/configs/rec/rec_r34_vd_tps_bilstm_ctc.yml index beb64372..3768aa47 100755 --- a/configs/rec/rec_r34_vd_tps_bilstm_ctc.yml +++ b/configs/rec/rec_r34_vd_tps_bilstm_ctc.yml @@ -4,7 +4,7 @@ Global: epoch_num: 72 log_smooth_window: 20 print_batch_step: 10 - save_model_dir: output + save_model_dir: output/rec save_epoch_step: 3 eval_batch_step: 2000 train_batch_size_per_card: 256 @@ -15,6 +15,8 @@ Global: loss_type: ctc reader_yml: ./configs/rec/rec_benchmark_reader.yml pretrain_weights: + checkpoints: + save_inference_dir: Architecture: function: ppocr.modeling.architectures.rec_model,RecModel diff --git a/ppocr/modeling/heads/det_db_head.py b/ppocr/modeling/heads/det_db_head.py index 67ec4748..bafacaaa 100644 --- a/ppocr/modeling/heads/det_db_head.py +++ b/ppocr/modeling/heads/det_db_head.py @@ -196,7 +196,7 @@ class DBHead(object): fuse = fluid.layers.concat(input=[p5, p4, p3, p2], axis=1) shrink_maps = self.binarize(fuse) if mode != "train": - return shrink_maps + return {"maps", shrink_maps} threshold_maps = self.thresh(fuse) binary_maps = self.step_function(shrink_maps, threshold_maps) y = fluid.layers.concat( diff --git a/ppocr/postprocess/db_postprocess.py b/ppocr/postprocess/db_postprocess.py index 15ba4615..c7b2dbc1 100644 --- a/ppocr/postprocess/db_postprocess.py +++ b/ppocr/postprocess/db_postprocess.py @@ -128,6 +128,7 @@ class DBPostProcess(object): def __call__(self, outs_dict, ratio_list): pred = outs_dict['maps'] + pred = pred[:, 0, :, :] segmentation = pred > self.thresh diff --git a/tools/infer/predict_det.py b/tools/infer/predict_det.py index d830306e..07a8180f 100755 --- a/tools/infer/predict_det.py +++ b/tools/infer/predict_det.py @@ -24,6 +24,7 @@ import copy import numpy as np import math import time +import sys class TextDetector(object): @@ -52,10 +53,10 @@ class TextDetector(object): utility.create_predictor(args, mode="det") def order_points_clockwise(self, pts): - ####### - ## https://github.com/jrosebr1/imutils/blob/master/imutils/perspective.py - ######## + """ + reference from: https://github.com/jrosebr1/imutils/blob/master/imutils/perspective.py # sort the points based on their x-coordinates + """ xSorted = pts[np.argsort(pts[:, 0]), :] # grab the left-most and right-most points from the sorted @@ -141,7 +142,7 @@ class TextDetector(object): outs_dict['f_score'] = outputs[0] outs_dict['f_geo'] = outputs[1] else: - outs_dict['maps'] = [outputs[0]] + outs_dict['maps'] = outputs[0] dt_boxes_list = self.postprocess_op(outs_dict, [ratio_list]) dt_boxes = dt_boxes_list[0] dt_boxes = self.filter_tag_det_res(dt_boxes, ori_im.shape) diff --git a/tools/program.py b/tools/program.py index f74aacc7..dc14086d 100755 --- a/tools/program.py +++ b/tools/program.py @@ -219,6 +219,8 @@ def train_eval_det_run(config, exe, train_info_dict, eval_info_dict): eval_batch_step = config['Global']['eval_batch_step'] save_epoch_step = config['Global']['save_epoch_step'] save_model_dir = config['Global']['save_model_dir'] + if not os.path.exists(save_model_dir): + os.makedirs(save_model_dir) train_stats = TrainingStats(log_smooth_window, train_info_dict['fetch_name_list']) best_eval_hmean = -1 From 8007a9552870bdcef8f0ada1547d9ce1af0532fb Mon Sep 17 00:00:00 2001 From: LDOUBLEV Date: Wed, 13 May 2020 16:39:39 +0800 Subject: [PATCH 2/3] makedirs for ocr rec saved model --- tools/program.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/tools/program.py b/tools/program.py index dc14086d..a35fe6c9 100755 --- a/tools/program.py +++ b/tools/program.py @@ -284,6 +284,10 @@ def train_eval_rec_run(config, exe, train_info_dict, eval_info_dict): eval_batch_step = config['Global']['eval_batch_step'] save_epoch_step = config['Global']['save_epoch_step'] save_model_dir = config['Global']['save_model_dir'] + if save_model_dir[-1] == "/": + save_model_dir = save_model_dir[:-1] + if not os.path.exists(save_model_dir + config['Global']['algorithm']): + os.makedirs(save_model_dir) train_stats = TrainingStats(log_smooth_window, ['loss', 'acc']) best_eval_acc = -1 best_batch_id = 0 From 9126cb6fb95cba31b1bd7b6a6c5e66bbc2458e5a Mon Sep 17 00:00:00 2001 From: LDOUBLEV Date: Wed, 13 May 2020 16:51:36 +0800 Subject: [PATCH 3/3] modify rec saved model dir --- configs/rec/rec_mv3_none_bilstm_ctc.yml | 2 +- configs/rec/rec_mv3_none_none_ctc.yml | 2 +- configs/rec/rec_mv3_tps_bilstm_attn.yml | 2 +- configs/rec/rec_mv3_tps_bilstm_ctc.yml | 2 +- configs/rec/rec_r34_vd_none_bilstm_ctc.yml | 2 +- configs/rec/rec_r34_vd_none_none_ctc.yml | 2 +- configs/rec/rec_r34_vd_tps_bilstm_attn.yml | 2 +- configs/rec/rec_r34_vd_tps_bilstm_ctc.yml | 2 +- tools/program.py | 4 +--- 9 files changed, 9 insertions(+), 11 deletions(-) diff --git a/configs/rec/rec_mv3_none_bilstm_ctc.yml b/configs/rec/rec_mv3_none_bilstm_ctc.yml index ea104638..11a09ee9 100755 --- a/configs/rec/rec_mv3_none_bilstm_ctc.yml +++ b/configs/rec/rec_mv3_none_bilstm_ctc.yml @@ -4,7 +4,7 @@ Global: epoch_num: 72 log_smooth_window: 20 print_batch_step: 10 - save_model_dir: output/rec + save_model_dir: output/rec_CRNN save_epoch_step: 3 eval_batch_step: 2000 train_batch_size_per_card: 256 diff --git a/configs/rec/rec_mv3_none_none_ctc.yml b/configs/rec/rec_mv3_none_none_ctc.yml index 06622783..bbbb6d1f 100755 --- a/configs/rec/rec_mv3_none_none_ctc.yml +++ b/configs/rec/rec_mv3_none_none_ctc.yml @@ -4,7 +4,7 @@ Global: epoch_num: 72 log_smooth_window: 20 print_batch_step: 10 - save_model_dir: output/rec + save_model_dir: output/rec_Rosetta save_epoch_step: 3 eval_batch_step: 2000 train_batch_size_per_card: 256 diff --git a/configs/rec/rec_mv3_tps_bilstm_attn.yml b/configs/rec/rec_mv3_tps_bilstm_attn.yml index f5ba60d9..03a2e901 100755 --- a/configs/rec/rec_mv3_tps_bilstm_attn.yml +++ b/configs/rec/rec_mv3_tps_bilstm_attn.yml @@ -4,7 +4,7 @@ Global: epoch_num: 72 log_smooth_window: 20 print_batch_step: 10 - save_model_dir: output/rec + save_model_dir: output/rec_RARE save_epoch_step: 3 eval_batch_step: 2000 train_batch_size_per_card: 256 diff --git a/configs/rec/rec_mv3_tps_bilstm_ctc.yml b/configs/rec/rec_mv3_tps_bilstm_ctc.yml index 132320bc..47247b72 100755 --- a/configs/rec/rec_mv3_tps_bilstm_ctc.yml +++ b/configs/rec/rec_mv3_tps_bilstm_ctc.yml @@ -4,7 +4,7 @@ Global: epoch_num: 72 log_smooth_window: 20 print_batch_step: 10 - save_model_dir: output/rec + save_model_dir: output/rec_STARNet save_epoch_step: 3 eval_batch_step: 2000 train_batch_size_per_card: 256 diff --git a/configs/rec/rec_r34_vd_none_bilstm_ctc.yml b/configs/rec/rec_r34_vd_none_bilstm_ctc.yml index b784c7f8..10181936 100755 --- a/configs/rec/rec_r34_vd_none_bilstm_ctc.yml +++ b/configs/rec/rec_r34_vd_none_bilstm_ctc.yml @@ -4,7 +4,7 @@ Global: epoch_num: 72 log_smooth_window: 20 print_batch_step: 10 - save_model_dir: output/rec + save_model_dir: output/rec_CRNN save_epoch_step: 3 eval_batch_step: 2000 train_batch_size_per_card: 256 diff --git a/configs/rec/rec_r34_vd_none_none_ctc.yml b/configs/rec/rec_r34_vd_none_none_ctc.yml index 9d42e6d1..ff4c5763 100755 --- a/configs/rec/rec_r34_vd_none_none_ctc.yml +++ b/configs/rec/rec_r34_vd_none_none_ctc.yml @@ -4,7 +4,7 @@ Global: epoch_num: 72 log_smooth_window: 20 print_batch_step: 10 - save_model_dir: output/rec + save_model_dir: output/rec_Rosetta save_epoch_step: 3 eval_batch_step: 2000 train_batch_size_per_card: 256 diff --git a/configs/rec/rec_r34_vd_tps_bilstm_attn.yml b/configs/rec/rec_r34_vd_tps_bilstm_attn.yml index a77e457b..4d96e9e7 100755 --- a/configs/rec/rec_r34_vd_tps_bilstm_attn.yml +++ b/configs/rec/rec_r34_vd_tps_bilstm_attn.yml @@ -4,7 +4,7 @@ Global: epoch_num: 72 log_smooth_window: 20 print_batch_step: 10 - save_model_dir: output/rec + save_model_dir: output/rec_RARE save_epoch_step: 3 eval_batch_step: 2000 train_batch_size_per_card: 256 diff --git a/configs/rec/rec_r34_vd_tps_bilstm_ctc.yml b/configs/rec/rec_r34_vd_tps_bilstm_ctc.yml index 3768aa47..844721a2 100755 --- a/configs/rec/rec_r34_vd_tps_bilstm_ctc.yml +++ b/configs/rec/rec_r34_vd_tps_bilstm_ctc.yml @@ -4,7 +4,7 @@ Global: epoch_num: 72 log_smooth_window: 20 print_batch_step: 10 - save_model_dir: output/rec + save_model_dir: output/rec_STARNet save_epoch_step: 3 eval_batch_step: 2000 train_batch_size_per_card: 256 diff --git a/tools/program.py b/tools/program.py index a35fe6c9..6c9e9904 100755 --- a/tools/program.py +++ b/tools/program.py @@ -284,9 +284,7 @@ def train_eval_rec_run(config, exe, train_info_dict, eval_info_dict): eval_batch_step = config['Global']['eval_batch_step'] save_epoch_step = config['Global']['save_epoch_step'] save_model_dir = config['Global']['save_model_dir'] - if save_model_dir[-1] == "/": - save_model_dir = save_model_dir[:-1] - if not os.path.exists(save_model_dir + config['Global']['algorithm']): + if not os.path.exists(save_model_dir): os.makedirs(save_model_dir) train_stats = TrainingStats(log_smooth_window, ['loss', 'acc']) best_eval_acc = -1