AIDE 数据集深度解读:首个驾驶员状态×交通场景联合感知的多视角多模态基准

AIDE 数据集深度解读:首个驾驶员状态×交通场景联合感知的多视角多模态基准

论文信息

项目 内容
标题 AIDE: A Vision-Driven Multi-View, Multi-Modal, Multi-Tasking Dataset for Assistive Driving Perception
任务 驾驶员行为识别(DBR) + 情绪识别(DER) + 交通场景识别(TCR) + 车辆状态识别(VCR)
数据集 AIDE (AssIstive Driving pErception)
规模 2,898样本 / 522K帧 / 3秒视频片段
视角 4路同步摄像头(前/左/右/内)
标注 边界框 + 人脸/身体(26点)/手势(42点)关键点
开源

1. 核心创新

首个同时覆盖内源(驾驶员状态)和外源(交通场景)因素的多任务驾驶感知数据集,解决传统 DMS 的”隧道视觉”问题——只看驾驶员不看路况。

1.1 传统DMS的致命缺陷

问题 传统DMS AIDE解决方案
隧道视觉 只看驾驶员面部/身体 4路摄像头含外部场景
任务单一 仅疲劳或仅分心 4任务联合标注
缺乏上下文 “东张西望”=分心? 可能是在看路口 → TCR上下文
模态不足 仅RGB RGB+关键点+边界框

1.2 与现有数据集对比

数据集 视角 任务数 情绪 行为 交通场景 车辆状态 关键点
DMD 1内 1
100-Driver 1内 1
AffectNet N/A 1
AIDE 4路 4 ✅ 68点

2. 数据集详解

2.1 传感器配置

graph TB
    subgraph "4路同步摄像头"
        A[前视摄像头<br/>Front-view] --> A1[交通场景]
        B[左视摄像头<br/>Left-view] --> B1[侧方交通]
        C[右视摄像头<br/>Right-view] --> C1[侧方交通]
        D[车内摄像头<br/>Inside-view] --> D1[驾驶员状态]
    end
    
    A1 --> E[交通上下文 TCR]
    B1 & C1 --> E
    D1 --> F[驾驶员行为 DBR]
    D1 --> G[驾驶员情绪 DER]
    A1 & B1 & C1 --> H[车辆状态 VCR]
    
    E & F & G & H --> I[多任务联合感知]

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
# AIDE 标注体系
ANNOTATION_SCHEMA = {
"driver_behavior_recognition": {
"task": "DBR",
"classes": ["smoking", "phone_use", "eating", "drinking",
"reaching_back", "adjusting_panel", "talking"],
"annotation": "bounding box + body keypoints (26 points)",
},
"driver_emotion_recognition": {
"task": "DER",
"classes": ["anger", "anxiety", "weariness", "neutral",
"happiness", "surprise"],
"annotation": "face bounding box + face keypoints",
},
"traffic_context_recognition": {
"task": "TCR",
"classes": ["traffic_jam", "smooth_flow", "intersection",
"highway", "parking", "construction"],
"annotation": "scene-level label",
},
"vehicle_condition_recognition": {
"task": "VCR",
"classes": ["straight", "turning_left", "turning_right",
"lane_change", "braking", "accelerating"],
"annotation": "maneuver-level label",
},
"keypoints": {
"body": 26, # COCO + extra driving-specific
"hand": 42, # 21 per hand
"face": 68, # standard 68-point
"total": 136,
},
"sample_count": 2898,
"frames_per_sample": "~180 (3s @ 60fps)",
"total_frames": 522000,
}

2.3 数据分布

任务 类别数 最高准确率 难点
TCR (交通场景) 6 92.12% 相对容易
VCR (车辆状态) 6 ~85% 中等
DBR (驾驶行为) 7 78.16% 长尾分布
DER (驾驶员情绪) 6 76.52% 最难,自然场景情绪微妙

3. 方法论与基线

3.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
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
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
import torch
import torch.nn as nn
from typing import Tuple

class AIDEBaseline(nn.Module):
"""
AIDE数据集基线模型架构

支持三种建模模式:
1. 2D Pattern: 单帧CNN
2. 2D+Timing: CNN + Transformer Encoder
3. 3D Pattern: 时空模型
"""

def __init__(self, pattern: str = "2d_timing", num_views: int = 4):
super().__init__()
self.pattern = pattern
self.num_views = num_views

if pattern == "2d":
# Pattern 1: 标准图像分类
self.backbone = ResNet50(pretrained=True)
self.head = nn.Linear(2048, num_classes)

elif pattern == "2d_timing":
# Pattern 2: CNN特征 + Transformer时序
self.backbone = ResNet50(pretrained=True) # 每帧提取特征
self.temporal_encoder = nn.TransformerEncoder(
nn.TransformerEncoderLayer(
d_model=2048, nhead=8,
dim_feedforward=8192,
dropout=0.1,
batch_first=True
),
num_layers=4
)
self.head = nn.Linear(2048, num_classes)

elif pattern == "3d":
# Pattern 3: 时空模型
self.backbone = TimeSFormer(
img_size=224,
num_frames=16,
patch_size=16,
num_classes=num_classes
)

def forward(self, x: Tuple[torch.Tensor, ...]) -> torch.Tensor:
"""
Args:
x: 多视角输入元组,每个 (B, C, T, H, W)
front, left, right, inside
Returns:
logits: (B, num_classes)
"""
if self.pattern == "2d_timing":
# 对每个视角提取帧级特征
view_features = []
for view_idx in range(self.num_views):
view_input = x[view_idx] # (B, C, T, H, W)
B, C, T, H, W = view_input.shape

# 每帧通过CNN
frames = view_input.permute(0, 2, 1, 3, 4) # (B, T, C, H, W)
frame_features = []
for t in range(T):
feat = self.backbone(frames[:, t]) # (B, 2048)
frame_features.append(feat)

frame_features = torch.stack(frame_features, dim=1) # (B, T, 2048)

# Transformer时序编码
encoded = self.temporal_encoder(frame_features) # (B, T, 2048)
view_features.append(encoded.mean(dim=1)) # (B, 2048)

# 自适应融合
fused = torch.stack(view_features, dim=1) # (B, num_views, 2048)
fused = fused.mean(dim=1) # 简单平均融合
return self.head(fused)

elif self.pattern == "3d":
# 3D模式直接处理多帧
inside_view = x[3] # 主要用车内视角
return self.backbone(inside_view)


class AdaptiveFusionModule(nn.Module):
"""
自适应融合模块

根据场景动态加权不同模态:
- 直行时:内部视角权重高
- 转弯时:外部视角权重高
- 危险时:所有视角均重要
"""

def __init__(self, feature_dim: int = 2048, num_views: int = 4):
super().__init__()
self.attention = nn.MultiheadAttention(
embed_dim=feature_dim,
num_heads=8,
batch_first=True
)
self.view_weights = nn.Parameter(torch.ones(num_views))

def forward(self, view_features: torch.Tensor) -> torch.Tensor:
"""
Args:
view_features: (B, num_views, feature_dim)
Returns:
fused: (B, feature_dim)
"""
# 可学习视角权重
weights = torch.softmax(self.view_weights, dim=0)
weighted = view_features * weights.unsqueeze(0).unsqueeze(-1)

# Cross-attention融合
fused, _ = self.attention(weighted, weighted, weighted)
return fused.mean(dim=1)


# 实际测试
if __name__ == "__main__":
# 模拟AIDE数据输入
batch_size = 2
num_frames = 16

# 4路视角输入
front = torch.randn(batch_size, 3, num_frames, 224, 224)
left = torch.randn(batch_size, 3, num_frames, 224, 224)
right = torch.randn(batch_size, 3, num_frames, 224, 224)
inside = torch.randn(batch_size, 3, num_frames, 224, 224)

model = AIDEBaseline(pattern="2d_timing", num_views=4)

# 前向传播
output = model((front, left, right, inside))
print(f"Output shape: {output.shape}")
print(f"Model params: {sum(p.numel() for p in model.parameters()) / 1e6:.1f}M")

3.2 关键发现:上下文提升准确率

实验 无TCR上下文 有TCR上下文 提升
DBR准确率 71.2% 78.16% +6.96%
DER准确率 68.3% 76.52% +8.22%

核心结论: 交通场景上下文显著提升驾驶员状态识别准确率。”东张西望”在路口是正常行为,在直行时是分心。


4. 数据流架构

graph LR
    subgraph "输入层"
        A1[前视摄像头] 
        A2[左视摄像头]
        A3[右视摄像头]
        A4[车内摄像头]
    end
    
    subgraph "特征提取"
        A1 --> B1[交通场景特征]
        A2 & A3 --> B2[侧方场景特征]
        A4 --> B3[驾驶员特征<br/>面部+身体+手势]
    end
    
    subgraph "融合层"
        B1 & B2 --> C1[Adaptive Fusion<br/>动态权重]
        B3 --> C2[Cross-attention<br/>Fusion]
        C1 & C2 --> C3[联合表示]
    end
    
    subgraph "多任务输出"
        C3 --> D1[DBR: 行为识别]
        C3 --> D2[DER: 情绪识别]
        C3 --> D3[TCR: 交通场景]
        C3 --> D4[VCR: 车辆状态]
    end

5. IMS 开发启示

5.1 架构启示

启示 依据 IMS建议
必须引入场景上下文 TCR提升DBR +7% DMS不能只看车内,需要融合ADAS前视
身体>面部 身体姿态对情绪识别更可靠 不可只做人脸识别,身体关键点必须
时序>单帧 3D/2D+Timing > 2D 必须使用时序模型,单帧不够
多视角有效 4路视角提供互补信息 至少2路:车内+前视
长尾问题 “打瞌睡”样本稀少 需要数据增强/合成数据

5.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
# IMS关键点检测配置(基于AIDE标注体系)
IMS_KEYPOINT_CONFIG = {
"body": {
"num_points": 26, # COCO 17 + 驾驶专用 9
"driving_specific": [
"left_hand_grip", # 左手握方向盘
"right_hand_grip", # 右手握方向盘
"left_elbow_rest", # 左肘搁扶手
"right_elbow_rest", # 右肘搁扶手
"head_tilt", # 头部倾斜
"shoulder_asymmetry", # 肩膀不对称
"torso_lean", # 躯干前倾
"foot_position", # 脚部位置
"hand_phone", # 手持手机位置
],
"model": "HRNet-W32",
"input_size": "256x192",
"precision_target": "<3px",
},
"hand": {
"num_points": 42, # 21 per hand
"model": "MediaPipe Hands",
"input_size": "224x224",
"precision_target": "<5px",
},
"face": {
"num_points": 68,
"model": "FaceMesh",
"input_size": "192x192",
"precision_target": "<3px",
},
"total_keypoints": 136,
"inference_target": "<30ms per frame",
}

5.3 Euro NCAP 2026 映射

Euro NCAP OMS 要求 AIDE支持 检测方案
分心检测(D-01~D-05) ✅ DBR 7类 身体关键点+手势识别
疲劳检测(F-01~F-05) ⚠️ 部分含weariness 需补充PERCLOS
酒驾损伤 ❌ 未覆盖 需补充BAC数据
乘员分类 ❌ 未覆盖 需补充OMS
OOP异常姿态 ⚠️ 身体关键点可用 26点身体姿态分析

6. 验证测试场景

场景ID 条件 AIDE上下文 预期
DBR-T01 驾驶员看手机 TCR=smooth_flow 准确率>80%
DBR-T02 驾驶员看手机 TCR=intersection 可能误判为看路 → 需上下文
DER-T01 焦虑+急刹车 VCR=braking 情绪×车辆状态联合检测
DER-T02 疲倦+车道偏离 VCR=lane_change 疲劳导致驾驶失误
TCR-T01 施工路段 DBR=looking_around “东张西望”是合理的 → 不应判分心

7. 局限性

局限 影响 缓解
数据不平衡 安全行为>>危险行为(长尾) 合成数据+重采样
无酒驾数据 不覆盖Euro NCAP ALC场景 需补充IDD类数据集
无乘员数据 不覆盖OMS CPD/OOP 需补充乘员视角
3秒片段限制 长时行为不可分析 需扩展到连续驾驶
4路摄像头成本 量产车难以全配 可降为2路(车内+前视)

8. 结论

AIDE 的核心贡献不在于数据量,而在于任务联合性——首次证明了交通场景上下文对驾驶员状态识别的量化提升(+7%)。

对 IMS 团队的关键启示:

  1. DMS 模块必须与 ADAS 前视模块打通,获取交通场景标签
  2. 身体关键点(26点)比面部表情对情绪识别更可靠
  3. 时序建模必须,单帧准确率天花板明显
  4. 手势关键点(42点)对手机使用/吸烟等行为识别至关重要

参考文献

  • AIDE Dataset: Lacuna, 2026-09
  • TimeSFormer: Bertasius et al., ICML 2021
  • HRNet: Sun et al., CVPR 2019
  • MediaPipe Hands: Zhang et al., CVPR 2020
  • Euro NCAP 2026 OMS Protocol (v1.0)

AIDE 数据集深度解读:首个驾驶员状态×交通场景联合感知的多视角多模态基准
https://dapalm.com/2026/09/15/2026-09-15-aide-multi-view-multi-modal-driver-context-fusion-ims/
作者
Mars
发布于
2026年9月15日
许可协议