2025-11-14 项目框架搭建
时间: 2025-11-14 上午
主题: 项目基础框架和核心模块开发
已完成工作
项目目录结构
- 创建完整的项目目录结构
- config/ - 配置管理
- core/ - 核心模块(模型、训练器、Agent)
- environment/ - 环境交互(动作空间、奖励评估、兼容层)
- data/ - 数据处理(经验收集、Replay Buffer)
- utils/ - 工具函数(图像处理、日志)
- scripts/ - 执行脚本
- data/episodes/ - 数据存储目录
- models/checkpoints/ - 模型检查点
- logs/ - 日志目录
- templates/ - OpenCV模板图像
Config 模块
- HyperParameters 数据类
- PathConfig 数据类
- EnvironmentConfig 数据类
- Config 管理器(YAML + 命令行参数)
- 默认配置文件生成
- 测试通过:能够生成和加载配置文件
Utils 模块
- image_processing.py: 图像预处理(resize、灰度化、归一化、帧堆叠)
- video_reader.py: 视频读取器(支持跳帧、帧率控制)
- logger.py: 日志工具(文件+控制台,支持TensorBoard)
- 测试通过:成功读取用户视频 moive/1.mp4(960x540, 30fps, 3697帧, 约123秒)
ActionSpace 模块
- 动作空间定义(移动8方向+攻击)
- 动作编码/解码
- 支持扩展(技能、召唤师技能、回城等)
- 测试通过:9个基础动作
CompatibilityLayer 兼容层
- 统一接口支持在线/离线两种模式
- 离线模式:从视频读取帧(用于训练)
- 在线模式:集成 autowzry API(预留,暂不测试)
- 核心功能:
- capture_screen(): 获取当前画面
- is_in_battle(): 判断是否在对战中
- is_dead(): 判断是否死亡
- execute_action(): 执行动作(移动、攻击、技能)
- detect_kill_count/assist_count(): 击杀/助攻检测(暂未实现)
- 测试通过:离线模式能够从视频读取帧并调用所有 API
RewardEvaluator 模块
- RewardWeights 配置类(可自定义奖励权重)
- RewardEvaluator 类(状态追踪+奖励计算)
- 支持:生存奖励、死亡惩罚、击杀/助攻奖励、移动奖励
- 测试通过:处理10帧,累积奖励计算正确
ExperienceCollector 模块
- Episode 数据类(完整 episode 容器)
- ExperienceCollector 类(视频->数据收集)
- 核心功能:
- collect_from_video(): 从视频收集完整 episode
- save_episode(): 保存为 HDF5 格式(gzip压缩)
- _infer_action(): 通过帧差分推断动作(简化版)
- 测试通过:处理100帧,生成2.5MB HDF5文件
- 数据形状验证:observations (100, 4, 84, 84), actions (100,), rewards (100,), dones (100,)
ReplayBuffer 模块
- ReplayBuffer 类(经验回放缓冲区)
- 核心功能:
- load_episodes(): 从HDF5文件批量加载episodes
- load_episode(): 加载单个episode
- add_transition(): 添加转移样本
- sample(): 随机采样batch数据
- get_statistics(): 获取缓冲区统计信息
- 支持循环缓冲区(FIFO)
- 测试通过:加载1个episode(99个转移样本),成功采样32大小的batch
DQN 模型
- DQN 类(深度 Q 网络)
- DuelingDQN 类(Dueling 架构)
- 网络架构(参考 DeepMind Nature 2015):
- Conv1: 32 filters, 8x8, stride 4
- Conv2: 64 filters, 4x4, stride 2
- Conv3: 64 filters, 3x3, stride 1
- FC1: 512 units
- FC2: 9 units (Q值输出)
- 模型参数数量:1,688,745
- 核心功能:
- forward(): 前向传播
- select_action(): epsilon-greedy 动作选择
- save()/load(): 模型保存和加载
- 测试通过:前向传播、动作选择、模型保存加载验证通过
轻量级DQN模型
- LightweightDQN 类(参数减少94.8%)
- 模型参数数量:88,409(标准DQN的5%)
- 支持灵活输入尺寸(540x960或任意尺寸)
- 支持1通道(灰度)或3通道(RGB)输入
- 使用更大stride和自适应池化处理大图
- 测试通过:540x960输入前向传播成功
Trainer 模块
- DQNTrainer 类(完整训练循环)
- 5步训练前检查:
- 数据集存在性检查
- 数据加载测试
- 模型前向传播测试
- 优化器测试
- 输出目录创建
- 核心功能:
- compute_td_loss(): TD损失计算
- train(): 训练主循环
- update_target_network(): 目标网络更新
- save_checkpoint(): 检查点保存
- 支持标准DQN和轻量级DQN自动切换
- TensorBoard日志集成
- 测试通过:100步训练,Loss正常计算
图像预处理增强
- 支持可选resize(保持原始尺寸或缩放)
- ImageProcessor类集成配置
- FrameBuffer支持灵活帧形状(H,W)或(H,W,C)
- 测试通过:540x960灰度图处理正常
配置系统完善
- 新增本地测试配置:config/local_test_config.yaml
- 新增参数:
- use_lightweight_model: 轻量级模型开关
- resize_images: 图像resize开关
- 支持灵活的图像尺寸和通道配置
测试和文档
- scripts/test_local_pipeline.py: 完整测试脚本
- quickstart.md: 快速开始指南
- 本地测试流程验证通过(所有检查✅)
当前状态
- ✅ 完整训练pipeline已验证
- ✅ 可以开始实际训练
- 数据:1个episode(100帧,540x960灰度图,169MB)
- 模型:轻量级DQN(88K参数)
- 设备:CPU
技术决策记录
TD-001: 开发模式选择
决策: 优先开发离线视频学习模式
理由:
- 用户已有游戏视频素材(moive/1.mp4)
- 可以更快验证数据流和训练流程
- 降低对实时游戏环境的依赖
TD-002: 兼容层复用
决策: 集成用户已有的 airtest_mobileauto + autowzry 代码
理由:
- 避免重复开发设备控制和状态识别功能
- 用户代码已经过验证
TD-003: 击杀/助攻检测推迟
决策: 暂不实现击杀数和助攻数检测功能
理由:
- 用户的 autowzry 代码中此功能返回 0(未开发)
- 对于初期的移动和攻击训练不是关键功能
- 可以在后续通过 OCR 或模板匹配实现
TD-004: 本地测试优化
决策: 开发轻量级模型用于本地快速测试
理由:
- 用户需要在本地电脑快速验证流程
- 不追求训练精度,重点在流程验证
- 标准DQN(1.6M参数)对本地测试过重
TD-005: 图像预处理灵活性
决策: 支持可选的resize和灵活通道配置
理由:
- 早期使用小图(84x84)快速验证
- 后期使用大图(540x960)保留更多信息
- 支持灰度图(节省内存)和RGB(保留颜色信息)