Instructions to use fvossel/csgo-player-detection with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- ultralytics
How to use fvossel/csgo-player-detection with ultralytics:
# Couldn't find a valid YOLO version tag. # Replace XX with the correct version. from ultralytics import YOLOvXX model = YOLOvXX.from_pretrained("fvossel/csgo-player-detection") source = 'http://images.cocodataset.org/val2017/000000039769.jpg' model.predict(source=source, save=True) - Notebooks
- Google Colab
- Kaggle
YOLO26 player detection for CS2 β 640x640 native crops
Detects player bodies and heads, split by team, on a 640x640 centre crop at native resolution. Trained on fvossel/csgo-player-detection, plus a small set of images that dataset does not redistribute.
β Intended use
This model was trained to study how well a detector performs on a real-time task and what that costs in latency. It is part of a demonstration project, and it is explicitly not meant to be used for cheating.
Use it offline, against bots, or on your own
-insecureserver. Not on a VAC-secured server, not in matchmaking, not on an account you care about.Pointing a detector at a screen is the easy half. Acting on it is where it falls apart: synthetic mouse input is flagged as injected by the operating system itself, and a system that reacts in milliseconds produces an aim distribution no human produces. Neither is a gap that a more careful implementation closes. The project repository explains this in full and includes the tooling to measure it.
Metrics
Measured on a persistent holdout of 1204 images that no training run has ever seen. The split is block-wise by scene, not per frame β a random per-frame split puts near-identical neighbouring frames on both sides and inflates the numbers.
| mAP50 | mAP50-95 | Precision | Recall | |
|---|---|---|---|---|
| overall | 0.905 | 0.727 | 0.937 | 0.840 |
| Class | Instances | Precision | Recall | mAP50 | mAP50-95 |
|---|---|---|---|---|---|
ct_body |
563 | 0.922 | 0.867 | 0.919 | 0.797 |
ct_head |
511 | 0.930 | 0.831 | 0.888 | 0.608 |
t_body |
677 | 0.930 | 0.833 | 0.908 | 0.784 |
t_head |
634 | 0.967 | 0.828 | 0.906 | 0.718 |
Class none (ID 0) is an empty placeholder kept so the IDs stay stable.
Inference 3.9 ms per image at the reported batch size, on the training machine.
Usage
from ultralytics import YOLO
model = YOLO("yolo26n_csgo_20260727-231745.pt")
results = model.predict("crop.png", conf=0.25, iou=0.5)
Feed it a 640x640 centre crop cut at native resolution, not a resized screenshot. A 1920x1080 frame scaled down to 640 shrinks a head from roughly 13x17 px to 4x6 px, which is not the scale this model was trained on. This is the single most common way to get bad results out of it.
Training
| Base weight | yolo26n.pt |
| Epochs | 150 |
| Batch | 32 |
| Image size | 640 |
| Optimizer | auto, cosine LR |
| Mosaic | 1.0, closed for the last 15 epochs |
Augmentation is deliberately conservative: no rotation, no vertical flip, limited hue and scale. The game renders a fixed, upright world β augmenting it into poses that cannot occur costs capacity without buying robustness.
Only images confirmed by hand were trained on. The labelling loop pre-annotates with a larger model and then confirms or corrects each image; unchecked model output never reaches training.
Files
yolo26n_csgo_20260727-231745.ptβ PyTorch weight, the one to useyolo26n_csgo_20260727-231745.onnxβ portable ONNX export
No TensorRT engine is published. An .engine is tied to the exact GPU, driver and
TensorRT version it was built on. Build your own:
python scripts/export.py --weights models/yolo26n_csgo_20260727-231745.pt --format engine
Licence
The training images show Counter-Strike 2 and are derivative of Valve's assets. The weights are published for research. Check whether your intended use is covered before building on this.
- Downloads last month
- -