Aptiv摄像头乘员分类系统:FMVSS 208满分方案解析

概览

在AutoSens 2026上,Aptiv展示了其Advanced Occupancy Classification软件系统。该方案使用单内舱摄像头,在FMVSS 208测试中达到100%准确率,并将系统成本降低40%(移除座椅压力传感器)。

技术方案

系统架构

分类能力

类别 子类 检测依据 FMVSS 208
成人 成人坐姿正常 身体尺寸+姿态 ✅ 正常部署
儿童 儿童安全座椅(后向) CRS检测 ✅ 禁用
儿童 儿童安全座椅(前向) CRS检测 ✅ 降级
婴儿 婴儿座椅 CRS检测 ✅ 禁用
物体 购物袋/背包 尺寸+形状 ✅ 禁用
空座 无人 无人体特征 ✅ 禁用

与传统方案对比

维度 传统压力传感器 Aptiv摄像头
传感器 座椅压力传感器阵列 内舱摄像头(已有)
额外BOM $10-15/座椅 $0(利用已有OMS摄像头)
安装 需集成到座椅 无需额外安装
FMVSS 208 ~95% 100%
成本节省 — 40%
维护 传感器老化 软件更新
扩展性 仅压力数据 可扩展更多功能

代码实现

乘员分类模型

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
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
import torch
import torch.nn as nn
from typing import Dict, List, Tuple

class OccupantClassifier(nn.Module):
"""
Aptiv风格的乘员分类模型

基于2D姿态估计+尺寸分析
输入:内舱摄像头帧
输出:乘员类别+置信度

类别:adult, child_fwd, child_rear, infant, object, empty
"""

def __init__(self, num_classes: int = 6):
super().__init__()

# 骨干网络(轻量化,适合边缘部署)
self.backbone = nn.Sequential(
# 简化版MobileNet
nn.Conv2d(3, 32, 3, stride=2, padding=1),
nn.BatchNorm2d(32),
nn.ReLU6(inplace=True),

# Depthwise Separable Conv
nn.Conv2d(32, 32, 3, groups=32, stride=1, padding=1),
nn.Conv2d(32, 64, 1),
nn.BatchNorm2d(64),
nn.ReLU6(inplace=True),

nn.Conv2d(64, 64, 3, groups=64, stride=2, padding=1),
nn.Conv2d(64, 128, 1),
nn.BatchNorm2d(128),
nn.ReLU6(inplace=True),

nn.Conv2d(128, 128, 3, groups=128, stride=1, padding=1),
nn.Conv2d(128, 256, 1),
nn.BatchNorm2d(256),
nn.ReLU6(inplace=True),

nn.AdaptiveAvgPool2d(1)
)

# 分类头
self.classifier = nn.Sequential(
nn.Dropout(0.2),
nn.Linear(256, 128),
nn.ReLU6(inplace=True),
nn.Linear(128, num_classes)
)

# 尺寸回归头(辅助任务)
self.size_regressor = nn.Sequential(
nn.Linear(256, 64),
nn.ReLU6(inplace=True),
nn.Linear(64, 4) # (height_ratio, width_ratio, shoulder_w, head_size)
)

# CRS检测头(儿童座椅检测)
self.crs_detector = nn.Sequential(
nn.Linear(256, 64),
nn.ReLU6(inplace=True),
nn.Linear(64, 3) # (no_crs, rear_facing, forward_facing)
)

def forward(self, x: torch.Tensor) -> Dict[str, torch.Tensor]:
"""
Args:
x: (B, 3, 224, 224) 座椅区域裁剪

Returns:
class_logits: (B, 6) 分类logits
size_pred: (B, 4) 尺寸预测
crs_pred: (B, 3) CRS检测
"""
features = self.backbone(x)
features = features.flatten(1)

class_logits = self.classifier(features)
size_pred = torch.sigmoid(self.size_regressor(features))
crs_pred = self.crs_detector(features)

return {
'class_logits': class_logits,
'size_pred': size_pred,
'crs_pred': crs_pred
}


class OccupantClassificationSystem:
"""
完整乘员分类系统

决策逻辑:
1. 检测座椅是否有人
2. 如有人,检测是否有CRS
3. 如有CRS,判断前后向
4. 如无CRS,根据尺寸判断成人/儿童
5. 根据类别决定安全气囊策略
"""

CLASS_NAMES = ['adult', 'child_fwd', 'child_rear',
'infant', 'object', 'empty']

AIRBAG_POLICY = {
'adult': 'normal_deploy',
'child_fwd': 'reduced_deploy',
'child_rear': 'disable',
'infant': 'disable',
'object': 'disable',
'empty': 'disable'
}

def __init__(self, confidence_threshold: float = 0.85):
self.model = OccupantClassifier()
self.threshold = confidence_threshold
self.model.eval()

def classify(self, seat_image: torch.Tensor) -> Dict:
"""
分类单个座椅

Args:
seat_image: (1, 3, 224, 224) 座椅区域图像

Returns:
classification: 乘员类别+安全气囊策略
"""
with torch.no_grad():
output = self.model(seat_image)

# 分类
class_probs = torch.softmax(output['class_logits'], dim=-1)
confidence, predicted = torch.max(class_probs, dim=-1)

class_name = self.CLASS_NAMES[predicted.item()]
conf = confidence.item()

# CRS检测
crs_probs = torch.softmax(output['crs_pred'], dim=-1)
crs_type = ['no_crs', 'rear_facing', 'forward_facing'][
torch.argmax(crs_probs, dim=-1).item()
]

# 尺寸估计
size = output['size_pred'][0].tolist()

# 决策
airbag = self.AIRBAG_POLICY.get(class_name, 'disable')

# 置信度检查
if conf < self.threshold:
# 低置信度→保守策略
airbag = 'disable'
class_name = 'uncertain'

return {
'class': class_name,
'confidence': conf,
'crs_type': crs_type,
'size': {
'height_ratio': size[0],
'width_ratio': size[1],
'shoulder_width': size[2],
'head_size': size[3]
},
'airbag_policy': airbag
}


# 测试
if __name__ == "__main__":
system = OccupantClassificationSystem(confidence_threshold=0.85)

total_params = sum(p.numel() for p in system.model.parameters())
print(f"模型参数量: {total_params:,} ({total_params/1e6:.2f}M)")

# 模拟测试
scenarios = {
"成人正常坐姿": torch.randn(1, 3, 224, 224),
"后向儿童座椅": torch.randn(1, 3, 224, 224) * 0.8,
"空座椅": torch.randn(1, 3, 224, 224) * 0.3,
"购物袋": torch.randn(1, 3, 224, 224) * 0.5,
}

print(f"\n{'场景':15s} | {'类别':10s} | {'置信度':>6} | {'CRS':>15} | {'气囊策略'}")
print("-" * 70)

for name, img in scenarios.items():
result = system.classify(img)
print(f"{name:15s} | {result['class']:10s} | "
f"{result['confidence']:6.1%} | {result['crs_type']:>15} | "
f"{result['airbag_policy']}")

FMVSS 208测试要求

测试场景

场景编号 乘员 要求 Aptiv结果
1 第5百分位女性(小成人) 正常部署 ✅
2 第50百分位男性(标准成人) 正常部署 ✅
3 6岁儿童(前向CRS) 降级/禁用 ✅
4 1岁婴儿(后向CRS) 禁用 ✅
5 3岁儿童(前向CRS) 降级/禁用 ✅
6 空座椅 禁用 ✅
7 物体(6kg购物袋) 禁用 ✅

与Euro NCAP的关联

FMVSS 208 Euro NCAP OMS 对齐方式
乘员分类 OMS功能 摄像头方案通用
婴儿CRS检测 CPD加分项 CRS检测可辅助CPD
空座检测 OMS基础功能 同一算法

IMS开发启示

1. 摄像头替代压力传感器的路径

步骤 任务 依赖
1 座椅区域裁剪+归一化 摄像头标定
2 轻量分类模型训练 标注数据
3 CRS检测子模型 CRS图像数据
4 尺寸回归辅助任务 标注尺寸
5 FMVSS 208测试对标 测试场地
6 量产部署 芯片适配

2. 与CPD的协同

功能 OOC CPD 协同
检测有无人 ✅ ⚠️ OOC提供基线
检测儿童CRS ✅ ❌ OOC辅助CPD
检测毯下婴儿 ❌ ✅ 雷达补充
检测呼吸 ❌ ✅ 雷达补充
分类成人/儿童 ✅ ❌ OOC核心

3. 成本分析

方案 传感器成本 安装成本 总成本
压力传感器(每座) $10-15 $5-10 $15-25/座
Aptiv OOC(摄像头) $0(利用已有) $0 $0/座
5座车节省 — — $75-125

总结

Aptiv的摄像头乘员分类方案代表了”软件定义安全”的趋势:用AI算法替代专用传感器硬件,在FMVSS 208达到100%准确率的同时降低40%成本。

对IMS的启示: OMS不需要独立的压力传感器,利用已有的内舱摄像头+AI分类模型即可实现乘员分类。这与UWB CPD的”软件升级”思路一致——最大化利用已有硬件的软件能力。

信息来源: AutoSens 2026, EE Times, Aptiv官方