Skip to content

Stage 3: 代码实现 (Implementation)

进入时手里有什么

  • 通过评审的 Research Contract
  • 通过评审的 实验计划
  • Base paper 的 GitHub 仓库 URL
  • GPU 预算约束

阶段目标

基于 base paper 的代码,实现我们的方法修改,产出可以直接在远程服务器上运行的训练代码。

具体步骤

mermaid
graph TD
    A[克隆 base paper 代码] --> B[Planner: 制定实现计划]
    B --> C[Coder: 逐模块实现]
    C --> D[编排器: 审查研究意图]
    D --> E{符合意图?}
    E -->|是| F[本地测试]
    E -->|否| C
    F --> G{测试通过?}
    G -->|是| H[Judge: 代码审查]
    G -->|否| C
    H --> I{Judge 判定}
    I -->|approve| J[同步到服务器]
    I -->|request-changes| C
    J --> K[进入 Training 阶段]

Step 1: 准备代码基础

执行者: Coder (Codex)

bash
# 克隆 base paper 代码
git clone https://github.com/xxx/fine-grained-dpl.git src/
cd src/

# 创建工作分支
git checkout -b feature/contrastive-decouple

永远从 base paper 出发

不从零写代码。这保证了实验 setting 的一致性 — 数据加载、增强策略、评估方式都和 base paper 完全一致。

Step 2: 制定实现计划

执行者: Planner (Claude Opus)

Planner 分析 base paper 的代码结构,制定模块化的实现计划:

markdown
# Implementation Plan

## 需要修改的文件
1. `models/head.py` — 新增 ContrastiveHead 类
2. `train.py` — 集成对比损失
3. `config.py` — 添加新超参数
4. `eval.py` — 添加 FLOPs 测量

## 不修改的文件(保持和 base paper 一致)
- `models/backbone.py` — ResNet-50 骨干网络
- `data/dataset.py` — 数据加载和增强
- `data/transforms.py` — 数据变换

## 模块接口定义
### ContrastiveHead
- 输入: backbone feature (B, C, H, W)
- 输出: contrastive_loss (scalar)
- 参数: projection_dim=128, temperature=0.07

Step 3: 逐模块实现

执行者: Coder (Codex)

Coder 按照实现计划,逐个模块实现。每个模块独立提交:

bash
# 模块 1: ContrastiveHead
echo "" | codex exec --full-auto -m gpt-5.4 \
  "在 models/head.py 中实现 ContrastiveHead 类。
   参考 models/baseline_head.py 的风格。
   接口: 输入 (B,C,H,W), 输出 scalar loss。
   包含 projection_dim 和 temperature 参数。"

# 模块 2: 训练循环集成
echo "" | codex exec --full-auto -m gpt-5.4 \
  "修改 train.py,在训练循环中加入 ContrastiveHead。
   对比损失权重为 config.contrastive_weight (默认 0.5)。
   总损失 = cls_loss + contrastive_weight * contrastive_loss。"

Step 4: 编排器审查

执行者: 编排器 (Claude Opus)

编排器审查 Coder 的实现是否符合研究意图。注意:编排器不审查代码质量(那是 Codex 自己的事),只审查"代码是否做了计划要它做的事"。

审查要点:

  • 对比损失的实现是否和 idea 描述一致
  • 推理时投影头是否真的被丢弃(验证 E2)
  • 数据增强是否保持和 base paper 一致

Step 5: 本地测试

执行者: Coder (Codex)

不需要跑完整训练,只确认代码基本可用:

python
# 快速验证脚本
import torch
from models.backbone import ResNet50
from models.head import ContrastiveHead

# 模型可以初始化
model = ResNet50(pretrained=False)
head = ContrastiveHead(in_channels=2048)

# Forward 不报错
x = torch.randn(4, 3, 224, 224)
feat = model(x)
loss = head(feat, labels=torch.tensor([0, 1, 0, 1]))
print(f"Loss: {loss.item()}")  # 应该是有限值

# 数据加载可以跑通
from data.dataset import CUBDataset
ds = CUBDataset(root="path", split="train")
print(f"Dataset size: {len(ds)}")

Step 6: Judge 代码审查

执行者: Judge (Codex)

yaml
review: implementation-contrastive-decouple
files_reviewed:
  - models/head.py
  - train.py
  - config.py
verdict: request-changes
comments:
  - file: models/head.py
    line: 45
    severity: critical
    issue: "对比损失缺少 stop_gradient,可能导致模式坍塌"
  - file: train.py
    line: 120
    severity: minor
    issue: "loss 权重硬编码为 0.5,应该从 config 读取"

Step 7: 同步到服务器

代码审查通过后,同步到远程服务器:

bash
rsync -avz --delete --filter=':- .gitignore' \
  --exclude='.git/' --exclude='wandb/' \
  --exclude='output/' --exclude='outputs/' \
  --exclude='models/' --exclude='*.pyc' \
  ~/Claude/Research/fine-grained-recognition/ \
  ic2:/data/Jingxuan/fine-grained-recognition/

各 Agent 职责

Agent做什么不做什么
Planner制定实现计划、定义模块接口不写代码
Coder实现代码、本地测试不修改研究设计
编排器审查研究意图一致性不审查代码质量
Judge代码审查(质量和正确性)不参与实现

Gate 信息

属性
默认 Gateauto-judge
评审内容代码审查 + 本地测试结果
通过条件Judge approve + 本地测试通过
最多修改轮数3

错误处理 / 回退

情况处理方式
Base paper 代码跑不通检查依赖版本、查看 GitHub Issues
Coder 实现偏离计划编排器指出问题,Coder 重新实现
本地测试失败Coder 调试修复
Judge 3 轮未通过升级为 human gate
实现过程发现设计缺陷回退到 Design 阶段

回退不是失败

在实现过程中发现"这个设计在代码层面不可行"是完全正常的。这种发现要记录在 findings.md 中,然后回退到 Design 阶段修改计划。这比硬着头皮实现一个有缺陷的设计要好得多。

产出物

文件内容
src/修改后的代码(在 base paper 基础上)
experiments/exp-*.yaml实验配置文件
git commits每个模块的实现记录
findings.md 更新实现过程中的发现
status.yaml 更新stage → implementation

AutoResearch — Multi-agent Deep Learning Research System