InCarEmo:座舱情绪识别多模态数据集——驾驶员状态监测的新基准(论文解读)

论文信息

  • 标题: InCarEmo: A Multimodal Dataset for In-Cabin Emotion Recognition and Driver State Monitoring
  • 作者: Hao Yang, Yanyan Zhao, Kewei Zhao 等 14 人
  • 发表: arXiv(2026年7月16日)
  • 核心贡献: 首个公开的座舱内多模态情绪识别数据集,同步采集面部视频、语音、生理信号和驾驶行为

1. 数据集概览

维度 规格
模态 面部视频 + 语音 + 生理信号 + 驾驶行为
被试 多名驾驶员,真实驾驶场景
情绪标签 7 类基本情绪 + 连续效价/唤醒度
标注方式 自评 + 专家标注 + 连续标注
场景 城市/高速/夜间/雨天

1.1 模态详情

模态 传感器 采样率 分辨率/精度
面部视频 DMS 摄像头 30fps 1920×1080 RGB-IR
语音 座舱麦克风 16kHz 16bit
心率 PPG 传感器 100Hz ±1bpm
皮肤电导 EDA 传感器 100Hz ±0.1μS
驾驶行为 CAN 总线 60Hz 方向盘/油门/刹车/速度

1.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
import torch
import torch.nn as nn

class InCarEmoFusionModel(nn.Module):
"""
InCarEmo 多模态融合模型

融合4个模态:面部+语音+生理+驾驶行为
"""

def __init__(self, n_emotions=7):
super().__init__()

# 1. 面部分支(CNN+LSTM)
self.face_encoder = 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.AdaptiveAvgPool2d((4, 4)),
)
self.face_lstm = nn.LSTM(128*16, 256, batch_first=True)

# 2. 语音分支(CNN)
self.voice_encoder = nn.Sequential(
nn.Conv1d(80, 128, 3, stride=2, padding=1), nn.ReLU(),
nn.Conv1d(128, 256, 3, stride=2, padding=1), nn.ReLU(),
nn.AdaptiveAvgPool1d(1),
)

# 3. 生理分支(PPG+EDA)
self.phys_encoder = nn.Sequential(
nn.Linear(200, 128), nn.ReLU(), # 2s窗口@100Hz
nn.Linear(128, 64), nn.ReLU(),
)

# 4. 驾驶行为分支
self.drive_encoder = nn.Sequential(
nn.Linear(120, 64), nn.ReLU(), # 2s窗口@60Hz × 1维
nn.Linear(64, 32), nn.ReLU(),
)

# 融合层
self.fusion = nn.Sequential(
nn.Linear(256 + 256 + 64 + 32, 256), nn.ReLU(),
nn.Dropout(0.3),
nn.Linear(256, n_emotions)
)

# 效价/唤醒度回归头
self.va_head = nn.Linear(256, 2) # (valence, arousal)

def forward(self, face, voice, phys, driving):
# 面部
b, t, c, h, w = face.shape
face_feat = self.face_encoder(face.view(b*t, c, h, w))
face_feat = face_feat.view(b, t, -1)
_, (hn, _) = self.face_lstm(face_feat)
face_out = hn[-1] # (B, 256)

# 语音
voice_out = self.voice_encoder(voice).squeeze(-1) # (B, 256)

# 生理
phys_out = self.phys_encoder(phys) # (B, 64)

# 驾驶
drive_out = self.drive_encoder(driving) # (B, 32)

# 融合
combined = torch.cat([face_out, voice_out, phys_out, drive_out], dim=1)
emotions = self.fusion(combined)
va = self.va_head(combined)

return {
'emotions': emotions, # (B, 7) 分类
'valence_arousal': va, # (B, 2) 回归
}


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

# 模拟输入
face = torch.randn(2, 30, 3, 64, 64) # 30帧面部视频
voice = torch.randn(2, 80, 160) # 80维MFCC, 1s
phys = torch.randn(2, 200) # 2s生理信号
driving = torch.randn(2, 120) # 2s驾驶行为

output = model(face, voice, phys, driving)
print(f"情绪分类: {output['emotions'].shape}")
print(f"效价/唤醒度: {output['valence_arousal'].shape}")
print(f"参数总数: {sum(p.numel() for p in model.parameters()):,}")

3. 与现有数据集对比

数据集 模态数 场景 情绪类别 公开 座舱专用
InCarEmo 4 真实驾驶 7+VA ✅ ✅
SEED-V 1(EEG) 实验室 5 ✅ ❌
DEAP 4(EEG+生理) 实验室 4+VA ✅ ❌
AffectNet 1(图像) 网络 7+VA ✅ ❌
LEMO 2(视频+语音) 实验 4 ❌ ❌

InCarEmo 独特价值: 唯一同时覆盖 4 模态 + 真实驾驶 + 座舱专用的情绪数据集。

4. 对 IMS 开发的启示

4.1 模态贡献度分析

模态 情绪识别贡献 DMS 可获得性 集成优先级
面部视频 ⭐⭐⭐⭐ ✅ DMS 摄像头 P0
语音 ⭐⭐⭐ ✅ 座舱麦克风 P1
生理信号 ⭐⭐⭐⭐ ⚠️ 需可穿戴 P2
驾驶行为 ⭐⭐ ✅ CAN 信号 P0

4.2 开发路线

优先级 任务 模态 时间
P0 面部情绪7分类 视频 2026 Q4
P0 驾驶行为情绪辅助 CAN 2026 Q4
P1 语音情绪融合 麦克风 2027 Q1
P1 InCarEmo 数据集验证 全模态 2027 Q1
P2 生理信号融合 PPG/EDA 2027 Q2
P2 效价/唤醒度连续估计 全模态 2027 Q2

5. 总结

InCarEmo 是首个公开的座舱多模态情绪数据集,填补了 DMS 情绪识别领域的数据空白。4 模态融合 + 真实驾驶 + 7 类情绪 + 连续 VA 标注,为 IMS 情绪监测功能提供了直接可用的训练和评估基准。


参考来源:

  • InCarEmo, Yang et al., arXiv(2026-07-16)