TAO v5.5.0

BEVFusion

BEVFusion 是 TAO 中包含的 3D 对象检测模型。它支持以下任务

  • 转换

  • 训练

  • 评估

  • 推理

示例推理结果

bevfusion_sample.png

TAO BEVFusion 推理图像

这些任务可以使用以下命令行约定从 TAO 启动器调用

复制
已复制!
            

tao model bevfusion <sub_task> <args_per_subtask>

其中 args_per_subtask 是给定子任务所需的命令行参数。这些子任务中的每一个解释如下。

BEVFusion 的数据集包含点云数据、rgb 图像和相应的 3D 对象标注。目录结构应组织为 KITTI 目录结构。

复制
已复制!
            

/kitti /training /calib 000000.txt 000001.txt ... N.txt /image_2 000000.png 000001.png ... N.png /label_2 000000.txt 000001.txt ... N.txt /velodyne 000000.bin 000001.bin ... N.bin /ImageSets train.txt val.txt test.txt

每个 .bin 文件应符合上述格式。每个 .txt 标签文件应符合 KITTI 格式。

以下是 BEVFusion 规范文件的示例。它有六个组件 - modelinferenceevaluatedatasettrain - 以及几个全局参数,如下所述。规范文件的格式为 YAML 文件。

以下是 BEVFusion 规范文件的示例

复制
已复制!
            

results_dir: /results/bevfusion dataset: type: KittiPersonDataset root_dir: /data/ gt_box_type: camera default_cam_key: CAM2 train_dataset: repeat_time: 2 ann_file: /data/kitti_person_infos_train.pkl data_prefix: pts: training/velodyne_reduced img: training/image_2 batch_size: 4 num_workers: 8 val_dataset: ann_file: /data/kitti_person_infos_val.pkl data_prefix: pts: training/velodyne_reduced img: training/image_2 batch_size: 2 num_workers: 4 test_dataset: ann_file: /data/kitti_person_infos_val.pkl data_prefix: pts: training/velodyne_reduced img: training/image_2 batch_size: 4 num_workers: 4 model: type: BEVFusion point_cloud_range: [0, -40, -3, 70.4, 40, 1] voxel_size: [0.05, 0.05, 0.1] grid_size: [1440, 1440, 41] train: num_gpus: 1 num_nodes: 1 validation_interval: 1 num_epochs: 5 optimizer: type: AdamW lr: 0.0002 lr_scheduler: - type: LinearLR start_factor: 0.33333333 by_epoch: False begin: 0 end: 500 - type: CosineAnnealingLR T_max: 10 begin: 0 end: 10 by_epoch: True eta_min_ratio: 1e-4 - type: CosineAnnealingMomentum eta_min: 0.8947 begin: 0 end: 2.4 by_epoch: True - type: CosineAnnealingMomentum eta_min: 1 begin: 2.4 end: 10 by_epoch: True inference: num_gpus: 1 conf_threshold: 0.3 checkpoint: /results/train/bevfusion_model.pth evaluate: num_gpus: 1 checkpoint: /results/train/bevfusion_model.pth

字段

value_type

描述

default_value

valid_min

valid_max

valid_options

automl_enabled

results_dir string /results FALSE
default_scope string 使用 mmdet3d 的默认作用域 mmdet3d FALSE
default_hooks collection mmlabs 的默认钩子 {‘timer’: {‘type’: ‘IterTimerHook’}, ‘logger’: {‘type’: ‘LoggerHook’, ‘interval’: 1, ‘log_metric_by_epoch’: True}, ‘param_scheduler’: {‘type’: ‘ParamSchedulerHook’}, ‘checkpoint’: {‘type’: ‘CheckpointHook’, ‘by_epoch’: True, ‘interval’: 1}, ‘sampler_seed’: {‘type’: ‘DistSamplerSeedHook’}, ‘visualization’: {‘type’: ‘Det3DVisualizationHook’}} FALSE
logger_hook string 默认日志记录器钩子类型 TAOBEVFusionLoggerHook FALSE
manual_seed int 可选的手动种子。当在规范文件中给出值时,将设置种子。 FALSE
input_modality collection 模型的输入模态。为每个要使用的模态设置为 True。 {‘use_lidar’: True, ‘use_camera’: True, ‘use_radar’: False, ‘use_map’: False, ‘use_external’: False} FALSE
model collection 用于构建 BEVFusion 实验模型的Configurable parameters(可配置参数)。 FALSE
dataset collection 用于构建 BEVFusion 实验数据集的Configurable parameters(可配置参数)。 FALSE
训练 collection 用于构建 BEVFusion 实验训练器的Configurable parameters(可配置参数)。 FALSE
评估 collection 用于构建 BEVFusion 实验评估器的Configurable parameters(可配置参数)。 FALSE
推理 collection 用于构建 BEVFusion 实验推理器的Configurable parameters(可配置参数)。 FALSE

数据预处理器配置

数据集配置 (data_preprocessor) 定义了数据源和预处理超参数。

字段

value_type

描述

default_value

valid_min

valid_max

valid_options

automl_enabled

type string 用于 3D 融合的数据预处理器名称 Det3DDataPreprocessor FALSE
mean list RGB 帧的输入均值 [123.675, 116.28, 103.53] FALSE
std list RGB 帧的每像素输入标准差 [58.395, 57.12, 57.375] FALSE
bgr_to_rgb bool 是否将图像从 BGR 转换为 RGB。 32 FALSE
pad_size_divisor int 填充图像的大小应可被整除。 32 FALSE
voxelize_cfg collection {‘max_num_points’: 10, ‘max_voxels’: [120000, 160000], ‘voxelize_reduce’: True} FALSE

数据集配置

数据集配置 (dataset) 定义了数据集目录、标注文件和 trainvaltest 的批量大小。

字段

value_type

描述

default_value

valid_min

valid_max

valid_options

automl_enabled

type string 用于 3D 融合的数据集类型 KittiPersonDataset TAO3DSyntheticDataset,TAO3DDataset,KittiPersonDataset FALSE
root_dir string 给定数据集的根目录路径 /data/ FALSE
classes list 要训练的类列表。 [‘person’] FALSE
box_type_3d string 训练时要使用的 3D 边界框类型。 lidar lidar,camera FALSE
gt_box_type string 地面真值中的 3D 边界框类型。 camera lidar,camera FALSE
origin list 地面真值 3D 边界框中给定中心点的原点。 [0.5, 1.0, 0.5] FALSE
default_cam_key string 数据集中的默认相机名称 CAM0 FALSE
per_sequence bool 是否以每序列格式保存结果。 False FALSE
num_views int 数据集中的相机视图数量。 1 FALSE
point_cloud_dim int 输入激光雷达点云数据维度 4 FALSE
train_dataset collection 用于构建训练数据集的Configurable parameters(可配置参数)。 FALSE
val_dataset collection 用于构建验证数据集的Configurable parameters(可配置参数)。 FALSE
test_dataset collection 用于构建测试数据集的Configurable parameters(可配置参数)。 FALSE
img_file string 用于单文件推理的图像文件 FALSE
pc_file string 用于单文件推理的点云文件 FALSE
cam2img list 用于单文件推理的相机内参矩阵 FALSE
lidar2cam list 用于单文件推理的激光雷达到相机外参矩阵 FALSE

模型配置

模型配置 (model) 定义了 BEVFusion 模型结构。此模型用于训练、评估和推理。详细描述包含在下表中。

字段

value_type

描述

default_value

valid_min

valid_max

valid_options

automl_enabled

type string 模型名称 BEVFusion BEVFusion FALSE
point_cloud_range list 点云范围 [0, -40, -3, 70.4, 40, 1] FALSE
voxel_size list 体素化中的体素大小 [0.05, 0.05, 0.1] FALSE
post_center_range list 后处理中心滤波器范围 [-61.2, -61.2, -20.0, 61.2, 61.2, 20.0] FALSE
grid_size list bevfusion 模型的网格大小 [1440, 1440, 41] FALSE
data_preprocessor collection 用于构建 bevfusion 模型预处理器的Configurable parameters(可配置参数)。 FALSE
img_backbone collection 用于构建 bevfusion 模型相机图像骨干网络的Configurable parameters(可配置参数)。 FALSE
img_neck collection 用于构建 bevfusion 模型相机图像颈部的Configurable parameters(可配置参数)。 FALSE
view_transform collection 用于构建 bevfusion 模型相机视图变换的Configurable parameters(可配置参数)。 FALSE
pts_backbone collection 用于构建 bevfusion 模型激光雷达点云骨干网络的Configurable parameters(可配置参数)。 FALSE
pts_voxel_encoder collection 用于构建 bevfusion 模型激光雷达点云体素编码器的Configurable parameters(可配置参数)。 {‘type’: ‘HardSimpleVFE’, ‘num_features’: 4} FALSE
pts_middle_encoder collection 用于构建 bevfusion 模型激光雷达编码器的Configurable parameters(可配置参数)。 FALSE
pts_neck collection 用于构建 bevfusion 模型激光雷达颈部的Configurable parameters(可配置参数)。 FALSE
fusion_layer collection 用于构建 bevfusion 模型融合层的Configurable parameters(可配置参数)。 FALSE
bbox_head collection 用于构建 bevfusion 模型边界框头的Configurable parameters(可配置参数)。 FALSE

图像骨干网络配置

骨干网络配置 (img_backbone) 定义了骨干网络结构。详细描述包含在下表中。目前,BEVFusion 仅支持 Swin-Transformers 和 ResNet50 图像骨干网络。

字段

value_type

描述

default_value

valid_min

valid_max

valid_options

automl_enabled

type string 用于 3D 融合的图像骨干网络名称 mmdet.SwinTransformer FALSE
embed_dims int 输入通道数。 96 FALSE
depths list 每个 Swin Transformer 阶段的深度。 [2, 2, 6, 2] FALSE
num_heads list 每个阶段的注意力头数。 [3, 6, 12, 24] FALSE
window_size int Swin Transformer 的窗口大小。 7 FALSE
mlp_ratio int mlp 隐藏维度与嵌入维度的比率。 4 FALSE
qkv_bias bool 如果为 True,则向查询、键、值添加可学习的偏差。 True FALSE
qk_scale string 如果设置,则覆盖 head_dim ** -0.5 的默认 qk 比例。 FALSE
drop_rate float Dropout 率。 0.0 FALSE
attn_drop_rate float 注意力 dropout 率。 0.0 FALSE
drop_path_rate float 随机 dropout 率 0.2 FALSE
patch_norm bool 如果为 True,则在补丁嵌入后添加归一化。 True FALSE
out_indices list 从哪个阶段输出。 [1, 2, 3] FALSE
with_cp bool

是否使用检查点。使用检查点
将节省一些内存,同时减慢训练速度。

False

FALSE
convert_weights bool

该标志指示是否
预训练模型来自原始 repo。

True

FALSE
init_cfg collection 初始化的配置。 FALSE

图像颈部配置

颈部配置 (img_neck) 定义了图像颈部结构。详细描述包含在下表中。目前,BEVFusion 仅支持 GeneralizedLSSFPN 图像骨干网络。

字段

value_type

描述

default_value

valid_min

valid_max

valid_options

automl_enabled

type string 图像颈部名称 GeneralizedLSSFPN FALSE
in_channels list 图像颈部的输入通道数。 [192, 384, 768] FALSE
out_channels int 图像颈部的输出通道数。 256 FALSE
start_level int 图像颈部的起始级别。 0 FALSE
num_outs int 图像颈部的输出数。 0 FALSE
norm_cfg collection 图像颈部的归一化配置。 {‘type’: ‘BN2d’, ‘requires_grad’: True} FALSE
act_cfg collection 图像颈部的激活配置。 {‘type’: ‘ReLU’, ‘inplace’: True} FALSE
upsample_cfg collection 图像颈部的上采样配置。 {‘mode’: ‘bilinear’, ‘align_corners’: False} FALSE

视图变换配置

配置 (view_transform) 定义了相机输入的视图变换结构。详细描述包含在下表中。目前,BEVFusion 仅支持 DepthLSSTransform 和 LSSTransform 图像骨干网络。

字段

value_type

描述

default_value

valid_min

valid_max

valid_options

automl_enabled

type string 图像视图变换名称。 DepthLSSTransform DepthLSSTransform,LSSTransform FALSE
in_channels int 视图变换的输入通道数。 256 FALSE
out_channels int 视图变换的输出通道数。 80 FALSE
image_size list 视图变换的图像大小。 [256, 704] FALSE
feature_size list 视图变换的特征大小。 [32, 88] FALSE
xbound list x 轴的网格范围。 [-54.0, 54.0, 0.3] FALSE
ybound list y 轴的网格范围。 [-54.0, 54.0, 0.3] FALSE
zbound list z 轴的网格范围。 [-10.0, 10.0, 20.0] FALSE
dbound list 深度的网格范围。 [1.0, 60.0, 0.5] FALSE
downsample int 下采样的比率。 2 FALSE

激光雷达骨干网络配置

骨干网络配置 (lidar_backbone) 定义了图像骨干网络结构。详细描述包含在下表中。目前,BEVFusion 目前仅支持 SECOND 激光雷达骨干网络。

字段

value_type

描述

default_value

valid_min

valid_max

valid_options

automl_enabled

type string 激光雷达骨干网络名称。 SECOND FALSE
in_channels int 激光雷达骨干网络的输入通道数。 256 FALSE
out_channels list 激光雷达骨干网络的输出通道数。 [128, 256] FALSE
layer_nums list 激光雷达骨干网络每个阶段的层数。 [5, 5] FALSE
layer_strides list 激光雷达骨干网络每个阶段的层数。 [1, 2] FALSE
norm_cfg collection 激光雷达骨干网络的归一化配置。 {‘type’: ‘BN’, ‘eps’: 0.001, ‘momentum’: 0.01} FALSE
conv_cfg collection 激光雷达骨干网络的卷积层配置。 {‘type’: ‘Conv2d’, ‘bias’: False} FALSE

激光雷达编码器配置

编码器配置 (pts_middle_encoder) 定义了激光雷达编码器结构。详细描述包含在下表中。目前,BEVFusion 目前仅支持 BEVFusionSparseEncoder 结构。

字段

value_type

描述

default_value

valid_min

valid_max

valid_options

automl_enabled

type string 激光雷达编码器名称。 BEVFusionSparseEncoder FALSE
in_channels int 激光雷达编码器的输入通道数。 4 FALSE
sparse_shape list 输入张量的稀疏形状。 [1440, 1440, 41] FALSE
order list conv 模块的顺序。 [‘conv’, ‘norm’, ‘act’] FALSE
norm_cfg collection 激光雷达编码器的归一化配置。 {‘type’: ‘BN1d’, ‘eps’: 0.001, ‘momentum’: 0.01} FALSE
encoder_channels
encoder_paddings
block_type string 要使用的块的类型。 basicblock FALSE

激光雷达颈部配置

配置 (pts_neck) 定义了激光雷达颈部结构。详细描述包含在下表中。目前,BEVFusion 目前仅支持 SECONDFPN 结构。

字段

value_type

描述

default_value

valid_min

valid_max

valid_options

automl_enabled

type string 激光雷达颈部名称。 SECONDFPN FALSE
in_channels list 激光雷达颈部的输入通道数。 [128, 256] FALSE
out_channels list 激光雷达颈部的输出通道数。 [256, 256] FALSE
upsample_strides list 用于上采样激光雷达颈部特征图的步幅。 [1, 2] FALSE
norm_cfg collection 激光雷达颈部的归一化配置。 {‘type’: ‘BN’, ‘eps’: 0.001, ‘momentum’: 0.01} FALSE
upsample_cfg collection 激光雷达颈部的上采样层配置。 {‘type’: ‘deconv’, ‘bias’: False} FALSE
use_conv_for_no_stride bool 当步幅为 1 时是否使用 conv。 True FALSE

融合层配置

配置 (fusion_layer) 定义了融合层结构。详细描述包含在下表中。目前,BEVFusion 目前仅支持 ConvFuser 结构。

字段

value_type

描述

default_value

valid_min

valid_max

valid_options

automl_enabled

type string 融合层名称。 ConvFuser FALSE
in_channels list 融合层的输入通道数。 [80, 256] FALSE
out_channels int 融合层的输出通道数。 256 FALSE

BBoxHead 配置

配置 (bbox_head) 定义了 bbox 预测头结构。详细描述包含在下表中。目前,BEVFusion 目前仅支持 BEVFusionHead 结构。

字段

value_type

描述

default_value

valid_min

valid_max

valid_options

automl_enabled

type string 预测头名称。 BEVFusionHead BEVFusionHead FALSE
num_proposals int 提议数。 200 FALSE
auxiliary bool 是否启用辅助训练。 True FALSE
in_channels int 输入特征图中的通道数。 512 FALSE
hidden_channel int 隐藏通道数。 128 FALSE
num_classes int 类别数。 1 FALSE
nms_kernel_size int NMS 内核大小。 3 FALSE
bn_momentum float 批量归一化动量。 0.1 FALSE
num_decoder_layers int 解码器层数。 1 FALSE
out_size_factor int 输出大小因子。 8 FALSE
bbox_coder collection 边界框编码器的配置。 FALSE
decoder_layer collection 解码器层的配置。 FALSE
code_weights list 框编码器的权重。 [1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0] FALSE
nms_type string NMS 的类型。 FALSE
assigner collection 分配器的配置。 {‘type’: ‘HungarianAssigner3D’, ‘iou_calculator’: {‘type’: ‘BboxOverlaps3D’, ‘coordinate’: ‘lidar’}, ‘cls_cost’: {‘type’: ‘mmdet.FocalLossCost’, ‘gamma’: 2.0, ‘alpha’: 0.25, ‘weight’: 0.15}, ‘reg_cost’: {‘type’: ‘BBoxBEVL1Cost’, ‘weight’: 0.25}, ‘iou_cost’: {‘type’: ‘IoU3DCost’, ‘weight’: 0.25}} FALSE
common_heads collection 公共头的配置。 {‘center’: [2, 2], ‘height’: [1, 2], ‘dim’: [3, 2], ‘rot’: [6, 2]} FALSE
loss_cls collection 分类损失的配置。 {‘type’: ‘mmdet.FocalLoss’, ‘use_sigmoid’: True, ‘gamma’: 2.0, ‘alpha’: 0.25, ‘reduction’: ‘mean’, ‘loss_weight’: 1.0} FALSE
loss_heatmap collection 热图损失的配置。 {‘type’: ‘mmdet.GaussianFocalLoss’, ‘reduction’: ‘mean’, ‘loss_weight’: 1.0} FALSE
loss_bbox collection 边界框损失的配置。 {‘type’: ‘mmdet.L1Loss’, ‘reduction’: ‘mean’, ‘loss_weight’: 0.25} FALSE

训练配置

train 配置定义了训练过程的超参数。

复制
已复制!
            

train: precision: 'fp16' num_gpus: 1 checkpoint_interval: 10 validation_interval: 10 num_epochs: 50 optim: type: "AdamW" lr: 0.0001 weight_decay: 0.05

字段

value_type

描述

default_value

valid_min

valid_max

valid_options

automl_enabled

num_gpus int 运行训练作业的 GPU 数量。 1 1 FALSE
gpu_ids list 用于运行训练的 GPU ID 列表。此列表的长度必须等于 train.num_gpus 中的 gpu 数量。 [0] FALSE
num_nodes int 运行训练的节点数。如果 > 1,则启用多节点。 1 FALSE
seed int PyTorch 中初始化器的种子。如果 < 0,则禁用固定种子。 1234 -1 inf FALSE
cudnn collection FALSE
num_epochs int 运行训练的 epoch 数。 10 1 inf TRUE
checkpoint_interval int 将保存检查点的间隔(以 epoch 为单位)。有助于恢复训练。 1 1 FALSE
validation_interval int 将在验证数据集上触发评估的间隔(以 epoch 为单位)。 1 1 FALSE
resume_training_checkpoint_path string 要从中恢复训练的检查点路径。 FALSE
results_dir string 存储从任务生成的所有资产的路径。 FALSE
by_epoch bool 是否使用 EpochBasedRunner。 True FALSE
logging_interval int 每 k 次迭代的日志记录间隔。 1 FALSE
resume bool 是否恢复训练。 False FALSE
pretrained_checkpoint string 用于从其初始化当前训练的预训练 BEVFusion 模型的路径。 FALSE
optimizer collection 用于配置优化器的超参数 FALSE
lr_scheduler list 用于配置学习率调度器的超参数。 [{‘type’: ‘LinearLR’, ‘start_factor’: 0.33333333, ‘by_epoch’: False, ‘begin’: 0, ‘end’: 500}, {‘type’: ‘CosineAnnealingLR’, ‘T_max’: 10, ‘eta_min_ratio’: 0.0001, ‘begin’: 0, ‘end’: 10, ‘by_epoch’: True}, {‘type’: ‘CosineAnnealingMomentum’, ‘eta_min’: 0.8947, ‘begin’: 0, ‘end’: 2.4, ‘by_epoch’: True}, {‘type’: ‘CosineAnnealingMomentum’, ‘eta_min’: 1, ‘begin’: 2.4, ‘end’: 10, ‘by_epoch’: True}] FALSE

优化器配置

optim 参数定义了训练中优化器的配置,包括学习率、学习调度器和权重衰减。

字段

value_type

描述

default_value

valid_min

valid_max

valid_options

automl_enabled

type string 用于训练网络的优化器类型。 AdamW FALSE
lr float 训练模型的初始学习率。 0.0002 FALSE
weight_decay float 权重衰减系数。 0.01 FALSE
betas list 自适应学习率的移动平均参数。 [0.9, 0.999] FALSE
clip_grad collection 裁剪参数可迭代对象的梯度范数。 {‘max_norm’: 35, ‘norm_type’: 2} FALSE
wrapper_type string MMengine 中的优化器包装器。AmpOptimWrapper 启用混合精度训练 OptimWrapper FALSE

评估配置

evaluate 参数定义了评估过程的超参数。

复制
已复制!
            

evaluate: checkpoint: /path/to/model.pth num_gpus: 1

字段

value_type

描述

default_value

valid_min

valid_max

valid_options

automl_enabled

num_gpus int 1 FALSE
gpu_ids list [0] FALSE
num_nodes int 1 FALSE
checkpoint string ??? FALSE
results_dir string FALSE

推理配置

inference 参数定义了推理过程的超参数。

复制
已复制!
            

inference: checkpoint: /path/to/model.pth num_gpus: 1

字段

value_type

描述

default_value

valid_min

valid_max

valid_options

automl_enabled

num_gpus int 1 FALSE
gpu_ids list [0] FALSE
num_nodes int 1 FALSE
checkpoint string ??? FALSE
results_dir string FALSE
conf_threshold float 置信度阈值 0.5 FALSE
show bool 是否在屏幕上显示 3D 可视化 False FALSE

要训练 BEVFusion 模型,请使用此命令

复制
已复制!
            

tao model bevfusion train [-h] -e <experiment_spec> [-r <results_dir>]

必需参数

  • -e, --experiment_spec:用于设置训练实验的实验规范文件

可选参数

  • -r, --results_dir:应写入实验输出的文件夹路径。如果未指定此参数,则使用规范文件中的 results_dir

  • --gpus:用于运行训练的 GPU 数量

  • --num_nodes:用于运行训练的节点数。如果此值大于 1,则启用分布式多节点训练。

  • -h, --help:显示此帮助消息并退出。

示例用法

以下是 train 命令的示例

复制
已复制!
            

tao bevfusion model train -e /path/to/spec.yaml

要使用 BEVFusion 模型运行评估,请使用此命令

复制
已复制!
            

tao model bevfusion evaluate [-h] -e <experiment_spec> [-r <results_dir>]

必需参数

  • -e, --experiment_spec:用于设置评估实验的实验规范文件

可选参数

  • -r, --results_dir:存储评估结果的目录

示例用法

以下是使用 evaluate 命令的示例

复制
已复制!
            

tao model bevfusion evaluate -e /path/to/spec.yaml -r /path/to/results/ evaluate.checkpoint=/path/to/model.pth

使用以下命令在 BEVFusion 上使用 .pth 运行推理

复制
已复制!
            

tao model bevfusion inference [-h] -e <experiment spec file> [-r <results_dir>]

必需参数

  • -e, --experiment_spec:用于设置推理实验的实验规范文件

可选参数

  • -r, --results_dir:存储推理结果的目录

示例用法

以下是使用 inference 命令的示例

复制
已复制!
            

tao model bevfusion inference -e /path/to/spec.yaml -r /path/to/results/ inference.checkpoint=/path/to/model.pth

上一页 ActionRecognitionNet
下一页 图像分类 PyT
© 版权所有 2024, NVIDIA。 上次更新于 2024 年 10 月 15 日。