智能驾驶-任务部署-目标检测跟踪融合-网络模型设计优化部署---粗浅之言

本文主要是介绍智能驾驶-任务部署-目标检测跟踪融合-网络模型设计优化部署---粗浅之言,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

注意:杂乱无章,感兴趣可看
问题涉及有:硬件平台、软件系统框架、目标检测、目标跟踪、多传感器融合算法、网络模型设计、训练、优化、嵌入式部署等一系列技术体系;根据自己对相关方面的理解,现做一粗浅的小结。
硬件平台,如安霸的CV2,它主要有SOC和MCU;SOC上有一个linux系统,用于某些处理以及调度相关任务,比如调度视觉感知任务等;因为视觉感知处理相对耗时,且摄像头接在SOC上,所以被部署于SOC上,其它处理速度快的模块,被部署于MCU上,如控制模块等,当然从安全性角度考虑,控制模块也应该部署在MCU上,这样实时性控制更高,如果控制模块部署在SOC上,就会多了一步SOC通过UART或SPI总线等向MCU传输控制量的时间,安全性会低一些,当然,MCU上也应该有一个实时系统(如RTOS)做一些处理以及调度任务等;对于某个复杂功能而言,它可能包含多个处理模块,如感知、规划、控制等,这样就可以将感知模块部署于SOC,规划、控制模块部署于MCU,系统上电启动后,两边linux和rtos系统分别调度开启各个任务模块,此时状态机运行,然后SOC和MCU两边各个任务模块就可以通过UART或SPI总线传输任务间的交互数据和信号,彼此协调工作,从而实现整个功能。
目标检测主要包括视觉检测和雷达检测(如毫米波雷达、激光雷达),因为单一传感器检测的目标漏检率较高,安全性较低,且不同的传感器拥有不同的自身优势,如雷达测距较视觉准确,视觉可识别出目标物的类别等,所以多传感器融合是一种大趋势,可有效降低目标检测的漏检率,提高安全性,当然这也只是一定程度的降低漏检率,所以从安全性考虑,感知在自动驾驶还有很长的路要走,可以说是没有尽头,需要一直走下去,逐步提高汽车安全性,减少事故的发生;多传感器融合可降低漏检,另外也可实现各传感器的优势互补,集各传感器优势于一体,从而输出更好的感知结果。
多传感器融合就是将同一帧数据下的同一目标的不同传感器数据关联起来,单一目标的数据融合较简单,因为只有一个目标,而重点需要考虑的是多目标下的多传感器数据融合,因为这种情况下一方面需要考虑摄像头的m个目标和雷达的n个目标他们的同一目标关联问题,有m=n和m!=n的情况,即可能出现目标间的一对一、一对多或多对一问题需要处理;待同一目标关联起来之后,另一方面就是同一目标下不同传感器数据融合问题;
融合之后,就是另一问题——目标跟踪,单一目标的跟踪较简单,因为只有一个目标,是他是他就是他;重点考虑的也是多目标跟踪,因为这种情况下需要考虑不同帧之间同一目标的关联问题,即第t帧的m个目标和第t+1帧的n个目标如何关联,有m=n, m>n(有目标被遮挡或丢了)和m<n(有新目标出现了)的情况;另外,不同帧间同一目标的相似性该如何处理,通过位置、颜色还是什么描述子呢,这样计算相似性,稳定性、可靠性怎么样呢?,即也可能出现目标间的一对一、一对多或多对一问题需要处理;
多传感器融合可以看成是同一目标的一种横向数据关联,多目标跟踪也可看成是同一目标的一种纵向数据关联;
对于不同的任务,设计网络模型时,它的宽度和深度大小多少合适呢?这是一个需要思考的问题,我总觉得任务不同,应该有个与任务相适的网络宽度和深度,就相当于有个合适的表达式来表示输入与输出的关系,如果表达式太简单就无法表达,太复杂,虽说也可以表达,但就太过了,还是找个合适的才是最好的,但是现在合适的她不好找啊,没有方向;目前也只能通过多次实验、不断调整,以良好的精度为目标进行确定;网络其它结构也已参考当前论文中好的设计思想而设计,当然也还需要相应的图像处理、机器学习相关知识;如此,在实验中不断训练、调整、优化自己的网络模型;
根据任务场景的不同,选择合适的摄像头;由于摄像头自身,如鱼眼摄像头,采集的图像是存在一定畸变的,需要进行畸变矫正,然后不同的颜色空间的图像数据也存在不同的特性,所以也需要根据采集的原图像和网络需要的图像进行颜色空间转换,还需要进行一些其它预处理,如缩放、标准化等;另外训练数据集的量需要多大合适呢,目前好像也是越大越好,由于数据集通常是不足的,为了提高网络模型的性能,往往还需要进行数据扩充,如此,送入网络逐步训练、优化自己的网络,朝着越来越好而多次不停实验着;
网络模型训练好了,就需要思考该如何部署到嵌入式端应用了,可以通过将移动端框架,如腾讯的NCNN\TNN,阿里的MNN等移植到SOC的linux上进行编译,生成相应的头文件和库文件在arm-cpu上供调用;但这样对于实时性要求不高的任务而言是可行的;对于驾驶的目标检测等实时性要求高的任务而言就不可行了,这时就需要进行优化,软件优化是一方面,但主要还是需要根据专门的硬件进行相应的代码移植,通过硬件加速处理,提高计算速度;如,对于安霸的CV2芯片,里面貌似集成有NPU,然后安霸工程师根据该NPU开发出相应的SDK,此时,我们训练好自己的网络模型后,然后就可以通过人家提供的cvFlow工具进行模型转换,然后任务移植上去就可以使用人家提供的接口进行相应的调用处理了,此时就在NPU上进行计算了,看起来快了好多,此时你会觉得一切都是那么的美好;

这篇关于智能驾驶-任务部署-目标检测跟踪融合-网络模型设计优化部署---粗浅之言的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/790902

相关文章

使用Python实现IP地址和端口状态检测与监控

《使用Python实现IP地址和端口状态检测与监控》在网络运维和服务器管理中,IP地址和端口的可用性监控是保障业务连续性的基础需求,本文将带你用Python从零打造一个高可用IP监控系统,感兴趣的小伙... 目录概述:为什么需要IP监控系统使用步骤说明1. 环境准备2. 系统部署3. 核心功能配置系统效果展

基于Python打造一个智能单词管理神器

《基于Python打造一个智能单词管理神器》这篇文章主要为大家详细介绍了如何使用Python打造一个智能单词管理神器,从查询到导出的一站式解决,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. 项目概述:为什么需要这个工具2. 环境搭建与快速入门2.1 环境要求2.2 首次运行配置3. 核心功能使用指

Qt实现网络数据解析的方法总结

《Qt实现网络数据解析的方法总结》在Qt中解析网络数据通常涉及接收原始字节流,并将其转换为有意义的应用层数据,这篇文章为大家介绍了详细步骤和示例,感兴趣的小伙伴可以了解下... 目录1. 网络数据接收2. 缓冲区管理(处理粘包/拆包)3. 常见数据格式解析3.1 jsON解析3.2 XML解析3.3 自定义

springboot使用Scheduling实现动态增删启停定时任务教程

《springboot使用Scheduling实现动态增删启停定时任务教程》:本文主要介绍springboot使用Scheduling实现动态增删启停定时任务教程,具有很好的参考价值,希望对大家有... 目录1、配置定时任务需要的线程池2、创建ScheduledFuture的包装类3、注册定时任务,增加、删

MySQL索引的优化之LIKE模糊查询功能实现

《MySQL索引的优化之LIKE模糊查询功能实现》:本文主要介绍MySQL索引的优化之LIKE模糊查询功能实现,本文通过示例代码给大家介绍的非常详细,感兴趣的朋友一起看看吧... 目录一、前缀匹配优化二、后缀匹配优化三、中间匹配优化四、覆盖索引优化五、减少查询范围六、避免通配符开头七、使用外部搜索引擎八、分

Spring Boot 集成 Quartz并使用Cron 表达式实现定时任务

《SpringBoot集成Quartz并使用Cron表达式实现定时任务》本篇文章介绍了如何在SpringBoot中集成Quartz进行定时任务调度,并通过Cron表达式控制任务... 目录前言1. 添加 Quartz 依赖2. 创建 Quartz 任务3. 配置 Quartz 任务调度4. 启动 Sprin

Linux之计划任务和调度命令at/cron详解

《Linux之计划任务和调度命令at/cron详解》:本文主要介绍Linux之计划任务和调度命令at/cron的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录linux计划任务和调度命令at/cron一、计划任务二、命令{at}介绍三、命令语法及功能 :at

Python实现word文档内容智能提取以及合成

《Python实现word文档内容智能提取以及合成》这篇文章主要为大家详细介绍了如何使用Python实现从10个左右的docx文档中抽取内容,再调整语言风格后生成新的文档,感兴趣的小伙伴可以了解一下... 目录核心思路技术路径实现步骤阶段一:准备工作阶段二:内容提取 (python 脚本)阶段三:语言风格调

SpringQuartz定时任务核心组件JobDetail与Trigger配置

《SpringQuartz定时任务核心组件JobDetail与Trigger配置》Spring框架与Quartz调度器的集成提供了强大而灵活的定时任务解决方案,本文主要介绍了SpringQuartz定... 目录引言一、Spring Quartz基础架构1.1 核心组件概述1.2 Spring集成优势二、J

Spring Boot项目部署命令java -jar的各种参数及作用详解

《SpringBoot项目部署命令java-jar的各种参数及作用详解》:本文主要介绍SpringBoot项目部署命令java-jar的各种参数及作用的相关资料,包括设置内存大小、垃圾回收... 目录前言一、基础命令结构二、常见的 Java 命令参数1. 设置内存大小2. 配置垃圾回收器3. 配置线程栈大小