Object Detection
ultralytics
PyTorch
English
yolo
yolov11
tennis
racket
sports
computer-vision
courtside
Eval Results (legacy)
Instructions to use Davidsv/CourtSide-Computer-Vision-v0.2 with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- ultralytics
How to use Davidsv/CourtSide-Computer-Vision-v0.2 with ultralytics:
from ultralytics import YOLOvv11 model = YOLOvv11.from_pretrained("Davidsv/CourtSide-Computer-Vision-v0.2") source = 'http://images.cocodataset.org/val2017/000000039769.jpg' model.predict(source=source, save=True) - Notebooks
- Google Colab
- Kaggle
| language: en | |
| license: mit | |
| tags: | |
| - yolo | |
| - yolov11 | |
| - object-detection | |
| - tennis | |
| - racket | |
| - sports | |
| - computer-vision | |
| - pytorch | |
| - ultralytics | |
| - courtside | |
| datasets: | |
| - dataset1-yx5qr | |
| metrics: | |
| - precision | |
| - recall | |
| - mAP | |
| library_name: ultralytics | |
| pipeline_tag: object-detection | |
| model-index: | |
| - name: CourtSide Computer Vision v0.2 | |
| results: | |
| - task: | |
| type: object-detection | |
| metrics: | |
| - type: mAP@50 | |
| value: 66.67 | |
| - type: precision | |
| value: 71 | |
| - type: recall | |
| value: 44 | |
| # CourtSide Computer Vision v0.2 - Racket Detection 🎾 | |
| Fine-tuned YOLOv11n model for detecting tennis rackets in images and videos. Part of the CourtSide Computer Vision suite for comprehensive tennis match analysis. | |
|  | |
| ## Model Details | |
| - **Model Name**: CourtSide Computer Vision v0.2 | |
| - **Model ID**: `Davidsv/CourtSide-Computer-Vision-v0.2` | |
| - **Model Type**: Object Detection | |
| - **Architecture**: YOLOv11 Nano (n) | |
| - **Framework**: Ultralytics YOLOv11 | |
| - **Parameters**: 2.6M | |
| - **Input Size**: 640x640 | |
| - **Classes**: 1 (`racket`) | |
| ## Performance Metrics | |
| Evaluated on validation set (66 images): | |
| | Metric | Value | | |
| |--------|-------| | |
| | **mAP@50** | **66.67%** | | |
| | **mAP@50-95** | 33.33% | | |
| | **Precision** | ~71% | | |
| | **Recall** | ~44% | | |
| | **Inference Speed** (M4 Pro) | ~10ms | | |
| ## Training Details | |
| ### Dataset | |
| This model was trained on the **dataset1** by Tesi, available on Roboflow Universe. | |
| - **Training images**: 582 | |
| - **Validation images**: 66 | |
| - **Test images**: 55 | |
| - **Total**: 703 annotated images | |
| - **Annotation format**: YOLO format (bounding boxes) | |
| - **Source**: [Roboflow Universe - Dataset1](https://universe.roboflow.com/tesi-mpvmr/dataset1-yx5qr) | |
| ### Training Configuration | |
| ```yaml | |
| Model: YOLOv11n (nano) | |
| Epochs: 100 | |
| Batch size: 16 | |
| Image size: 640x640 | |
| Device: Apple M4 Pro (MPS) | |
| Optimizer: AdamW | |
| Learning rate: 0.001 → 0.01 | |
| Training time: ~26 minutes | |
| ``` | |
| ### Augmentation | |
| - HSV color jitter (h=0.015, s=0.7, v=0.4) | |
| - Random horizontal flip (p=0.5) | |
| - Translation (±10%) | |
| - Scaling (±50%) | |
| - Mosaic augmentation | |
| ### Loss Weights | |
| - Box loss: 7.5 | |
| - Class loss: 0.5 | |
| - DFL loss: 1.5 | |
| ## Usage | |
| ### Installation | |
| ```bash | |
| pip install ultralytics | |
| ``` | |
| ### Python API | |
| ```python | |
| from ultralytics import YOLO | |
| # Load CourtSide Computer Vision v0.2 model | |
| model = YOLO('Davidsv/CourtSide-Computer-Vision-v0.2') | |
| # Predict on image | |
| results = model.predict('tennis_match.jpg', conf=0.4) | |
| # Display results | |
| results[0].show() | |
| # Get bounding boxes | |
| for box in results[0].boxes: | |
| x1, y1, x2, y2 = box.xyxy[0] | |
| confidence = box.conf[0] | |
| print(f"Racket detected at [{x1:.0f}, {y1:.0f}, {x2:.0f}, {y2:.0f}] with {confidence:.2%} confidence") | |
| ``` | |
| ### Video Processing | |
| ```python | |
| from ultralytics import YOLO | |
| model = YOLO('Davidsv/CourtSide-Computer-Vision-v0.2') | |
| # Process video | |
| results = model.predict( | |
| source='tennis_match.mp4', | |
| conf=0.4, | |
| save=True, | |
| save_txt=True | |
| ) | |
| # Track rackets across frames | |
| results = model.track( | |
| source='tennis_match.mp4', | |
| conf=0.4, | |
| tracker='bytetrack.yaml' | |
| ) | |
| ``` | |
| ### Command Line | |
| ```bash | |
| # Predict on image | |
| yolo detect predict model=Davidsv/CourtSide-Computer-Vision-v0.2 source=image.jpg conf=0.4 | |
| # Predict on video | |
| yolo detect predict model=Davidsv/CourtSide-Computer-Vision-v0.2 source=video.mp4 conf=0.4 save=True | |
| # Track rackets in video | |
| yolo detect track model=Davidsv/CourtSide-Computer-Vision-v0.2 source=video.mp4 conf=0.4 | |
| # Validate model | |
| yolo detect val model=Davidsv/CourtSide-Computer-Vision-v0.2 data=dataset.yaml | |
| ``` | |
| ## Recommended Hyperparameters | |
| ### Inference Settings | |
| ```python | |
| # Balanced (recommended) | |
| conf_threshold = 0.40 # Confidence threshold | |
| iou_threshold = 0.45 # NMS IoU threshold | |
| max_det = 10 # Maximum detections per image (usually 2-4 rackets) | |
| # High precision (fewer false positives) | |
| conf_threshold = 0.55 | |
| iou_threshold = 0.45 | |
| max_det = 8 | |
| # High recall (detect more rackets, more false positives) | |
| conf_threshold = 0.30 | |
| iou_threshold = 0.40 | |
| max_det = 15 | |
| ``` | |
| ## Limitations | |
| - **Motion blur**: Rackets in very fast motion may be harder to detect | |
| - **Occlusion**: Partially hidden rackets (behind player, net, etc.) may not be detected | |
| - **Angles**: Extreme viewing angles may reduce detection accuracy | |
| - **Racket types**: Trained on standard tennis rackets, may not generalize to unusual designs | |
| - **Similar objects**: May occasionally detect similar elongated objects | |
| ## Model Biases | |
| - Trained on professional and amateur match footage | |
| - Better performance on standard racket designs and colors | |
| - Dataset may have court-type or player-level biases | |
| - Optimized for typical tennis camera angles | |
| ## Use Cases | |
| ✅ **Recommended:** | |
| - Tennis match analysis and statistics | |
| - Player technique analysis | |
| - Swing detection and tracking | |
| - Automated coaching feedback | |
| - Sports analytics dashboards | |
| - Training video analysis | |
| - Action recognition pipelines (combined with ball detection) | |
| ⚠️ **Not Recommended:** | |
| - Real-time officiating decisions | |
| - Safety-critical applications | |
| - Detection of non-tennis rackets without fine-tuning | |
| ## Example Results | |
| ### Sample Detections | |
| **mAP@50: 66.67%** - Good detection performance on typical tennis scenes | |
| **Precision: ~71%** - When detected, about 7 out of 10 detections are correct | |
| **Recall: ~44%** - Detects approximately 4-5 out of 10 rackets | |
| ### Confidence Interpretation | |
| | Confidence Range | Interpretation | | |
| |------------------|----------------| | |
| | > 0.7 | High confidence - very likely a tennis racket | | |
| | 0.5 - 0.7 | Medium confidence - probably a tennis racket | | |
| | 0.4 - 0.5 | Low confidence - possible tennis racket | | |
| | < 0.4 | Very low confidence - likely false positive | | |
| ## CourtSide Computer Vision Suite | |
| This model is part of the **CourtSide Computer Vision** project for comprehensive tennis analysis: | |
| ### Available Models | |
| - **v0.1** - Tennis Ball Detection ([Davidsv/CourtSide-Computer-Vision-v0.1](https://huggingface.co/Davidsv/CourtSide-Computer-Vision-v0.1)) | |
| - **v0.2** - Tennis Racket Detection (this model) | |
| ### Combined Usage Example | |
| ```python | |
| from ultralytics import YOLO | |
| # Load both CourtSide CV models | |
| model_ball = YOLO('Davidsv/CourtSide-Computer-Vision-v0.1') # Ball detection | |
| model_racket = YOLO('Davidsv/CourtSide-Computer-Vision-v0.2') # Racket detection | |
| # Detect both in same image | |
| ball_results = model_ball.predict('match.jpg', conf=0.3) | |
| racket_results = model_racket.predict('match.jpg', conf=0.4) | |
| # Combine detections for comprehensive analysis | |
| print(f"Balls detected: {len(ball_results[0].boxes)}") | |
| print(f"Rackets detected: {len(racket_results[0].boxes)}") | |
| ``` | |
| ## Advanced Usage | |
| ### Detect and Track Swing Actions | |
| ```python | |
| from ultralytics import YOLO | |
| import cv2 | |
| model = YOLO('Davidsv/CourtSide-Computer-Vision-v0.2') | |
| video = cv2.VideoCapture('match.mp4') | |
| frame_count = 0 | |
| racket_positions = [] | |
| while True: | |
| ret, frame = video.read() | |
| if not ret: | |
| break | |
| # Detect rackets | |
| results = model.predict(frame, conf=0.4, verbose=False) | |
| # Track racket movement for swing analysis | |
| for box in results[0].boxes: | |
| x1, y1, x2, y2 = box.xyxy[0] | |
| center_x = (x1 + x2) / 2 | |
| center_y = (y1 + y2) / 2 | |
| racket_positions.append((frame_count, center_x, center_y)) | |
| frame_count += 1 | |
| # Analyze swing patterns | |
| print(f"Total racket detections: {len(racket_positions)}") | |
| ``` | |
| ### Full Tennis Analysis Pipeline | |
| ```python | |
| from ultralytics import YOLO | |
| # Load all CourtSide models | |
| ball_model = YOLO('Davidsv/CourtSide-Computer-Vision-v0.1') | |
| racket_model = YOLO('Davidsv/CourtSide-Computer-Vision-v0.2') | |
| # Process video with both models | |
| ball_results = ball_model.track('match.mp4', conf=0.3) | |
| racket_results = racket_model.track('match.mp4', conf=0.4) | |
| # Combine for action recognition and analytics | |
| ``` | |
| ## Model Card Authors | |
| - **Developed by**: Davidsv (Vuong) | |
| - **Model date**: November 2024 | |
| - **Model version**: v0.2 | |
| - **Model type**: Object Detection (YOLOv11) | |
| - **Part of**: CourtSide Computer Vision Suite | |
| ## Citations | |
| ### This Model | |
| If you use this model, please cite: | |
| ```bibtex | |
| @misc{courtsidecv_v0.2_2024, | |
| title={CourtSide Computer Vision v0.2: Tennis Racket Detection with YOLOv11}, | |
| author={Vuong}, | |
| year={2024}, | |
| publisher={Hugging Face}, | |
| howpublished={\url{https://huggingface.co/Davidsv/CourtSide-Computer-Vision-v0.2}} | |
| } | |
| ``` | |
| ### Dataset | |
| This model was trained using the dataset1 dataset. Please cite: | |
| ```bibtex | |
| @misc{dataset1-yx5qr_dataset, | |
| title = {dataset1 Dataset}, | |
| type = {Open Source Dataset}, | |
| author = {Tesi}, | |
| howpublished = {\url{https://universe.roboflow.com/tesi-mpvmr/dataset1-yx5qr}}, | |
| url = {https://universe.roboflow.com/tesi-mpvmr/dataset1-yx5qr}, | |
| journal = {Roboflow Universe}, | |
| publisher = {Roboflow}, | |
| year = {2023}, | |
| month = {mar}, | |
| note = {visited on 2024-11-20} | |
| } | |
| ``` | |
| ## License | |
| MIT License - Free for commercial and academic use. | |
| ## Acknowledgments | |
| - Built with [Ultralytics YOLOv11](https://github.com/ultralytics/ultralytics) | |
| - Dataset by Tesi via [Roboflow Universe](https://universe.roboflow.com/tesi-mpvmr/dataset1-yx5qr) | |
| - Part of the CourtSide Computer Vision project for tennis analysis | |
| ## Contact & Support | |
| For questions, issues, or collaboration: | |
| - Hugging Face: [@Davidsv](https://huggingface.co/Davidsv) | |
| - Model Updates: Check for newer versions in the CourtSide CV series | |
| ## Common Issues & Solutions | |
| ### Issue: Low Recall (Missing Rackets) | |
| **Solution**: Lower confidence threshold to 0.30-0.35 | |
| ### Issue: Too Many False Positives | |
| **Solution**: Increase confidence threshold to 0.50-0.55 | |
| ### Issue: Missed Rackets in Fast Motion | |
| **Solution**: Use `model.track()` instead of `model.predict()` for better temporal consistency | |
| ### Issue: Multiple Detections per Racket | |
| **Solution**: Increase NMS IoU threshold to 0.50-0.55 | |
| ### Issue: Poor Performance on Unusual Angles | |
| **Solution**: Consider fine-tuning on your specific camera setup or use data augmentation | |
| ## Model Changelog | |
| ### v0.2 (2024-11-20) | |
| - Initial release of racket detection model | |
| - YOLOv11n architecture | |
| - mAP@50: 66.67% | |
| - 703 training images from Roboflow dataset | |
| - Optimized for standard tennis racket detection | |
| - Part of CourtSide Computer Vision suite | |
| --- | |
| **Model Size**: 5.4 MB | |
| **Inference Speed**: 10-65ms (device dependent) | |
| **Supported Formats**: PyTorch (.pt), ONNX, TensorRT, CoreML | |
| **Model Hub**: [Davidsv/CourtSide-Computer-Vision-v0.2](https://huggingface.co/Davidsv/CourtSide-Computer-Vision-v0.2) | |
| 🎾 Ready for production use in tennis analysis applications! |