【代码阅读】Part-A^2 Net 代码

本文记录了Part-A2 Net的代码学习过程,包括安装步骤、数据预处理、模型结构和训练细节。在安装过程中遇到spare-conv的问题,需要安装libboost-all-dev。数据预处理涉及转换相机坐标系到LiDAR坐标系。在训练中,重点介绍了PartA2Net的网络结构,包括VFE、RPN、RPN Head和RCNN。前向计算过程涉及forward_rpn、forward_rcnn和get_training_loss函数。测试阶段与训练类似,但没有损失计算,最终通过NMS得到预测结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前一段时间Part-A2的代码公布了,这里就记录一下自己的学习过程。
github代码仓库:传送门
对文章的解读:传送门

安装

其中,spare-conv安装起来有点难度。具体可以参考一篇SECOND的安装的博客,相比于在spare-conv的github中的安装介绍,我采坑的一点是要安装:
sudo apt-get install libboost-all-dev
否则会编译失败。还有就是scikit-image安装时出现错误,更新pip也许可以解决,参考另外一篇博客

数据预处理

要求运行一下:

python kitti_dataset.py create_kitti_infos

这就看一下这个干了些什么:

# pcdet\datasets\kitti\kitti_dataset.py
def create_kitti_infos(data_path, save_path, workers=4):
    ...
    print('---------------Start to generate data infos---------------')

    dataset.set_split(train_split)
    kitti_infos_train = dataset.get_infos(num_workers=workers, has_label=True, count_inside_pts=True)
    with open(train_filename, 'wb') as f:
        pickle.dump(kitti_infos_train, f)
    print('Kitti info train file is saved to %s' % train_filename)
    .
### PartA2 代码分析 #### 1. 总体架构概述 PartA2 是一种用于三维目标检测的深度学习模型,其整体结构分为两个主要阶段:Part-Aware Stage 和 Part-Aggregation Stage。前者负责通过三维稀疏卷积提取点云中的特征,后者则基于这些特征生成最终的目标分类、置信度以及位置预测[^3]。 #### 2. 数据流与前向传播流程 在网络的 `forward` 函数里,处理逻辑被划分为三个核心步骤: - **RPN (Region Proposal Network)**: 调用 `forward_rpn` 方法来生成区域建议; - **RCNN (Region-based Convolutional Neural Networks)**: 使用 `forward_rcnn` 对选定区域进一步精炼; - **损失计算**: 执行 `get_training_loss` 来评估当前批次的表现并指导反向传播调整参数[^2]。 #### 3. 关键组件解析 ##### RPN 阶段 (`forward_rpn`) 此部分实现了初步的对象提议机制,在这里会应用 UNET 结构来进行语义分割,并从中挑选出可能含有物体的兴趣区。具体实现涉及到了一系列操作如锚框生成、回归修正等,旨在为后续更精细的识别提供基础支持。 ```python def forward_rpn(self, input_data): # 假设输入数据已经过预处理准备好了 features = self.backbone(input_data['spatial_features']) # 提取空间特征 rpn_preds_dict = {} # 进行多尺度特征融合和其他必要的变换... return rpn_preds_dict ``` ##### RCNN 阶段 (`forward_rcnn`) 一旦获得了高质量的候选框之后,则进入该环节做最后的确诊工作——即确认每个候选框内确实存在何种类型的实体对象及其确切的空间坐标范围。这部分同样依赖于精心设计好的神经网络层完成复杂的模式匹配任务。 ```python def forward_rcnn(self, rois, roi_scores, rcnn_cls, rcnn_reg): batch_size = rois.shape[0] selected_rois = [] for index in range(batch_size): cur_roi = rois[index][roi_scores[index] > score_thresh] if len(cur_roi) == 0: continue refined_box = refine_boxes(cur_roi, rcnn_reg[index]) final_predictions.append({ 'boxes': refined_box, 'scores': F.softmax(rcnn_cls[index], dim=-1), }) return final_predictions ``` #### 4. 损失函数定义 为了确保训练过程中能够有效地优化上述提到的功能模块,整个框架采用了两种不同形式的监督信号共同作用下的联合损失函数(part-aware loss + part-aggregation loss),从而使得模型可以同时兼顾局部细节描述能力和全局场景理解能力[^4]。
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值