Qwen2-VL精确坐标伪回归能力

在实际大模型落地中,需要大模型支持实际给出对应目标检测物的坐标输出能力,在原生基座模型中这个能力很少体现,经过了一些实验,简单记录一下从输入图像的数学表示开始,经过视觉编码、模态对齐、语言模型推理,直至最终坐标解码的完整数学推导过程。

基于Qwen2-VL的训练过程,本文提出了一种坐标敏感的加权损失函数(Coordinate-Aware Weighted Loss),以提升模型对边界框预测的精确度。

1. 任务定义的数学形式

我将目标检测任务建模为基于视觉条件的自回归文本生成任务

给定输入图像 I 和文本提示 Xprompt(例如 "Detect all object in the image."),模型的目标是生成一个包含目标位置和类别的序列 Y

序列 Y 的格式被定义为结构化的 Token 序列: Y=[box_2d,ymin,xmin,ymax,xmax,object_ref,class_name,]

1.1 坐标量化 (Coordinate Quantization)

为了将连续的坐标回归问题转化为离散的 Token 分类问题,我们采用了 01000 的归一化量化策略。

设原始图像宽为 W,高为 H,原始边界框坐标为 (x,y),则量化函数 Q() 定义为:

(1)x=Q(x)=clamp(xW×1000,0,1000)
(2)y=Q(y)=clamp(yH×1000,0,1000)

模型直接预测这些量化后的整数 Token。


2. 优化目标改进

2.1 标准自回归损失

标准的语言模型微调通常使用交叉熵损失(Cross-Entropy Loss)。对于长度为 T 的目标序列 Y={y1,y2,,yT},损失函数 LCE 定义为:

(3)LCE=1Tt=1TlogP(yt|y<t,Xprompt,I;θ)

其中 θ 是模型参数。

2.2 改进:坐标敏感的加权损失 (Coordinate-Aware Weighted Loss)

在目标检测任务中,坐标 Token 的准确性远比普通文本 Token(如停用词、标点符号)重要。标准的平均损失会导致模型在大量普通文本上的梯度稀释了对坐标预测的优化。

为此,我们引入了一个时间步相关的权重函数 w(t),构建加权损失 LWeighted

(4)LWeighted=1tV1t=1Tw(t)logP(yt|y<t,Xprompt,I;θ)

其中权重函数 w(t) 定义如下:

(5)w(t)={0if ytUser Prompt (Masked)αif ytCoordinate Tokens1otherwise (Standard Text)

在我们的实现中,我们将坐标权重的超参数设为 α=2.0。这意味着模型预测错误一个坐标 Token 所受到的惩罚是预测错误普通文本的两倍。


3. 工程实现细节

3.1 动态掩码生成 (Dynamic Mask Generation)

在数据整理器(Data Collator)中动态构建权重掩码矩阵 M,其维度与输入 input_ids 一致。

实现逻辑如下:

  1. 初始化:创建一个全为 1 的掩码张量 loss_weight_mask

  2. 屏蔽提示词:将用户输入的 Prompt 部分的 Label 设为 -100(PyTorch 默认忽略索引),权重设为 0。

  3. 坐标增强

    • 扫描 Token 序列,定位 <|box_2d|> (Start) 和 <|object_ref|> (End) 特殊 Token 的位置索引。

    • <|box_2d|> 的结束位置为 idxstart<|object_ref|> 的开始位置为 idxend

    • 对区间 [idxstart,idxend) 内的所有 Token(即坐标数值),将对应的掩码值设为 α (2.0)。

3.2 自定义 Trainer

我继承了 Hugging Face 的 Trainer 并重写了 compute_loss 方法,以支持逐元素的加权计算:

4. 改进效果分析

通过这种数学上的加权策略,梯度下降(Gradient Descent)过程发生了如下变化:

(6)θLtw(t)θlogP(yt|)

由于坐标 Token 的 w(t) 较大,模型参数 θ 的更新方向会显著偏向于最小化坐标预测误差的方向。这有效地缓解了 VLM 在微调时容易出现的幻觉问题(即生成了正确的对象名称但坐标偏移严重),使得模型在保持语言能力的同时,具备了更强的回归能力。