简介:ISO PAS 8800:2023《道路车辆 安全与人工智能》是国际标准化组织(ISO)发布的公开可用规范草案,由ISO/TC 22/SC 32工作组制定,面向汽车制造商、智驾系统研发人员及安全监管机构。该标准针对自动驾驶与辅助驾驶场景中AI系统的安全性与一致性,统一了术语定义和合规性要求,适用于安全评估、开发流程建设与认证准备。压缩包内为单份PDF全文,共1个文件,大小约5.11MB,可清晰查看前言、引言、范围、规范性引用文件、术语定义、缩写与合规要求等全部章节;第3章术语定义覆盖AI通用、数据相关、安全相关、根因/误差/失效及杂项五类,第4章集中列出缩写,第5章给出合规性条款,便于按章节快速检索。目前已有122人学习下载,无论用于理解车规级AI安全概念,还是作为ISO标准解读、内部培训或技术评审的原始依据,这份草案都具备较高参考价值。
1. 为什么说 ISO PAS 8800 是 AI 上车绕不开的一份“安全工程清单”
一辆车的感知模型在雨夜里把路边隔离墩识别成可通行区域,这种事不是偶发 bug,而是 AI 系统的“日常”。传统软件出问题能定位到代码行,AI 出问题常常连“为什么”都答不上来。ISO PAS 8800(Road Vehicles - Safety and artificial intelligence,2023)就是为这类问题而来的一份安全工程规范。它不是告诉你哪个算法更好,而是把数据、运行设计域(ODD)、模型监控、验证确认这些环节,变成一套可评审、可审计的要求。对做智能驾驶的算法、系统、功能安全工程师来说,它是把 AI 安全从“玄学”变成“工程”的桥。
2. ISO PAS 8800 和 ISO 26262、ISO 21448 的边界:你的项目到底该听谁的
很多团队第一次听到 PAS 8800,第一反应是“又来一份标准”。实际上它没有推翻谁,而是在既有安全体系上补了一层。搞清楚标准之间的分工,你才知道项目里的每一份文档该往哪个框架里放。
2.1 标准之间的分工:功能安全管“失效”,SOTIF 管“误用”,PAS 8800 管“AI 不确定性”
ISO 26262 管的是功能安全,处理系统性失效和随机硬件失效:控制器坏了、软件写错了、信号短路了,它给出一套从需求到验证的生命周期要求。ISO 21448 管的是预期功能安全(SOTIF),处理的是“没有失效但行为不安全”的情况:传感器没坏,但算法在特定场景下能力不足,或者驾驶员误用了系统。这两者的共同点是,它们默认系统的行为是可解释、可预测的,问题出在“设计没做对”或“环境超预期”。
PAS 8800 面对的是 AI 特有的不确定性:同一个模型,输入稍微偏移一点,输出可能完全不可信;数据集里没见过的场景,模型给个高置信度的错误结果;模型更新一次,之前的验证结论全要重来。这些风险既不是 26262 的“失效”,也不是 21448 的“误用”能完全覆盖的。PAS 8800 的做法是要求你把 AI 组件单独拎出来,做安全相关分析,并在系统层面建立监控与降级策略。
| 标准 | 管什么 | 典型对象 | 不覆盖什么 |
|---|---|---|---|
| ISO 26262 | 系统性失效、随机硬件失效 | 硬件、基础软件、功能逻辑 | AI 模型的黑盒行为、数据分布偏移 |
| ISO 21448 | 预期功能不足、误用 | 感知/决策算法与场景匹配度 | 模型内部的表征漂移、非确定性输出 |
| ISO PAS 8800 | AI 特有的风险 | ML 模型、数据集、监控机制 | 传统硬件的随机失效 |
2.2 PAS 8800 补上的四个空白:数据、泛化、黑盒、非确定性
传统车规开发里,数据只是“测试输入”,不是安全分析对象。但 AI 系统的能力完全由数据塑造,数据偏差就是安全隐患。PAS 8800 要求你把训练数据当成安全相关项来管理:来源是否清晰、标注是否一致、各类场景占比是否合理的,都要有据可查。
泛化是第二个空白。模型在测试集上表现好,不代表在真实世界中表现好。规范要求你论证模型的泛化边界,而不是只报一个平均精度。做法上通常包括分布偏移检测、OOD(分布外输入)识别、以及在 ODD 边界附近的专项测试。
黑盒问题更直接。深度学习模型很难被逐行审查,你没法通过代码评审证明它安全。PAS 8800 的思路是“不要求你解释每一层神经元在算什么,但要求你说明在什么情况下模型可能出错、出错后系统怎么兜底”。这实际上把“可解释性”从技术理想降级成了工程要求。
非确定性也很容易忽略。同一个模型、同一帧输入,在 GPU 上跑两次结果可能不一样。规范会要求你分析这种随机性对安全功能的影响,必要时通过投票、冗余等机制吸收掉。
2.3 怎么判断你的项目是否需要 PAS 8800:三类场景的选型判断
判断标准不看你的是 L2 还是 L4,而是看两点:系统里有没有机器学习组件,以及这个组件是否参与安全相关功能。第一类,感知模型直接驱动 AEB 或主动安全决策,这必须按 PAS 8800 的要求做分析。第二类,模型输出只是辅助提示,如疲劳监测或路况播报,输出错误不会直接导致危害,但可能间接影响驾驶员行为,也需要做风险评估,强度可以降低。第三类,纯规则逻辑或传统信号处理,不涉及机器学习,就不需要硬套 PAS 8800,但要说明“为什么不需要”。
我一般建议项目启动时先做一次“AI 安全相关项识别”,把每个 AI 组件标成直接安全相关、间接安全相关、非安全相关三类。这个分类决定了你后续要投入多少资源。很多团队一上来就急着写文档,结果分析深度和风险等级完全不匹配,评审时反而被挑战。
3. 按 ISO PAS 8800 拆解 AI 安全开发流程:ODD、数据、泛化与运行监控怎么落地
标准落到项目里,不是让你把文档写得更多,而是把开发流程里的关键节点加上安全视角。这一章讲四个必做的动作:定义 ODD、论证数据、设计监控、组织验证。
3.1 系统定义与 ODD 声明:ODD 写多细,安全论证就有多实
ODD(Operational Design Domain,运行设计域)是 AI 安全的地基。你的系统只在什么条件下运行,决定了你要验证什么、监控什么。ODD 写得太粗,比如只写“高速公路”,那雨雾、施工、逆光这些子场景到底算不算范围内,完全说不清;写得太细,产品没法用,任何一个属性超标就要退出。
| ODD 属性维度 | 示例取值 | 为什么影响安全 |
|---|---|---|
| 道路类型 | 高速、城市快速路、封闭园区 | 不同道路的目标物和规则差异大 |
| 天气 | 无雨、小雨、大雨、雪 | 传感器性能与模型鲁棒性直接相关 |
| 光照 | 白天、黄昏、夜间、逆光 | 感知模型的错误模式差异大 |
| 交通参与者 | 行人、自行车、大型车辆 | 需要针对弱势道路使用者专项验证 |
| 速度范围 | 0-60 km/h、60-120 km/h | 制动距离与感知范围要求不同 |
| 基础设施 | 有车道线、无车道线、施工区域 | 车道保持与规划的依赖条件 |
ODD 声明不是写一段话就完事,要建一个属性表,每个属性给出边界和判定方法。比如“雨天”怎么判定,是看雨量传感器阈值,还是看雨刷档位。边界判定的可操作性,直接决定运行监控能不能实现。
另外一个容易漏的点是 ODD 变更管理。ODD 范围扩大一小步,验证工作量和风险都是指数级上升。我见过某项目把运行范围从“白天”扩展到“夜间”,只加了几百张夜间图,就宣称支持夜间,结果夜间误检率翻了三倍。ODD 变更要按安全变更走评审,不能只在产品文档里改一行字。
3.2 数据与泛化要求:训练数据、验证数据与 ODD 覆盖度的量化方法
PAS 8800 视角下,数据不是“越多越好”,而是要论证充分性和相关性。充分性指数量够不够支撑统计置信度,相关性指数分布和真实 ODD 是否匹配。很多团队喜欢报“我们有一千万张图”,但一算 ODD 覆盖度,夜间高速场景可能只有几百张,这个比例就是风险。
| 数据指标 | 计算方式 | 安全阈值参考 | 说明 |
|---|---|---|---|
| 类别样本量 | 每类目标物的标注框数 | 不低于统计置信要求,建议按 99% 置信度反推 | 极端类别(如异型车辆)容易不足 |
| 标注一致性 | Cohen's Kappa 或 IoU 一致性 | Kappa > 0.8,IoU 一致性 > 0.9 | 标注噪声会直接污染模型评估 |
| 近重复率 | 图像哈希去重后重复占比 | < 10% | 高重复率说明有效信息量被高估 |
| ODD 覆盖度 | 每个 ODD 属性组合的样本占比 | 主组合覆盖 > 95%,边界组合另行评估 | 用 ODD 属性表反向统计数据集 |
| 分布漂移指数 | PSI 或 KL 散度,比较训练集与目标场景 | PSI < 0.1 视为稳定,0.1-0.25 需要解释 | 用真实道路采集数据做对照 |
数据验证的常见做法是建一张“数据地图”:把 ODD 属性表当作维度,把每个样本打上标签,然后统计覆盖矩阵。这个矩阵就是你和评审员对话的基础。如果某个 ODD 组合覆盖度不够,你有两个选择:要么补数据,要么缩小 ODD 声明。
这里有一个常被忽视的点:训练集、验证集、测试集必须严格独立。不少团队用同源数据切分,模型评估结果虚高,放到实车上就露馅。数据溯源和版本管理要做得像代码管理一样严格,每一版训练数据的构成、清洗规则、标注版本都要能追溯。
3.3 运行时监控与安全降级:该盯哪些指标,降到什么状态
AI 系统的行为不可能在开发阶段验证完,运行时监控就是兜底机制。监控分四层:输入层看传感器状态和环境属性是否仍在 ODD 内;模型层看置信度、OOD 得分、特征分布是否异常;行为层看输出是否有跳变、误检、漏检;系统层看延迟和资源占用是否稳定。
| 监控层级 | 典型指标 | 异常信号 | 触发动作示例 |
|---|---|---|---|
| 输入层 | 传感器故障码、天气分类、光照估计 | ODD 属性超界 | 提示用户接管,限制功能 |
| 模型层 | 置信度均值、熵、OOD 得分、ECE 校准误差 | 置信度与准确度脱钩 | 降低决策权重,进入保守模式 |
| 行为层 | 帧间跳变率、误检率、预测误差 | 输出不连续或违背物理约束 | 丢弃异常输出,回退到上一可信帧 |
| 系统层 | 推理延迟、CPU/GPU 占用、看门狗 | 延迟超预算 | 降频或切换冗余计算通路 |
降级策略的关键是定义“最小风险状态”(MRC)。比如车道保持功能发现模型置信度持续偏低,可以先提示驾驶员接管,再逐步减速,最后在车道内停车。每一级降级都要有触发条件、执行动作和退出条件,而且要经过安全评审。常见错误是只做了“提示接管”这一级,提示之后驾驶员没反应怎么办,没有下文。
监控本身也要被监控。指标采集链路如果只在实验室验证过,真车上因为网络延迟、存储满、时间不同步等原因丢数据,那监控就是摆设。我一般建议把监控模块当作安全相关软件来开发,做故障注入测试,验证它在异常情况下还能不能可靠记录和上报。
3.4 验证与确认的深度:为什么“测试够了”不是一句能自证的话
V&V 是安全论证的证据来源,但“测了多少公里”“跑了几万个 case”本身没有意义,关键是你覆盖了什么、发现了什么、怎么处理的。PAS 8800 思路下的验证,要把场景放在中心位置,而不是以里程为中心。
场景分三级:功能场景是抽象描述,比如“夜间城市道路遇横穿行人”;逻辑场景是参数化描述,把车速、距离、光照、雨量等参数标出取值范围;具体场景是采样出来的实际输入序列。验证要覆盖三类场景,并且把覆盖矩阵和 ODD 属性表对应起来。
| 验证证据类型 | 要回答的问题 | 常见形式 |
|---|---|---|
| 场景覆盖矩阵 | 每个 ODD 属性组合是否都测过 | 表格或数据库查询结果 |
| 边界与对抗测试 | 在 ODD 边界附近和对抗条件下表现如何 | 专项测试报告、对抗样本集 |
| 仿真与在环结果 | 在可控条件下行为的统计表现 | 仿真里程报告、HIL 报告 |
| 实车结果 | 真实环境的性能与监控触发情况 | 实车测试日志、事故报告 |
| 失效分析 | 已知失效模式的严重度和发生概率 | FMEA、故障树分析 |
验证结论要落到“残余风险”上。你不可能证明系统绝对安全,但要说清楚:哪些风险已经被测试覆盖、哪些风险通过监控兜底、哪些残余风险是组织层面接受的。这三句话写清楚,评审就成功了一大半。
如果验证过程中发现模型在某个场景下表现不稳定,不要只调阈值掩盖问题,要回到数据、模型、ODD 三个层面找根因。是因为这个场景数据太少,还是模型结构不适合,还是 ODD 声明本身就包含了不该包含的场景,处理方式完全不同。
4. 把 PAS 8800 签进项目流程:安全案例、评审检查单与工具链选型
标准落地最大的阻力不是技术,而是流程。这一章讲怎么把 PAS 8800 的要求翻译成项目里的文档结构、评审问题和工具选型。
4.1 安全案例要讲一个“能自洽的故事”:AI 安全文档结构怎么组织
安全案例(Safety Case)是向评审员证明系统安全的载体。很多团队写的安全案例是文档堆砌,把需求、测试报告、代码说明拼在一起,没有任何逻辑链。评审员找不到“为什么这些证据能证明这个声明”。
一个合格的安全案例至少要包含七层内容:系统描述、安全相关 AI 功能清单、风险分析结果、安全声明、论据、证据、假设与限制。其中最关键的是安全声明和论据之间的推导:你声称“感知模型在 ODD 内漏检率低于安全阈值”,就得给出发这个声称的依据,包括训练数据分布、测试覆盖、监控指标。
安全案例还要写清楚假设与限制。比如“模型仅支持乘用车检测,不支持动物检测”,这不是认错,而是明确边界。边界清晰反而比含糊其辞更容易通过评审,因为评审员能确认你的论证范围。
文档结构可以用一个简单的编号体系来管理,比如 S(声明)、A(论据)、E(证据)三层,每层都建立引用关系。这样一张表就能看出安全案例是否完整:有没有声明没有论据、有没有论据没有证据、有没有证据已经过期。评审前先自查一遍引用完整性,能省掉大量评审现场的解释工作。
4.2 AI 安全评审检查单:一次评审该问算法团队的十个问题
评审是 PAS 8800 落地的关键动作。问题不能停留在“模型精度多少”,要深入到安全逻辑。我整理了十个在评审中高频出现的问题。
| 评审问题 | 为什么要问 | 通过的表现 |
|---|---|---|
| ODD 是怎么定的,依据是什么? | ODD 决定后续所有验证和监控的范围 | 有属性表,且每个属性有判定方法 |
| 最难场景里数据占比多少? | 平均指标会掩盖长尾风险 | 能给出难度分层统计,最难场景有专项说明 |
| 训练集和测试集怎么保证独立? | 数据泄漏会导致评估虚高 | 有数据血缘和去重记录 |
| 模型校准误差是多少? | 置信度不可信,降级策略就失效 | 有 ECE 或可靠性图,且误差可接受 |
| OOD 检测阈值怎么定的? | 阈值决定误报和漏报的平衡点 | 阈值设定有数据支撑,且有评审记录 |
| 降级策略触发条件是什么? | 兜底机制要明确可执行 | 每级降级有触发、动作、退出条件 |
| 对抗样本测过吗? | 鲁棒性不足是感知模型的通病 | 有对抗测试报告,且未覆盖项已登记 |
| 模型更新走什么流程? | 模型迭代可能引入回归 | 有配置管理和回归测试机制 |
| 监控指标和哪些失效模式关联? | 监控不是摆设,要对应风险 | 监控指标都能映射到风险条目 |
| 残余风险谁批准接受的? | 安全责任要落实到决策者 | 有明确的批准记录 |
这十个问题不需要一次全过,但每个 AI 安全相关项在开发周期里至少要完整回答一轮。回答不出来的地方,就是风险所在。
4.3 工具链怎么选:数据管理、MLOps、监控三件套的判断标准
工具链不是 PAS 8800 的强制要求,但没有工具支撑,文档和证据根本维护不住。数据管理工具要有版本、血缘、标注一致性统计,不能只当一个图片仓库。MLOps 平台要能复现每一次模型训练和评估,模型版本和数据集版本的对应关系必须清晰可查。
运行时监控工具要能提供回放能力。实车上触发了一次降级,事后要能把当时的输入、模型输出、监控指标全部拉出来逐帧分析。没有回放能力,你就只能靠驾驶员描述,安全分析无从谈起。
选工具的判断标准就三条:能不能支撑审计追溯、能不能自动化生成证据、能不能和现有开发流程集成。很多团队被漂亮的可视化界面吸引,结果数据血缘不完整、API 不开放、自动化导出报告的能力几乎没有,选完型还得手动整理证据,得不偿失。
5. AI 安全落地避坑指南:五个让项目翻车的常见问题
这一章是从实际踩坑里提炼出来的。每一条都见过不止一次,写出来供你对照自查。
5.1 ODD 写成“全能驾驶”,安全声明没法验证
现象:ODD 声明写“适用于各种城市道路场景”,既没有天气边界,也没有速度边界。到了验证阶段,发现测试场景根本覆盖不完;评审时被问“雨天城市道路的急刹车场景测了吗”,团队答不上来。
原因:产品想保留灵活度,不敢把 ODD 写窄,怕影响卖点。结果就是安全边界模糊,所有验证都变得无效。
解决:把 ODD 拆成属性表,按“当前系统真实能力”来定义,而不是按“产品愿景”来定义。先用现有测试和仿真数据反推哪些场景下系统表现稳定,再定边界。宁可先声明窄一点,把说到的场景做到位,再逐步通过变更流程扩展。
5.2 数据集只比数量不比分布,泛化评估失真
现象:团队汇报“训练数据 500 万张,其中包含夜间、雨雾、隧道等场景”。评审员追问各场景分布比例,发现夜间占比不到 1%,且集中在城市道路,高速夜间几乎没有。
原因:数据团队按“能收集到什么”来攒数据,没有按 ODD 属性来规划数据采购和采集。数量指标看起来漂亮,但安全相关场景的统计置信度完全不够。
解决:建 ODD 覆盖矩阵,把每个主组合的样本量目标定出来,再反推采集计划。缺哪块补哪块,比如高速夜间场景不足,就专项采集或者用高保真仿真补,而不是用总数掩盖缺口。
5.3 用准确率代表安全性,指标与风险脱钩
现象:所有汇报只说“mAP 从 0.82 提升到 0.87”,没有任何安全相关分析。一次评审中,算法负责人被问到“漏检一个行人”,和“误检一个路牌”,哪个风险更大?答不上来。
原因:算法团队习惯用通用指标汇报,平均指标把关键场景的表现抹平了。mAP 把所有类别和所有难度的检测结果混在一起算,一个在晴天表现优秀、在雨夜严重退化的模型,mAP 可能依然好看。
解决:按安全相关场景拆分指标,比如行人近距离漏检率、夜间静态障碍物误检率。每个安全相关指标要关联到具体风险条目,并有阈值和触发动作。指标不是为了汇报,是为了暴露风险。
5.4 监控指标上线了,但没人定义“谁来响应”
现象:系统上线了 OOD 检测和置信度监控,告警也触发过几次。但告警日志没人看,有一次连续触发 20 次降级,工程师到月底复盘数据时才发现。
原因:监控模块被当作“研发数据采集工具”来部署,没有把它当作安全机制来管理。指标触发后走什么流程、谁负责决策、多快响应,全都没有定义。
解决:把监控告警和降级动作写进安全机制文档,定义响应角色和时限。触发告警后要记录决策过程,是继续运行、降级还是召回,都要有迹可循。关键监控指标要纳入团队的例行安全会议,而不是只在月底导出看一次。
5.5 安全评审只过流程,不碰技术假设
现象:评审会开了,检查单一项项打勾,但没有人质疑过“置信度大于 0.9 就认为检测可靠”这个假设。直到实车测试发现大量高置信度错误,大家才发现模型校准从来没做过。
原因:评审员往往来自非算法背景,只敢确认文档齐不齐,不敢挑战技术细节。算法团队也习惯用复杂术语把问题包装过去,比如“我们用了一个新架构,效果提升明显”,被追问细节时含糊带过。
解决:评审清单里明确加入“校准评估”“失败样例分析”“边界条件测试”这类必须展示技术证据的条目。评审也要引入对抗性格,专门有人扮演“挑刺者”,盯着数据、指标和假设提问,而不是让评审会变成流程确认会。如果内部没有合适人选,可以请外部专家参与一轮独立评审,成本不高,但往往能发现团队习以为常的盲区。
6. 用一张“指标-风险矩阵”反向审查你的 AI 系统
如果你觉得 PAS 8800 的体系太大,不知道从哪儿入手,一张指标-风险矩阵是最快的抓手。我每接手一个 AI 子系统,第一件事就是让团队把这张表填出来。它能把算法指标、安全风险和响应机制串成一条线,评审时也一眼能看出系统有没有兜底。
矩阵的列包括:指标名称、所属层级、关联风险、失效阈值、监控方式、触发动作、责任人。行就是系统里能说出来的每一项关键指标。以感知模块为例,可能的行有行人漏检率、夜间误检率、OOD 触发率、推理延迟、帧间跳变率等。每填一行,都要回答“这个指标到底在防什么风险”,回答不出来就说明这个指标与安全脱钩了。
填表时最容易踩坑的是阈值。失效阈值不能拍脑袋定,要用历史数据统计取一个“正常分布”的边界,再叠加安全裕量。比如正常行驶时行人漏检率在万分之几水平,阈值可以设在千分之一,触发了就说明系统状态异常。阈值定完要过评审,记录设定理由,后续调阈值也要走变更审批。
矩阵填充之后,建议做一次“反向评审”:不做新增工作,只看现有系统能不能填满这张表。填不满的地方,要么是监控缺失,要么是风险没有被识别,要么是责任没有落实。这个动作通常能暴露系统里最虚的部分,而且比从头做一次完整安全分析省力得多。
这套方法的边界我再说一句:它能帮你找出漏洞,但代替不了完整的 V&V,也不等于你满足了 PAS 8800 的全部要求。它适合做日常迭代的守门员,不适合做项目最终的定论。我现在已经把这张矩阵作为团队内部每个模型迭代上线的必填项,模型性能再高,矩阵没有闭环也不允许发布。这个习惯帮我挡掉了不少后面才爆的问题,希望你也能用上,希望帮到你。
本文还有配套的精品资源,点击获取