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
Training Configuration
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
pip install ultralytics
Python API
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
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
# 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
# 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)
- v0.2 - Tennis Racket Detection (this model)
Combined Usage Example
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
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
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:
@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:
@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
- Dataset by Tesi via Roboflow Universe
- Part of the CourtSide Computer Vision project for tennis analysis
Contact & Support
For questions, issues, or collaboration:
- Hugging Face: @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
๐พ Ready for production use in tennis analysis applications!
- Downloads last month
- 31
Evaluation results
- mAP@50self-reported66.670
- precisionself-reported71.000
- recallself-reported44.000
