单目3D物体检测模型(CaDDN): Categorical Depth Distribution Network for Monocular 3D Object Detection

在这里插入图片描述
本文介绍一篇单目3D物体检测模型:CaDDN,论文收录于 CVPR2021。 单目3D物体检测的主要挑战在于准确预测物体深度,由于缺乏直接的距离测量,因此必须根据物体和场景线索来推断物体深度。过去许多方法试图直接估计深度来辅助3D检测,但由于深度预测不准确,性能都比较有限。

本文提出了分类深度分布网络(CaDDN),通过预测每个像素的分类深度分布,将丰富的上下文特征信息投影到3D空间中合适的深度区间。然后,本文使用计算效率高的鸟瞰图投影和单阶段检测器来产生最终的输出检测。本文将CaDDN设计为一种完全可微的端到端方法,用于联合深度估计和目标检测

论文链接:https://arxiv.org/abs/2103.01100

项目链接(推荐使用OpenPCDet来复现CaDDN,代码结构简洁,原作者模型使用PyTorch版本较低,搭配环境不方便):https://github.com/open-mmlab/OpenPCDet


文章目录

      • 1. Introduction
      • 2. Methodology
      • 3. Experimental Results

1. Introduction

首先是论文引言部分,这里简单介绍下。3D感知任务中,基于激光雷达和双目相机的检测算法效果更好;但是单目3D检测效果要落后于上面两种方法,是因为场景信息投影到图像平面上时会丢失深度信息。

为了解决这种问题,一种方法是单独训练一个深度估计网络,然后深度估计结果在3D检测中被直接使用,网络会过度相信深度估计结果。对深度估计的过度相信在远距离情况下尤其是一个问题,导致定位不佳。此外,在训练阶段,深度估计网络与3D检测网络分开训练,也会阻止深度估计无法被检测任务优化。 另一种方法是图像数据中的深度信息可以通过将特征从图像转换到三维空间,最终转换到鸟瞰(BEV)图来隐式学习。然而,隐式方法往往会受到 feature smearing 的影响,相似的特征可存在在投影空间中的多个位置,增加了在场景中定位物体的难度。

为了解决这些问题,本文提出了一种单目3D检测方法 CaDDN,该方法通过学习分类深度分布来实现精确的 3D 检测。通过利用概率深度估计,CaDDN 能够以端到端的方式从图像生成高质量的鸟瞰特征表示。

下图是有无深度分布监督和有深度分布监督的鸟瞰图特征,可以看到有深度分布监督可以编码更多有意义的深度置信度,物体检测也能更准确。

在这里插入图片描述


2. Methodology

CaDDN通过将图像特征投影到3D空间学习生成BEV特征。然后,使用高效的BEV检测网络,利用丰富的BEV特征来进行3D检测,整个网络结构如下图所示:网络输入是一张图片,使用估计的分类深度分布网络构造锥体特征网格 GGG,然后利用已知的相机标定参数将锥体特征网格变换为体素网格 VVV,然后压缩为鸟瞰特征网格 BBB,最后使用一个3D检测器进行检测。

在这里插入图片描述
下面是OpenPCDet中提供的CaDDN模型的配置参数:

  • Lidar点云范围为:[2, -30.08, -3.0, 46.8, 30.08, 1.0],对应 X、Y、ZX、Y、ZXYZ 轴距离范围;
  • voxel size 为: [0.16, 0.16, 0.16],最终生成的 Voxel Grid 尺寸为:(280,376,25)(280,376,25)(28037625)
  • 深度图下采样系数为4;
  • 将深度划分为了80个区间,实际模型输出为81类,最后一类表示估计深度超出46.8m;
  • 深度估计网络使用的预训练好的deeplabv3权重;
  • BEV主干网和PointPillars结构相似,层数增加到了10层,检测头和PointPillars检测头一样;
CLASS_NAMES: ['Car', 'Pedestrian', 'Cyclist']DATA_CONFIG:_BASE_CONFIG_: cfgs/dataset_configs/kitti_dataset.yamlPOINT_CLOUD_RANGE: [2, -30.08, -3.0, 46.8, 30.08, 1.0]GET_ITEM_LIST: ["images", "depth_maps", "calib_matricies", "gt_boxes2d"]DATA_PROCESSOR:- NAME: mask_points_and_boxes_outside_rangeREMOVE_OUTSIDE_BOXES: True- NAME: calculate_grid_sizeVOXEL_SIZE: [0.16, 0.16, 0.16]- NAME: downsample_depth_mapDOWNSAMPLE_FACTOR: 4DATA_AUGMENTOR:DISABLE_AUG_LIST: ['placeholder']AUG_CONFIG_LIST:- NAME: random_image_flipALONG_AXIS_LIST: ['horizontal']MODEL:NAME: CaDDNVFE:NAME: ImageVFEFFN:NAME: DepthFFNDDN:NAME: DDNDeepLabV3BACKBONE_NAME: ResNet101ARGS: {"feat_extract_layer": "layer1","pretrained_path": "../checkpoints/deeplabv3_resnet101_coco-586e9e4e.pth"}CHANNEL_REDUCE: {"in_channels": 256,"out_channels": 64,"kernel_size": 1,"stride": 1,"bias": False}DISCRETIZE: {"mode": LID,"num_bins": 80,"depth_min": 2.0,"depth_max": 46.8}LOSS:NAME: DDNLossARGS: {'weight': 3.0,'alpha': 0.25,'gamma': 2.0,'fg_weight': 13,'bg_weight': 1}F2V:NAME: FrustumToVoxelSAMPLER: {"mode": "bilinear","padding_mode": "zeros"}MAP_TO_BEV:NAME: Conv2DCollapseNUM_BEV_FEATURES: 64ARGS: {"kernel_size": 1,"stride": 1,"bias": False}BACKBONE_2D:NAME: BaseBEVBackboneLAYER_NUMS: [10, 10, 10]LAYER_STRIDES: [2, 2, 2]NUM_FILTERS: [64, 128, 256]UPSAMPLE_STRIDES: [1, 2, 4]NUM_UPSAMPLE_FILTERS: [128, 128, 128]DENSE_HEAD:NAME: AnchorHeadSingleCLASS_AGNOSTIC: FalseUSE_DIRECTION_CLASSIFIER: TrueDIR_OFFSET: 0.78539DIR_LIMIT_OFFSET: 0.0NUM_DIR_BINS: 2ANCHOR_GENERATOR_CONFIG: [{'class_name': 'Car','anchor_sizes': [[3.9, 1.6, 1.56]],'anchor_rotations': [0, 1.57],'anchor_bottom_heights': [-1.78],'align_center': False,'feature_map_stride': 2,'matched_threshold': 0.6,'unmatched_threshold': 0.45},{'class_name': 'Pedestrian','anchor_sizes': [[0.8, 0.6, 1.73]],'anchor_rotations': [0, 1.57],'anchor_bottom_heights': [-0.6],'align_center': False,'feature_map_stride': 2,'matched_threshold': 0.5,'unmatched_threshold': 0.35},{'class_name': 'Cyclist','anchor_sizes': [[1.76, 0.6, 1.73]],'anchor_rotations': [0, 1.57],'anchor_bottom_heights': [-0.6],'align_center': False,'feature_map_stride': 2,'matched_threshold': 0.5,'unmatched_threshold': 0.35}]TARGET_ASSIGNER_CONFIG:NAME: AxisAlignedTargetAssignerPOS_FRACTION: -1.0SAMPLE_SIZE: 512NORM_BY_NUM_EXAMPLES: FalseMATCH_HEIGHT: FalseBOX_CODER: ResidualCoderLOSS_CONFIG:LOSS_WEIGHTS: {'cls_weight': 1.0,'loc_weight': 2.0,'dir_weight': 0.2,'code_weights': [1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0]}POST_PROCESSING:RECALL_THRESH_LIST: [0.3, 0.5, 0.7]SCORE_THRESH: 0.1OUTPUT_RAW_SCORE: FalseEVAL_METRIC: kittiNMS_CONFIG:MULTI_CLASSES_NMS: FalseNMS_TYPE: nms_gpuNMS_THRESH: 0.01NMS_PRE_MAXSIZE: 4096NMS_POST_MAXSIZE: 500OPTIMIZATION:BATCH_SIZE_PER_GPU: 4NUM_EPOCHS: 80OPTIMIZER: adam_onecycleLR: 0.001WEIGHT_DECAY: 0.01MOMENTUM: 0.9MOMS: [0.95, 0.85]PCT_START: 0.4DIV_FACTOR: 10DECAY_STEP_LIST: [35, 45]LR_DECAY: 0.1LR_CLIP: 0.0000001LR_WARMUP: FalseWARMUP_EPOCH: 1GRAD_NORM_CLIP: 10

3. Experimental Results

下面来看本文的消融实验,下面表格是作者在KITTI 验证集上做的实验,使用的指标是 AP∣R40AP|_{R40}APR40。可以看到:

  • 使用深度分布预测 DDD 分别可以提高 1.5、0.77、0.46个点左右;
  • 使用深度分布监督 LdepthL_{depth}Ldepth 可以大幅提高检测性能(分别是提高10.4、7.6、6.54个点),深度分布监督对提高模型性能很有帮助,很好理解,深度估计越准,检测也越准;
  • 本文提出的LID离散化方法也是对提升模型性能也很有帮助;

在这里插入图片描述
下面一个消融实验,可以看到:

  • 实验4表示 同时训练目标检测和深度估计对最终检测性能有较大的提高;
  • 实验5表示使用所有的深度分布而不是ont-hot分布对最终检测性能也有很大提高;

在这里插入图片描述

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

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

相关文章

抠图、换背景、正装图证件照制作方法

本篇灵感是最近又要使用别的底色的正装照的图片。上学的时候,要求证件照的底色是蓝底、党员档案里要求图片的底色是红底、 将来上班的证件照要求是白底,并且无论是考研还是找工作都是制作简历的时候,根据简历的样板不同需要更换不同的底色。 …

TFS的Web门户工作项(七)

在TFS的web门户中有更丰富和更全面的设置和数据展示。 Web门户如图有A,B,C,D四部分组成。A部分为团队项目和项目切换,登录人员和登录人员切换。B部分是Web门户主要功能的菜单,C部分是当前团队项的一些信息的展示&#…

详解多视角3D检测模型 BEVDepth: Acquisition of Reliable Depth for Multi-view 3D Object Detection

本文介绍一个多视角的3D检测模型:BEVDepth,论文收录于 AAAI2023。在这篇文章中,作者提出了一种新的具有可信深度估计的三维物体检测器。本文提出的BEVDepth通过利用激光雷达显式深度监督来提高图像深度估计的可信度。作者引入了摄像机感知深度…

TFS版本管理(八)

目前TFS支持两种版本管理方式,一种是自带的TFS版本控制,一种是Git,后一种是分布式,并且分支功能相对强大,关于Git可以找更详细的资源学习。 如果没有创建项,在web门户中代码下的资源管理器是空的。 团队资…

Python开发常用工具库

本文汇总了在使用Python开发时常用到的第三方库和工具。 1.Python 官网地址:https://www.python.org/doc/ 博文地址:《Python编程:从入门到实践》速查表 2.OpenCV(图像处理) 官网地址:https://opencv.o…

TFS中的统一集成(九)

首先要在TFS服务器上配置生成配置,操作如下: 现在可以创建一个生成定义了,单击团队资源管理器的生成。 新建生成定义: 这里选择的是手动。触发这个生成有很多条件,我们选择手动主式。 在要服务器上共享一个文件夹&…

常用工具整理:数学,论文,代码等

1. Mathpix(图片转数学公式工具) 官网地址:Mathpix Snip在线LaTeX公式编辑:在线LaTeX公式编辑器-编辑器 (latexlive.com)推荐另一个开源的工具:Image to LaTex Converter,官网地址:GitHub - ki…

几位无人驾驶领域的杰出科学家

本文介绍了几位无人驾驶领域杰出的科学家们,大家可以关注他们的主页,及时了解一些无人驾驶行业最新动态。 (当然还有很多杰出的科学家,这里不一一列举了,暂时只列举出4位:3位外国科学家1位中国科学家&#…

Razor语法和Razor引擎大全

一、Razor语法 1、Razor的标识符 解释&#xff1a;字符被定义为Razor服务器代码块的标识符&#xff0c;后面的表示是服务器代码了。web form中使用<%%>中写服务器代码一个道理。在vs工具里面提供了代码着色和智能感应的功能。 { string userName "启超"; &…

让Team Foundation Server/TFS自动记住用户名密码解决方案

在使用Team Foundation Server&#xff08;以下简称TFS&#xff09; 的时候&#xff0c;在每次打开Visual Studio TFS时候&#xff0c;需要输入用户名和秘密&#xff0c;比较麻烦。 现提供一种方法可以解决这个问题&#xff1a; 依次执行下面操作&#xff1a; 打开控制面板--&…

TFS(Team Foundation Server)敏捷使用教程

一、引言 1 中国式软件过程的坏味道 RUP&#xff0c;CMM/CMMI到了中国就变了味。。。。。。 2 Team Foundation Server TFS是软件开发的协作平台&#xff0c;它要解决的首要问题是团队成员的协作问题。比如说&#xff1a; 研发团队内部怎么协作&#xff0c;产品经理&#x…

【PAT - 甲级1020】Tree Traversals (25分)(树的遍历,给定中序后序,求层次遍历)

题干&#xff1a; Suppose that all the keys in a binary tree are distinct positive integers. Given the postorder and inorder traversal sequences, you are supposed to output the level order traversal sequence of the corresponding binary tree. Input Specifi…

银行卡密码的加密、MAC计算

简介 在银行、银联、第三方支付等金融系统中&#xff0c;对银行卡密码等信息的加解密&#xff0c;对交易数据的加解密无处不在&#xff0c;在商场刷卡消费的POS机&#xff0c;在ATM机器取款等都需要对数据加密以保护数据安全&#xff0c;不被窃取。 本文主要对POS机的安全处理…

【Python学习】 - - 链表推导式[ 2*x for x in X ]、匿名函数、并行迭代

列表推导式[x for x in range(n)] 问题&#xff1a;请计算出1~9间的整数的平方 常规方法 for i in range(1,10):print(i*i) 链表推导式&#xff1a; print([x*x for x in range(1,10)]) 匿名函数方法&#xff1a; 匿名函数语法形式&#xff1a; lambda [arg1, arg2, arg3,…

C#多线程和线程池

.Net的公用语言运行时&#xff08;Common Language Runtime&#xff0c;CLR&#xff09;能区分两种不同类型的线程&#xff1a;前台线程和后台线程。这两者的区别就是&#xff1a;应用程序必须运行完所有的前台线程才可以退出&#xff1b;而对于后台线程&#xff0c;应用程序则…

GitHub.com上的那些东西你都知道什么意思吗?

GitHub初学入门者的图谱&#xff0c;介绍Github网站每个功能的意思 一、键盘快捷键 在GitHub中&#xff0c;很多页面都可以使用键盘快捷键。在各个页面按下“shift /”都可以打开键盘快捷键一览表&#xff0c;如下图&#xff1a; 快捷键 二、工具栏 工具栏 LOGO 点击GitHub…

【Python学习】 - sklearn学习 - 数据集分割方法 - 随机划分与K折交叉划分与StratifiedKFold与StratifiedShuffleSplit

一、随机划分 import numpy as np from sklearn import datasetsiris datasets.load_iris() X iris.data y iris.target# 1&#xff09;归一化前&#xff0c;将原始数据分割 from sklearn.model_selection import train_test_split X_train,X_test,y_train,y_test train_t…

【Python学习】 - sklearn - 用于生成数据的make_blobs模块

函数原型&#xff1a; sklearn.datasets.make_blobs(n_samples100, n_features2, centers3, cluster_std1.0, center_box(-10.0, 10.0), shuffleTrue, random_stateNone) 参数含义&#xff1a; n_samples: int, optional (default100) The total number of points equally di…

微服务架构及幂等性

微服务架构 微服务架构是一种架构概念&#xff0c;旨在通过将功能分解到各个离散的服务中以实现对解决方案的解耦。它的主要作用是将功能分解到离散的各个服务当中&#xff0c;从而降低系统的耦合性&#xff0c;并提供更加灵活的服务支持。 和 微服务 相对应的&#xff0c;这…

【Python学习】 - Matplotlib二维绘图 - plt.matshow()和plt.imshow()区别对比

给定一个8*8的数据&#xff0c;用两种方式分别进行输出。 xx np.zeros((8,8),dtype np.uint8) xx[0,0] 13im Image.fromarray(xx) plt.imshow(im)plt.matshow(xx) plt.show() 输出&#xff1a; 得出结论&#xff1a; 首先我不知道为啥两个窗口是不一样大的。 其次发现图…