Add Korean LP dictionary and PGNet config

- dict/kr_lp_dict.txt: 67 chars covering 4 plate types
  (10 digits + 40 usage hangul + 17 region hangul, dedup)
- configs/kr_lp_pgnet.yml: PGNet config tuned for Korean LP
  (pad_num=67, max_text_length=10, valid_set=partvgg, infer_visual_type=CN)
- setup_server.sh: symlink dict and config into PaddleOCR tree

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
main
songhyeonsu 1 month ago
parent 35c9f9cb5d
commit 3e5f823dd5

@ -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

@ -0,0 +1,67 @@
0
1
2
3
4
5
6
7
8
9

@ -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

Loading…
Cancel
Save