|
Download README.md from Cracked-ANJ/CourtKeyNet: direct link, hf CLI and curl.
- Browser
- Download file 11 kB
-
https://huggingface.co/Cracked-ANJ/CourtKeyNet/resolve/main/README.md
- Command line
-
hf download hf://Cracked-ANJ/CourtKeyNet/README.md
-
curl -L -o README.md https://huggingface.co/Cracked-ANJ/CourtKeyNet/resolve/main/README.md
11 kB
| language: en | |
| license: mit | |
| tags: | |
| - court-detection | |
| - keypoint-detection | |
| - sports-analysis | |
| - badminton | |
| - tennis | |
| - pytorch | |
| - computer-vision | |
| - octave-convolution | |
| - geometric-constraints | |
| - polar-transform | |
| datasets: | |
| - adithyanraj03/CourtKeyNet-Dataset | |
| metrics: | |
| - pck | |
| - iou | |
| pipeline_tag: keypoint-detection | |
| library_name: pytorch | |
| model-index: | |
| - name: CourtKeyNet | |
| results: | |
| - task: | |
| type: keypoint-detection | |
| name: Court Keypoint Detection | |
| dataset: | |
| name: CourtKeyNet Badminton Court Dataset | |
| type: custom | |
| metrics: | |
| - name: PCK | |
| type: pck | |
| value: 99.99 | |
| - name: IoU | |
| type: iou | |
| value: 99.67 | |
| <div align="center"> | |
| <img src="assets/teasser.png" alt="CourtKeyNet Banner" width="100%"> | |
| # CourtKeyNet: A Novel Octave-Based Architecture for Precision Court Detection | |
| **Adithya N Raj** | |
| [](https://www.sciencedirect.com/science/article/pii/S2666827026000496) | |
| [](https://github.com/adithyanraj03/CourtKeyNet) | |
| [](https://github.com/adithyanraj03/Paper_09_Data-Set_CourtKeyNet) | |
| [](LICENSE) | |
| [](https://huggingface.co/docs/safetensors) | |
| </div> | |
| --- | |
| ## Model Summary | |
| **CourtKeyNet** is a lightweight deep learning architecture for precision court keypoint detection in sports videos. It detects 4 corner keypoints of badminton and tennis courts from a single image, enabling downstream applications like court homography estimation, match statistics generation, and automated broadcasting systems. | |
| Published in [Machine Learning with Applications (Elsevier)](https://www.sciencedirect.com/science/article/pii/S2666827026000496), 2026. | |
| ### Key Features | |
| - 🎯 **99.99% PCK** and **99.67% IoU** on the fine-tuned model | |
| - ⚡ **Lightweight and fast** — efficient architecture for real-time use | |
| - 🔬 **Octave Feature Extractor** — Multi-frequency feature decomposition for capturing fine court details and global structural context | |
| - 🎱 **Polar Transform Attention** — Boundary detection in polar coordinates for precise court line localization | |
| - 📐 **Geometric Consistency Loss** — Ensures structurally valid quadrilateral outputs | |
| - 🏸 Supports both **badminton** and **tennis** court detection | |
| --- | |
| ## Model Variants | |
| | Variant | File | Format | Val Loss | PCK (%) | IoU (%) | Description | | |
| |---------|------|--------|----------|---------|---------|-------------| | |
| | **CourtKeyNet-Base** | `pretrained/courtkeynet_base.safetensors` | SafeTensors | 0.0977 | 99.09 | 94.33 | Pre-trained on 140k+ images from scratch | | |
| | **CourtKeyNet-Finetuned** ⭐ | `finetuned/courtkeynet_finetuned.safetensors` | SafeTensors | 0.0013 | 99.99 | 99.67 | Fine-tuned on 7k+ clean annotated images | | |
| > **Recommendation:** Use the **fine-tuned** variant for best results. The pre-trained base model is provided for researchers who wish to fine-tune on their own custom court datasets. | |
| --- | |
| ## Quick Start | |
| ### 1. Download Weights | |
| ```bash | |
| # Install huggingface CLI | |
| pip install "huggingface_hub[cli]" | |
| # Download the full repository | |
| huggingface-cli download Cracked-ANJ/CourtKeyNet --local-dir ./courtkeynet-weights | |
| # Or download only the fine-tuned model (recommended) | |
| huggingface-cli download Cracked-ANJ/CourtKeyNet finetuned/courtkeynet_finetuned.safetensors --local-dir ./courtkeynet-weights | |
| ``` | |
| ### 2. Run Inference | |
| For inference, training, and fine-tuning scripts, use the full source code from the **[GitHub Repository](https://github.com/adithyanraj03/CourtKeyNet)**: | |
| ```bash | |
| # Clone the source code | |
| git clone https://github.com/adithyanraj03/CourtKeyNet.git | |
| cd CourtKeyNet | |
| # Install dependencies | |
| pip install -r requirements.txt | |
| # Run Inference Studio (GUI) | |
| cd courtkeynet | |
| python inference.py | |
| ``` | |
| > The Inference Studio provides a complete GUI with image/video/webcam support, confidence scoring, and real-time visualization. | |
| --- | |
| ## Architecture | |
| <div align="center"> | |
| <img src="assets/architecture.png" alt="CourtKeyNet Architecture" width="80%"> | |
| </div> | |
| <details> | |
| <summary style="font-size: 1.2em; font-weight: bold; cursor: pointer;">🔍 How Confidence Detection Works (Visual Explanation)</summary> | |
| ### How Confidence Detection Works | |
| The model (`CourtKeyNet`) works like this: | |
|  | |
| **Problem**: It has no "court detector" — it assumes every image IS a court! | |
| --- | |
| #### What the Model Actually Outputs Internally | |
| When you run `model(image)`, it returns a dictionary with these components: | |
| ```python | |
| outputs = { | |
| 'heatmaps': Tensor[B, 4, 160, 160], # 4 gaussian peaks (one per corner) | |
| 'kpts_init': Tensor[B, 4, 2], # Initial keypoints from heatmaps | |
| 'kpts_refined': Tensor[B, 4, 2], # Final refined keypoints | |
| 'features': Tensor[B, 256, 20, 20] # Feature maps (optional) | |
| } | |
| ``` | |
| #### Visualization of Heatmap Output | |
| For a **real court image**: | |
| ```text | |
| Heatmap for Corner 0 (Top-Left): | |
| ``` | |
|  | |
| For a **non-court image** (e.g., random person): | |
| ```text | |
| Heatmap for Corner 0: | |
| ``` | |
|  | |
| --- | |
| #### 3 Confidence Metrics | |
| ##### 1️⃣ **Heatmap Peak Confidence** (Primary Signal) | |
| **What it measures**: How "peaky" the heatmap is | |
| ```python | |
| max_values = heatmaps.max(dim=(2,3)) # Find highest value in each heatmap | |
| conf_heatmap = max_values.mean() # Average across 4 corners | |
| ``` | |
| **Visual comparison**: | |
|  | |
| --- | |
| ##### 2️⃣ **Heatmap Entropy** (Uncertainty) | |
| **What it measures**: How "spread out" the probability is | |
| ```python | |
| # Entropy = -Σ(p * log(p)) | |
| # Low entropy = focused (good) | |
| # High entropy = random noise (bad) | |
| ``` | |
| **Visual comparison**: | |
|  | |
| --- | |
| ##### 3️⃣ **Geometric Validity** (Shape Check) | |
| **What it checks**: Does the quad look like a real court? | |
| ```text | |
| Checklist: | |
| ✓ Are corners in correct positions? (TL upper-left, BR lower-right) | |
| ✓ Is the quad convex? (no crossed lines) | |
| ✓ Is the area reasonable? (not too tiny, not entire image) | |
| ✓ Is aspect ratio court-like? (not a thin line) | |
| ``` | |
| **Visual examples**: | |
|  | |
| </details> | |
| --- | |
| ## Training Details | |
| ### Pre-training (from scratch) | |
| | Parameter | Value | | |
| |-----------|-------| | |
| | **Dataset** | 140,000+ badminton & tennis court images | | |
| | **Epochs** | 158 (early stopping, patience=20) | | |
| | **Best Epoch** | 138 | | |
| | **Optimizer** | AdamW | | |
| | **Learning Rate** | 5e-5 (cosine schedule) | | |
| | **Batch Size** | 47 | | |
| | **Image Size** | 640×640 | | |
| | **Mixed Precision** | ✓ FP16 | | |
| | **Hardware** | NVIDIA RTX 5090 (32GB) | | |
| ### Fine-tuning | |
| | Parameter | Value | | |
| |-----------|-------| | |
| | **Base Model** | Pre-trained CourtKeyNet-Base (epoch 138) | | |
| | **Dataset** | 7,000+ precisely annotated clean images | | |
| | **Epochs** | 79 (early stopping, patience=20) | | |
| | **Best Epoch** | 59 | | |
| | **Learning Rate** | 1e-4 | | |
| | **Batch Size** | 48 | | |
| | **Geometric Loss** | Enabled (edge + diagonal + angle constraints) | | |
| --- | |
| ## Evaluation Results | |
| ### Fine-tuned Model (Recommended) | |
| | Metric | Score | | |
| |--------|-------| | |
| | **PCK** (Percentage of Correct Keypoints) | **99.99%** | | |
| | **IoU** (Intersection over Union) | **99.67%** | | |
| | **Validation Loss** | **0.0013** | | |
| ### Pre-trained Base Model | |
| | Metric | Score | | |
| |--------|-------| | |
| | **PCK** | 99.09% | | |
| | **IoU** | 94.33% | | |
| | **Validation Loss** | 0.0977 | | |
| ### Training Metrics | |
| <div align="center"> | |
| <img src="assets/training_metrics.png" alt="Training Metrics" width="100%"> | |
| <p><em>Pre-training metrics across 158 epochs showing loss convergence and PCK/IoU progression</em></p> | |
| </div> | |
| <div align="center"> | |
| <img src="assets/finetune_detail.png" alt="Fine-tuning Detail" width="100%"> | |
| <p><em>Fine-tuning convergence: rapid loss decrease with PCK reaching 99.99% and IoU reaching 99.67%</em></p> | |
| </div> | |
| ### Validation Samples | |
| <div align="center"> | |
| <table> | |
| <tr> | |
| <td align="center"><strong>Epoch 1 (Early Fine-tuning)</strong></td> | |
| <td align="center"><strong>Epoch 79 (Final)</strong></td> | |
| </tr> | |
| <tr> | |
| <td><img src="assets/val_sample_early.jpg" alt="Early Validation" width="100%"></td> | |
| <td><img src="assets/val_sample_final.jpg" alt="Final Validation" width="100%"></td> | |
| </tr> | |
| </table> | |
| <p><em>Red = Predicted court boundary | Green = Ground truth | Yellow dots = Keypoints</em></p> | |
| </div> | |
| --- | |
| ## Fine-tuning on Custom Data | |
| To fine-tune CourtKeyNet on your own court dataset (any sport): | |
| ```bash | |
| # 1. Clone the source code | |
| git clone https://github.com/adithyanraj03/CourtKeyNet.git | |
| cd CourtKeyNet | |
| # 2. Download weights | |
| huggingface-cli download Cracked-ANJ/CourtKeyNet pretrained/courtkeynet_base.pt --local-dir ./weights | |
| # 3. Fine-tune | |
| cd courtkeynet | |
| python finetune.py | |
| ``` | |
| > **Note:** Fine-tuning requires only **5,000–7,000** clean annotated images. Training from scratch requires **140,000+** images. | |
| --- | |
| ## Intended Use | |
| ### ✅ Appropriate Uses | |
| - Badminton and tennis court detection in sports videos | |
| - Court homography estimation for tactical analysis | |
| - Generating match statistics from broadcast footage | |
| - Automated camera calibration for sports broadcasting | |
| - Academic research in sports video analysis | |
| ### ⚠️ Limitations | |
| - Trained specifically on badminton and tennis courts; other court types may require fine-tuning | |
| - Expects single-court images; multi-court scenes are not supported | |
| - Performance may degrade on heavily occluded courts or extreme camera angles | |
| - The model detects 4 outer corners only (not inner court lines) | |
| --- | |
| ## Citation | |
| If you use CourtKeyNet in your research, please cite: | |
| **Paper:** [CourtKeyNet: A novel octave-based architecture for precision badminton court detection with geometric constraints](https://www.sciencedirect.com/science/article/pii/S2666827026000496) | |
| **DOI:** [10.1016/j.mlwa.2026.100884](https://doi.org/10.1016/j.mlwa.2026.100884) | |
| ```bibtex | |
| @article{NRAJ2026100884, | |
| title = {CourtKeyNet: A novel octave-based architecture for precision badminton court detection with geometric constraints}, | |
| journal = {Machine Learning with Applications}, | |
| volume = {24}, | |
| pages = {100884}, | |
| year = {2026}, | |
| issn = {2666-8270}, | |
| doi = {https://doi.org/10.1016/j.mlwa.2026.100884}, | |
| url = {https://www.sciencedirect.com/science/article/pii/S2666827026000496}, | |
| author = {Adithya N Raj and Prethija G.} | |
| } | |
| ``` | |
| --- | |
| ## License | |
| This project is released under the [MIT License](LICENSE), suitable for both academic and commercial use. | |
| ## Contact | |
| For questions or collaboration opportunities: **adithyanraj03@gmail.com** | |