YAML Metadata Warning:empty or missing yaml metadata in repo card
Check out the documentation for more information.
TFTMS-VLP 模型权重包
本压缩包包含本队(TFTMS-VLP)在 VLMOD 赛道自研并训练的模型权重,供复现与核验。 系统整体方案:规则几何基线(L1 规则门)+ 自训融合头(L2 小 MLP)+ 决策级融合。 线上成绩(2026-10-28 排行榜):F1 93.7250(Precision 88.6529 / Recall 99.4127 / TP 3047 / FP 390 / FN 18),第 3 名。
1. 文件清单
| 文件 | 大小 | 说明 |
|---|---|---|
fusion_head.pt |
~5 KB | 本队自研模型权重:融合头小 MLP(13 维特征 → 0~1 置信度)。含网络参数与特征标准化参数(均值/方差) |
fusion_train.npz |
~1.1 MB | 融合头训练样本(X: 20550×13, y: 0/1 标签),1000 张图固定 seed=42 抽样,可用于独立复现训练 |
README.md |
— | 本说明 |
依赖的预训练特征模型 Chinese-CLIP(ViT-B/16)权重不随包分发:它是开源预训练模型(OFA-Sys 发布), 非本队训练成果。复现时由
cn_clip库从魔搭 ModelScope 自动下载(见第 4 节)。
2. 自研模型:融合头(FusionHead)
2.1 结构
单层隐藏 MLP,参数总量约 500:
class FusionHead(nn.Module):
def __init__(self, in_dim: int = 13, hidden: int = 32, dropout: float = 0.3):
super().__init__()
self.net = nn.Sequential(
nn.Linear(in_dim, hidden), # 13 → 32
nn.ReLU(),
nn.Dropout(dropout),
nn.Linear(hidden, 1), # 32 → 1
)
def forward(self, x: torch.Tensor) -> torch.Tensor:
return torch.sigmoid(self.net(x))
2.2 输入特征(13 维,build_fusion_dataset.py 定义)
| 索引 | 含义 | 来源 |
|---|---|---|
| 0 | clip_sim:描述文本与候选目标裁剪图的图文语义相似度(预训练模型编码) |
特征 L2 归一化后点积 |
| 1 | rule_score:规则基线加权命中分(0~5.8) |
methods/baseline/matcher.py |
| 2–8 | 7 个属性命中标志(0/1):objectname / appearance / place / size / distance / facing / occlusion | 自由文本解析 + 规则判定 |
| 9–12 | 4 个连续几何误差:dist_err / size_dev / facing_delta / place_match | methods/baseline/geom_features.py |
推理时特征需用 ck["feat_mean"] / ck["feat_std"] 标准化(保存在 ckpt 内,用训练集统计量,防止泄露)。
2.3 训练配置
- 优化器 Adam(lr=1e-3),损失 BCE,50 epochs,batch 256,seed 42
- 训练样本:训练集 1000 张图抽样,正样本 = 描述 GT 目标,负样本 = 同描述下规则门 A 内非 GT 目标(难负样本,保证训练/推理分布一致)
- 训练集内 AUC:0.9376
- 单融合头评估(开发集官方口径):F1 0.9479;决策级融合后 dev 0.9728 / val 0.9726
2.4 加载与推理
import torch
import torch.nn as nn
class FusionHead(nn.Module):
def __init__(self, in_dim: int = 13, hidden: int = 32, dropout: float = 0.3):
super().__init__()
self.net = nn.Sequential(nn.Linear(in_dim, hidden), nn.ReLU(),
nn.Dropout(dropout), nn.Linear(hidden, 1))
def forward(self, x): return torch.sigmoid(self.net(x))
ck = torch.load("fusion_head.pt", map_location="cpu", weights_only=False)
model = FusionHead(in_dim=ck["in_dim"], hidden=ck["hidden"])
model.load_state_dict(ck["state_dict"])
model.eval()
# x: 13 维原始特征 [clip_sim, rule_score, *7_flags, *4_cont]
x = torch.tensor([...], dtype=torch.float32)
x = (x - torch.tensor(ck["feat_mean"])) / torch.tensor(ck["feat_std"])
prob = model(x.unsqueeze(0)).item() # 0~1,"该候选是否匹配描述"的置信度
注意:PyTorch ≥ 2.6 默认
weights_only=True,加载本 ckpt 需显式传weights_only=False。
3. 系统流程(决策级融合)
自然语言描述 + 官方候选目标(16字段参数)
│
▼
L1 规则门(属性加权打分,相对窗口 rel=0.2)── 高召回粗筛,保不漏
│ (A 内候选 ≈ 4~5 个)
▼
L2 融合头(13 维特征 MLP,输出置信度)
│
▼
决策融合(融合头概率窗口 fus_rel=0.25,place 连续化 place_cont=0.4)── 压制多选
│
▼
输出该描述命中的目标(0/1 表)
提分实证:规则基线 dev F1 0.9665 → 决策级融合 0.9728(+0.63 个点,线上 FP 407 → 390)。 核心增益来自"规则门保召回 + 连续几何误差排序"。
4. 复现依赖:预训练图文特征模型
- 模型:Chinese-CLIP ViT-B/16(OFA-Sys,约 2 亿中文图文对预训练),图像/文本特征 512 维,L2 归一化
- 获取方式(
cn_clip库自动下载,无需手工):
uv run python -m scripts.clip_feature_extract --split train # 内部调用 cn_clip
from cn_clip.clip import load_from_name
model, preprocess = load_from_name("ViT-B-16", device="cpu",
download_root="./weights/cn_clip",
use_modelscope=True) # 从魔搭 ModelScope 自动下载
- 说明:本机实测 HuggingFace 直连与 OSS 直链均超时/403(2026-10-22),魔搭 ModelScope 是可用通道;评测环境同样设置
use_modelscope=True即可。
5. 复现与评测入口
完整代码在 GitHub:https://github.com/Umbrelllllla/TFTMS-VLP (main 分支,commit 95049d7)
| 步骤 | 脚本 | 产物 |
|---|---|---|
| CLIP 特征提取(训练/测试集) | scripts/clip_feature_extract.py |
runs/clip_*_*.npy |
| 构造融合头训练样本 | scripts/build_fusion_dataset.py |
runs/fusion_train.npz |
| 训练融合头 | scripts/train_fusion.py |
runs/fusion_head.pt |
| 集成评测 | scripts/eval_route_b.py |
整体指标 + 错误案例 |
| 生成线上提交文件 | scripts/write_submission_ensemble.py |
result/ 目录 + zip |
环境:Python 3.11,CPU 可完整复现(全流程无 GPU 依赖)。
6. 团队与竞赛信息
- 赛道:VLMOD(自然语言 → 3D 目标匹配,官方已提供每图候选目标 16 字段参数,无需图片识别)
- 方法名:TFTMS-Fusion1
- 线上成绩:F1 93.7250(第 3 名,2026-10-28)
- 完整技术细节见仓库
docs/项目笔记.md(第 0–21 节)与docs/技术报告/