--- license: mit tags: - counter-strike - behavioural-cloning - imitation-learning - pytorch - onnx library_name: pytorch --- # CSBC — PyTorch port of the Counter-Strike Behavioural Cloning model A faithful PyTorch/ONNX conversion of Tim Pearce's [Counter-Strike Behavioural Cloning](https://github.com/TeaPearce/Counter-Strike_Behavioural_Cloning) model (`ak47_sub_55k_drop_d4_dmexpert_28`, stateful variant), produced for the [Kairos](https://github.com/) GUI-agent project. The original model is Keras / TensorFlow 2.3 (CUDA 10.1, won't use a 40-series GPU). This port runs on any modern CUDA via PyTorch: EfficientNet-B0 trunk (ONNX → onnx2torch) + a hand-written stateful ConvLSTM head. Verified numerically equal to Keras (zero-state max diff ~5e-7, 3-frame stateful sequence ~2e-6), ~3 ms/forward on a 4090. ## Files | file | what | |---|---| | `csbc_backbone.onnx` | feedforward EfficientNet-B0 trunk (loaded via onnx2torch) | | `csbc_head_weights.npz` | ConvLSTM2D(256) + 5 dense-head weights (applied in torch) | | `csbc_ref.npz` | Keras reference outputs on fixed inputs (for the torch self-test) | ## Usage (Kairos) ```bash python examples/csbc_agent/scripts/download_torch_weights.py --repo-id JamesK2W/csbc-pytorch python examples/csbc_agent/run.py --backend torch --model-dir examples/csbc_agent/models ``` ## I/O contract - **Input:** one RGB frame → BGR → `cv2.resize` to 280×150 → float32 (no `/255`; EfficientNet rescales internally). Tensor shape `(1, 150, 280, 3)`. - **Output:** 52-vector — `[0:11]` keys (w a s d space ctrl shift 1 2 3 r), `[11:13]` mouse L/R, `[13:36]` mouse-x argmax (23 buckets), `[36:51]` mouse-y argmax (15 buckets), `[51]` value (ignored). - **Stateful:** the ConvLSTM state persists across frames; call `reset_state()` per episode and feed one frame at a time. ## License & provenance Weights derive from the upstream CSBC release (MIT). Academic / offline use only.