LISA:语言引导的驾驶员视线估计——干扰感知空间频率注意力机制(论文解读)

论文信息

  • 标题: LISA: Language-guided Interference-aware Spatial-Frequency Attention for Driver Gaze Estimation
  • 作者: Jun Ma, Zhenye Yang, Ruichen Zhou, Pei Zhang, Huan Li, Jinpeng Chen
  • 发表: arXiv(2026年5月17日)
  • 核心贡献: 将语言引导和干扰感知结合到驾驶员视线估计中,在空间和频率双域上建模注意力

1. 核心创新

1.1 研究背景

驾驶员视线估计是 DMS 的核心功能,但面临三大干扰:

干扰类型 描述 传统方法局限
光照变化 阴影/逆光/夜间 空间域特征不稳定
头部运动 大幅转头/低头 视线区域漂移
遮挡 眼镜/口罩/手 视线特征丢失

1.2 LISA 核心方法

三大创新点:

  1. 空间-频率双域注意力:频率域提取光照不变特征
  2. 干扰感知:显式建模干扰区域,降低干扰权重
  3. 语言引导:用自然语言描述场景上下文(如”驾驶员正在看手机”)

2. 技术方案

2.1 频率域注意力

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
import torch
import torch.nn as nn
import torch.fft as fft

class FrequencyAttention(nn.Module):
"""
频率域注意力模块

核心思想:光照变化主要影响低频分量,
高频分量(边缘/纹理)对光照更鲁棒
"""

def __init__(self, channels):
super().__init__()
self.freq_weight = nn.Sequential(
nn.Conv2d(channels, channels//4, 1),
nn.ReLU(),
nn.Conv2d(channels//4, channels, 1),
nn.Sigmoid()
)

def forward(self, x):
# FFT 变换
freq = fft.fft2(x)
freq_shifted = fft.fftshift(freq)
mag = torch.abs(freq_shifted)

# 频率权重
weight = self.freq_weight(mag)

# 加权
freq_weighted = freq_shifted * weight

# 逆变换
freq_unshifted = fft.ifftshift(freq_weighted)
out = fft.ifft2(freq_unshifted).real

return out + x # 残差


class SpatialFrequencyAttention(nn.Module):
"""空间-频率双域注意力"""

def __init__(self, channels):
super().__init__()
self.spatial_attn = nn.Sequential(
nn.Conv2d(channels, channels//4, 1),
nn.ReLU(),
nn.Conv2d(channels//4, channels, 1),
nn.Sigmoid()
)
self.freq_attn = FrequencyAttention(channels)

def forward(self, x):
s_attn = self.spatial_attn(x)
x_spatial = x * s_attn
x_freq = self.freq_attn(x)

# 融合
return x_spatial + x_freq

2.2 语言引导模块

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
class LanguageGuidedAttention(nn.Module):
"""
语言引导注意力模块

用场景描述文本引导视线区域分类
例如:"驾驶员低头看手机" → 关注手机区域
"""

SCENE_DESCRIPTIONS = [
"driver looking at road ahead",
"driver looking at center console",
"driver looking at phone",
"driver looking at left mirror",
"driver looking at right mirror",
"driver looking down at lap",
"driver looking at passenger",
"driver eyes closed",
]

def __init__(self, n_classes=8, text_dim=768):
super().__init__()
# 文本编码器(冻结的 CLIP)
self.text_encoder = self._load_clip()

# 跨模态注意力
self.cross_attn = nn.MultiheadAttention(
embed_dim=512, num_heads=8,
kdim=text_dim, vdim=text_dim
)

# 分类头
self.classifier = nn.Linear(512, n_classes)

def _load_clip(self):
"""加载预训练 CLIP 文本编码器"""
# 简化:实际使用 transformers 库
return nn.Identity()

def forward(self, visual_feat, text_embed):
"""
Args:
visual_feat: (B, seq, 512) 视觉特征序列
text_embed: (B, text_dim) 场景描述嵌入
"""
# 跨模态注意力
text = text_embed.unsqueeze(1) # (B, 1, text_dim)
out, _ = self.cross_attn(
query=visual_feat,
key=text, value=text
)

# 分类
pooled = out.mean(dim=1)
logits = self.classifier(pooled)

return logits


# 完整 LISA 模型
class LISA(nn.Module):
"""LISA: Language-guided Interference-aware Spatial-Frequency Attention"""

def __init__(self, n_gaze_classes=8):
super().__init__()
# 骨干网络
self.backbone = nn.Sequential(
nn.Conv2d(3, 32, 3, stride=2, padding=1), nn.ReLU(),
nn.Conv2d(32, 64, 3, stride=2, padding=1), nn.ReLU(),
nn.Conv2d(64, 128, 3, stride=2, padding=1), nn.ReLU(),
nn.Conv2d(128, 256, 3, stride=2, padding=1), nn.ReLU(),
nn.AdaptiveAvgPool2d((4, 4)),
)

# 空间-频率注意力
self.sfa = SpatialFrequencyAttention(256)

# 语言引导
self.lang_guide = LanguageGuidedAttention(n_gaze_classes)

def forward(self, image, text_embed):
feat = self.backbone(image) # (B, 256, 4, 4)
feat = self.sfa(feat)
feat_flat = feat.flatten(2).permute(2, 0, 1) # (seq, B, 256)

# 投影到 512 维
proj = nn.Linear(256, 512).to(feat.device)
feat_proj = proj(feat_flat) # (seq, B, 512)

logits = self.lang_guide(feat_proj, text_embed)
return logits


# 测试
if __name__ == "__main__":
model = LISA()

# 模拟输入
image = torch.randn(2, 3, 128, 128)
text_embed = torch.randn(2, 768)

logits = model(image, text_embed)
print(f"输出: {logits.shape}") # (2, 8) → 8个视线区域
print(f"参数: {sum(p.numel() for p in model.parameters()):,}")

3. 驾驶员视线区域分类标准

3.1 视线区域定义

区域编号 名称 描述 检测难度
GZ-0 前方道路 正常驾驶视线 ⭐ 基线
GZ-1 中控台 收音机/空调操作 ⭐⭐
GZ-2 手机 低头看手机 ⭐⭐ 高优先级
GZ-3 左后视镜 观察左后方 ⭐⭐
GZ-4 右后视镜 观察右后方 ⭐⭐
GZ-5 腿部 严重分心 ⭐⭐⭐ 高优先级
GZ-6 乘客侧 与乘客交谈 ⭐⭐
GZ-7 闭眼 瞌睡/疲劳 ⭐⭐⭐ 高优先级

3.2 Euro NCAP 分心检测场景映射

Euro NCAP 场景 对应视线区域 检测要求
D-01 视线前方 GZ-0 基线,无误报
D-02 手机使用 GZ-2 ≤3s 检测,一级警告
D-03 低头操作 GZ-1/GZ-5 ≤3s 检测
D-04 长时间侧视 GZ-3/GZ-4 持续>3s,二级警告
D-05 闭眼持续 GZ-7 ≤2s 检测

4. 与其他 2026 年视线估计论文对比

论文 核心方法 优势 局限
LISA 语言引导+频域+干扰感知 光照鲁棒,场景理解 需要文本输入
TransGaze-Object Transformer 预测视线目标 直接预测物体类别 训练数据需求大
SGAP-Gaze 场景网格注意力 精确 PoG(注视点) 计算量大
DHECA-SuperGaze 双头眼交叉注意力+超分辨率 无约束条件 实时性挑战

5. IMS 集成路线

5.1 频域注意力独立部署

即使不使用语言引导,LISA 的频域注意力模块也可独立使用:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class IMSCameraBackbone(nn.Module):
"""IMS 摄像头骨干网络 + 频域注意力"""

def __init__(self):
super().__init__()
self.backbone = nn.Sequential(
nn.Conv2d(3, 32, 3, stride=2, padding=1), nn.ReLU(),
nn.Conv2d(32, 64, 3, stride=2, padding=1), nn.ReLU(),
nn.Conv2d(64, 128, 3, stride=2, padding=1), nn.ReLU(),
)
self.freq_attn = FrequencyAttention(128)

def forward(self, x):
feat = self.backbone(x)
feat = self.freq_attn(feat)
return feat

5.2 开发优先级

优先级 任务 时间 依赖
P0 频域注意力模块集成到 DMS 2026 Q4 DMS 骨干网络
P0 8 区域视线分类器训练 2026 Q4 标注数据
P1 语言引导模块评估 2027 Q1 CLIP 模型
P1 干扰感知在实车环境验证 2027 Q1 实车测试
P2 与疲劳检测协同(GZ-7 闭眼) 2027 Q2 疲劳分类器

6. 总结

核心洞察

  1. 频域是光照鲁棒性的关键:频率域提取的特征对光照变化不敏感,是 DMS 低光/逆光场景的有效方案
  2. 语言引导提供场景理解:用场景描述文本引导视线分类,使模型”理解”而非”看到”
  3. 干扰感知显式建模:不被动地适应干扰,而是主动识别干扰区域并降权
  4. 8 区域分类满足 Euro NCAP:覆盖所有 Euro NCAP 分心检测场景

对 IMS 的启示

  • 频域注意力零成本提升光照鲁棒性:作为模块插入现有骨干网络,不增加推理负担
  • 视线区域分类 > 精确视线角度:DMS 实际需要的是区域分类(看路 vs 看手机),不需要精确角度
  • 语言引导在训练阶段使用:推理时不需要文本输入,训练时用文本增强语义理解

参考来源:

  • Ma et al., arXiv(2026-05-17),”LISA: Language-guided Interference-aware Spatial-Frequency Attention”
  • 相关:TransGaze-Object(Sharma et al., 2026-09),SGAP-Gaze(2026-04),DHECA-SuperGaze(2025-05)