JEPA4Japan · 教程

第 25 章——不用训练:加载公开权重提取特征

1,228字 4分钟阅读 #LeVJEPA#JEPA#视频自监督学习#SIGReg

安全使用 Hugging Face 权重、正确归一化和张量布局,并避免改错注意力模式或误认分类输出。

课程进度 课程大纲 已发布 34/34 课

第 0 部分——先拿到地图

  1. 01 第 0 章——开始之前:这门课承诺什么 已发布
  2. 02 第 1 章——同一段视频,两扇不同的窗 已发布
  3. 03 第 2 章——沿着 Yann LeCun 的科研路线走一遍 已发布
  4. 04 第 3 章——别被名字绕晕:JEPA 家族树 已发布

第 1 部分——为什么简单目标会学会看视频

  1. 05 第 4 章——视频可以自己出题 已发布
  2. 06 第 5 章——保留意思,不重画每个像素 已发布
  3. 07 第 6 章——两张卡要相同,但不能全变成白纸 已发布
  4. 08 第 7 章——SIGReg:从许多影子检查一团点云 已发布
  5. 09 第 8 章——只用一行目标函数读懂 LeVJEPA 已发布

第 2 部分——把一段视频送进单编码器

  1. 10 第 9 章——全局视图与局部视图怎样配对 已发布
  2. 11 第 10 章——把视频切成时空小方块 已发布
  3. 12 第 11 章——一台编码器、一个投影头、一张摘要卡 已发布
  4. 13 第 12 章——一次完整前向传播 已发布
  5. 14 第 13 章——为什么扔掉 95% 反而更会看 已发布
  6. 15 第 14 章——块因果注意力:同一帧互看,未来不能偷看 已发布
  7. 16 第 15 章——RoPE、逐帧 token 与意外长出的密集特征 已发布

第 3 部分——会读实验,才算读懂论文

  1. 17 第 16 章——四组消融究竟回答了什么 已发布
  2. 18 第 17 章——相同轮数不等于相同花费 已发布
  3. 19 第 18 章——ImageNet、K400、SSv2 各考什么 已发布
  4. 20 第 19 章——把论文结果记成一本账 已发布
  5. 21 第 20 章——哪些结论现在还不能说 已发布

第 4 部分——从官方仓库到自己的实验

  1. 22 第 21 章——官方仓库地图 已发布
  2. 23 第 22 章——Walking Tours:十段长视频怎样变成训练数据 已发布
  3. 24 第 23 章——读懂默认配置并启动训练 已发布
  4. 25 第 24 章——先跑一个不会骗人的冒烟测试 已发布
  5. 26 第 25 章——不用训练:加载公开权重提取特征 当前课程
  6. 27 第 26 章——在自己的视频上做冻结评估 已发布

第 5 部分——把表征接回世界模型路线

  1. 28 第 27 章——重要边界:LeVJEPA 不是规划器 已发布
  2. 29 第 28 章——怎样把 LeVJEPA 接到下一代世界模型 已发布
  3. 30 第 29 章——十个从入门到论文级的研究项目 已发布

附录——随用随查的技术背包

  1. 31 附录 A——最低限度数学工具箱 已发布
  2. 32 附录 B——完整张量形状表 已发布
  3. 33 附录 C——术语表与论文时间线 已发布
  4. 34 附录 D——复现与审阅检查清单 已发布

借来的机器,先看说明书再插电

  1. 先审代码远程 Python 会执行
  2. 固定版本权重与代码成一对
  3. 排对形状[B,C,T,H,W]
  4. 正确归一化ImageNet mean/std
  5. 取表征tokens 或 [CLS]
公开权重像借来的机器:先看说明书和许可证,再插电。

下载包里不只有参数,还带着一段自定义装配代码。把时间轴与颜色轴放反,机器甚至可能照常运行,只是吐出形状像真的、含义却错误的结果。因此安全的起点不是立刻推理,而是读代码、钉版本、查张量。

先钉住版本,再执行代码

发布的 LeVJEPA-VideoMix-Large 是 ViT-L/16,含 303.1M 参数,在 1,806,869 个 VideoMix clips 上训练;它采用 16 帧、tubelet 1、RoPE 和 block_causal。**checkpoint(检查点)**是保存好的模型权重与配置版本。这个模型仓库需要 trust_remote_code=True,意味着下载的 Python 会在本机执行。先检查 config.json、configuration_levjepa.py 和 modeling_levjepa.py,再放进不含敏感凭据的隔离环境运行;本系列核对的是模型提交 e831a03,而不是会继续变化的 HEAD。

安全审查至少回答四问:auto_map 会导入哪两个文件?代码是否发起网络请求、读取环境变量或动态执行字符串?权重是否为 safetensors?许可证是否覆盖预定用途?第一次在线下载并审完后,可在断网容器中用相同 cache 与 local_files_only=True 重载。revision(版本标识)同时约束配置和自定义代码;单记模型名,日后就无法确认仓库内容是否已经变化。

按接口摆好视频

import torch
from transformers import AutoModel

repo = "galilai-group/LeVJEPA-VideoMix-Large"
revision = "e831a0347737fcaa660b39c57d41c109de399845"
model = AutoModel.from_pretrained(
    repo, revision=revision, trust_remote_code=True
).eval()

# 示例 raw 已在 [0,1];真实视频还需一致的 resize/center crop 到 224。
raw = torch.rand(1, 3, 16, 224, 224)  # [B,C,T,H,W]
mean = torch.tensor([0.485, 0.456, 0.406])[None, :, None, None, None]
std = torch.tensor([0.229, 0.224, 0.225])[None, :, None, None, None]
video = (raw - mean) / std
with torch.inference_mode():
    out = model(pixel_values=video)
print(out.last_hidden_state.shape, out.pooler_output.shape)

预期输出是 torch.Size([1, 3137, 1024]) 与 torch.Size([1, 1024]):3137 = 一个 [CLS] 加 16×14×14 个 patch。发布模型处于 eval,token dropping 为 0,所以返回完整 token。它不带分类头,pooler_output 只是 [CLS] 表征,而非类别概率。ViT-L 的全 token 因果 mask 较吃内存,适合先从 batch 1 开始;若为了省内存改成 full attention,训练时的注意力拓扑也随之改变,结果需要另作协议记录。

插电前再核对三件事

可紧接着加入 assert out.last_hidden_state.shape == (1,3137,1024) 与 assert torch.isfinite(out.last_hidden_state).all()。若搬到 CUDA/MPS,模型、video、mean 和 std 必须在同一 device;先记录峰值显存,再扩大 batch。eval() 会关闭训练态 token dropping 和 dropout;发布 encoder 的 LayerNorm 本身并不像 BatchNorm 那样维护训练/评估统计。重复同一输入两次应在所用硬件的数值容差内一致。

训练约以 7.5 fps 采样,因此 16 帧约覆盖两秒。单张图片可用 image.unsqueeze(2).repeat(1,1,16,1,1) 重复成时间轴,但这只适合图像特征,不含真实运动。保持 model.config.attn_mode == "block_causal";改成 full 不会报错,却改变了训练时拓扑。发布张量是 encoder 的 EMA 评估副本,不是 EMA 教师,也不含训练 projector。

权重模型卡标为 CC BY-NC 4.0;商业用途需要另做许可证审查。加载后至少检查形状、torch.isfinite,以及同一输入重复推理的一致性。

与权重一起保存的记录

真正开始推理之前

  1. trust_remote_code=True 会执行远程代码;先审查并固定 revision。
  2. 输入必须是 ImageNet 归一化的 [B,C,T,H,W],默认 16×224×224。
  3. 输出是冻结表征而非分类答案;发布权重是评估 EMA 副本。

插电测试

  1. 为什么输出 token 数是 3137?
  2. 能否把 attn_mode 改成 full 后仍称为原协议推理?
  3. pooler_output 是否可以直接当 ImageNet 概率?
按接口核对
  1. 1 + 16×(224/16)×(224/16)。
  2. 不能;能运行不代表与训练拓扑一致。
  3. 不可以;它是 1024 维 [CLS] 特征,模型没有分类头。