认知分心检测:多模态融合 + CAN 数据 + 个性化校准方案

论文信息


核心创新

该论文提出了一种自适应多模态学习框架(AML),用于驾驶员认知状态监控:

  1. Transformer 融合 - 多模态数据融合
  2. 个性化元学习 - K=5 样本即可校准(约 10 秒)
  3. 联邦优化 - 跨驾驶员隐私保护学习
  4. LOSO 准确率 84% - 比基线提升 6.2-11.3%

问题定义

认知分心 vs 视觉分心

分心类型 定义 检测难点 Euro NCAP 状态
视觉分心 “Eye-off-road”,视线离开道路 可通过视线追踪检测 ✅ 已要求(D-01~D-08)
认知分心 “Mind-off-road”,思维离开驾驶 无法通过外部行为检测 ❌ 未明确要求

核心挑战:

  • 认知分心无法通过外部行为直接检测
  • 需要依赖生理信号(EEG、EDA)或驾驶行为(CAN 数据)
  • 个体差异大,需要个性化校准

方法详解

1. 多模态数据融合

论文数据集(12 种信息通道):

graph TB
    A[多模态数据] --> B1[视觉: RGB摄像头]
    A --> B2[视觉: IR摄像头]
    A --> B3[视觉: 热成像]
    A --> B4[听觉: 麦克风]
    A --> B5[生理: EEG脑电]
    A --> B6[生理: EDA皮肤电]
    A --> B7[生理: ECG心电]
    A --> B8[生理: 呼吸]
    A --> B9[CAN: 方向盘角度]
    A --> B10[CAN: 速度]
    A --> B11[CAN: 车道偏离]
    A --> B12[语言: 语音交互]

数据集详情:

模态 传感器 数据类型 特征
视觉 RGB、IR、热成像 图像序列 眼动、头部姿态、表情
生理 EEG、EDA、ECG 时间序列 脑电、皮肤电、心率
CAN 车辆总线 时间序列 方向盘、速度、车道偏离
听觉 麦克风 音频 语音、噪声
语言 交互记录 文本 对话内容

2. Transformer 融合架构

论文 Section 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
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
"""
Transformer 多模态融合架构

论文方法:
- Vision Transformer (ViT) 提取图像特征
- Time-Series Transformer 提取生理/CAN 特征
- Cross-Modal Attention 融合多模态特征

参考:Scientific Reports 2026
"""

import torch
import torch.nn as nn


class MultimodalTransformerFusion(nn.Module):
"""
Transformer 多模态融合框架

论文 Section 3.1 实现
"""

def __init__(self, config: dict = None):
super().__init__()
config = config or {}

# Vision Transformer (ViT)
self.vit = nn.ModuleDict({
'rgb': ViTEncoder(embed_dim=512),
'ir': ViTEncoder(embed_dim=256),
'thermal': ViTEncoder(embed_dim=256)
})

# Time-Series Transformer
self.tst = nn.ModuleDict({
'eeg': TimeSeriesEncoder(input_dim=14, embed_dim=128),
'eda': TimeSeriesEncoder(input_dim=2, embed_dim=64),
'can': TimeSeriesEncoder(input_dim=10, embed_dim=128)
})

# Cross-Modal Attention
self.cross_attention = CrossModalAttention(embed_dim=512)

# 分类头
self.classifier = nn.Sequential(
nn.Linear(512, 256),
nn.ReLU(),
nn.Linear(256, 4) # 4种状态: 正常、认知分心、视觉分心、疲劳
)

def forward(self, inputs: dict) -> torch.Tensor:
"""
前向传播

Args:
inputs: 多模态输入字典
- 'rgb': RGB图像, shape=(B, C, H, W)
- 'eeg': EEG信号, shape=(B, T, 14)
- 'can': CAN数据, shape=(B, T, 10)

Returns:
logits: 分类输出, shape=(B, 4)
"""
# Vision 特征提取
vision_features = []
for key, encoder in self.vit.items():
if key in inputs:
feat = encoder(inputs[key])
vision_features.append(feat)

vision_feat = torch.stack(vision_features, dim=1) # (B, N_modal, D)

# Time-Series 特征提取
time_features = []
for key, encoder in self.tst.items():
if key in inputs:
feat = encoder(inputs[key])
time_features.append(feat)

time_feat = torch.stack(time_features, dim=1) # (B, N_modal, D)

# 多模态融合
fused_feat = self.cross_attention(vision_feat, time_feat)

# 分类
logits = self.classifier(fused_feat)

return logits


class ViTEncoder(nn.Module):
"""Vision Transformer 编码器"""

def __init__(self, embed_dim: int = 512):
super().__init__()
# 简化实现(实际需完整 ViT)
self.conv = nn.Conv2d(3, embed_dim, kernel_size=16, stride=16)
self.transformer = nn.TransformerEncoder(
nn.TransformerEncoderLayer(d_model=embed_dim, nhead=8),
num_layers=6
)

def forward(self, x: torch.Tensor) -> torch.Tensor:
# Patch embedding
patches = self.conv(x) # (B, D, H/16, W/16)
patches = patches.flatten(2).transpose(1, 2) # (B, N_patches, D)

# Transformer
feat = self.transformer(patches)

# Global pooling
feat = feat.mean(dim=1) # (B, D)

return feat


class TimeSeriesEncoder(nn.Module):
"""时间序列 Transformer 编码器"""

def __init__(self, input_dim: int, embed_dim: int):
super().__init__()
self.embedding = nn.Linear(input_dim, embed_dim)
self.transformer = nn.TransformerEncoder(
nn.TransformerEncoderLayer(d_model=embed_dim, nhead=4),
num_layers=3
)

def forward(self, x: torch.Tensor) -> torch.Tensor:
# Embedding
x = self.embedding(x) # (B, T, D)

# Transformer
feat = self.transformer(x)

# Global pooling
feat = feat.mean(dim=1) # (B, D)

return feat


class CrossModalAttention(nn.Module):
"""跨模态注意力融合"""

def __init__(self, embed_dim: int):
super().__init__()
self.attention = nn.MultiheadAttention(embed_dim, num_heads=8)

def forward(self, vision_feat: torch.Tensor, time_feat: torch.Tensor) -> torch.Tensor:
# 跨模态注意力
# Vision 作为 query,Time 作为 key/value
fused_feat, _ = self.attention(
vision_feat.transpose(0, 1), # (N_modal, B, D)
time_feat.transpose(0, 1),
time_feat.transpose(0, 1)
)

# 融合输出
fused_feat = fused_feat.transpose(0, 1).mean(dim=1) # (B, D)

return fused_feat


# 实际测试
if __name__ == "__main__":
model = MultimodalTransformerFusion()

# 模拟多模态数据
inputs = {
'rgb': torch.randn(1, 3, 224, 224),
'eeg': torch.randn(1, 100, 14),
'can': torch.randn(1, 100, 10)
}

# 前向推理
logits = model(inputs)

print(f"输出形状: {logits.shape}")
print(f"预测状态: {torch.argmax(logits, dim=1)}")

3. 个性化元学习

论文关键成果:

“AML reaches 84.0 ± 1.8% with K = 20 personalization… 81.5 ± 2.3% LOSO accuracy with only K = 5 samples (~10 s of calibration per new driver).”

元学习原理:

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
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
"""
个性化元学习(Meta-Learning)

论文方法:
- MAML (Model-Agnostic Meta-Learning)
- K-shot 个性化校准
- 联邦优化

核心:K=5 样本即可校准(约 10 秒)

参考:Scientific Reports 2026 Section 3.2
"""

import torch
import torch.nn as nn
import torch.optim as optim


class PersonalizedMetaLearning(nn.Module):
"""
个性化元学习框架

论文方法:MAML + 个性化校准
"""

def __init__(self, base_model: nn.Module, config: dict = None):
super().__init__()
self.base_model = base_model
config = config or {}

# 元学习参数
self.meta_lr = config.get('meta_lr', 0.001)
self.inner_lr = config.get('inner_lr', 0.01)
self.K_samples = config.get('K_samples', 5) # 校准样本数

# 元优化器
self.meta_optimizer = optim.Adam(self.base_model.parameters(), lr=self.meta_lr)

def meta_train(self, task_data: list, num_epochs: int = 100):
"""
元训练

Args:
task_data: 多个驾驶员的数据(每个驾驶员作为一个任务)
num_epochs: 元训练轮数

论文方法:MAML outer loop
"""
for epoch in range(num_epochs):
meta_loss = 0.0

for task in task_data:
# Inner loop: 针对每个驾驶员微调
inner_loss = self._inner_loop(task)

# Outer loop: 累积元损失
meta_loss += inner_loss

# 元更新
self.meta_optimizer.zero_grad()
meta_loss.backward()
self.meta_optimizer.step()

def personalize(self, driver_data: dict, K: int = 5) -> nn.Module:
"""
个性化校准

Args:
driver_data: 新驾驶员数据
K: 校准样本数(论文: K=5, 约 10 秒)

Returns:
personalized_model: 个性化后的模型

论文关键:K=5 样本即可达到 81.5% 准确率
"""
# 复制基础模型
personalized_model = self.base_model.clone()

# 选取 K 个样本
support_data = self._select_support_set(driver_data, K)

# 快速微调(inner loop)
optimizer = optim.SGD(personalized_model.parameters(), lr=self.inner_lr)

for step in range(10): # 论文: 10 步
inputs, labels = support_data
outputs = personalized_model(inputs)
loss = nn.CrossEntropyLoss()(outputs, labels)

optimizer.zero_grad()
loss.backward()
optimizer.step()

return personalized_model

def _inner_loop(self, task: dict) -> torch.Tensor:
"""Inner loop: 针对单个任务微调"""
# 快速微调
adapted_model = self.base_model.clone()
optimizer = optim.SGD(adapted_model.parameters(), lr=self.inner_lr)

support_data = task['support']
query_data = task['query']

# Inner loop 训练
for step in range(5):
inputs, labels = support_data
outputs = adapted_model(inputs)
loss = nn.CrossEntropyLoss()(outputs, labels)

optimizer.zero_grad()
loss.backward()
optimizer.step()

# Query loss(用于元更新)
inputs, labels = query_data
outputs = adapted_model(inputs)
query_loss = nn.CrossEntropyLoss()(outputs, labels)

return query_loss

def _select_support_set(self, driver_data: dict, K: int) -> tuple:
"""选取 K 个校准样本"""
# 从驾驶员数据中选取 K 个样本
inputs = driver_data['inputs'][:K]
labels = driver_data['labels'][:K]

return inputs, labels


# 实际测试
if __name__ == "__main__":
# 创建基础模型
base_model = MultimodalTransformerFusion()

# 创建元学习框架
meta_learner = PersonalizedMetaLearning(base_model, {'K_samples': 5})

# 模拟驾驶员数据
driver_data = {
'inputs': {
'rgb': torch.randn(20, 3, 224, 224),
'eeg': torch.randn(20, 100, 14),
'can': torch.randn(20, 100, 10)
},
'labels': torch.randint(0, 4, (20,))
}

# 个性化校准(K=5, 约 10 秒)
personalized_model = meta_learner.personalize(driver_data, K=5)

print("个性化校准完成(K=5 样本)")
print("论文预期准确率: 81.5 ± 2.3%")

4. 联邦优化

论文方法:

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
"""
联邦优化(Federated Optimization)

论文方法:
- FedAvg 联邦平均
- 隐私保护学习
- 跨驾驶员数据聚合

参考:Scientific Reports 2026 Section 3.3
"""

import torch


class FederatedOptimization:
"""
联邦优化框架

跨驾驶员隐私保护学习
"""

def __init__(self, global_model: torch.nn.Module):
self.global_model = global_model

def federated_train(self, driver_updates: list) -> torch.nn.Module:
"""
联邦训练

Args:
driver_updates: 多个驾驶员的本地更新

Returns:
updated_model: 联邦平均后的模型

FedAvg 方法:
1. 每个驾驶员本地训练
2. 上传模型更新(不上传数据)
3. 联邦平均
"""
# FedAvg: 模型参数平均
global_params = self.global_model.state_dict()

# 联邦平均
for key in global_params.keys():
# 平均所有驾驶员的参数
averaged_param = torch.stack(
[update[key] for update in driver_updates]
).mean(dim=0)

global_params[key] = averaged_param

# 更新全局模型
self.global_model.load_state_dict(global_params)

return self.global_model

def local_train(self, driver_data: dict) -> dict:
"""
本地训练

Args:
driver_data: 单个驾驶员数据

Returns:
local_update: 本地模型更新(不上传数据)
"""
# 本地训练(不上传数据到服务器)
model = self.global_model.clone()
optimizer = torch.optim.Adam(model.parameters(), lr=0.001)

# 本地训练若干轮
for epoch in range(10):
inputs, labels = driver_data
outputs = model(inputs)
loss = torch.nn.CrossEntropyLoss()(outputs, labels)

optimizer.zero_grad()
loss.backward()
optimizer.step()

# 上传模型更新(不上传数据)
return model.state_dict()


# 实际测试
if __name__ == "__main__":
global_model = MultimodalTransformerFusion()
federated = FederatedOptimization(global_model)

# 模拟多个驾驶员的本地更新
driver_updates = [
{'layer1.weight': torch.randn(512, 512)},
{'layer1.weight': torch.randn(512, 512)},
{'layer1.weight': torch.randn(512, 512)}
]

# 联邦平均
updated_model = federated.federated_train(driver_updates)

print("联邦优化完成")
print("隐私保护:不上传驾驶员数据")

CAN 数据分析

CAN 数据特征

用于认知分心检测的 CAN 数据:

CAN 信号 单位 认知分心特征 正常驾驶特征
方向盘角度 deg 波动增加(±5°) 波动小(±2°)
方向盘角速度 deg/s 反应延迟 及时响应
速度波动 m/s 波动增加 稳定
车道偏离 cm 频繁偏离 保持车道
制动次数 count 突然增加 正常

CAN 数据分析代码

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
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
"""
CAN 数据分析用于认知分心检测

论文方法:
- 时序特征提取
- 波动性分析
- 反应延迟检测

参考:Driving-Related Cognitive Abilities Prediction
"""

import numpy as np
from scipy import signal


class CANDataAnalyzer:
"""
CAN 数据分析器

用于认知分心检测
"""

def __init__(self):
# 阈值设定
self.steering_variability_threshold = 5.0 # deg
self.speed_variability_threshold = 2.0 # m/s
self.lane_deviation_threshold = 30.0 # cm
self.reaction_delay_threshold = 1.0 # s

def analyze_driver_behavior(self, can_data: dict) -> dict:
"""
分析驾驶行为

Args:
can_data: CAN 数据字典
- 'steering_angle': 方向盘角度序列
- 'speed': 速度序列
- 'lane_position': 车道位置序列

Returns:
result: {'cognitive_distraction': bool, 'features': dict}
"""
# 提取特征
steering_variability = self._calculate_steering_variability(can_data['steering_angle'])
speed_variability = self._calculate_speed_variability(can_data['speed'])
lane_deviation = self._calculate_lane_deviation(can_data['lane_position'])
reaction_delay = self._estimate_reaction_delay(can_data)

# 认知分心判断
is_cognitive_distraction = (
steering_variability > self.steering_variability_threshold or
speed_variability > self.speed_variability_threshold or
lane_deviation > self.lane_deviation_threshold or
reaction_delay > self.reaction_delay_threshold
)

return {
'cognitive_distraction': is_cognitive_distraction,
'features': {
'steering_variability': steering_variability,
'speed_variability': speed_variability,
'lane_deviation': lane_deviation,
'reaction_delay': reaction_delay
}
}

def _calculate_steering_variability(self, steering_angle: np.ndarray) -> float:
"""
计算方向盘波动

认知分心特征:
- 方向盘修正频繁
- 微小波动增加

论文:方向盘角度标准差 > 5° 提示分心
"""
# 标准差
variability = np.std(steering_angle)

# 频率分析(高频波动)
freq_spectrum = np.fft.fft(steering_angle)
high_freq_power = np.sum(np.abs(freq_spectrum[10:])) # 高频成分

return variability

def _calculate_speed_variability(self, speed: np.ndarray) -> float:
"""
计算速度波动

认知分心特征:
- 速度控制不稳定
- 加减速频繁
"""
# 速度变化率
speed_change = np.diff(speed)

# 标准差
variability = np.std(speed_change)

return variability

def _calculate_lane_deviation(self, lane_position: np.ndarray) -> float:
"""
计算车道偏离

认知分心特征:
- 无法保持车道
- 频繁偏离
"""
# 偏离次数
deviations = np.abs(lane_position) > self.lane_deviation_threshold
deviation_count = np.sum(deviations)

# 平均偏离距离
mean_deviation = np.mean(np.abs(lane_position))

return mean_deviation

def _estimate_reaction_delay(self, can_data: dict) -> float:
"""
估计反应延迟

认知分心特征:
- 对路况反应慢
- 方向盘修正延迟

方法:方向盘变化滞后于车道偏离
"""
steering = can_data['steering_angle']
lane = can_data['lane_position']

# 互相关分析(找延迟)
correlation = signal.correlate(steering, lane)
delay = np.argmax(correlation) - len(lane)

return abs(delay) * 0.1 # 转换为秒


# 实际测试
if __name__ == "__main__":
analyzer = CANDataAnalyzer()

# 模拟 CAN 数据
np.random.seed(42)

# 正常驾驶数据
normal_can = {
'steering_angle': np.random.normal(0, 2, 1000),
'speed': np.random.normal(60, 1, 1000),
'lane_position': np.random.normal(0, 5, 1000)
}

# 认知分心数据
distracted_can = {
'steering_angle': np.random.normal(0, 8, 1000), # 波动大
'speed': np.random.normal(60, 5, 1000), # 速度不稳定
'lane_position': np.random.normal(0, 40, 1000) # 车道偏离
}

# 分析
normal_result = analyzer.analyze_driver_behavior(normal_can)
distracted_result = analyzer.analyze_driver_behavior(distracted_can)

print("正常驾驶:")
print(f" 认知分心: {normal_result['cognitive_distraction']}")
print(f" 方向盘波动: {normal_result['features']['steering_variability']:.2f}°")

print("\n认知分心驾驶:")
print(f" 认知分心: {distracted_result['cognitive_distraction']}")
print(f" 方向盘波动: {distracted_result['features']['steering_variability']:.2f}°")

实验结果

性能对比

论文 Table 2:

方法 LOSO准确率(无个性化) LOSO准确率(K=20个性化) 提升
AML(本论文) 77.8 ± 2.6% 84.0 ± 1.8% +6.2%
Baseline 1 73.6% - -
Baseline 2 75.2% - -

关键成果:

  • K=5 样本(约 10 秒):准确率 81.5 ± 2.3%
  • K=20 样本(约 40 秒):准确率 84.0 ± 1.8%

IMS 开发启示

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
class CognitiveDistractionIMS:
"""
IMS 认知分心检测模块

基于多模态融合 + CAN 数据
"""

def __init__(self):
# CAN 数据分析
self.can_analyzer = CANDataAnalyzer()

# 视线估计(GazeCapsNet)
self.gaze_model = GazeCapsNet()

# 个性化校准
self.meta_learner = PersonalizedMetaLearning(
MultimodalTransformerFusion(),
{'K_samples': 5}
)

def detect_cognitive_distraction(self, inputs: dict) -> dict:
"""
检测认知分心

Args:
inputs: 多模态输入
- 'face_image': 人脸图像
- 'can_data': CAN 数据

Returns:
result: {'state': str, 'confidence': float}
"""
# 视线分析(视觉分心检测)
gaze_result = self.gaze_model(inputs['face_image'])

# CAN 数据分析(认知分心检测)
can_result = self.can_analyzer.analyze_driver_behavior(inputs['can_data'])

# 融合判断
# 视线正常 + CAN 波动 = 认知分心
if not gaze_result['is_distracted'] and can_result['cognitive_distraction']:
return {'state': 'cognitive_distraction', 'confidence': 0.85}
elif gaze_result['is_distracted']:
return {'state': 'visual_distraction', 'confidence': 0.92}
else:
return {'state': 'normal', 'confidence': 0.95}

def personalize(self, driver_data: dict, K: int = 5):
"""
个性化校准

论文方法:K=5 样本(约 10 秒)
"""
self.meta_learner.personalize(driver_data, K)

2. Euro NCAP 扩展建议

当前状态:

  • Euro NCAP DSM 未明确要求认知分心检测
  • 仅要求视觉分心(D-01~D-08)

扩展建议:

功能 Euro NCAP 状态 技术可行性 量产时间
视觉分心检测 ✅ 已要求 2025+
认知分心检测 ❌ 未明确 中(多模态融合) 2027+
个性化校准 ❌ 未要求 高(K=5) 2026+

3. 开发优先级

模块 优先级 开发周期 备注
CAN 数据分析 🔴 P0 2周 认知分心间接检测
多模态融合 🟡 P1 4周 Transformer 融合
个性化校准 🟡 P1 3周 元学习实现
联邦优化 🟢 P2 6周 隐私保护学习

总结

认知分心检测论文核心成果:

  1. 多模态融合 - Transformer + 跨模态注意力
  2. 个性化校准 - K=5 样本即可(约 10 秒)
  3. 联邦优化 - 跨驾驶员隐私保护学习
  4. LOSO 准确率 - 84%(比基线提升 6.2%)

IMS 开发启示:

  • CAN 数据分析可作为认知分心间接检测
  • 多模态融合提高检测准确率
  • 个性化校准解决个体差异问题
  • 联邦优化保护隐私

参考文献

  1. 论文原文:https://www.nature.com/articles/s41598-026-51635-3
  2. ACM 多模态数据集:https://dl.acm.org/doi/10.1145/3519267
  3. CAN 数据分析:https://pmc.ncbi.nlm.nih.gov/articles/PMC11722657/
  4. Euro NCAP DSM:https://www.euroncap.com/protocols/

认知分心检测:多模态融合 + CAN 数据 + 个性化校准方案
https://dapalm.com/2026/07/07/2026-07-07-cognitive-distraction-multimodal-fusion-zh/
作者
Mars
发布于
2026年7月7日
许可协议