环视感知网络的多任务和单任务之争

点击上方“3D视觉工坊”,选择“星标”

干货第一时间送达

文章导读

本文讨论的核心思想来源于如何将车辆等障碍物的目标检测和车位识别统一在一个神经网络中处理,这一过程存在几个问题:1、多任务网络的必要性;2、数据输入形式的统一性;3、三维信息的表达形式。通过两篇鱼眼感知的文章和小编个人想法带着粉丝们进行算法分析。

1

引言

感知模块中往往不仅仅只有一个目标检测或者语义分割任务,如何通过鱼眼图像感知车辆周围的环境,研究人员需要做目标检测识别障碍物的类型和位置;需要做深度估计计算障碍物的横纵向距离;需要做语义分割划分车辆可行驶区域;需要做污渍检测监控图像质量等等工作,所以多任务的视觉感知网络成为一种不错的选择,网络可以共享编码阶段减少计算量,并在解码阶段多任务相互信息流通。从多任务的角度往往需要思考以下几个问题?

2

环视多任务感知需要做哪些事?

根据《OmniDet: Surround View Cameras based Multi-task Visual Perception Network for Autonomous Driving》这篇文章提供的思路,环视感知系统包含深度估计、语义分割、运动分割、目标检测、污渍检测、视觉里程计六大任务。

如何适应不同相机的径向失真?

考虑到多颗鱼眼摄像头具有不同的内参和视角,读者们可以考虑基于相机几何的自适应机制在训练和推理过程中编码鱼眼畸变模型,从而提升卷积神经网络对不同相机模型的适应能力。通俗点说就是假设一个虚拟相机,其他各个相机模型都转换到该虚拟相机后再输出结果。

如何权衡不同任务之间的权重?

由于不同任务的复杂程度存在差别,简单的损失相加必然会造成最终结果在某些任务上达到较好的效果,但是在其他任务上误差较大。早在目标检测的外接框回归中就存在中心点和长宽偏移的损失权衡,该问题与多任务之间的损失权衡具有同一个思想,需要炼丹师们在实际训练中根据不同任务损失下降的程度尝试性的给与权重进行测试。

如何表征鱼眼图像中的目标?

如下图所示,(a)中的标准矩形框会增加目标的冗余区域,当我们对目标位置进行2D转3D后,会增加测距误差,因此不适合鱼眼镜头图像的目标表示。(b)中的旋转矩形框较好的弥补了标准框的缺陷,但是在鱼眼图像中做外接框的检测存在畸变因素,所以真实的直线在图像中是弯曲的,因此旋转矩形框未能表征这一特性。(c)中的外接框形式在旋转矩形框的基础上引入了图像畸变特性,能够较好的表征鱼眼图像中的物体。(d)(e)(f)三种形式均以一定数据的点来约束物体轮廓,极端情况就是语义分割。

3

多任务感知系统真的香吗?

随着AI技术的发展,深度学习越来越多的被应用在各种感知任务中,比如通过双目或激光雷达得到的真值采用深度学习训练像素深度:

用深度学习进行相机的失明/图像的污渍、模糊等失效检测:

用深度学习进行连续帧的运动物体分割:

还有深度学习做图像拼接、学习融合参数、姿态识别、去雾去雨去模糊等等应用。在大数据的加持,与传统算法进行各自性能对比可能有一定的提升,但是从融合成多任务的角度来说有以下几个考虑因素:

  • 融合成多任务的必要性

  • 子任务之间的权重设置

  • 硬件单元的算力分配

  • 网络输入形式的统一性

是否需要神经网络来处理所有视觉任务?

根据所开发功能的不同,感知任务也会存在差异。在环视系统中,由于鱼眼相机的有效检测范围只有20米以内,所以可行驶区域的分割就显得没那么重要。

再者相机的失明或图像的污渍检测应该在检测算法之前就对数据的有效性进行判断,而非和目标识别等功能并行输出。

再比如环视泊车场景中对车位的距离要求往往精确到厘米级别,采用神经网络进行深度估计很难达到工程要求。

是否用一块计算单元处理所有感知算法?

如果将所有子任务都放在一个神经网络中进行处理,那么有可能造成算力资源的浪费,许多硬件厂商对外宣称的芯片算力是各个计算单元的总和,如TDA4x中就包括多块DSP。从最大化资源利用角度上应该将不同算法分散部署同时运行。

是否能统一多任务网络的数据输入形式?

虽然很多视觉任务是针对单帧来处理的,但是视角可能存在差异,目标主流的环视系统中对车位线的检测是将四颗鱼眼采集的图像拼接成鸟瞰图后输入网络,而障碍物检测的视角往往是前视图形式。

4

如何用单任务识别物体和车位?

这里所说的环视感知系统的单任务仅针对神经网络部分,环视感知最关心的是3D障碍物的识别和车位的识别。我们将相机的失明检测,目标的距离估计,平面的假设方程等任务剥离出神经网络,只关心障碍物和车位的目标检测;然后统一输入数据的视角;并在车位线识别中使用检测方法取缔分割任务。

鱼眼图像中如何检测2.5D或3D的障碍物信息?

首先我们知道在感知系统中,2D框的检测基本没有太大的意义,如果无法得到车辆的朝向信息,就无法精确的计算目标车辆距离本车的实际距离。所以炼丹师们一般会考虑在2D框的基础上增加朝向角的预测是否就可以得到一个2.5D的目标形式了呢?如下图所示:

以及更加端到端的做法是否可以直接回归出3D立体框呢?如下图所示:

当然根据实际操作经验,直接回归3D框目前还不太稳定,不过基于2.5D的预测在加上后处理等功能已经能实现辅助驾驶中L2+的功能需求了。

障碍物的检测毫无疑问采用鱼眼图像进行处理,但是车位线的检测是否也能在该视角下进行呢?

读者可以参考这篇文章:《Real Time Detection Algorithm of Parking Slot Based on Deep  Learning and Fisheye Image》。算法大意分成三步:

  1. 检测车位的外接框和角点框

  2. 将目标的位置转换到真实3D坐标

  3. 通过车位和角点之间的位置约束过滤结果

在图像中检测到车位和角点后,由于图像畸变和透视投影的关系,角点之间的距离无法通过像素坐标直接判断,所以需要根据平面模型和相机参数等外部输入将2D的像素坐标转换成3D的世界坐标中。

最后通过判断车位框和角点框的包含关系以及角点框之间的距离约束过滤掉部分误检信息。如下图所示:

本文仅做学术分享,如有侵权,请联系删文。

下载1

在「3D视觉工坊」公众号后台回复:3D视觉即可下载 3D视觉相关资料干货,涉及相机标定、三维重建、立体视觉、SLAM、深度学习、点云后处理、多视图几何等方向。

下载2

在「3D视觉工坊」公众号后台回复:3D视觉github资源汇总即可下载包括结构光、标定源码、缺陷检测源码、深度估计与深度补全源码、点云处理相关源码、立体匹配源码、单目、双目3D检测、基于点云的3D检测、6D姿态估计源码汇总等。

下载3

在「3D视觉工坊」公众号后台回复:相机标定即可下载独家相机标定学习课件与视频网址;后台回复:立体匹配即可下载独家立体匹配学习课件与视频网址。

重磅!3DCVer-学术论文写作投稿 交流群已成立

扫码添加小助手微信,可申请加入3D视觉工坊-学术论文写作与投稿 微信交流群,旨在交流顶会、顶刊、SCI、EI等写作与投稿事宜。

同时也可申请加入我们的细分方向交流群,目前主要有3D视觉CV&深度学习SLAM三维重建点云后处理自动驾驶、多传感器融合、CV入门、三维测量、VR/AR、3D人脸识别、医疗影像、缺陷检测、行人重识别、目标跟踪、视觉产品落地、视觉竞赛、车牌识别、硬件选型、学术交流、求职交流、ORB-SLAM系列源码交流、深度估计等微信群。

一定要备注:研究方向+学校/公司+昵称,例如:”3D视觉 + 上海交大 + 静静“。请按照格式备注,可快速被通过且邀请进群。原创投稿也请联系。

▲长按加微信群或投稿

▲长按关注公众号

3D视觉从入门到精通知识星球:针对3D视觉领域的视频课程(三维重建系列三维点云系列结构光系列手眼标定相机标定orb-slam3等视频课程)、知识点汇总、入门进阶学习路线、最新paper分享、疑问解答五个方面进行深耕,更有各类大厂的算法工程人员进行技术指导。与此同时,星球将联合知名企业发布3D视觉相关算法开发岗位以及项目对接信息,打造成集技术与就业为一体的铁杆粉丝聚集区,近2000星球成员为创造更好的AI世界共同进步,知识星球入口:

学习3D视觉核心技术,扫描查看介绍,3天内无条件退款

 圈里有高质量教程资料、可答疑解惑、助你高效解决问题

觉得有用,麻烦给个赞和在看~  

### 环视BEV与单面BEV的区别 #### 环视BEV的特点及其应用 环视BEV(Bird's Eye View)通过融合来自多个摄像头的数据来构建环境的鸟瞰视角图像。这种多角度的信息集成使得模型能够获得更全面的空间理解,尤其适用于复杂场景下的导航避障任务。由于采用了环绕式的视觉采集方式,因此可以在不依赖额外传感器的情况下实现高精度的地图重建物体定位[^1]。 #### 单面BEV的特点及其应用 相比之下,单面BEV通常只基于单一方向上的摄像机获取的数据来进行处理。这种方式虽然简化了硬件配置需求并降低了成本,但在某些情况下可能会因为视野局限而导致信息缺失或误判。然而,在特定条件下——比如当车辆前方为主要关注区域时——单面BEV仍然能提供有效的感知能力,并且其计算效率相对较高[^3]。 #### 应用场景对比 - **环视BEV** 更适合用于需要全方位监控周围环境的应用场合,如自动泊车辅助系统、无人驾驶出租车服务等。这些场景下,精确掌握四周情况对于保障安全至关重要。 - **单面BEV** 则更适合那些主要关心正前方路况的任务,例如高速公路驾驶辅助功能或是简单的障碍物预警机制。这类应用场景往往对实时性响应速度有更高要求,而单面BEV凭借较低延迟的优势可以满足此类需求[^2]。 ```python # 示例代码展示如何根据不同类型的BEV设置不同的参数 def setup_bev_type(bev_type='panoramic'): if bev_type == 'single': config = { "camera_positions": ["front"], "processing_speed": "high" } elif bev_type == 'panoramic': config = { "camera_positions": ["left", "right", "front", "rear"], "processing_speed": "medium" } return config ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值