ADAS数据平台实践总结

        随着汽车智能化发展,adas数据分析变得越来越重要,此处根据个人认知对adas数据平台进行分析。

  • 概述

        adas数据一般来自于汽车厂商发布新车的前的 实际道路测试(路试),相对于其他数据,具有如下特征:

1.数据全面,有准备的录制数据,分析数据要求多方面,如宏观、微观、问题分析、场景分析,及基于数据的模型训练

2.数据量大,通常一轮路试周期在 2周-1个月左右 

3.数据格式多样化,大部分会基于autosar协议,但可演变出多种数据格式,且如有现场融合或特斯拉类,不遵守该协议的情况。

4.全为数字格式

5.具有时序性

6.可进行切割

        基于以上分析,首先要对数据进行统一格式化,制定数据分析的输入标准。其次因具有不同维度的分析,采取的分析方案或知识域也不一样,所以尽量采用跨知识域存储及数据处理方案。最后,对分析结果能进行快速回溯验证。

  • 统一输入标准

        将不同的原始文件(路试数据)通过自有规则,转换为统一格式,该部分可以在数据分析前完成,从而和汽车路试领域解耦,该部分我们叫做“预解析”。那预解析完以怎样的格式存储呢,这是数据平台最重要的点。

        举一个业务用例图:

        用户 ---- 上传路试数据 ---- 转换为标准数据 ---- 标准数据再处理(运行各种模型)---- 切片(筛选出关键事件、场景,统计宏观数据)----  对场景、关键事件进行回溯验证 ---- 出具报告。该流程是数据分析人员的基本作业流程,包含“3进3出”

进 
1原始文件录入原始文件转标准格式前  获取原始数据
2标准格式存储运行模型前 获取标准格式数据
3回写标准数据格式切片场景前 获取标准格式数据

 可以看到 第1个进出 是没有选择的,本身就是统一输入标准。第2、3个进出就比较有讲究,相当于数据的回写,这不就是我们日常使用的数据库吗?初期我也是这么认为的,并且找了一个iotdb(时序库)作为存储,运行时从中存取数据,但很快发现问题:运行模型会将几乎所有数据运行一次,且有的模型还是“数据顺序”要求。不仅如此,切片逻辑也需全量扫描,比如定位一个场景,总不能让路试工程师哪个小本本记录,xx秒开始泊车,xx秒开始上坡,xx秒开始S弯吧。。。除此之外,还会通过数据进行相关预测,甚至做模型回灌和训练,可以看到这其中已经不仅仅是传统的数据分析,还有大量的 “数据挖掘”概念。由此得出一个结论,我们的数据是用于多方面应用的,应当具有很好的开放性。

综合以上得出两点:1.数据运行过程会进行近全量处理 2.数据访问应具有很好的开放性。

  • 存储及数据处理方案

         基于以上总结,处理全量数据,采用“存取一体”的lambda架构是最合适的。数据开放性上主要在于 支持不用语言高效访问,访问包含访问 时序数据、结果数据、以及中间数据。

实际应用中,我们最终基于3种方案进行了对比与选择,在此分享。分别是:基于arrow文件+spark(或等价的)、基于iotdb时序库、基于TDengine时序库。以下对三种方案做对比,分别是:全量处理方案、开放性、潜在风险

        基于arrow文件+spark(或等价的)方案:

                全量处理。采用 lambda架构。批处理层:数据参数,将arrow从云存储下载到本地;加速层:从本地load数据,进行自定义处理,回写arrow,回传云存储;服务层:按需下载云存储arrow文件,读取展示

                开放性。原始文件访问---云端下载;过程文件---加速层程序控制;结果文件---下载访问。由于arrow支持多语言快速存取,访问速度会很快。

                潜在风险。该方案采取使用时下载文件,非常依赖云存储,对云存储和宽带稳定性有较高要求。其次由于未像传统spark使用方式,将实际原始数据传输,增加了一层映射,代码难度增加。

        基于iotdb时序库的方案:

                全量处理。由数据库架构完成存入操作,但由于提供了TSfile挂载,可在外部写完TSfile后,挂载到数据库。相对数据库直接入库,省略了wal缓冲及记录,索引文件构建等操作,极大增加了插入速度。数据取出:java或C等只能将数据按一列一列取出,但python可直接传输numpy数据结构,传输量大大减少。非外部模型(simulink模型等)下可以采用数据库内置引擎。

                开放性:原始文件访问---通过sql查询访问,除python外,速度较慢;过程文件---如取出操作则程序可控,采用内置引擎则无法提供;结果文件---通过sql访问,除python外,速度较慢。

                潜在风险:全量处理时,需要控制数据总量,毕竟机器的空间是有限的,可以通过卸载存储组(类似mysql 的某个db)的方式,达到基于存储组的 “无限量”的云数据库,但恢复时需要等待较长时间(实际1-5分钟)。当需要大批量数据查询时,查询时长会增加,比如某个路试一天数据360亿个数据点,200多G,要传输多久??

        基于TDengine时序库方案:

                全量处理。和iotdb一样,由数据库架构完成存入操作。主要采取批量写入增加吞吐量,但wal缓冲,索引构建等基本操作是不可避免的,相对iotdb挂载文件,性能要低。可以通过集群节点增加吞吐量,但对于汇聚查询来说,需要将不同机器数据传到一台,网络资源是有限的,所以和iotdb没有区别,且在python端使用不支持numpy格式传输,在python端使用时,iotdb更优。以上情况是将数据取出来运算的评估,如果不是运行simulin等外部模型,则可采取内部引擎,无需传输直接执行回写即可,C语言特性是内存自主管控,相同数据不必拷贝多份,但在全量处理情况下,最少也得加载200多G的数据。

                开放性:原始文件访问---通过sql查询访问,速度较慢;过程文件---如取出操作则程序可控,采用内置引擎则无法提供;结果文件---通过sql访问,速度较慢。

                潜在风险:全量处理时,需要控制数据总量,可通过taosdump 导出数据,进行云存储,达到基于数据库的 “无限量”的云数据库。导入则必须按 库级别 进行导入,不能像iotdb一样,先挂载需要用到的tsfile,快速投入使用。当外部需要大批量数据时,查询时长会增加。

        综合以上,可以看出,时序数据库具有 “重分析引擎”的特点,对于数据吞吐(存储特性)不够重视。因此如果是大批量数据迅速录入,或 具有自有分析引擎时,采用时序库是不明智的。反之,数据量较少或持续缓慢输入(如20m/s数据)时,需要依赖数据库函数及分析引擎时,选择时序库是明智的。以下是吞吐量和引擎分析表:

arrowiotdbtdengine
数据吞吐

存:高,基于文件传输及快速内存映射 

取:高,基于文件传输及快速内存映射

存:一般,先写Tsfile后挂载

取:较弱,除python外,取数较慢

存:弱,批量写入

取:弱,  列表取出

分析引擎很弱:本身支持基本筛选功能,基本依赖外部引擎一般,基于java不如基于C有性能优势较好,内置引擎优秀,但udf扩展等问题严重拉低性能

        最后,软件要实现一些功能或性能要求,通过不断演变肯定能实现,比如时序库通过优化UDF,把外部模型转换为UDF函数,再优化执行UDF的传输格式,甚至集群模式下进行 基于本地化的“分区”等,当然这是时序库本身的工作,不是使用者的工作。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/131205.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

jetsonTX2 nx配置yolov5和D435I相机,完整步骤

转载一篇问题解决博客:问题解决 一、烧录系统 使用SDK烧录 二、安装archiconda3 JETSON TX2 NX的架构是aarch64,与win10,linxu不同,所以不能安装Anaconda,这里安装对应的archiconda。 1. 安装 wget https://github.com/Archiconda/build-tools/rel…

ACM MM 2023 | 清华、华为联合提出MISSRec:兴趣感知的多模态序列推荐预训练

©PaperWeekly 原创 作者 | 王锦鹏 单位 | 清华大学深圳国际研究生院 研究方向 | 多模态检索、推荐系统 序列推荐是一种主流的推荐范式,目的是从用户的历史行为中推测用户偏好,并为之推荐感兴趣的物品。现有的大部分模型都是基于 ID 和类目等信息做…

如何搭建低成本亚马逊aws云服务器

0. 环境 win10 火狐浏览器 1. 登录 https://aws.amazon.com/cn/ -> 登录 -> 根用户 -> ********, **** 如果未有,需要注册,去年我注册的,麻烦之处是需要添加信用卡。可以淘宝aws搜索商家帮忙处理。 2. 控制台 在控制台主页&…

华为政企数据中心网络交换机产品集

产品类型产品型号产品说明 核心/汇聚交换机CE8850-EI-B-B0BCloudEngine 8850-64CQ-EI 提供 64 x 100 GE QSFP28,CloudEngine 8800系列交换机是面向数据中心推出的新一代高性能、高密度、低时延灵活插卡以太网交换机,可以与华为CloudEngine系列数据中心…

Leetcode41缺失的第一个正数

思路:原地哈希表 长度为N的数组,没有出现过的正整数一定是1~N1中的一个。 此时会思考能不能用一个哈希表来保存出现过的1~N1的数,然后从 1 开始依次枚举正整数,并判断其是否在哈希表中 但是题目要求常数级别的空间,就不…

VB.NET—窗体引起的乌龙事件

目录 前言: 过程: 总结: 升华: 前言: 分享一个VB.NET遇到的一个问题,开始一直没有解决,这个问题阻碍了很长时间,成功的变成我路上的绊脚石,千方百计的想要绕过去,但事与愿违怎么也绕不过去,因为运行不了…

本地idea远程调试服务器程序

本文主要介绍idea本地调试远程服务器程序的方式。相信很多同行跟我一样,在最初接触公司项目的时候,遇到测试提出的缺陷,往往会在本地进行调试、替换jar包远程调试等方式,本地调试往往会导致数据和环境不一致的问题使得问题无法复现…

Python与CAD系列高级篇(十八)文本前后缀及部分内容替换

0 简述 本篇介绍以下几项功能开发:1.选择文本并将指定前缀替换为特定文字;2.选择文本并将指定后缀替换为特定文字;3.选择文本并将指定部分内容替换为特定文字。 1 选择文本并将指定前缀替换为特定文字 需求: ① 用户定义需要替换的文本前缀及替换后的文字。 ② 将选中的文本…

生成带分表和水印的excel压缩文件

功能描述 将查询结果生成带分表和水印的excel压缩文件 功能点 1、将查询结果导出为excel文件 2、每个表格存放50万条数据&#xff0c;超过50万条数据&#xff0c;生成新的分表 3、生成的表格需要添加水印 4、将生成的全部分表&#xff0c;打包成zip压缩文件 引入依赖 <…

33. 搜索旋转排序数组(二分法)

1、算法思路 题目要求必须设计一个时间复杂度为 O(log n) 的算法解决此问题&#xff0c;所以我们可以采用二分法。 Step1. 先把 nums[0] 作为目标值&#xff0c;通过二分法找到旋转点索引&#xff1b; Step2. 如果旋转点索引为0&#xff0c;则数组本身就是升序的&#xff0c…

在C++中,当无符号数和有符号数进行减法运算时,通常有符号数会被转换为无符号数

一段程序引发的问题&#xff1a; for (int i 0; i < s.length() - L; i) {string str s.substr(i, L);if ( hash[str] 2) {res.push_back(str);}} }terminate called after throwing an instance of std::out_of_rangewhat(): basic_string::substr: __pos (which is 2…

SpringMVC Day 11 : 零 xml 配置

前言 欢迎来到《Spring MVC Day 11: 零XML配置》&#xff01;在之前的学习中&#xff0c;我们已经掌握了如何使用Spring MVC框架构建灵活、高效的Web应用程序。然而&#xff0c;我们可能还记得那些繁琐的XML配置文件&#xff0c;它们是我们在过去几天中使用的方式。 好消息是…

软考高项-配置管理相关论文

论文思路 制订配置管理计划 配置管理的目标和范围配置管理角色和责任安排建立了开发库、受控库、产品库三个配置库配置项识别 识别配置项目需求、设计文档、程序代码、项目管理计划等内容&#xff0c;配置项分配一些属性&#xff0c;比如配置项的名称、编号、版本号、责任人等…

Stable Diffusion 的提示词使用技巧

推荐Stable Diffusion自动纹理工具&#xff1a; DreamTexture.js自动纹理化开发包 什么是提示语&#xff1f; 提示语是人工智能中的一个重要组成部分&#xff0c;尤其是自然语言处理 &#xff08;NLP&#xff09;。在AI自人工智能中&#xff0c;想要获得好的效果&#xff0c;简…

JavaScript执行上下文和调用栈

上节课我们已经说过了&#xff0c;JavaScript的代码执行是发生在js引擎中的调用堆栈的&#xff0c;但是具体是如何运行的&#xff0c;我们来详细剖析一下 如何执行上下文 执行上下文&#xff1a; 执行上下文是指在JavaScript中代码被执行时所创建的环境。它包含了变量、函数、…

pam_radius库的使用

一. 前言 我们知道&#xff0c;linux pam库是一系列的库&#xff0c;用于处理一些应用程序的认证工作&#xff0c;比如login程序。但是默认的pam库只是用于本地认证&#xff0c;也就是认证的用户名和密码存储在本机上。如果需要远程认证&#xff0c;比如向radius服务器认证&…

uni-app学习笔记

目录 一、前期准备 1、项目认识 2、pages.json基本配置 3、创建页面 二、tabBar 1、获取图标 2、代码配置 三、基础认识 1、页面生命周期 2、App.vue应用生命周期 四、基础组件 1、scroll-view可滚动视图区域 2、提示框 3、swiper滑块视图容器 4、form表单组件 一…

【漏洞复现】Apache_HTTP_2.4.49_路径穿越漏洞(CVE-2021-41773)

感谢互联网提供分享知识与智慧&#xff0c;在法治的社会里&#xff0c;请遵守有关法律法规 文章目录 1.1、漏洞描述1.2、漏洞等级1.3、影响版本1.4、漏洞复现1、基础环境2、漏洞验证方式一 curl方式二 bp抓包 说明内容漏洞编号CVE-2021-41773漏洞名称Apache HTTP 路径穿越漏洞漏…

新手入门Python一定要看的八个超实用建议!

文章目录 前言一、项目文件事先做好归档二、永远不要手动修改源数据并且做好备份三、做好路径的正确配置四、代码必要的地方做好备注与说明五、加速你的Python循环代码六、可视化你的循环代码进度七、使用高效的异常捕获工具八、要多考虑代码健壮性关于Python技术储备一、Pytho…

[PyTorch][chapter 61][强化学习-免模型学习1]

前言&#xff1a; 在现实的学习任务中&#xff0c;环境 其中的转移概率P,奖赏函数R 是未知的&#xff0c;或者状态X也是未知的 称为免模型学习&#xff08;model-free learning&#xff09; 目录&#xff1a; 1: 蒙特卡洛强化学习 2&#xff1a;同策略-蒙特卡洛强化学习 3&am…