MMDetection3D库中的一些模块介绍

这篇具有很好参考价值的文章主要介绍了MMDetection3D库中的一些模块介绍。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

本文目前仅包含2个体素编码器、2个中间编码器、1个主干网络、1个颈部网络和1个检测头。如果有机会,会继续补充更多模型。
若发现内容有误,欢迎指出。

  MMDetection3D的点云数据一般会经历如下步骤/模块:

  下面分别介绍每个部分的一些典型模型。

0. 体素化函数

  在介绍体素编码器前,需要先介绍体素化函数,以理解体素编码器的输入参数含义。

0.1 mmcv.ops.voxelize中的Voxelization类

  • 初始化参数:
参数名称 数据类型 默认值 含义 取值说明
max_voxels (int, int) - 最大体素数 两个元素分别表示训练时和测试时的最大体素数
max_num_points int - 体素内最大点数 记为 M M M
point_cloud_range List(float) 点云范围 列表长为6,依次表示 x , y , z x,y,z x,y,z方向的最小值和 x , y , z x,y,z x,y,z方向的最大值,即[x_min,y_min,z_min,x_max,y_max,z_max]
voxel_size List(float) - 每个体素的大小 列表长为3,依次表示体素的 x , y , z x,y,z x,y,z尺寸,即[x_size,y_size,z_size]

注:将体素大小z_zise设置为与点云高度范围相同时,就可以实现柱体化操作。

  • forward函数:
参数名称 数据类型 默认值 含义 取值说明
input Tensor(float) - 点云特征 ( n p , C ) (n_p,C) (np,C),其中 n p n_p np为点的数量, C C C为通道维度
features Tensor(float) 返回值1 每个体素内的点 ( n , M , C ) (n,M,C) (n,M,C),其中 n n n为非空体素数,若第 i i i个体素内的点数 m i < M m_i<M mi<M,则features[i,j,:] j ≥ m i j\geq m_i jmi)为零向量
num_points Tensor(int) 返回值2 每个体素内的点数 ( n , ) (n,) (n,),其中第 i i i个体素内的点数为num_points[i](即上文的 m i m_i mi
coors Tensor(int) 返回值3 每个体素的3维位置索引 ( n , 3 ) (n,3) (n,3),其中3表示z_id,y_id,x_id

0.2 MVXTwoStageDetector类中的体素化函数voxelize

  • 初始化:初始化mmcv.ops.voxelize中的Voxelization类为self.points_voxel_layer
  • voxelize函数:
参数名称 数据类型 默认值 含义 取值说明
points List(Tensor(float)) - 一个batch的点云 列表长为batch size,其第 i i i个元素大小为 ( n i , p , C ) (n_{i,p},C) (ni,p,C)
voxels Tensor(float) 返回值1 每个体素内的点 ( N , M , C ) (N,M,C) (N,M,C),其中 N N N为整个batch的总非空体素数,即 N = ∑ i n i N=\sum_i n_i N=ini
num_points Tensor(int) 返回值2 每个体素内的点数 大小为 ( N , ) (N,) (N,)
coors Tensor(int) 返回值3 每个体素的batch索引和3维位置索引 ( N , 4 ) (N,4) (N,4),其中4表示batch_id,z_id,y_id,x_id

1. 体素编码器(VOXEL_ENCODERS)

1.1 HardSimpleVFE

  • 作用:将体素内的点取平均作为体素特征。通常搭配SparseEncoder中间编码器。
  • 初始化参数:
参数名称 数据类型 默认值 含义 取值说明
num_features int - 点云的特征维度 记为 C C C
  • forward函数:
参数名称 数据类型 默认值 含义 取值说明
features Tensor(float) - 每个体素内的点 大小为 ( N , M , C ) (N,M,C) (N,M,C),可为MVXTwoStageDetector类中的voxelize函数输出
num_points Tensor(int) - 每个体素内的点数 大小为 ( N , ) (N,) (N,),可为MVXTwoStageDetector类中的voxelize函数输出
coors Tensor(int) - 每个体素的batch索引和3维位置索引 大小为 ( N , 4 ) (N,4) (N,4),可为MVXTwoStageDetector类中的voxelize函数输出(在本函数中无实际作用,仅为和其余体素编码器有相同的输入)
返回值 Tensor(float) 返回值 非空体素特征 大小为 ( N , C ) (N,C) (N,C)

1.2 PillarFeatureNet

  用于点云的柱体表达编码。通常搭配PointPillarsScatter中间编码器。
MMDetection3D库中的一些模块介绍

  • 初始化参数:
参数名称 数据类型 默认值 含义 取值说明
in_channels int - 柱体的特征维度 记为 C C C
feat_channels Tuple(int) - - 长度表示图中PFN的数量 N N N,第 i i i个元素表示第 i i i个PFN的输出通道数
with_distance bool False 表示是否将点到原点的距离附加在点的通道维度 -
with_cluster_center bool True 表示是否将点到体素质心的三维偏移量附加在点的通道维度 -
with_voxel_center bool True 表示是否将点到体素中心的三维偏移量附加在点的通道维度 -
voxel_size List(float) - 每个体素的大小 列表长为3,依次表示体素的 x , y , z x,y,z x,y,z尺寸,即[x_size,y_size,z_size]
point_cloud_range Tuple(float) - 点云范围 长为6,依次表示 x , y , z x,y,z x,y,z方向的最小值和 x , y , z x,y,z x,y,z方向的最大值,即[x_min,y_min,z_min,x_max,y_max,z_max]
norm_cfg dict 归一化类型默认为BN1d 设置归一化类型 配置文件格式
mode str 池化类型默认为最大池化 设置池化类型 'max’表示最大池化,'avg’表示均值池化
legacy bool True - 若为True,会导致with_cluster_center=True时影响到原始特征,且若此时with_distance=True,则附加的特征会变为到体素中心的距离而非到原点的距离;为False时结果正常
  • forward函数:与HardSimpleVFE的forward函数输入和输出含义相同。

2. 中间编码器(MIDDLE_ENCODERS)

2.1 SparseEncoder

MMDetection3D库中的一些模块介绍

  • 初始化参数:
参数名称 数据类型 默认值 含义 取值说明
in_channels int - 输入通道数 记为 C C C
sparse_shape List(int) - 体素空间的shape 列表长为3,依次表示 z , y , x z,y,x z,y,x方向的体素数
order Tuple(str) (‘conv’, ‘norm’, ‘act’) 表示卷积、归一化和激活函数的顺序 -
norm_cfg dict 归一化类型默认为BN1d 归一化类型设置 配置文件格式
base_channel int - 第一个卷积的输出通道数 -
output_channels int - 最后一个卷积的输出通道数 -
encoder_channels Tuple(Tuple(int)) - 每层的输出通道维度 外层元组长度为阶段数(图中 N N N),内层元组长度为每阶段层数(图中 L L L
encoder_paddings Tuple(Tuple(int)) - 每层的填充值 内外层元组长度分别与encoder_channels相同
block_type str - 使用的模块类型 可为’conv_module’或’basicblock’(区别如图)
  • forward函数:
参数名称 数据类型 默认值 含义 取值说明
voxel_features Tensor(float) - 非空体素特征 ( N , C ) (N,C) (N,C) N N N为体素数;该参数通常是VOXEL_ENCODERS的输出
coors Tensor(int) - 非空体素坐标 ( N , 4 ) (N,4) (N,4),该参数通常是体素化函数的输出
batch_size int - batch size 记为 B B B
spatial_features Tensor(float) 返回值 BEV特征图 大小为 ( B , C ′ , H , W ) (B,C',H,W) (B,C,H,W),其中 H H H为宽度(y_size), W W W为长度(x_size

2.2 PointPillarsScatter

  用于点云的柱体表达编码。可搭配PillarFeatureNet体素编码器。

  • 作用:将柱体特征根据柱体坐标和batch_id生成BEV特征图。
  • 初始化参数:
参数名称 数据类型 默认值 含义 取值说明
in_channels int - 输入通道数 -
output_shape List(int) - 输出BEV特征图的大小 长度为2,分别为BEV特征图的宽度 H H Hy_size)和长度 W W Wx_size
  • forward函数:与SparseEncoder的forward函数输入和输出含义相同。

3. 主干网络(BACKBONES)

3.1 SECOND

  SECOND主干网络通常搭配SECONDFPN颈部网络。前面可搭配体素操作(如HardSimpleVFE + SparseEncoder)或柱体操作(如PillarFeatureNet + PointPillarsScatter)。
MMDetection3D库中的一些模块介绍

  • 初始化参数:
参数名称 数据类型 默认值 含义 取值说明
in_channels int - 输入的体素特征维度 -
out_channels List(int) - 每个阶段的输出通道数 长度为图中 L L L
layer_nums List(int) - 每阶段的卷积层数(图中 N N N 长度与out_channels相同
layer_strides List(int) - 每阶段第一个卷积的步长 长度与out_channels相同
conv_cfg dict 默认卷积类型为Conv2d 设置卷积类型 配置文件格式
norm_cfg dict 默认归一化类型为BN 设置归一化类型 配置文件格式
  • forward函数:
参数名称 数据类型 默认值 含义 取值说明
x Tensor(float) - 点云的BEV表达 ( B , C , H , W ) (B,C,H,W) (B,C,H,W),通常为MIDDLE_ENCODERS的输出
返回值 List(Tensor(float)) 返回值 输出为点云的多尺度BEV特征 列表长度等于尺度数,每个尺度特征图大小为 ( B , C i , H i , W i ) (B,C_i,H_i,W_i) (B,Ci,Hi,Wi)

4. 颈部网络(NECKS)

4.1 SECONDFPN

  SECONDFPN颈部网络通常搭配SECOND主干网络。
MMDetection3D库中的一些模块介绍

  • 初始化参数:
参数名称 数据类型 默认值 含义 取值说明
in_channels List(int) - 表示各尺度特征通道数 与SECOND的out_channels相同
out_channels List(int) - 每个DeConv的输出通道数 长度为图中 L L L
upsample_strides List(int) - 上采样步长 每个上采样块的上采样比例
conv_cfg dict 默认卷积类型为Conv2d 设置卷积类型 配置文件格式
norm_cfg dict 默认归一化类型为BN 设置归一化类型 配置文件格式
upsample_cfg dict 默认上采样方式为DeConv 上采样方式 配置文件格式
use_conv_for_no_stride bool False - -

use_conv_for_no_stride=False且upsample_stride=1时,或upsample_stride>1时使用upsample_cfg搭建DeConv卷积,否则(即use_conv_for_no_stride=True且upsample_stride=1,或upsample_stride<1)使用conv_cfg搭建Conv2d卷积

  • forward函数:
参数名称 数据类型 默认值 含义 取值说明
x List(Tensor(float)) - 点云多尺度BEV特征 列表长度为尺度数,可直接使用SECOND的输出
返回值 List(Tensor(float)) 返回值 多尺度融合后的BEV特征 列表长度为1

5.检测头(DENSE_HEADS)

检测头模块需要注意两点:
  一是loss函数的计算以及预测结果的生成均是在检测头中实现的方法;
  二是检测头初始化一般都有train_cfg和test_cfg两个参数,但在配置文件中,这两个参数往往需要写到检测器模型(DETECTOR)中而非检测头中。

5.1 CenterHead

  CenterPoint的检测头。可搭配SECOND + SECONDFPN结构使用。
MMDetection3D库中的一些模块介绍

  • 初始化参数:
参数名称 数据类型 默认值 含义 取值说明
in_channels List(int) - 输入通道数 与颈部网络的输出通道数相同
shared_conv_channel int - 第一个共享卷积的输出通道维度 -
bias str ’auto’ 第一个共享卷积层的偏置项设置 -
tasks List(dict) - dict为{'num_class': int, 'class_names': List(str)}的结构;列表的每一个元素对应图中的一个SeperateHead结构(即对不同的类别,head的网络参数可能不同)
num_heatmap_convs int - 每个中心热图头的卷积数 -
common_heads dict - - 可包含如’reg’(BEV位置偏差)、‘hei’(离地高度)、‘dim’(尺寸)、‘rot’(旋转角)、‘vel’(速度)等项;每一项的值为二元组(int,int):第一元素为最终维度,第二元素为head中的卷积层数(对应图中 N N N
norm_bbox bool True 是否对数归一化边界框尺寸作为估计值 -
conv_cfg dict 默认卷积类型为Conv2d 设置卷积类型 配置文件格式
norm_cfg dict 默认归一化类型为BN2d 设置归一化类型 配置文件格式
bbox_coder dict 默认BBOX_CODERS类型为CenterPointBBoxCoder类 设置BBOX_CODERS类型 配置文件格式
loss_cls dict 默认LOSS类型为GaussianFocalLoss 设置分类任务的LOSS类型 配置文件格式
loss_bbox dict 默认LOSS类型为L1Loss 设置回归任务的LOSS类型 配置文件格式
seperate_head dict 默认为SeperateHead类 设置SeperateHead的参数 配置文件格式,其中需要手动设置的初始化参数包括:head_conv为Head卷积的中间维度;final_kernal为Head卷积核大小

  train_cfg和test_cfg均为字典格式,这里单独拿出来介绍:文章来源地址https://www.toymoban.com/news/detail-416335.html

  • train_cfg包含:
参数名称 数据类型 含义 取值说明
grid_size List(int) 原始体素空间的shape 列表长为3,依次表示 x , y , z x,y,z x,y,z方向的体素数
point_cloud_range List(float) 点云范围 列表长为6,依次表示 x , y , z x,y,z x,y,z方向的最小值和 x , y , z x,y,z x,y,z方向的最大值,即[x_min,y_min,z_min,x_max,y_max,z_max]
voxel_size List(float) 体素大小 列表长为3,依次表示体素的 x , y , z x,y,z x,y,z尺寸,即[x_size,y_size,z_size]
out_size_factor int 下采样倍数 最后BEV预测的大小为grid_size//out_size_factor
max_objs int 最大检测物体数量 会取至多max_objs个物体计算热图回归目标
dense_reg float 与max_objs相乘作为最终的最大检测数量 可固定为1,仅设置max_objs即可
gaussian_overlap float 计算高斯半径时的参数 与真实物体尺寸一起用于计算高斯半径,从而生成热图的真值
min_radius float 最小高斯半径 防止上述计算出来的高斯半径过小
code_weights List(float) 计算损失时的各项权重 长度与边界框参数编码项数相同,如边界框编码包含3维位置、3维尺度,以及朝向角的正余弦值则长度应为8
  • test_cfg包含:
参数名称 数据类型 含义 取值说明
post_center_limit_range List(float) 后处理时物体中心的范围 列表长为6,依次表示 x , y , z x,y,z x,y,z方向的最小值和 x , y , z x,y,z x,y,z方向的最大值,即[x_min,y_min,z_min,x_max,y_max,z_max];该范围一般略大于点云范围
nms_type str NMS方法的类型 只能是’circle’(CenterPoint文章提到的NMS方法)或’rotate’(常规的NMS方法)
nms_thr float rotate NMS的IoU阈值 仅在nms_type='rotate’时需要设置
score_threshold float rotate NMS的分数筛选阈值 仅在nms_type='rotate’时需要设置,nms前仅筛选满足分数大于该阈值的物体
pre_max_size int rotate NMS前考虑的最大物体数量 仅在nms_type='rotate’时需要设置,多余的预测会被丢弃(若需要全部考虑,可设置为None)
post_max_size int rotate NMS或circle NMS后保留的最大物体数量 -
min_radius List(float) circle NMS的最小半径 仅在nms_type='circle’时需要设置,长度为tasks数;第 i i i项对应第 i i i个task的物体BEV中心距离阈值
  • forward函数(训练和测试阶段均会调用):
参数名称 数据类型 默认值 含义 取值说明
feats List(Tensor(float)) - (多尺度)特征图 通常为颈部网络的输出
返回值 Tuple(List(dict)) 返回值 BEV上的预测结果 外层元组长为任务数,内层列表长为尺度数,字典的键为’heatmap’以及common_heads中的键(如’reg’、‘hei’、‘dim’、‘rot’),值为相应Head的输出Tensor(大小为 ( B , ∗ , h , w ) (B,*,h,w) (B,,h,w)
  • loss函数(训练阶段调用):
参数名称 数据类型 默认值 含义 取值说明
pred_dicts Tuple(List(dict)) - BEV下的预测结果 检测头模块forward函数的输出结果
gt_bboxes_3d List(Tensor(float)) - 真实边界框参数 列表长为batch size,Tensor为 ( n b , box_dim ) (n_b,\textup{box\_dim}) (nb,box_dim),其中 n b n_b nb表示该帧的真实边界框数量
gt_labels_3d List(Tensor(int)) - 真实边界框类别标签 列表长为batch size,Tensor为 ( n b , ) (n_b,) (nb,)
返回值 dict 返回值 损失字典 包含各任务的分类损失和回归损失,格式为{'task0.loss_heatmap': float, 'task0.loss_bbox': float, 'task1.loss_heatmap': float, ...}
  • get_bboxes函数(测试阶段调用):
参数名称 数据类型 默认值 含义 取值说明
pred_dicts Tuple(List(dict)) - BEV预测下的预测结果 检测头模块forward函数的输出结果
img_metas List(dict) - 数据信息 检测器模型forward函数输入中的img_meta项;列表长为batch size
返回值 List(List(Tensor)) - 最终的检测结果 外层列表长为batch_size,内层列表长为3,分别是预测的边界框参数 ( n b pred , box_dim ) (n_b^\textup{pred},\textup{box\_dim}) (nbpred,box_dim)、分数 ( n b pred , ) (n_b^\textup{pred},) (nbpred,)和类别标签 ( n b pred , ) (n_b^\textup{pred},) (nbpred,)

到了这里,关于MMDetection3D库中的一些模块介绍的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【MMDetection3D】MVXNet踩坑笔记

    原文 代码 MVXNet(CVPR2019) 最近许多关于3D target detection的工作都集中在设计能够使用点云数据的神经网络架构上。虽然这些方法表现出令人鼓舞的性能,但它们通常基于单一模态,无法利用其他模态(如摄像头和激光雷达)的信息。尽管一些方法融合了来自不同模式的数据,这些方

    2024年01月18日
    浏览(36)
  • win10 mmdetection3d环境搭建

    官网:mmdetection3d/README_zh-CN.md at master · open-mmlab/mmdetection3d · GitHub 安装过程参照:win10 mmdetection3d 训练KITTI_树和猫的博客-CSDN博客_pointnet训练kitti 官网安装过程 3D目标检测框架综述-知乎中描述了当前3D目标检测的数据和模型状况,为了能将数据和评价标准等统一,介绍了4个比

    2023年04月18日
    浏览(29)
  • 新版mmdetection3d将3D bbox绘制到图像

    使用 python mmdet3d/utils/collect_env.py 收集环境信息 以前写过mmdetection3d中的可视化,但mmdetection3d更新后代码已经不适用了,正好我把我的工作全转移到新版mmdetection3d上来了,因此重新写了一下推理结果可视化。整体思路还是构建模型、构建数据、推理、绘制,下面分步讲解 我用

    2024年04月15日
    浏览(30)
  • MMdetection3D学习系列(一)——环境配置安装

    MMdetion3D是是mmlab在3d目标检测方面提供的相关检测模型,可以实现点云、图像或者多模态数据上的3D目标检测以及点云语义分割。 GitHub地址:https://github.com/open-mmlab/mmdetection3d/ 目前mmdetection3d 支持21种不同的算法,100多个预训练模型,7个数据集: mmdetection3D安装比较简单,之前

    2024年02月01日
    浏览(35)
  • mmdetection3d系列--(1)安装步骤(无坑版)

      最近在看一些基于点云3d目标检测的文章,需要复现甚至修改一些算法,就找到了mmlab开源的mmdetection3d目标检测框架,方便后续学习。     在安装的时候遇到一点坑,比如环境问题,安装完能跑demo但是不能跑训练测试问题等。在解决问题后还是完成了安装。在这里记录一

    2024年02月02日
    浏览(31)
  • 3D目标检测框架 MMDetection3D环境搭建 docker篇

    本文介绍如何搭建3D目标检测框架,使用docker快速搭建MMDetection3D的开发环境,实现视觉3D目标检测、点云3D目标检测、多模态3D目标检测等等。 需要大家提前安装好docker,并且docker版本= 19.03。 1、下载MMDetection3D源码 https://github.com/open-mmlab/mmdetection3d  git clone https://github.com/ope

    2024年02月08日
    浏览(32)
  • mmdetection3d可视化多模态模型推理结果

    参考文献: 带你玩转 3D 检测和分割 (三):有趣的可视化 - 知乎 (zhihu.com) Welcome to MMDetection3D’s documentation! — MMDetection3D 1.0.0rc4 文档 让我们看一下ChatGPT的回答[手动狗头]: mmdetection3D是基于PyTorch框架的3D目标检测工具包,它是mmdetection的3D扩展版本。它提供了一个灵活且高效的

    2024年02月16日
    浏览(32)
  • 点云检测框投影到图像上(mmdetection3d)

    原模型检测时候只有点云的检测框,本文主要是将demo文件中的pcd_demo.py中的代码,将点云检测出的3d框投影到图像上面显示。   

    2024年02月13日
    浏览(29)
  • 零基础熟悉mmdetection3d数据提取、模型搭建过程

    本图文从介绍配置文件开始,逐步构建一个新的配置文件,并依次构建相关模型,最终使用一条点云数据简单走了一下处理流程 关于mmdetection3d的安装,参考官方文档安装 — MMDetection3D 1.0.0rc4 文档 1.1 mmdetection3d配置文件的组成 官方文档:教程 1: 学习配置文件 — MMDetection3D 1.

    2024年02月05日
    浏览(32)
  • 【MMDetection3D】基于单目(Monocular)的3D目标检测入门实战

    本文简要介绍单目(仅一个摄像头)3D目标检测算法,并使用MMDetection3D算法库,对KITTI(SMOKE算法)、nuScenes-Mini(FCOS3D、PGD算法)进行训练、测试以及可视化操作。   单目3D检测,顾名思义,就是只使用一个摄像头采集图像数据,并将图像作为输入送入模型进,为每一个感兴

    2024年02月03日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包