|
Download code/README.md from savastakan/hitit-cuneiform-ocr: direct link, hf CLI and curl.
- Browser
- Download file 3.47 kB
-
https://huggingface.co/savastakan/hitit-cuneiform-ocr/resolve/main/code/README.md
- Command line
-
hf download hf://savastakan/hitit-cuneiform-ocr/code/README.md
-
curl -L -o README.md https://huggingface.co/savastakan/hitit-cuneiform-ocr/resolve/main/code/README.md
3.47 kB
| # Hitit Çivi Yazısı OCR Sistemi | |
| ## Mimari: 2-Aşamalı Pipeline | |
| ### Aşama 1: İşaret Tespiti (Object Detection) | |
| - **Model**: YOLOv8m (Ultralytics) | |
| - **Görev**: Tablet resminde çivi yazısı işaretlerinin konumlarını tespit et | |
| - **Çıktı**: Bounding box'lar (x, y, w, h) | |
| - **Multi-GPU**: YOLO native DDP (`device='0,1,2,3'`) | |
| ### Aşama 2: İşaret Sınıflandırma (Classification) | |
| - **Ana model**: ConvNeXt-Small (METHODOLOGY.md §3) | |
| - **İleri karşılaştırma**: DINOv3 ViT-B (frozen + linear head) | |
| - **Baseline'lar**: ResNet50 (Verwimp et al. 2025), EfficientNetV2-S/M | |
| - **Görev**: Tespit edilen her işareti sınıflandır | |
| - **Çıktı**: İşaret adı (195 sınıf, MIN_SIGN_SAMPLES ≥ 20) | |
| - **Multi-GPU**: PyTorch DDP (torchrun) + DistributedWeightedSampler | |
| - **img_size**: 224px | |
| ### Neden 2-Aşama? | |
| - 1200+ benzersiz işaret var ama çoğu nadir (long-tail dağılım) | |
| - YOLO tek başına bu kadar sınıfla düşük performans verir | |
| - 2-aşama ile: YOLO sadece "işaret var/yok" tespit eder → sınıflandırıcı tanır | |
| ### Long-Tail Handling (Literatür-destekli) | |
| - **Focal Loss** + **Effective Number Weighting** (Cui et al. 2019) | |
| - **TailMix** augmentation (Li et al. 2023 — tail accuracy 18%→46%) | |
| - **WeightedRandomSampler** (sqrt tabanlı) | |
| - **Macro Accuracy** ile model seçimi (Top-1 yerine — long-tail için daha adil) | |
| ### Değerlendirme | |
| - **5-Fold Tablet-Bazlı CV** (data leak yok — aynı tabletin yüzleri aynı fold'da) | |
| - Metrikler: Top-1 Acc, Top-5 Acc, Macro Acc (per-class average) | |
| - Not: detection katmanı doğrudan hazırdır; classification tarafında auxiliary unified manifest güçlü pretraining sağlar, fakat Hittite-only final evaluation için `hitit_ocr/data/classification/all/` materialization'ının tamamlanmış olması gerekir. | |
| ## Kurulum & Çalıştırma | |
| ```bash | |
| # 1. Veri hazırlama (fold_0 default) | |
| python3 src/prepare_data.py --val-fold 0 | |
| # 2. YOLO eğitimi — 4 GPU | |
| sbatch scripts/train_yolo_slurm.sh | |
| # veya: python3 src/train_detector.py --gpus 4 --fold 0 | |
| # 3. Sınıflandırıcı eğitimi — 4 GPU DDP | |
| sbatch scripts/train_cls_slurm.sh | |
| # veya: torchrun --nproc_per_node=4 src/train_classifier.py --fold 0 | |
| # 4. K-Fold CV (tüm fold'lar) | |
| torchrun --nproc_per_node=4 src/train_classifier.py --all-folds | |
| # 5. Inference | |
| python3 src/inference.py --image tablet.jpg | |
| ``` | |
| ## Dosya Yapısı | |
| ``` | |
| hitit_ocr/ | |
| ├── configs/ | |
| │ ├── data.yaml # Veri sabitleri (MIN_SIGN_SAMPLES=20) | |
| │ ├── detection.yaml # YOLO parametreleri | |
| │ └── classification.yaml # Classifier parametreleri | |
| ├── src/ | |
| │ ├── prepare_data.py # K-Fold veri hazırlama + materialization | |
| │ ├── train_detector.py # YOLO eğitimi (multi-GPU, K-Fold) | |
| │ ├── train_classifier.py # Classifier eğitimi (DDP, K-Fold, TailMix) | |
| │ └── inference.py # Full pipeline inference | |
| ├── scripts/ | |
| │ ├── train_yolo_slurm.sh # SLURM: akya-cuda 4xGPU | |
| │ └── train_cls_slurm.sh # SLURM: akya-cuda 4xGPU DDP | |
| └── data/ | |
| ├── detection/ # YOLO format (all/ + fold_X/) | |
| └── classification/ # ImageFolder (all/ + train/ + val/) | |
| ``` | |
| ## Referanslar | |
| - Verwimp et al. (2025) "Signs of the Past" — ResNet50, Top-1 87.1%, ≥20 instances | |
| - Williams et al. (2023) "DeepScribe" — RetinaNet + ResNet, 0.84 mAP | |
| - Li et al. (2023) "TailMix" — Oracle bone long-tail, tail acc 18%→46% | |