【MIT-BEVFusion代码解读】第二篇:LiDAR的encoder部分


BEVFusion相关的其它文章链接:

  1. 【论文阅读】ICRA 2023|BEVFusion:Multi-Task Multi-Sensor Fusion with Unified Bird‘s-Eye View Representation
  2. MIT-BEVFusion训练环境安装以及问题解决记录
  3. 【MIT-BEVFusion代码解读】第一篇:整体结构与config参数说明
  4. 【MIT-BEVFusion代码解读】第二篇:LiDAR的encoder部分
  5. 【MIT-BEVFusion代码解读】第三篇:camera的encoder部分
  6. 【MIT-BEVFusion代码解读】第四篇:融合特征fuser和解码特征decoder

encoder部分分为LiDARcamera两部分。这一篇文章主要介绍lidarencoder部分,lidarencoder主要有两部分,分别是voxelizebackbone,其中backbone部分使用的是SparseEncoder方式。
在这里插入图片描述

1. Voxelization

train.py部分中,使用build_model构建模型,其中使用注册器register根据type类型创建BEVFusion实例。这部分我们主要关注lidarenconder部分。

lidarvoxelization分为harddynamic voxelization,我们这里使用的是hard voxelization。创建voxel后再根据voxlizebackbone创建lidarencoders

if encoders.get("lidar") is not None:
    if encoders["lidar"]["voxelize"].get("max_num_points", -1) > 0:
    	# hard voxelization
        voxelize_module = Voxelization(**encoders["lidar"]["voxelize"])
    else:
    	# dynamic voxelization
        voxelize_module = DynamicScatter(**encoders["lidar"]["voxelize"])
    # 根据voxlize和backbone创建lidar的encoders
    self.encoders["lidar"] = nn.ModuleDict(
        {
   
            "voxelize": voxelize_module,
            "backbone": build_backbone(encoders["lidar"]["backbone"]),
        }
    )
    self.voxelize_reduce = encoders["lidar"].get("voxelize_reduce", True)

先来看一下voxelization部分的参数。如果对激光的体素化有所了解,这部分参数应该很好理解。

# 单个voxel最大点云个数
max_num_points: 10 
# voxel的大小[x, y, z]
voxel_size: [0.075, 0.075, 0.2] 
# 点云范围[x_min, y_min, z_min, x_max, y_max, z_max]
point_cloud_range: [-54.0, -54.0, -5.0, 54.0, 54.0, 3.0] 
# (training, testing)的最大点云个数
max_voxels: [120000, 160000]

激光的voxelization部分使用的是hard_voxelize代码,它是用c++实现,具体也不介绍了,这里只介绍一下它的调用部分。

这里输入points的某一帧的大小为[236137, 5],第一位为点的个数,第二位为每个点的属性,分别表示[x, y, z, intensity, timestamp_diff],其中最后一个timestamp_diff是指时间戳差异。

class _Voxelization(Function):
    @staticmethod
    def forward(
        ctx, points, voxel_size, coors_range, max_points=35, max_voxels=20000, deterministic=True
    ):
    	# 判断使用哪一种voxelization方法
        if max_points == -1 or max_voxels == -1:
            coors = points.new_zero
### 实现 MIT BEVFusion 项目代码复现教程 #### 准备工作 为了顺利进行BEVFusion项目的代码复现,确保安装了必要的依赖库和工具。这些准备步骤包括但不限于Python版本的选择、虚拟环境的创建以及特定软件包的安装。 #### 安装依赖项 按照官方文档说明来设置开发环境是非常重要的。通常情况下,建议使用`conda`管理环境以简化依赖关系处理过程[^2]: ```bash conda create -n bev_env python=3.8 conda activate bev_env pip install -r requirements.txt ``` #### 数据集获取与预处理 获得适当的数据集对于训练模型至关重要。根据BEVFusion的要求下载所需数据集,并遵循其指定的方式完成数据预处理操作。这可能涉及到将原始传感器读数转化为适合输入给定网络架构的形式,比如通过VoxelNet处理激光雷达点云数据[^1]。 #### 模型构建 理解并实现多模态融合的核心在于掌握不同传感模式间信息交互机制的设计原理。具体来说,在本案例中是指如何有效地将在BEV视角下的图像特征同LiDAR特征相结合。此部分涉及到了解两个主要流程——即从摄像头视频帧提取语义丰富的视觉描述子及其向BEV坐标的映射方法;还有就是怎样利用全卷积神经网络(FCN)达成异构源间的无缝衔接[^3]。 #### 训练与评估 一旦完成了上述准备工作,则可以着手于实际的实验环节。调整超参数直至找到最优组合,并定期保存检查点以便后续分析性能表现。此外,还需定义合理的评价指标体系用于衡量最终成果的好坏程度。 #### 调试优化 面对可能出现的各种问题时,耐心细致地排查错误根源所在显得尤为关键。无论是硬件资源不足还是算法逻辑缺陷都可能是造成进度受阻的原因之一。针对这些问题采取有效的解决措施能够显著提升工作效率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

非晚非晚

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值