VasuTammisetti/adas-perception-agents

GitHub: VasuTammisetti/adas-perception-agents

融合多传感器的 ADAS 感知系统,通过 PSI 漂移监控代理和 LangGraph 事件响应工作流,自动检测并应对感知模型在环境条件变化时的性能衰退。

Stars: 0 | Forks: 0

# 带有漂移监控代理的 ADAS 感知系统 感知模型在条件改变之前运行良好。夜晚、下雨或驶入一个新的城市,它们就会在没有任何警告的情况下开始漏检。本项目是一个包含摄像头、激光雷达和雷达的 pipeline,它能够注意到输入何时发生变化,并对其进行报告和响应。 在线演示:(https://adas-perception-agents-dblghvnpztbgjvbq4dhbeh.streamlit.app/)。 ## 它的功能 快速路径是一个经过静态校准、量化为 INT8 的 YOLOv8n 检测器,校准使用了真实的 nuScenes 帧。它在 RTX 2070 上以 70 fps 运行,在纯 CPU 上约为 20 fps。 激光雷达点通过完整的校准链投影到相机图像上,因此每个检测目标都能获得一个公制深度。应用会显示“卡车,10.1 米”,而不仅仅是“卡车”。 每个模型都由一个监控代理负责监视。该代理使用冻结的 ResNet-18 对每一帧进行 embedding,利用 PSI(Population Stability Index)将滑动窗口的 embedding 统计信息与参考值进行比较,同时跟踪检测器的置信度分布。它有三种状态。OK 不做任何操作。WARN 提高置信度阈值。DRIFT 建议切换模型变体,并将这些帧标记至重新训练队列中。 当代理触发时,一个 LangGraph workflow 会收集证据,要求 LLM 对可能的原因进行分类,并从固定的白名单中应用缓解措施,或者上报给人工处理。LLM 不能采取白名单之外的任何行动。以下是一份来自夜间演示的真实报告: ``` { "scene": "scene-1077", "diagnosis": { "cause": "night", "confidence": 0.8, "reasoning": "The scene notes indicate it is night, and the embedding PSI values are above the normal ceiling..." }, "action": "switch fast path to night-tuned variant; conf 0.35 -> 0.45", "auto_applied": true } ``` 有一个 Streamlit 应用可用于在 nuScenes 场景、带有实时回放和实时监控的自有行车记录仪视频,或您的网络摄像头上尝试所有这些功能。还有一个带有相同检测器和漂移分析的小型 FastAPI 服务。 ## 漂移检测有效吗? 该代理是在白天的 nuScenes 场景上进行拟合,并在单独的白天场景上进行校准的,这使其将 WARN 设定为 4.40,DRIFT 设定为 5.50。随后它在从未使用过的数据上进行了运行: | 数据流 | PSI | 代理状态 | |-------------------|------------|-------------| | 白天(对照组) | 3.8 到 4.1 | OK | | 夜间场景 1094 | 5.0 | WARN | | 夜间场景 1077 | 5.8 | DRIFT | | 夜间场景 1100 | 6.9 | DRIFT | 对照组保持正常,所有三个夜间场景都被成功捕捉到,且严重程度分级与场景的实际暗度相匹配。完整的逐帧日志位于 drift_demo.csv 中,校准后的阈值位于 drift_thresholds.json 中,报告位于 incidents.json 中。 这些阈值是从预留的正常数据中学习到的,而不是取自常规的 PSI 表。因为教科书上的数值会对所有情况触发警报。这种失败及其修复都记录在提交历史中,这个教训值得一谈:通过在监控器应视为正常的数据上重放确切的生产评分,来校准阈值。 第二个教训:漂移是进行调查的理由,而不是重新训练的理由。像隧道这种短暂的异常情况会采用临时缓解措施。像夜间这种反复出现的情况则应拥有其专属的模型变体。只有具有测得的精度影响且收集到足够数据的持续性漂移,才证明进行重新训练是合理的。 ## 量化问题 将整个模型量化为 INT8 会导致检测结果为零。YOLOv8 检测头执行对精度敏感的边界框解码,无法在 8 位下存活。仅量化计算量约占 90% 的卷积主干网络,并将检测头保持在 FP32,即可在 CPU 上实现 1.3 倍的加速且文件体积缩小 3 倍的同时恢复完全的精度。 ## 运行说明 ``` pip install torch torchvision --index-url https://download.pytorch.org/whl/cu121 pip install -r requirements.txt # 下载 nuScenes v1.0-mini(免费)到 data/nuscenes/ python scripts/visualize_frame.py python scripts/drift_demo.py streamlit run app/streamlit_app.py ``` 在没有数据集的情况下,应用依然可以通过内置的 demo_assets 文件夹运行。 ## 局限性与后续计划 目前,负责事件的 LLM 会从数据集元数据中读取场景注释。下一阶段将引入一个紧凑的 VLM,直接从像素生成这些注释。 用户拍摄的录像没有激光雷达数据,因此仅支持检测。计划通过单目深度估计来填补这一空白。 数据接入层可通过单一的 FrameBundle 接口进行插拔扩展。针对通过网络传输的激光雷达或 ToF 的实时传感器适配器是一个已记录的扩展点。我没有测试过这方面的内容,因为我没有相应的硬件,相比于弄虚作假,我更愿意坦诚说明。 这是一个感知和 MLOps 项目,而不是安全系统。真实汽车中针对帧级别的安全应由冗余的认证栈来保障。这类监控适用于分钟和车队级别的规模。 本项目使用 nuScenes mini、ultralytics、ONNX Runtime、手工实现的 PSI 监控、结合 Groq 的 LangGraph、Streamlit 和 FastAPI 构建。
标签:Kubernetes, YOLOv8, 凭据扫描, 多传感器融合, 大语言模型代理, 模型漂移监控, 目标检测, 自动驾驶, 逆向工具