fvossel's picture
Upload README.md with huggingface_hub
5b701ce verified
|
Raw
History Blame Contribute Delete
3.92 kB
---
license: other
library_name: ultralytics
pipeline_tag: object-detection
tags:
- yolo
- yolo26
- object-detection
- counter-strike
- cs2
---
# 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](https://huggingface.co/datasets/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 `-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](https://github.com/fvossel/RealTimeObjectDetectionCSGO) 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
```python
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 use
* `yolo26n_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:
```bash
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.