CNN-BiLSTM知识迁移电动巴士分心检测:从乘用车到商用车的跨域迁移

论文信息

项目 内容
标题 A Distracted Driving Detection Framework for Electric Buses with Hybrid CNN-BiLSTM and Knowledge Transfer
作者 Zhao, D., Li, H., Fan, K. et al.
期刊 International Journal of Automotive Technology (Springer)
发表 2026年9月
DOI 10.1007/s12239-026-00538-3
关键词 electric bus, distracted driving, CNN-BiLSTM, knowledge transfer, transfer learning

核心创新

首个面向电动公交车的分心驾驶检测框架,通过知识迁移从乘用车数据迁移到公交车场景。解决商用车DMS训练数据不足的问题。


问题定义

乘用车vs商用车的DMS差异

维度 乘用车DMS 电动公交车DMS
驾驶视角 正对方向盘 更高、更远
坐姿 可调角度 固定直立
光照 侧窗/前窗 大面积前窗+左侧门
干扰 乘客少 大量乘客走动
数据集 丰富(DDD/StateFarm) 几乎空白
法规 Euro NCAP 公交运营安全

知识迁移的必要性

1
2
3
4
5
6
transfer_necessity = {
"乘用车数据": "10万+图片, 10类分心行为",
"公交车数据": "几乎为0",
"直接迁移问题": "视角差异大→准确率骤降",
"解决方案": "领域自适应知识迁移"
}

方法详解

1. CNN-BiLSTM架构

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

class CNNBiLSTMTransfer(nn.Module):
"""
CNN-BiLSTM + 知识迁移框架

CNN: 提取空间特征(面部/手部/姿态)
BiLSTM: 建模时序依赖(分心行为序列)

知识迁移: 从乘用车预训练→公交车微调
"""

def __init__(self, num_classes=10, pretrained=True):
super().__init__()

# CNN骨干(ImageNet预训练→乘用车DMS微调)
self.backbone = self._build_backbone(pretrained)

# 时序建模
self.bilstm = nn.LSTM(
input_size=512, # CNN特征维度
hidden_size=256,
num_layers=2,
batch_first=True,
bidirectional=True
)

# 分类头
self.classifier = nn.Sequential(
nn.Linear(512, 128), # BiLSTM双向=512
nn.ReLU(),
nn.Dropout(0.3),
nn.Linear(128, num_classes)
)

def _build_backbone(self, pretrained):
"""构建CNN骨干网络"""
# 使用ResNet-18作为基础
import torchvision.models as models
resnet = models.resnet18(pretrained=pretrained)
# 移除最后的FC层
return nn.Sequential(*list(resnet.children())[:-1])

def forward(self, x):
"""
Args:
x: 视频帧序列, shape=(B, T, C, H, W)
T=帧数(时序窗口)
"""
B, T, C, H, W = x.shape

# CNN逐帧特征提取
x = x.view(B * T, C, H, W)
cnn_features = self.backbone(x) # (B*T, 512, 1, 1)
cnn_features = cnn_features.view(B, T, -1) # (B, T, 512)

# BiLSTM时序建模
lstm_out, _ = self.bilstm(cnn_features) # (B, T, 512)

# 取最后时间步
output = self.classifier(lstm_out[:, -1, :])

return output


# 知识迁移策略
class KnowledgeTransfer:
"""
三阶段知识迁移

Stage 1: ImageNet → 乘用车DMS (源域)
Stage 2: 乘用车DMS → 公交车DMS (目标域)
Stage 3: 公交车DMS微调
"""

def __init__(self):
self.model = CNNBiLSTMTransfer(pretrained=True)

def stage1_source_train(self, car_dms_data):
"""Stage 1: 在乘用车DMS数据集上训练"""
# 使用StateFarm/DDD等公开数据集
optimizer = torch.optim.Adam(self.model.parameters(), lr=1e-4)
# ... 标准训练循环
pass

def stage2_domain_adapt(self, bus_data_limited):
"""Stage 2: 领域自适应"""
# 冻结CNN骨干底层,仅微调高层+BiLSTM
for param in self.model.backbone[:-2].parameters():
param.requires_grad = False

# 对抗域适应
self.domain_discriminator = nn.Sequential(
nn.Linear(512, 256),
nn.ReLU(),
nn.Linear(256, 2) # 源域/目标域
)

optimizer = torch.optim.Adam(
filter(lambda p: p.requires_grad, self.model.parameters()),
lr=1e-5
)
pass

def stage3_finetune(self, bus_data):
"""Stage 3: 在公交车数据上微调"""
# 解冻所有层
for param in self.model.parameters():
param.requires_grad = True

optimizer = torch.optim.Adam(
self.model.parameters(), lr=1e-6
)
pass

2. 分心行为类别

类别 乘用车场景 公交车场景 迁移难度
正常驾驶 ✅ ✅ 容易
手机通话 手持手机 蓝牙耳机 中等
手机短信 低头打字 低头看调度信息 中等
调收音机 操作中控 操作调度终端 困难
喝水 瓶装水 保温杯 容易
与乘客交谈 副驾 全车乘客 困难
操作仪表 方向盘附近 公交专用仪表 困难
调整后视镜 电动调节 手动调整 中等
吸烟 私人行为 禁止行为 困难
拿取物品 手套箱 票据/零钱 中等

实验结果

知识迁移性能

阶段 训练数据 公交车准确率 说明
仅乘用车 10万图片 62.3% 直接迁移效果差
+领域自适应 +1千公交图片 78.5% 显著提升
+微调 +5千公交图片 89.7% 接近可用
从零训练 5千公交图片 71.2% 数据不足
完整三阶段 全部 89.7% 最优

不同类别迁移效果

类别 源域准确率 目标域准确率 迁移下降
正常驾驶 95% 93% -2%
手机通话 92% 85% -7%
手机短信 88% 82% -6%
喝水 90% 88% -2%
与乘客交谈 85% 71% -14%
操作仪表 87% 73% -14%

时序窗口影响

窗口长度 准确率 延迟 说明
5帧 83.2% 167ms 短窗口
10帧 87.5% 333ms 中等
15帧 89.7% 500ms 最优
30帧 90.1% 1000ms 太长

IMS开发启示

1. 商用车DMS部署路线

2. 跨车型迁移指南

迁移方向 数据需求 预期准确率 关键挑战
乘用车→公交 5千图片 89.7% 视角+乘客干扰
乘用车→卡车 3千图片 91% 坐姿差异小
乘用车→出租车 1千图片 93% 几乎相同
乘用车→叉车 8千图片 82% 完全不同场景
公交→有轨电车 2千图片 88% 相似度高

3. 数据效率

训练策略 公交车数据量 准确率 数据效率
从零训练 50,000 92% 1x
三阶段迁移 5,000 89.7% 10x
三阶段迁移 1,000 85.2% 50x
三阶段迁移 500 78.5% 100x

核心价值:知识迁移可将商用车DMS的数据需求降低10-100倍。


总结

CNN-BiLSTM知识迁移框架为商用车DMS提供了可行路径:从乘用车预训练模型出发,通过领域自适应和微调,仅需5千张公交车图片即可达到89.7%准确率。

对IMS的启示:商用车DMS不应从零开始。利用已有的乘用车DMS模型和数据(10万+图片),通过三阶段知识迁移(预训练→域适应→微调),可快速部署到公交、卡车、出租等不同车型。数据效率提升10-100倍,显著降低商用车DMS的部署成本和数据采集难度。