|
|
|
|
#!/usr/bin/env bash
|
|
|
|
|
# Step1 pretrain — 합성 데이터로 PGNet 학습
|
|
|
|
|
#
|
|
|
|
|
# 컨테이너 안 실행:
|
|
|
|
|
# docker exec kr_lp_pgnet bash /workspace/kr_lp_pgnet/scripts/run_step1.sh
|
|
|
|
|
#
|
|
|
|
|
# 환경 변수:
|
|
|
|
|
# DRY_RUN=1 2 epoch만 돌려 동작 검증
|
|
|
|
|
# EPOCHS=N epoch 수 override (기본 config의 epoch_num)
|
|
|
|
|
# LOG=path 로그 파일 (기본: /workspace/PaddleOCR/output/kr_lp_pgnet/train.log)
|
|
|
|
|
|
|
|
|
|
set -euo pipefail
|
|
|
|
|
|
|
|
|
|
PADDLEOCR_DIR=/workspace/PaddleOCR
|
|
|
|
|
KR_LP_DIR=/workspace/kr_lp_pgnet
|
|
|
|
|
TRAIN_DATA=/workspace/train_data
|
|
|
|
|
SYNTH_DIR="$TRAIN_DATA/kr_lp_synth"
|
|
|
|
|
ASSET_DIR="$KR_LP_DIR/data_gen/Korean-license-plate-Generator"
|
|
|
|
|
LOG="${LOG:-$PADDLEOCR_DIR/output/kr_lp_pgnet/train.log}"
|
|
|
|
|
NUM_SAMPLES="${NUM_SAMPLES:-10000}"
|
|
|
|
|
|
|
|
|
|
# ── 1. 합성 데이터 생성 ──────────────────────────────────────────────────────
|
|
|
|
|
echo "==========================="
|
|
|
|
|
echo "[1/3] 합성 데이터 생성 (${NUM_SAMPLES}장)"
|
|
|
|
|
echo " asset: $ASSET_DIR"
|
|
|
|
|
echo " out: $SYNTH_DIR"
|
|
|
|
|
echo "==========================="
|
|
|
|
|
|
|
|
|
|
python3.10 "$KR_LP_DIR/data_gen/generate_synthetic.py" \
|
|
|
|
|
--asset_dir "$ASSET_DIR" \
|
|
|
|
|
--out_dir "$SYNTH_DIR" \
|
|
|
|
|
--num "$NUM_SAMPLES" \
|
|
|
|
|
--dict "$KR_LP_DIR/dict/kr_lp_dict.txt"
|
|
|
|
|
|
|
|
|
|
# ── 2. eval GT mat 생성 ─────────────────────────────────────────────────────
|
|
|
|
|
echo "==========================="
|
|
|
|
|
echo "[2/3] eval GT mat 생성"
|
|
|
|
|
echo " label: $SYNTH_DIR/test/test.txt"
|
|
|
|
|
echo " out: $SYNTH_DIR/gt/"
|
|
|
|
|
echo "==========================="
|
|
|
|
|
|
|
|
|
|
python3.10 "$KR_LP_DIR/tools/make_gt_mat.py" \
|
|
|
|
|
--label "$SYNTH_DIR/test/test.txt" \
|
|
|
|
|
--out_dir "$SYNTH_DIR/gt"
|
|
|
|
|
|
|
|
|
|
# ── 3. 학습 ─────────────────────────────────────────────────────────────────
|
|
|
|
|
cd "$PADDLEOCR_DIR"
|
|
|
|
|
|
|
|
|
|
# train_data symlink (config는 ./train_data/kr_lp_synth 사용)
|
|
|
|
|
if [ ! -e ./train_data ]; then
|
|
|
|
|
ln -sf "$TRAIN_DATA" ./train_data
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
mkdir -p "$(dirname "$LOG")"
|
|
|
|
|
|
|
|
|
|
OVERRIDE=(
|
|
|
|
|
-o Global.pretrained_model=./pretrain_models/train_step1/best_accuracy
|
|
|
|
|
Global.load_static_weights=False
|
|
|
|
|
)
|
|
|
|
|
if [ -n "${EPOCHS:-}" ]; then
|
|
|
|
|
OVERRIDE+=(Global.epoch_num="$EPOCHS")
|
|
|
|
|
fi
|
|
|
|
|
if [ "${DRY_RUN:-0}" = "1" ]; then
|
|
|
|
|
OVERRIDE+=(Global.epoch_num=2 Global.eval_batch_step="[0,200]")
|
|
|
|
|
echo "DRY_RUN=1 → 2 epoch만 실행"
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
echo "==========================="
|
|
|
|
|
echo "[3/3] Step1 학습 시작"
|
|
|
|
|
echo " config: configs/e2e/kr_lp_pgnet.yml"
|
|
|
|
|
echo " data: $SYNTH_DIR/"
|
|
|
|
|
echo " pretrain: pretrain_models/train_step1/best_accuracy"
|
|
|
|
|
echo " log: $LOG"
|
|
|
|
|
echo " override: ${OVERRIDE[@]}"
|
|
|
|
|
echo "==========================="
|
|
|
|
|
|
|
|
|
|
python3.10 tools/train.py -c configs/e2e/kr_lp_pgnet.yml "${OVERRIDE[@]}" 2>&1 | tee "$LOG"
|