You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
5.6 KiB
5.6 KiB
kr_lp_pgnet — 핸드오프 (Claude 전용)
한국 자동차 번호판 검출 + OCR을 위한 PaddleOCR PGNet 학습 프로젝트.
30초 요약
- 목표: PGNet 한 모델로 한국 LP 4종 (자가용/영업/전기/화물) 검출+인식 → ONNX export
- 현재 상태 (2026-05-18): Step1 학습 중 (run
step1-20260518_1010, 200 epoch, from-scratch) - 진단 히스토리:
- 라벨이 판 전체 box → tight box 수정 → 검출 f_score 0.52→0.7 개선, 그러나 인식 여전히 실패
- eval 시각화로 확인: type1 plate가 한글 뒤 공백에서 검출 분리 ("37도1563"→"37도"+"1563"), 한글 전부 □
- 코드 검증: CTC는 alignment-free라 char-level polygon 무의미. 진짜 원인은 한글 뒤 36px 공백이 PGNet TCL 연결을 끊는 것 + 한글 클래스 불균형
gen_type1의col += 60 + 36→col += 60(공백 제거) 후 재학습
- 확인 포인트: epoch 5~10에서
eval/hit_str_count상승 + 검출 미분리 여부 → 공백 제거 효과 판정 - 남은 이슈: 한글 클래스 불균형 (plate당 숫자~6 : 한글 1), augmentation 부재 — 공백 효과 확인 후 별도 대응
- 다음 단계: 학습 완료 후 → eval f_score_e2e 확인 → Step2 fine-tune (실차 데이터)
- 운영 원칙: 로컬 Mac은 코드 작성·git만, 모든 실행은 외부 GPU 서버에서
환경
1. 로컬 Mac (코드 작성 전용)
- 작업 디렉토리:
/Users/songhyeonsu/Documents/GIT/cuuva_AI/kr_lp_pgnet/ - 금지: pip install, 외부 자산 clone, 합성기·학습·평가 실행
- 허용: 코드/yaml/sh 작성·수정, git commit/push
2. 외부 GPU 서버
- SSH:
ssh cuuva@192.168.10.189(사내망 전용) - 호스트: Ubuntu 25.10, RTX 5090 32GB, NVIDIA driver 590.48.01, CUDA 13.1
- 레이아웃:
/home/cuuva/workspace/ ├── PaddleOCR/ # git clone release/2.7 ├── kr_lp_pgnet/ # 이 repo ├── train_data/ │ ├── kr_lp_synth/ # Step1 학습용 (50k, tight box 라벨) │ ├── region_check_y/ # 영업용 region 16종 검증 │ └── region_check_g/ # 친환경 region 16종 검증 └── wheels/ └── paddlepaddle_gpu-3.3.0.dev20251209-cp310-...whl
3. 학습 컨테이너 kr_lp_pgnet
- 베이스:
ubuntu:24.04 - 옵션:
--gpus all --shm-size=8g --restart unless-stopped - bind mount: 호스트
/home/cuuva/workspace↔ 컨테이너/workspace - 재셋업:
bash scripts/recreate_container.sh
4. 파일 서버 컨테이너 kr_lp_http
- 합성 결과 시각 확인용: http://192.168.10.189:8889/
- 마운트:
/home/cuuva/workspace/train_data(read-only)
저장소
- Git remote:
http://192.168.10.110/TTA/kr_lp_pgnet.git(사내 Gitea) - 브랜치:
main만 사용
wandb
- Entity:
hssong_cuuva/ Project:kr_lp_pgnet - 현재 run:
step1-20260518_0216 - dashboard: https://wandb.ai/hssong_cuuva/kr_lp_pgnet
핵심 이슈 히스토리
라벨 박스 문제 (2026-05-18 수정)
기존 학습 데이터(kr_lp_synth)의 라벨 박스가 판 전체 영역이었음:
수정 전: "points": [[0,0],[520,0],[520,110],[0,110]] ← 판 전체
수정 후: "points": [[35,13],[467,96],...] ← 글자 행만
결과: 100 epoch 학습해도 f_score_e2e ≈ 0 (hit_str_count 32/2867).
원인: training은 라벨과 직접 비교하므로 loss가 내려갔지만, 추론 시 post-processing이
판 전체 heat map을 받아 박스를 쪼개거나 이상하게 복원 → 인식 실패.
generate_synthetic.py의 tight polygon 생성 코드는 이미 수정되어 있었으나
서버 데이터가 구버전으로 생성된 상태였음. 데이터 재생성 후 재학습.
NVML stale (재발 가능)
컨테이너 장시간 실행 후 nvidia-smi 에러. docker restart kr_lp_pgnet으로 해결.
OOM
batch 32 → OOM. batch 16 확정.
cuDNN 9.17 강제
paddle sm_120 wheel은 cuDNN 9.17 빌드. setup_server.sh에서 nvidia-cudnn-cu13>=9.17 강제 설치.
자주 쓰는 운영 명령
# 학습 로그 확인
ssh cuuva@192.168.10.189 'docker exec kr_lp_pgnet sh -c "tail -5 /workspace/PaddleOCR/output/kr_lp_pgnet_*/run.log"'
# GPU 사용량
ssh cuuva@192.168.10.189 'docker exec kr_lp_pgnet nvidia-smi --query-gpu=memory.used,utilization.gpu --format=csv'
# 학습 중단
ssh cuuva@192.168.10.189 'docker exec kr_lp_pgnet pkill -f tools/train.py'
# 컨테이너 재시작 (NVML 풀기)
ssh cuuva@192.168.10.189 'docker restart kr_lp_pgnet'
# 재학습 (처음부터)
ssh cuuva@192.168.10.189 'docker exec -d kr_lp_pgnet bash /workspace/kr_lp_pgnet/scripts/run_step1.sh'
데이터 관련 알려진 이슈
- 자산이 만들 수 없는 글자:
하,호,배— Step2 실차 데이터로 보충 - REGION_MAP 추정값:
A='서울'만 검증, 나머지는tools/region_check.py로 확인 필요 - 세종 누락: 자산 region 16개, 실제 광역지자체 17개 (세종 미포함)
진행 상태
✅ 완료
- 환경 셋업 (컨테이너, paddle sm_120, cuDNN 9.17, PaddleOCR release/2.7)
- dict 67자 + config (pad_num=67, max_text_length=10, valid_set=partvgg)
- 합성기 4 plate type + tight word-level polygon 라벨
- wandb 연동
- make_gt_mat.py (eval GT 생성)
- run_step1.sh 타임스탬프 기반 output 관리
🔄 진행 중
- Step1 학습 (run
step1-20260518_0216, 200 epoch, 50k tight-box 데이터)
📋 다음 단계
- Step1 완료 후 f_score_e2e 확인 (이전 0.0007 → 대폭 개선 기대)
- Step2 fine-tune — 실차 한국 LP 사진 수집·라벨링
- ONNX export