YOLOv8n-cls Go Stone Classifier

A fine-tuned YOLOv8n-cls model that classifies 64Γ—64 image patches from a Go board into three classes: empty, black stone, or white stone. Trained on synthetic board renders from SGF game records, then exported to Core ML for on-device inference on iOS.

Model Details

Base Model yolov8n-cls.pt (Ultralytics YOLOv8 Nano)
Task Image Classification (3 classes)
Input Size 64Γ—64 pixels
Classes empty, black, white
Framework Ultralytics YOLOv8
Training Device Apple MPS (Metal Performance Shaders)
Optimizer AdamW
Epochs 30 (early stopped at 17)
Batch Size 128
Learning Rate 0.001 (cosine schedule)

Performance

Metric Value
Top-1 Accuracy 100%
Top-5 Accuracy 100%
Best Val Loss 0.00011 (epoch 17)
Best Train Loss 0.00204 (epoch 14)

The model converges rapidly β€” reaching >99.9% accuracy by epoch 1 β€” because the 64Γ—64 patch classification task is well-separated for these three classes.

Training Data

Synthetic 64Γ—64 image patches extracted from Go board renders generated from SGF game records. The dataset includes:

  • Renders with realistic stone textures, grid lines, star points
  • Multiple renders per board state (3 renders with random augmentation)
  • Up to 10 board snapshots per SGF game
  • Dataset split: 70% train / 15% val / 15% test

Repository Contents

.
β”œβ”€β”€ weights/
β”‚   β”œβ”€β”€ best.pt              # Best checkpoint (val_loss=0.00011)
β”‚   └── last.pt              # Final epoch checkpoint
β”œβ”€β”€ args.yaml                # Training configuration
β”œβ”€β”€ results.csv              # Per-epoch metrics
β”œβ”€β”€ results.png              # Training curves
β”œβ”€β”€ confusion_matrix.png     # Confusion matrix
β”œβ”€β”€ confusion_matrix_normalized.png
└── best.mlpackage/          # Core ML export for iOS
    β”œβ”€β”€ Manifest.json
    └── Data/com.apple.CoreML/
        β”œβ”€β”€ model.mlmodel
        └── weights/weight.bin

Usage

Python (Ultralytics)

from ultralytics import YOLO

model = YOLO("best.pt")
results = model("path/to/go_board.jpg")

iOS (Core ML)

Drop best.mlpackage into your Xcode project. The model accepts a 64Γ—64 RGB image and outputs class probabilities for empty/black/white.

import CoreML
import Vision

guard let model = try? VNCoreMLModel(for: go_stone_classifier().model) else { return }
let request = VNCoreMLRequest(model: model) { request, error in
    if let results = request.results as? [VNClassificationObservation] {
        for result in results {
            print("\(result.identifier): \(result.confidence)")
        }
    }
}

Citation

If you use this model, please cite:

@misc{yolo-go-stone-classifier,
  author = {rociiu},
  title = {YOLOv8n-cls Go Stone Classifier},
  year = {2026},
  publisher = {Hugging Face},
  howpublished = {\url{https://huggingface.co/rociiu/yolo-go-stone-classifier}},
}

License

MIT

Downloads last month
16
Inference Providers NEW
This model isn't deployed by any Inference Provider. πŸ™‹ Ask for provider support

Evaluation results