diff --git a/configs/kr_lp_pgnet.yml b/configs/kr_lp_pgnet.yml new file mode 100644 index 0000000..d8fcc80 --- /dev/null +++ b/configs/kr_lp_pgnet.yml @@ -0,0 +1,120 @@ +Global: + use_gpu: True + epoch_num: 200 + log_smooth_window: 20 + print_batch_step: 10 + save_model_dir: ./output/kr_lp_pgnet/ + save_epoch_step: 10 + eval_batch_step: [0, 1000] + cal_metric_during_train: False + pretrained_model: + checkpoints: + save_inference_dir: + use_visualdl: False + infer_img: + infer_visual_type: CN + valid_set: partvgg + save_res_path: ./output/kr_lp_pgnet/predicts.txt + character_dict_path: ppocr/utils/kr_lp_dict.txt + character_type: CN + max_text_length: 10 + max_text_nums: 5 + tcl_len: 64 + +Architecture: + model_type: e2e + algorithm: PGNet + Transform: + Backbone: + name: ResNet + layers: 50 + Neck: + name: PGFPN + Head: + name: PGHead + character_dict_path: ppocr/utils/kr_lp_dict.txt + +Loss: + name: PGLoss + tcl_bs: 64 + max_text_length: 10 + max_text_nums: 5 + pad_num: 67 + +Optimizer: + name: Adam + beta1: 0.9 + beta2: 0.999 + lr: + name: Cosine + learning_rate: 0.001 + warmup_epoch: 50 + regularizer: + name: 'L2' + factor: 0.0001 + +PostProcess: + name: PGPostProcess + score_thresh: 0.5 + mode: fast + point_gather_mode: align + +Metric: + name: E2EMetric + mode: A + gt_mat_dir: ./train_data/kr_lp_synth/gt + character_dict_path: ppocr/utils/kr_lp_dict.txt + main_indicator: f_score_e2e + +Train: + dataset: + name: PGDataSet + data_dir: ./train_data/kr_lp_synth/train + label_file_list: [./train_data/kr_lp_synth/train/train.txt] + ratio_list: [1.0] + transforms: + - DecodeImage: + img_mode: BGR + channel_first: False + - E2ELabelEncodeTrain: + - PGProcessTrain: + batch_size: 14 + use_resize: True + use_random_crop: False + min_crop_size: 24 + min_text_size: 4 + max_text_size: 512 + point_gather_mode: align + - KeepKeys: + keep_keys: ['images', 'tcl_maps', 'tcl_label_maps', 'border_maps', 'direction_maps', 'training_masks', 'label_list', 'pos_list', 'pos_mask'] + loader: + shuffle: True + drop_last: True + batch_size_per_card: 14 + num_workers: 8 + +Eval: + dataset: + name: PGDataSet + data_dir: ./train_data/kr_lp_synth/test + label_file_list: [./train_data/kr_lp_synth/test/test.txt] + transforms: + - DecodeImage: + img_mode: BGR + channel_first: False + - E2ELabelEncodeTest: + - E2EResizeForTest: + max_side_len: 768 + - NormalizeImage: + scale: 1./255. + mean: [0.485, 0.456, 0.406] + std: [0.229, 0.224, 0.225] + order: 'hwc' + - ToCHWImage: + - KeepKeys: + keep_keys: ['image', 'shape', 'polys', 'texts', 'ignore_tags', 'img_id'] + loader: + shuffle: False + drop_last: False + batch_size_per_card: 1 + num_workers: 2 diff --git a/dict/kr_lp_dict.txt b/dict/kr_lp_dict.txt new file mode 100644 index 0000000..d653583 --- /dev/null +++ b/dict/kr_lp_dict.txt @@ -0,0 +1,67 @@ +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +가 +나 +다 +라 +마 +바 +사 +아 +자 +거 +너 +더 +러 +머 +버 +서 +어 +저 +고 +노 +도 +로 +모 +보 +소 +오 +조 +구 +누 +두 +루 +무 +부 +수 +우 +주 +하 +허 +호 +배 +울 +산 +대 +인 +천 +광 +전 +세 +종 +경 +기 +강 +원 +충 +북 +남 +제 diff --git a/scripts/setup_server.sh b/scripts/setup_server.sh index d31924d..f831689 100755 --- a/scripts/setup_server.sh +++ b/scripts/setup_server.sh @@ -5,7 +5,9 @@ set -euo pipefail -WORKSPACE="${WORKSPACE:-$HOME/workspace}" +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +KR_LP_DIR="$(cd "$SCRIPT_DIR/.." && pwd)" +WORKSPACE="${WORKSPACE:-$(cd "$KR_LP_DIR/.." && pwd)}" PADDLEOCR_DIR="$WORKSPACE/PaddleOCR" PRETRAIN_DIR="$PADDLEOCR_DIR/pretrain_models" @@ -30,7 +32,12 @@ if [ ! -d "train_step1" ]; then rm train_step1.tar fi -echo "[4/4] GPU/Paddle 동작 확인" +echo "[4/5] kr_lp_dict 및 config를 PaddleOCR 트리에 symlink" +ln -sf "$KR_LP_DIR/dict/kr_lp_dict.txt" "$PADDLEOCR_DIR/ppocr/utils/kr_lp_dict.txt" +mkdir -p "$PADDLEOCR_DIR/configs/e2e" +ln -sf "$KR_LP_DIR/configs/kr_lp_pgnet.yml" "$PADDLEOCR_DIR/configs/e2e/kr_lp_pgnet.yml" + +echo "[5/5] GPU/Paddle 동작 확인" python3 -c "import paddle; print('paddle:', paddle.__version__); print('CUDA available:', paddle.is_compiled_with_cuda()); print('GPU count:', paddle.device.cuda.device_count())" echo