OpenPCDet系列 | 7.PointPillars模型测试KITTI数据集流程解析

news/2025/2/11 21:27:54/

文章目录

  • 模型的测试流程
  • 1. AnchorHeadTemplate.generate_predicted_boxes部分
  • 2. Detector3DTemplate.post_processing部分
  • 3. KittiDataset.generate_prediction_dicts部分
  • 4. KittiDataset.evaluation部分

模型的测试流程

对于模型来说,训练过程是为了计算构建损失训练模型的参数,验证过程是为了测试模型当前参数的效果。所以,对于模型结构来说需要分别为测试过程和训练过程进行分别规划。在点云的3d检测中,这里主要体现在dense_head预测层中。对于模型来说,其与训练流程的区别结构图如下:
在这里插入图片描述

  • 对于dense_head处理的区别:
# 功能:构建PointPillar的dense head模块部分
class AnchorHeadSingle(AnchorHeadTemplate):def __init__(self, model_cfg, input_channels, num_class, class_names, grid_size, point_cloud_range,predict_boxes_when_training=True, **kwargs):super().__init__(   # 基类没有传参input_channels和voxel_sizemodel_cfg=model_cfg, num_class=num_class,class_names=class_names, grid_size=grid_size,point_cloud_range=point_cloud_range,predict_boxes_when_training=predict_boxes_when_training)......       def forward(self, data_dict):......# 训练过程if self.training:targets_dict = self.assign_targets(     # 获取gt信息gt_boxes=data_dict['gt_boxes'])self.forward_ret_dict.update(targets_dict)   # 此时记录gt信息以及预测信息,来进行后续的loss计算# 测试过程if not self.training or self.predict_boxes_when_training:batch_cls_preds, batch_box_preds = self.generate_predicted_boxes(batch_size=data_dict['batch_size'],cls_preds=cls_preds, box_preds=box_preds, dir_cls_preds=dir_cls_preds)data_dict['batch_cls_preds'] = batch_cls_predsdata_dict['batch_box_preds'] = batch_box_predsdata_dict['cls_preds_normalized'] = Falsereturn data_dict    # 返回更新后的data_dict
  • 对于个模块处理后的算法流程区别:
# 功能:基于Detector3DTemplate构建PointPillar算法结构
class PointPillar(Detector3DTemplate):def __init__(self, model_cfg, num_class, dataset):"""Args:model_cfg:   yaml配置文件的MODEL部分num_class:   类别数目(kitti数据集一般用3个类别:'Car', 'Pedestrian', 'Cyclist')dataset:     训练数据集"""super().__init__(model_cfg=model_cfg, num_class=num_class, dataset=dataset)   # 初始化基类# 网络的各处理模块已经存储在self中(vfe / map_to_bev / backbone_2d ...)self.module_list = self.build_networks()    # 真正构建模型的处理函数,Detector3DTemplate的子函数def forward(self, batch_dict):# 各模块分别进行特征处理,更新batch_dict,然后将预测信息与gt信息保存在forward_ret_dict字典中来进行后续的损失计算for cur_module in self.module_list:batch_dict = cur_module(batch_dict)# 训练过程进行损失计算if self.training:loss, tb_dict, disp_dict = self.get_training_loss()    # 损失计算ret_dict = {'loss': loss}return ret_dict, tb_dict, disp_dict# 测试过程进行后处理返回预测结果else:pred_dicts, recall_dicts = self.post_processing(batch_dict)return pred_dicts, recall_dicts......

下面会分别对这些核心函数模块进行记录。


1. AnchorHeadTemplate.generate_predicted_boxes部分

generate_predicted_boxes函数一开始的数据传入为:

在这里插入图片描述

最后将特征存储在字典中:

在这里插入图片描述


2. Detector3DTemplate.post_processing部分

在AnchorHeadTemplate.generate_predicted_boxes函数处理完之后更新的batch_dict字典就是这边后处理函数的输入。可以说,这个batch_dict一直贯穿着整个模型的前向传播过程,包括测试阶段的后处理部分。在训练过程中就用不到这个batch_dict。


3. KittiDataset.generate_prediction_dicts部分

这部分进行kitti数据的预测处理模块


4. KittiDataset.evaluation部分

这部分进行kitti数据的具体验证模块



http://www.ppmy.cn/news/66511.html

相关文章

SOLIDWORKS钣金折弯参数设置技巧

折弯系数早期是没有计算方法的,工厂都是根据实际经验确定下来的经验公式。 记录下来一个经验数据表或简单的经验公式。后来才出现的中性层概念,即既不伸长也不压缩的那一层为中性层。可以用来计算展开长度。SOLIDWORKS钣金折弯参数也是整合了所有的计算…

Python魔法方法 单例模式

前言 本文介绍一下python中常用的魔法方法以及面向对象中非常重要的单例模式。 魔法方法 python中一切皆对象,因为python是面向对象的编程语言。python给类和对象提供了大量的内置方法,这些内置方法也称魔法方法。这些魔法方法总是在某种条件下自动触…

决策树生成剪枝算法原理

决策树生成算法 首先明确信息熵 信息增益的概念 信息增益表示得知特征X信息是的类Y的信息不确定性减少的程度 H(D) 经验熵表示对数据D进行分类的不确定性 H(D|A)经验条件熵表示对特征A给定条件下对数据集D进行分类的不确定性(显然这个值越小越好 那么g(D,A)信息…

IP协议介绍

文章目录 一、IP协议的基本认识二、IP的协议头格式三、网段划分四、特殊的IP地址五、IP地址的数量限制六、私有IP地址和公网IP地址 一、IP协议的基本认识 IP在网络分层中属于网络层协议,传输层协议里的TCP协议解决的是可靠性问题,网络层协议里的IP协议能…

5. Mysql索引优化实战二

MySQL性能调优 1. 分页查询优化1.1 根据自增且连续的主键排序的分页查询1.2 根据非主键字段排序的分页查询 2. Join关联查询优化2.1 嵌套循环连接 Nested-Loop Join(NLJ) 算法2.2 基于块的嵌套循环连接 Block Nested-Loop Join(BNL)算法 3. in和exsits优化4. count(*)查询优化4…

【评测】腾讯云服务器的性能怎么样?

转载请注明出处:小锋学长生活大爆炸[ http://xfxuezhang.cn] 最近腾讯云推出了5年款服务器,性价比非常的高。但这么便宜的服务器,性能怎么样呢?学长特地领取了新人试用版测试了一下性能,这里与大家分享一下。 服务器领…

WiFi(Wireless Fidelity)基础(五)

目录 一、基本介绍(Introduction) 二、进化发展(Evolution) 三、PHY帧((PHY Frame ) 四、MAC帧(MAC Frame ) 五、协议(Protocol) 六、安全&#x…

【网格图软判决译码】基于比特级的MAP译码(Bitwise MAP Decoding)算法原理推导和例题详解(intrinsic和extrinsic值)

Bitwise MAP Decoding算法详解 C C C表示一个(n,k)码,生成矩阵为 G G G,编码如下 Encoding u =