全球中文网站排名,自己做的网站如何包装,短剧小程序开发费用,重庆网站优化公司哪家便宜本文介绍一篇单目3D物体检测模型#xff1a;CaDDN#xff0c;论文收录于 CVPR2021。 单目3D物体检测的主要挑战在于准确预测物体深度#xff0c;由于缺乏直接的距离测量#xff0c;因此必须根据物体和场景线索来推断物体深度。过去许多方法试图直接估计深度来辅助3D检测CaDDN论文收录于 CVPR2021。 单目3D物体检测的主要挑战在于准确预测物体深度由于缺乏直接的距离测量因此必须根据物体和场景线索来推断物体深度。过去许多方法试图直接估计深度来辅助3D检测但由于深度预测不准确性能都比较有限。
本文提出了分类深度分布网络(CaDDN)通过预测每个像素的分类深度分布将丰富的上下文特征信息投影到3D空间中合适的深度区间。然后本文使用计算效率高的鸟瞰图投影和单阶段检测器来产生最终的输出检测。本文将CaDDN设计为一种完全可微的端到端方法用于联合深度估计和目标检测。
论文链接https://arxiv.org/abs/2103.01100
项目链接推荐使用OpenPCDet来复现CaDDN代码结构简洁原作者模型使用PyTorch版本较低搭配环境不方便https://github.com/open-mmlab/OpenPCDet 文章目录1. Introduction2. Methodology3. Experimental Results1. 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、ZX、Y、Z 轴距离范围voxel size 为 [0.16, 0.16, 0.16]最终生成的 Voxel Grid 尺寸为(28037625)(28037625)(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: 103. Experimental Results
下面来看本文的消融实验下面表格是作者在KITTI 验证集上做的实验使用的指标是 AP∣R40AP|_{R40}AP∣R40。可以看到
使用深度分布预测 DDD 分别可以提高 1.5、0.77、0.46个点左右使用深度分布监督 LdepthL_{depth}Ldepth 可以大幅提高检测性能分别是提高10.4、7.6、6.54个点深度分布监督对提高模型性能很有帮助很好理解深度估计越准检测也越准本文提出的LID离散化方法也是对提升模型性能也很有帮助 下面一个消融实验可以看到
实验4表示 同时训练目标检测和深度估计对最终检测性能有较大的提高实验5表示使用所有的深度分布而不是ont-hot分布对最终检测性能也有很大提高