【3D目标检测】Categorical Depth Distribution Network for Monocular 3D Object Detection

本文主要是介绍【3D目标检测】Categorical Depth Distribution Network for Monocular 3D Object Detection,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

  • 概述
  • 细节
    • 网络结构
    • 类别深度分布
    • 损失函数
  • 与OFT-Net 的对比

概述

本文是基于单目图像的3D目标检测方法。
【2021】【CaDNN 】
研究的问题:

  • 以往的深度信息学习方法(无论是显示学习还是隐式学习)都存在一些问题,会导致后面边界框定位困难
  • 显示学习的方法将深度估计和目标检测分开训练,导致得到的深度图是次优的,进而导致边界框定位性能差。
  • 隐式学习的方法会出现特征涂抹的问题,导致生成的鸟瞰图表示质量不高。

提出的方法:

  • 实现了端到端的训练,也就是单个网络中同时进行深度估计和目标检测
  • 为每个像素预测一组深度分布,能够得到高质量的鸟瞰图,使得边界框定位更加准确

注:本文的related work部分写的也很好,从单目3D目标检测中3D场景中间表示的角度对算法进行了分类(第一种就是基于2D特征的,第二第三种是基于3D特征的):

  • 没有中间表示的方法,也就是基于2D特征+各种约束实现检测,如2D-3D约束,关键点约束等。没有显示的使用深度信息,定位性能相对较差。
  • 基于深度的方法,通过图像直接估计深度图(也就是显示学习深度信息),接下来将深度图作为额外的输入,要么将深度图作为图像的通道要么转换为伪点云。缺点就是下面显示学习的缺点。
  • 基于网格表示的方法,联系体素,将图像特征抓换成体素特征,然后投影到鸟瞰图表示的方法避免了估计深度值(也就是隐式学习深度信息)

细节

网络结构

  • 视锥特征网络:将图像特征投影到3D空间中,输入是 W 1 ∗ H 1 ∗ 3 W_1*H_1*3 W1H13的图像,输出是 W F ∗ H F ∗ D ∗ C W_F*H_F*D*C WFHFDC的视锥特征(为了下一步视锥特征转换到体素表示转换的高效,这里的空间分辨率是比较高的,所以只使用了ResNet的第一个Block的输出),其中 D D D是深度bin的个数, C C C当前特征代表的深度bin对应的特征。具体的过程就是使用ResNet101对图像作特征提取得到 W F ∗ H F ∗ C 1 W_F*H_F*C1 WFHFC1的特征图,然后分两路,一路降低通道数得到 W F ∗ H F ∗ C W_F*H_F*C WFHFC,一路使用DeepLab v3的结构估计类别深度分布 W F ∗ H F ∗ D W_F*H_F*D WFHFD,然后做逐元素相乘得到视锥特征 W F ∗ H F ∗ D ∗ C W_F*H_F*D*C WFHFDC
  • 视锥特征转换到体素表示:通过相机的内参矩阵和采样进行,输入是视锥特征 W F ∗ H F ∗ D ∗ C W_F*H_F*D*C WFHFDC,输出是体素特征 X ∗ Y ∗ Z ∗ C X*Y*Z*C XYZC。视锥特征有的是特征,没有3D位置信息,体素(体素是对3D空间的一个划分,这个是很容易做到的,先预先定义好3D空间的范围和体素块的大小,就可以将空间划分为若干个体素了)有的是3D位置信息但是没有特征,因此需要将视锥特征转换成体素特征。具体的做法就是:将体素的中心 ( x , y , z ) (x,y,z) (x,y,z)作为当前体素的表示,接着将 ( x , y , z ) (x,y,z) (x,y,z)通过内参矩阵转换到图像坐标系下得到 ( u , v , z ) (u,v,z) (u,v,z),接着将深度离散化得到 ( u , v , d i ) (u,v,d_i) (u,v,di) d i d_i di指的就是深度 z z z对应的深度bin,然后在视锥特征中查询就可以得到对应的特征 c c c,将它上采样就得到了体素特征 C C C
  • 体素表示投影得到鸟瞰图表示:输入是体素表示 X ∗ Y ∗ Z ∗ C X*Y*Z*C XYZC,输出是鸟瞰图表示 X ∗ Y ∗ C X*Y*C XYC。具体做法就是最后两个维度concat然后 1 ∗ 1 1*1 11卷积降维。
  • 检测:使用PointPillars处理鸟瞰图表示。

在这里插入图片描述

类别深度分布

以往的深度信息学习方法存在的问题:
显示学习:也就是估计深度图。一般深度估计和目标检测是分开训练的,深度估计网络无法在检测任务中同时优化,得到的深度图是次优的(因为只有ROI的深度值才是我们后面需要的,背景像素的深度值没那么重要,起码这一点是分开训练无法学习到的),会导致边界框定位性能差
隐式学习:就是将2维的图像特征转换成体素特征,然后转换成鸟瞰图。然而这样子可能存在特征涂抹的情况(这个过程其实是和本文一样的,只是本文使用了深度bin,而以前是直接使用深度值的,多个体素点会对应同一个2维特征),同样会增加定位物体的难度。

类别深度分布:每个像素对应的不再是一个深度值,而是一组类别深度分布,也就是属于每一个预定义的深度箱的概率。为了使深度分布尽可能准确,作者是加了监督信号的(监督信号来自于点云投影)
效果:在隐式学习的方法中,使用作者的方法能够让图像特征在3D空间中精确定位,消除特征涂抹问题,使得产生的鸟瞰图特征更加准确(因为原来的话体素采样点很容易就对应到同一个特征,而作者提出的方法下,体素采样点基本不会对应到同一个特征)。
b是不采用类别深度分布方法生成的鸟瞰图特征的可视化结果,可以看到收到了特征涂抹问题的影响。c是采用类别深度分布方法生成的鸟瞰图特征的可视化结果,特征会更加清晰和准确

在这里插入图片描述
深度离散化:离散化方法有均匀离散化、对数增长bin大小的离散化和线性增长bin大小的离散化,作者采用了线性增长bin大小的方法。
在这里插入图片描述

深度分布标签生成:深度分布肯定要有标签,不然怎么效果怎么好呀。具体方法就是将点云投影到图像坐标系下得到深度图,然后再离散化成one-hot向量。

损失函数

第一个损失是生成类别深度分布的损失,因为是分布,而且标签是one-hot向量,所以用交叉熵损失就比较合适,并且很显然前景的类别深度分布和背景的类别深度分布重要性完全不一样,数量也相差巨大,因此作者采用了focal loss。
其余的损失和PointPillars中一样了
在这里插入图片描述

与OFT-Net 的对比

1、OFT-Net没有显示的深度估计部分;而CaDNN有显式的深度估计,并且使用的还是类别深度估计。

2、OFT-Net在做OFT的时候将整个体素投影了过去然后做聚合,计算量大;而CaDNN只投影了体素的质心点,计算量小,且由于类别深度估计不存在特征涂抹问题。

3、OFT-Net采用的是z轴方向元素带权相加的方法得到鸟瞰图;而CaDNN采用的是reshape+1*1卷积的操作。

4、检测头:OFT-Net的检测头采用的是基于图像的方法常用的检测头;CaDNN采用的就是基于点云的方法常用的检测头

这篇关于【3D目标检测】Categorical Depth Distribution Network for Monocular 3D Object Detection的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

Python错误AttributeError: 'NoneType' object has no attribute问题的彻底解决方法

《Python错误AttributeError:NoneTypeobjecthasnoattribute问题的彻底解决方法》在Python项目开发和调试过程中,经常会碰到这样一个异常信息... 目录问题背景与概述错误解读:AttributeError: 'NoneType' object has no at

Linux系统性能检测命令详解

《Linux系统性能检测命令详解》本文介绍了Linux系统常用的监控命令(如top、vmstat、iostat、htop等)及其参数功能,涵盖进程状态、内存使用、磁盘I/O、系统负载等多维度资源监控,... 目录toppsuptimevmstatIOStatiotopslabtophtopdstatnmon

使用Python绘制3D堆叠条形图全解析

《使用Python绘制3D堆叠条形图全解析》在数据可视化的工具箱里,3D图表总能带来眼前一亮的效果,本文就来和大家聊聊如何使用Python实现绘制3D堆叠条形图,感兴趣的小伙伴可以了解下... 目录为什么选择 3D 堆叠条形图代码实现:从数据到 3D 世界的搭建核心代码逐行解析细节优化应用场景:3D 堆叠图

C++ 检测文件大小和文件传输的方法示例详解

《C++检测文件大小和文件传输的方法示例详解》文章介绍了在C/C++中获取文件大小的三种方法,推荐使用stat()函数,并详细说明了如何设计一次性发送压缩包的结构体及传输流程,包含CRC校验和自动解... 目录检测文件的大小✅ 方法一:使用 stat() 函数(推荐)✅ 用法示例:✅ 方法二:使用 fsee

OpenCV实现实时颜色检测的示例

《OpenCV实现实时颜色检测的示例》本文主要介绍了OpenCV实现实时颜色检测的示例,通过HSV色彩空间转换和色调范围判断实现红黄绿蓝颜色检测,包含视频捕捉、区域标记、颜色分析等功能,具有一定的参考... 目录一、引言二、系统概述三、代码解析1. 导入库2. 颜色识别函数3. 主程序循环四、HSV色彩空间

Python使用Matplotlib绘制3D曲面图详解

《Python使用Matplotlib绘制3D曲面图详解》:本文主要介绍Python使用Matplotlib绘制3D曲面图,在Python中,使用Matplotlib库绘制3D曲面图可以通过mpl... 目录准备工作绘制简单的 3D 曲面图绘制 3D 曲面图添加线框和透明度控制图形视角Matplotlib

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

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

python+opencv处理颜色之将目标颜色转换实例代码

《python+opencv处理颜色之将目标颜色转换实例代码》OpenCV是一个的跨平台计算机视觉库,可以运行在Linux、Windows和MacOS操作系统上,:本文主要介绍python+ope... 目录下面是代码+ 效果 + 解释转HSV: 关于颜色总是要转HSV的掩膜再标注总结 目标:将红色的部分滤

Python如何实现PDF隐私信息检测

《Python如何实现PDF隐私信息检测》随着越来越多的个人信息以电子形式存储和传输,确保这些信息的安全至关重要,本文将介绍如何使用Python检测PDF文件中的隐私信息,需要的可以参考下... 目录项目背景技术栈代码解析功能说明运行结php果在当今,数据隐私保护变得尤为重要。随着越来越多的个人信息以电子形

Java中Object类的常用方法小结

《Java中Object类的常用方法小结》JavaObject类是所有类的父类,位于java.lang包中,本文为大家整理了一些Object类的常用方法,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. public boolean equals(Object obj)2. public int ha