MJ-VIDEO: Fine-Grained Benchmarking and Rewarding Video Preferences in Video Generation

Authors: Haibo Tong, Zhaoyang Wang, Zhaorun Chen, Haonian Ji, Shi Qiu, Siwei Han, Kexin Geng, Zhongkai Xue, Yiyang Zhou, Peng Xia, Mingyu Ding, Rafael Rafailov, Chelsea Finn, Huaxiu Yao Affiliations: UNC-Chapel Hill, University of Chicago, University of Oxford, Stanford University arXiv: 2502.01719 Project Page: aiming-lab.github.io/MJ-VIDEO.github.io GitHub: aiming-lab/MJ-Video Venue: NeurIPS 2025 Spotlight

1. Motivation (研究动机)

现有视频奖励模型的问题:

视频生成模型(Sora、Veo、Wan、Kling 等)已取得显著进展,但在与人类偏好对齐方面仍面临核心挑战:指令不对齐(instruction misalignment)、内容幻觉(content hallucination)、安全隐患和偏见问题。现有的 RLHF/RLAIF 方法依赖视觉奖励模型为生成视频打分,但这些模型存在根本性缺陷:

  1. 评估维度单一:现有视频奖励模型(如 VideoScore)仅提供整体对齐评分,无法针对安全性、连贯性、偏见等特定维度进行精细评估,难以适应不同应用场景对评估目标的差异化需求
  2. 缺乏高质量细粒度数据:现有视频偏好数据集缺少多维度细粒度标注,限制了更高级视频奖励模型的开发
  3. LVLMs 直接评判效果差:即使是 GPT-4o、Gemini 等顶级模型作为视频评判者,由于缺乏专门化机制,在视频偏好判断上仍有大量提升空间

本文要解决的问题:

如何构建一个细粒度、多维度的视频偏好基准(MJ-BENCH-VIDEO),并在此基础上训练一个能动态适配不同评估目标的专门化视频奖励模型(MJ-VIDEO)?

为什么值得研究:

细粒度偏好评估是视频生成后训练对齐的基础设施。一个能分解视频质量评估为专门化子任务的奖励模型,不仅可以提供更准确的反馈信号,还能提升 RLAIF 框架中视频生成的对齐效果,具有重要的工业实践价值。


2. Idea (核心思想)

核心洞见:

视频偏好判断本质上是一个多目标优化问题——不同场景需要权衡不同的评估维度。通过将视频评估分解为 5 个高层面(Aspect)和 28 个细粒度准则(Criteria),并用 MoE 架构为每个输入动态路由到最相关的评估专家,可以显著提升判断精度和灵活性。

1-3 句话概括关键创新:

MJ-VIDEO 提出双层堆叠 MoE 视频奖励模型:Aspect MoE 将输入路由到 5 个评估方面,Criteria MoE 在每个方面内对 28 个细粒度准则加权评分,最终聚合得到总体偏好分;三阶段训练策略(准则评分 → 方面排序 → 联合训练)确保细粒度评估与整体偏好一致。相比现有方法,MJ-VIDEO 在 MJ-BENCH-VIDEO 上整体偏好判断提升 17.58%,细粒度评估提升 15.87%。

与现有方法的根本区别:

对比维度VideoScore / 现有方法MJ-VIDEO
评估粒度整体评分5 个方面 × 28 个准则
模型架构直接回归/分类双层堆叠 MoE
专家路由动态 Aspect + Criteria 路由
训练数据通用偏好对细粒度准则标注(303,576 条准则分数)
应用场景适配固定评估目标动态适配不同评估需求

3. Method (方法)

3.1 MJ-BENCH-VIDEO 基准

Figure 1 解读: MJ-BENCH-VIDEO 基准的全景图,以环形放射状布局展示其 5 个评估方面及 28 个细粒度准则。中心为 MJ-BENCH-VIDEO logo,由内向外分别是:Alignment(对齐,含 Object、Count、Attribute、Location、Action 等准则)、Safety(安全,含 NSFW-Explicit、NSFW-Subtle、Political Sensitivity、Spatial Consistency 等)、Fineness(精细度,含 Background、Object Distortion、Blur/Focus 等)、C&C(连贯性,含 Action Continuity、Object/Subject Appearance、Background Changes 等)、B&F(偏见与公平性,含 Gender、Age、Job、Race、Education 等)。环形外部为各准则对应的真实视频示例,直观展示每个准则的评判标准。

五个评估方面:

  1. Alignment(对齐):评估视频是否准确遵循文本指令,包括对象存在性、计数、属性、空间位置、动作等
  2. Safety(安全):检测不当内容,包括违法行为、NSFW 内容(显性/隐性)、政治敏感内容
  3. Fineness(精细度):评估视觉呈现质量,包括清晰度、纹理细节、伪影程度、光照和色彩表现
  4. Coherence & Consistency(C&C):评估视频内部一致性,包括动作连续性、物体外观稳定性、背景变化合理性
  5. Bias & Fairness(B&F):评估是否存在种族、性别、年龄、职业等方面的偏见

准则映射(来自源码 aspect2criteria):

  • Aspect 0 (Alignment):准则 0-4(5 个)
  • Aspect 1 (Safety):准则 5-10(6 个)
  • Aspect 2 (Fineness):准则 11-15(5 个)
  • Aspect 3 (C&C):准则 16-22(7 个)
  • Aspect 4 (B&F):准则 23-27(5 个)

3.2 数据集构建 Pipeline

Figure 2 解读: MJ-BENCH-VIDEO 的三阶段数据构建流程。Stage 1(Data Collection):从三条路径收集视频偏好对——Safesora 数据集(现有视频偏好)、图像偏好对经 I2V 转换(MJ-Bench + HPDv2 → Stable Video Diffusion + ChatGPT 重写提示词)、以及直接 T2V 生成(OpenVid/VidProM/VidGen 提示 → Open-Sora/VADER/Text-Video-Diffusion/InstructVideo)。Stage 2(Data Filtering):通过 GPT-4 初筛无效数据,再用 GPT-4/InternVL2-26B/CogVLM2 对五个方面打分(1-10),丢弃任一方面分数低于 5 分或两视频得分相同的对,最后由人类专家终审。Stage 3(Data Annotation):使用专门标注工具进行细粒度准则标注(28 个准则的好/中/差评级 + 整体偏好)。最终数据集包含 5,421 条数据、10,842 个视频、303,576 条准则分数、54,210 个方面分数、5,421 个整体偏好结果。

数据统计:

  • 总量:5,421 数据条目,10,842 个视频,5,421 个提示词
  • 来源分布:现有视频偏好 1,496 条,I2V 转换 1,910 条,T2V 直接生成 2,015 条
  • 训练/测试划分:4:1,即 4,336 训练对 + 1,085 测试对

3.3 MJ-VIDEO 模型架构

Figure 3 解读: MJ-VIDEO 的双层 MoE 架构。左侧为 InternVL2-2B 主干——Video(视频帧)和 Prompt(文本提示)分别经 Image Encoder + Decoder 和 Tokenizer 处理,输出多个向量 v(每帧的 token 表示)。这些向量送入Criteria MoE(准则层 MoE),输出 28 个准则分数(Object 0.8、Crime 0.1、Gender 0.0 等)。右上角的Aspect MoE(方面层 MoE)包含 5 个独立 Gating Layer(Alignment/Safety/…/B&F),分别将 28 个准则分数加权聚合为 5 个方面分数(Alignment Score 0.8、Safety Score 0.1、B&F Score 0.0 等)。最终通过 Aspect 权重加权求和得到 Overall Score。整个推理流程支持细粒度输出(每个准则的分数)同时保持整体偏好判断能力。

数学形式:

设 InternVL2-2B 的最后一层隐状态为 (提取 assistant token 对应位置):

步骤 1:Regression Layer 输出 28 个准则原始分数

步骤 2:Criteria MoE 在每个方面内加权(公式 1)

对方面 ,其对应准则集合为 ,准则 MoE 门控网络 输出归一化权重后与准则分数点积:

步骤 3:Aspect MoE 路由得到方面权重

整体门控 (浅层 MLP)将 prompt embedding 映射为 5 维方面权重:

步骤 4:聚合得到总体偏好分(公式 2)

3.4 三阶段训练策略

Stage I:准则评分训练(Criteria Scoring Training)

使用细粒度标注准则分数 作为监督信号,MSE 损失训练 Criteria MoE:

Stage II:方面排序训练(Aspect Routing Training)

利用方面级别的偏好排序信息训练 Aspect MoE。对于同一指令 ,在第 个方面:

其中 在第 方面优于 ,否则 。同时持续优化

Stage III:联合训练(Joint Training)

引入整体偏好排序损失,联合优化所有组件:

最终损失:

3.5 GatingNetwork 实现

# Algorithm 1: GatingNetwork - MoE Gating Layer
# Input: hidden state x (prompt embedding), out_features (num_aspects or num_criteria)
# Output: normalized routing weights
 
class GatingNetwork(nn.Module):
    def __init__(self, in_features, out_features, temperature=10, hidden_dim=1024, n_hidden=3):
        self.temperature = temperature
        self.logit_scale = nn.Parameter(torch.ones(1) * 1.0)
        # 3-layer MLP: in_features -> 1024 -> 1024 -> 1024 -> out_features
        layers = []
        for _ in range(n_hidden):
            layers.append(nn.Linear(in_features, hidden_dim))
            in_features = hidden_dim
        layers.append(nn.Linear(in_features, out_features))
        self.layers = nn.ModuleList(layers)
 
    def forward(self, x):
        # Apply MLP with ReLU (no ReLU on last layer)
        for i, layer in enumerate(self.layers):
            x = F.relu(layer(x)) if i < len(self.layers) - 1 else layer(x)
        # Temperature-scaled softmax * logit_scale
        return F.softmax(x / self.temperature, dim=1) * self.logit_scale[0]

3.6 MJ-VIDEO 完整前向推理

# Algorithm 2: MJ-VIDEO Forward Pass
# Input: video frames (pixel_values), text prompt (input_ids)
# Output: overall score OS, aspect scores, criteria scores
 
def mjvideo_forward(pixel_values, input_ids, attention_mask, model):
    # 1. InternVL2-2B backbone
    transformer_outputs = internvl2_2b(pixel_values, input_ids, attention_mask,
                                        output_hidden_states=True)
    hidden_states = transformer_outputs.hidden_states[-1]  # [bsz, seq_len, D]
 
    # 2. Extract last token hidden state for regression
    seq_end_pos = find_pad_position(input_ids)
    h = hidden_states[range(bsz), seq_end_pos]  # [bsz, D]
 
    # 3. Criteria scores via regression layer (28 raw scores)
    rewards = regression_layer(h)  # [bsz, 28]
 
    # 4. Extract prompt embedding for gating (at "assistant" token position)
    gating_pos = find_token_for_gating(input_ids)
    prompt_emb = hidden_states[range(bsz), gating_pos]  # [bsz, D]
 
    # 5. Aspect MoE: route to 5 aspects
    AR = aspect_gating(prompt_emb)  # [bsz, 5], softmax normalized
 
    # 6. Criteria MoE: within-aspect softmax weighting
    criteria_logits = criteria_gating.forward_wo_softmax(prompt_emb)  # [bsz, 28]
    aspect_scores = []
    for aspect_idx, criteria_indices in aspect2criteria.items():
        # Softmax within this aspect's criteria
        aspect_weights = softmax(criteria_logits[:, criteria_indices] / temperature)  # [bsz, k]
        # Weighted sum of criteria scores
        aspect_score = (rewards[:, criteria_indices] * aspect_weights).sum(dim=-1)  # [bsz]
        aspect_scores.append(aspect_score)
    aspect_scores = torch.stack(aspect_scores, dim=1)  # [bsz, 5]
 
    # 7. Overall score: aspect scores weighted by AR
    OS = (aspect_scores * AR).sum(dim=-1)  # [bsz]
 
    return OS, aspect_scores, rewards

3.7 三阶段损失计算

# Algorithm 3: Three-Stage Training Loss
# Stage I: Criteria MSE loss
def stage1_loss(model_out_w, model_out_l, gt_scores_w, gt_scores_l):
    loss_w = ((model_out_w.rewards - gt_scores_w) ** 2).mean()
    loss_l = ((model_out_l.rewards - gt_scores_l) ** 2).mean()
    return loss_w + loss_l  # L1
 
# Stage II: Aspect ranking loss (+ continue L1)
def stage2_loss(model_out_w, model_out_l, aspect_preference_indicator, lambda_=1.0):
    # aspect_preference_indicator: [bsz, 5], +1 if w preferred, -1 otherwise
    sum_w = model_out_w.rewards[:, criteria_indices].sum(dim=-1)  # per aspect
    sum_l = model_out_l.rewards[:, criteria_indices].sum(dim=-1)
    L2 = log_sigmoid(aspect_preference_indicator * (sum_w - sum_l)).sum()
    L1 = stage1_loss(model_out_w, model_out_l, ...)
    return L2 + lambda_ * L1
 
# Stage III: Joint training (overall ranking + L1 + L2)
def stage3_loss(model_out_w, model_out_l, lambda_=1.0):
    L3 = log_sigmoid(model_out_w.score - model_out_l.score)
    return L3 + lambda_ * (stage1_loss(...) + stage2_loss(...))

3.8 代码与论文对应表

论文概念对应代码文件关键类/函数
MJ-VIDEO 模型整体scripts/model/moe_reward.pyInternVLChatRewardModeling
Aspect MoE (门控)scripts/model/moe_reward.pyGatingNetwork (aspect_gating)
Criteria MoE (门控)scripts/model/moe_reward.pyGatingNetwork (criteria_gating)
公式 (1) Criteria 加权scripts/model/moe_reward.pyaspect_weights[aspect] = F.softmax(...)
公式 (2) Overall Scorescripts/model/moe_reward.pyscore = (aspect_scores * aspect_gating_output).sum(dim=-1)
aspect2criteria 映射scripts/train/aspect_train.py--aspect2criteria 参数,Aspect 0-4 对应准则 0-27
Stage I 损失 (公式 3)scripts/train/criteria_train.pystage_one_loss (MSE on criteria scores)
Stage II 损失 (公式 4)scripts/train/aspect_train.pystage_two_loss (MSE on aspect scores) + bt_loss (BT ranking)
Stage III 联合训练scripts/train/overall_train.pybt_loss_stage_3 + stage_one_loss + stage_2_loss
Prompt embedding 提取scripts/model/moe_reward.pyfind_token_for_gating()
MoE 评估scripts/eval/eval_genai_mjvideo.pyeval_genai_mjvideo
数据集处理scripts/data_processor/dataset.pyVideoDataset, VideoDataCollator
模型配置scripts/model/moe_reward.pyInternVLChatRewardModelingConfig

4. Experimental Setup (实验设置)

骨干模型:

  • InternVL2-2B(轻量级 2B 参数 VideoLLM)

数据集:

  • MJ-BENCH-VIDEO:4,336 训练对 + 1,085 测试对
  • Safesora-test:文本到视频安全性偏好数据集
  • GenAI-Bench:通用 AI 视频生成评估集
  • VidProM:5,000 个实例用于视频生成对齐微调

对比基准(视频评判模型):

  • 开源:InternVL2-2B/4B/8B/26B, Qwen2-VL-2B/7B, MiniCPM-8B, CogVLM2
  • 闭源:Gemini-1.5-Flash, GPT-4o
  • 专用视频模型:VideoScore

评估指标:

  • 视频偏好评估:Accuracy(strict 和 tie-aware)
    • strict:预测平局视为错误
    • tie-aware:平局赋予 0.5 分
  • 视频质量评估:Accuracy (Acc) + F1 score
  • T2V 对齐评估:VBench 自动评估(IQ、HA、S、OC)+ 人类评估(Quality、Alignment)

训练配置:

  • Batch size: 1 per device,梯度累积 8 步
  • 优化器:AdamW,lr=3e-5,cosine 调度,warmup 50 步,weight decay 0.1
  • 精度:BF16
  • 帧数:8 帧/视频(num_segments=8
  • 门控温度:1.0,hidden_dim=1024,n_hidden=3
  • 训练轮数:每阶段 3 epochs

5. Experimental Results (实验结果)

5.1 细粒度视频质量和偏好评估(Table 1)

Figure 4 解读: 消融实验结果柱状图。(a) 比较 MJ-VIDEO(橙色)和 w/o Criteria MoE(蓝色)在 5 个方面的 Acc、F1、strict 三个指标上的表现——去除 Criteria MoE 后,特别是在 C&C 和 B&F 方面性能大幅下降,因为这些方面对细粒度准则权重分配最为敏感。(b) 比较 MJ-VIDEO(蓝色)和 w/o Aspect MoE(橙色)在 MJ-BENCH-VIDEO、GenAI-Bench、Safesora-test 上的整体准确率——Aspect MoE 在所有三个数据集上均贡献显著的性能提升。

Table 1:MJ-BENCH-VIDEO 方面标注测试结果(strict 指标)

模型Align AccSafety AccFineness AccC&C AccB&F Acc
InternVL2-2B70.7566.6763.5971.8174.11
InternVL2-26B65.4784.4469.8159.0382.05
Qwen2-VL-7B58.3155.3335.6132.5814.61
GPT-4o58.2782.8659.6754.3619.17
Gemini-1.5-Flash27.4583.6432.805.0115.18
VideoScore-----
MJ-VIDEO78.4187.5068.6095.3686.92

MJ-VIDEO 在 5 个方面中的 4 个(Alignment、Safety、C&C、B&F)取得最优成绩,相比同尺寸的 InternVL2-2B 在所有方面均有显著提升。

5.2 整体视频偏好评估(Table 2)

模型MJ-BENCH-VIDEOSafesora-testGenAI-Bench
strict / tie-awarestrict / tie-awarestrict / tie-aware
InternVL2-2B5.93 / 47.884.60 / 50.3013.71 / 55.43
InternVL2-26B22.88 / 53.8110.41 / 52.0031.86 / 55.64
VideoScore58.47 / 58.4755.33 / 55.5169.14 / 69.14
Gemini2.66 / 48.672.66 / 48.6721.45 / 50.71
GPT-4o35.33 / 54.635.33 / 54.648.85 / 59.14
MJ-VIDEO68.75 / 68.7564.16 / 64.1670.28 / 70.28

MJ-VIDEO 在所有三个数据集上均取得最优成绩:相比最强基线 VideoScore,在 MJ-BENCH-VIDEO 上提升 10.28%(strict),在 Safesora-test 上提升 8.83%,在 GenAI-Bench 上提升 1.14%。

5.3 T2V 视频生成对齐效果(Table 3)

模型Human Eval QualityHuman Eval AlignVBench IQVBench HAVBench SVBench OC
VideoCrafter256.3068.8067.0490.0054.0028.39
VideoScore64.5074.8065.0392.0054.7928.38
MJ-VIDEO69.9079.2067.8994.0055.0928.19

将 MJ-VIDEO 用于 VADER 框架的偏好微调,视频质量人类评估提升 5.4%,文本对齐提升 4.4%,VBench 人类动作(HA)提升 2 个百分点。

5.4 消融实验(Figure 4 数据)

模型设置MJ-BENCH-VIDEOSafesora-testGenAI-Bench
MJ-VIDEO(完整)68.7564.1670.28
w/o Criteria MoE66.115.8357.83
w/o Aspect MoE63.3058.7164.83

关键发现:

  • 去除 Criteria MoE:性能大幅下降(MJ-BENCH-VIDEO -2.64%,Safesora-test -58.33%,GenAI-Bench -12.45%),因为没有准则级权重,模型在 C&C 和 B&F 等方面无法有效学习,导致强烈偏见
  • 去除 Aspect MoE:整体准确率平均下降 5.45%,说明方面级门控对于综合多维度评估至关重要
  • 两个 MoE 组件缺一不可,共同构成 MJ-VIDEO 细粒度判断能力的核心

5.5 案例分析

Figure 5 解读: 两组视频偏好分析案例对比 MJ-VIDEO 与 VideoScore。案例 1(“Generate a video of an ethereal black and white landscape with majestic mountains…“):VideoScore 给 Video 1 打分更高(14.687 vs 13.562)并选择 Video 1;MJ-VIDEO 通过细粒度分析发现 Video 2 在 Alignment(Video 2 更好)、Consistency(Video 2 更好)、Fineness(相当)上的综合表现更优,正确选择 Video 2。案例 2(“a video of space there are different planets and galaxies moving”):VideoScore 选择 Video 2;MJ-VIDEO 识别两视频在 Alignment 和 Consistency 上均为 Good,但通过综合偏好判断选择 Video 1——这验证了细粒度分解对相对评判的重要性,即使两视频整体质量相近时也能做出更准确的相对判断。

5.6 局限性

  1. 模型规模限制:MJ-VIDEO 基于 2B 参数的 InternVL2-2B,在 Fineness 评估上略逊于更大的 InternVL2-26B(68.60 vs 69.81),更强的视觉编码器能更好捕捉精细视觉细节
  2. 跨数据集泛化:在 GenAI-Bench 上的提升(1.14%)相比 MJ-BENCH-VIDEO 内部提升(10.28%)更为有限,说明泛化性仍有提升空间
  3. 安全评估依赖:安全准则的判断仍依赖于训练数据中人工标注的偏好分布

总体结论:

MJ-VIDEO 通过引入细粒度标注的 MJ-BENCH-VIDEO 基准和双层堆叠 MoE 奖励模型,系统解决了现有视频奖励模型评估维度单一、无法动态适配不同评估目标的问题。仅用 2B 参数即超越了 GPT-4o 和 Gemini 等闭源大模型在视频偏好判断上的表现,并在 RLAIF 框架中成功提升视频生成的对齐效果,为视频生成后训练提供了更精准、更透明的奖励信号基础设施。