面向 CS2 demo 的炸弹落点预测项目。核心任务是从一回合的状态序列中预测该回合最终会在 A 点还是 B 点下包,并提供离线分析、HLTV 下载工具、GSI 实时推理,以及基于进程内存的实时推理实验路径。
这个仓库目前同时维护三条相关但不完全相同的工作流:
| 路线 | 维度 / 采样 | 主要输入 | 主要输出 | 现状 |
|---|---|---|---|---|
旧版 v1 |
275 维, 8 Hz |
.dem |
processed/*.parquet |
兼容保留,离线分析脚本仍使用它 |
新版 v2 |
218 维, 8 Hz |
*_full.pkl |
processed_v2/*.parquet |
当前离线特征/训练主线 |
新版 v2 实时对齐 |
218 维, 2 Hz |
GSI 或内存状态 | processed_v2_2hz_preplant/* + checkpoints/v2_2hz/* |
当前实时推理默认路径 |
几个最重要的事实:
- 预测目标一直是
A / B二分类,不包含other。 realtime_engine现在走的是v2特征,不再是旧版275维路径。- 默认实时 checkpoint 是
checkpoints/v2_2hz/best.pt。 analyze_demo.py仍然只适用于旧版v1 / 275维 parquet。dashboard/app.py只是占位;真正使用的是realtime_engine托管的dashboard/index.html。
大部分脚本不再把 repo 内的 data/ 当成唯一数据目录,而是通过 src/utils/paths.py 解析路径。
优先级如下:
- 环境变量
CS_PROPHET_DATA_ROOT - Windows 下默认外部数据根
H:\CS_Prophet\data - 仓库内
data/作为回退
这意味着 README 里的很多命令都用的是类似 raw/demos、processed、processed_v2、viz 这种“数据根相对路径”,而不是硬编码成 data/...。
补充说明:
- repo 内
data/现在主要是轻量占位和兼容回退,详见 data/README.md - 仓库上传边界见 docs/repository-layout.md
安装完整依赖:
pip install -r requirements.txt或者按包安装:
pip install -e .如果还需要开发依赖:
pip install -e ".[dev]"安装完成后,也可以直接用包入口启动实时服务:
cs-prophet --checkpoint checkpoints/v2_2hz/best.pt运行测试:
pytest tests -v批量解析本地 demo:
python parse_demos.py --demo-dir raw/demos --out-dir processed --resume训练旧版模型:
python -m src.model.train --config configs/train_config.yaml烟雾测试:
python -m src.model.train --config configs/train_config.smoke.yaml对单个旧版 parquet 做离线回放分析:
python analyze_demo.py processed/your_demo.parquet --checkpoint checkpoints/best.pt说明:
parse_demos.py产出的是旧版processed/*.parquetanalyze_demo.py只支持这条旧版路径
先把一个 demo 提取成 *_full.pkl:
python tools/demo_full_extract.py raw/demos/your_demo.dem默认输出到活动数据根下的 viz/your_demo_full.pkl。
把 *_full.pkl 转成 processed_v2/*.parquet:
python tools/build_processed_v2.py viz --out-dir processed_v2 --resume训练 v2 模型:
python -m src.model.train --config configs/train_config_v2.yaml烟雾测试:
python -m src.model.train --config configs/train_config_v2.smoke.yaml如果只是想快速抽样提取一些 demo 跑通 v2:
python tools/batch_extract_v2.py --per-map 2 --resume这条批处理默认生成的是 8 Hz 的 processed_v2,不是 2 Hz 实时对齐数据。
当前实时推理默认对应的是 2 Hz 版本。典型流程是:
先按 2 Hz 提取:
python tools/demo_full_extract.py raw/demos/your_demo.dem --downsample 32 --output-dir viz_2hz再转成 2 Hz 训练数据:
python tools/build_processed_v2.py viz_2hz --out-dir processed_v2_2hz_preplant --resume训练对应模型:
python -m src.model.train --config configs/train_config_v2_2hz.yaml这条配置对应:
input_dim = 218sequence_length = 180target_tick_rate = 2save_dir = checkpoints/v2_2hz/
仓库里保留了导出脚本:
python -m src.inference.onnx_export --checkpoint checkpoints/best.pt --output model.onnx但要注意:当前 onnx_export.py 仍按旧版 275 维 / 720 step 默认值构造导出输入,更适合旧版 v1 checkpoint,不应直接视为 v2 的通用导出入口。
启动服务:
python -m src.inference.realtime_engine --checkpoint checkpoints/v2_2hz/best.pt --input gsi --port 3000 --device cpu打开:
http://localhost:3000
把下面这个文件放到 CS2 的 Game State Integration 目录:
cfg/gamestate_integration_cs_prophet.cfg
这份配置默认推送到 http://127.0.0.1:3000/gsi,和 realtime_engine 默认端口一致。
python -m src.inference.realtime_engine --checkpoint checkpoints/v2_2hz/best.pt --input memory --port 3000 --device cpu说明:
- 这条路径读取的是运行中的 CS2 进程内存
- 依赖
src/inference/memory_reader.py和src/memory_reader/{offsets.json,client_dll.json} - 更偏 Windows 本机实验环境,不是跨平台通用方案
如果你不是要直接跑实时预测,而是想先观察 GSI payload 字段,可以用:
python tools/gsi_capture.py --port 3001 --out data/gsi_dump.jsonl这时应该使用:
tools/gamestate_integration_csprophet.cfg
注意这份工具配置默认打到 127.0.0.1:3001,和主服务配置不是同一份。
另外,tools/gsi_capture.py 的 --out 是普通文件系统路径,不走 data_root() 解析;如果不传,默认写 repo 内的 data/gsi_dump.jsonl。
生成旧版 v1 parquet QA 报告:
python viz_parquet.py --schema v1 --per-map 2 --open生成新版 v2 parquet QA 报告:
python viz_parquet.py --schema v2 --per-map 2 --open输出位置:
v1-> 活动数据根下的viz_report.htmlv2-> 活动数据根下的viz_report_v2.html
tools/ 目录下还有一批更偏调试/比对的脚本,例如:
tools/demo_visualize.pytools/demo_feature_preview.pytools/analyze_round_predictions.pytools/compare_offline_vs_realtime.pytools/verify_train_infer_parity.py
这些工具大多是实验/诊断脚本,适合开发期排查,不建议把它们当成唯一入口文档。
只下载 demo:
python tools/download_demos.py --config tools/hltv_config.yaml下载后立即解析为旧版 processed/*.parquet,不长期保留 .dem:
python tools/pipeline.py --config tools/hltv_config.yaml这里要注意几件事:
tools/pipeline.py解析出来的是旧版processed/,不是processed_v2tools/hltv_config.yaml目前是“示例加本机配置混合体”,里面的proxy、allowed_events、target_demos很可能需要你先改- 配置里的
raw/demos、raw/manifest.jsonl、raw/failed.jsonl也会走活动数据根解析 - 解压依赖
tools/hltv/downloader.py中的Bandizip/bz.exe查找逻辑,明显偏 Windows
CS_Prophet/
├─ configs/ 训练配置
├─ cfg/ 主实时服务使用的 GSI 配置
├─ dashboard/ 实时页面静态资源
├─ data/ 轻量回退/占位数据目录
├─ docs/ 仓库说明与设计文档
├─ src/
│ ├─ parser/ 旧版 demo -> parquet 解析
│ ├─ features/ v1/v2 特征、数据集、标签逻辑
│ ├─ inference/ GSI / 内存 / checkpoint 推理
│ ├─ memory_reader/ 实时内存读取依赖的 offset 元数据
│ ├─ model/ Transformer 与训练逻辑
│ └─ utils/ 路径与地图工具
├─ tests/ 测试
├─ tools/ 下载、提取、转换、调试脚本
├─ analyze_demo.py 旧版 v1 离线分析
├─ parse_demos.py 旧版 v1 批量解析入口
└─ viz_parquet.py v1/v2 QA 报告入口
如果你是第一次接手这个仓库,建议按下面顺序看:
- docs/repository-layout.md
- src/utils/paths.py
- configs/train_config_v2_2hz.yaml
- src/features/state_vector_v2.py
- src/features/processed_v2.py
- src/inference/realtime_engine.py
- src/inference/memory_reader.py
- WORKLOG.md
如果你要维护旧版兼容路径,再回头看:
- 标签仍然只覆盖能确认
A/B的回合 - 地图包点框选依赖
map_utils.py中的经验框,不是严格标注基准 analyze_demo.py还没有v2对应版本tools/pipeline.py仍然是旧版v1解析链src.inference.onnx_export目前仍然默认按旧版275维输入导出- 内存读取与 HLTV 解压工具都明显偏 Windows 环境