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.
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 -insecure server. 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.
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 use
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.