OpenPCDet系列 | 7.1 KITTI数据集测试流程predicted_boxes预测

news2025/4/27 18:58:44

文章目录

  • AnchorHeadTemplate.generate_predicted_boxes部分

AnchorHeadTemplate.generate_predicted_boxes部分

测试流程的结构图如下所示:
在这里插入图片描述

generate_predicted_boxes函数一开始的数据传入为:
在这里插入图片描述

首先对于各类预测的特征图进行重新reshape处理,将anchor那一维度进行拼接操作,比如:(16, 248, 216, 42) -> (16, 321408, 7)。但是这里需要注意。特征预测的box信息是基于anchor的一个偏移,也就是编码后的偏移系数,所以需要对其进行按原路解码操作,才可以获得真实的box信息。

# 各种维度的reshape处理
anchors = torch.cat(self.anchors, dim=-3)   # (1, 248, 216, 3, 2, 7)
num_anchors = anchors.view(-1, anchors.shape[-1]).shape[0]  # 3个类别+2个方向 在特征图上的总anchor数 321408
batch_anchors = anchors.view(1, -1, anchors.shape[-1]).repeat(batch_size, 1, 1)     # (16, 321408, 7)
batch_cls_preds = cls_preds.view(batch_size, num_anchors, -1).float() \
    if not isinstance(cls_preds, list) else cls_preds   # (16, 248, 216, 18) -> (16, 321408, 3)
batch_box_preds = box_preds.view(batch_size, num_anchors, -1) if not isinstance(box_preds, list) \
    else torch.cat(box_preds, dim=1).view(batch_size, num_anchors, -1)    # (16, 248, 216, 42) -> (16, 321408, 7)
# 解码回去
batch_box_preds = self.box_coder.decode_torch(batch_box_preds, batch_anchors)   # 根据pred和anchor解码为正常的尺寸 (16, 321408, 7)

如果存在方向预测特征,同样对其进行reshape处理。这里的预测特征(16, 321408, 2)表示每个anchor对两个方向的预测概率,那么这里需要选择较高的概率的那个索引。torch.max函数的第一个返回结果是较高的数值,第二个返回的结果是较高数值的索引。所以,这里将预测特征图根据概率转换为01的预测结果。

if dir_cls_preds is not None:
    dir_offset = self.model_cfg.DIR_OFFSET      # 0.78539
    dir_limit_offset = self.model_cfg.DIR_LIMIT_OFFSET  # 0
    dir_cls_preds = dir_cls_preds.view(batch_size, num_anchors, -1) if not isinstance(dir_cls_preds, list) \
        else torch.cat(dir_cls_preds, dim=1).view(batch_size, num_anchors, -1)  # (16, 321408, 2)
    # 确定正向还是反向
    dir_labels = torch.max(dir_cls_preds, dim=-1)[1]     # (16, 321408)

最后,对角度进行限制到0-π之间,构建出准确的gt偏航角度。最后将真实预测的box信息以及label信息返回。特征维度分别是:(16, 321408, 7)和(16, 321408, 3)

period = (2 * np.pi / self.model_cfg.NUM_DIR_BINS)  # pi
dir_rot = common_utils.limit_period(    # 限制在0到pi之间
    batch_box_preds[..., 6] - dir_offset, dir_limit_offset, period
)
# period * dir_labels.to(batch_box_preds.dtype) 如果label为1,则为π;否则仍然保存0;
batch_box_preds[..., 6] = dir_rot + dir_offset + period * dir_labels.to(batch_box_preds.dtype)

return batch_cls_preds, batch_box_preds

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

在这里插入图片描述


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/557914.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Redis配置及优化

一、关系数据库和非关系型数据库 1、关系型数据库 关系型数据库是一个结构化的数据库,创建在关系模型(二维表格模型)基础上,一般面向于记录。 SQL语句(标准数据查询语言)就是一种基于关系型数据库的语言…

S20360-SRS科尔摩根KOLLMORGEN

​ S20360-SRS科尔摩根KOLLMORGEN 电机驱动器是一种必不可少的设备,可为步进电机提供所需的电压和电流,使其平稳运行。步进电机是一种步进式转动的直流电机,它无法直接接到直流或交流电源上工作,必须使用专用的驱动电源(步进电机驱…

HTML常见的字符实体汇总

HTML字符实体,做开发的小伙伴们都知道,HTML有一些预留字符,浏览器在解析时不能正确的显示,这个时候我们就需要使用字符实体进行替换。同时,有一些键盘上找不见的符号我们也可使使用字符实体进行替换,如下是…

达梦分区表的使用

在大型的企业应用或企业级的数据库应用中,要处理的数据量通常达到TB级,对于这样的大型表执行全表扫描或者DML操作时,效率是非常低的。 为了提高数据库在大数据量读写操作和查询时的效率,达梦数据库提供了对表和索引进行分区的技术…

盘点界面控件DevExpress WinForms的几大应用程序主题

DevExpress WinForm控件包含了50个自定义皮肤,其中涵盖了Microsoft Office和Windows 11启发式的应用程序主题。 PS:DevExpress WinForm拥有180组件和UI库,能为Windows Forms平台创建具有影响力的业务解决方案。DevExpress WinForm能完美构建…

DNDC模型在土地利用变化、未来气候变化下的建模方法及温室气体时空动态模拟实践技术应用

由于全球变暖、大气中温室气体浓度逐年增加等问题的出现,“双碳”行动特别是碳中和已经在世界范围形成广泛影响。国家领导人在多次重要会议上讲到,要把“双碳”纳入经济社会发展和生态文明建设整体布局。同时,提到要把减污降碳协同增效作为促…

vue3+el-menu实现路由刷新左侧菜单栏保持选中状态

问题描述&#xff1a; 使用el-menu 实现管理系统左侧菜单栏的时候&#xff0c;刷新页面&#xff0c;菜单栏的选中状态消失 解决方案&#xff1a; 给 el-menu 加上 :default-active"this.$route.path" <el-menu :default-active"this.$route.path" …

雅思倒计时一个月|阅读准备笔记(三)

雅思阅读真经总纲。 读了一个星期 True|False|Not Given 这类题不太清楚&#xff0c;书里面有方法很有效 深呼吸过渡到下一篇阅读&#xff0c;不用急忙去下一篇 技巧一&#xff1a;拿到文章先读题目 看文章之前先读题目&#xff01;&#xff01;&#xff01;并且划一下题目关…

【头歌实训】【基于 Logisim 的 RISC-V 处理器设计】第二关-32个寄存器读写

好恶心的题&#xff0c;手连麻了 一、题目 考虑到寄存器文件的重要性&#xff0c;为基于 Logisim 实现单周期 RV32I 处理器&#xff0c;本关卡需实现一个寄存器文件部件。由于 0 号寄存器之外的 RV32I 寄存器操作方式类似&#xff0c;寄存器文件包含 32 个 32 位寄存器&#x…

chatgpt赋能Python-python_idle怎么撤销

Python Idle撤销操作&#xff1a;简易指南 作为一名有10年Python编程经验的工程师&#xff0c;我深知Python Idle在编程中的重要性。当你在编写Python代码时&#xff0c;难免会犯一些错误&#xff0c;此时“撤销”操作是非常有用的。在本篇文章中&#xff0c;我将为您介绍Pyth…

苹果手机微信分身怎么弄?学会这招不求人!

案例&#xff1a;想要把生活与工作分开&#xff0c;所以我创建了两个微信&#xff0c;想问下怎么样可以双开微信&#xff1f; 【求解&#xff01;我弄了两个微信号&#xff0c;目的是区分生活与工作&#xff0c;不想要私人账号加太多陌生人。但是微信账号老是要切换才能看到信…

SpringRetry重试机制(3秒上手)

目录 前言一、SpringRetry的使用1.1 引入依赖1.2 开启重新机制1.3 3 在方法上添加Retryable1.3.4 编写重试失败后的执行的方法测试 前言 SpringRetry重试机制在实际工作中的场景&#xff0c;比如: 发送消息失败&#xff0c;需要重新发送。调用远程服务失败&#xff0c;需要重…

5.2 在操作系统上安装部署HAProxy

HAProxy可以在各种主流的Linux发行版、主流的Unix操作系统&#xff08;如Fredsd、Solaris&#xff09;安装和稳定高效的运行&#xff0c;从HAProxy提供的安装文档“INSTALL”上&#xff0c;可以获得这些信息&#xff0c;如图5-3所示。 图5- 3 有两种安装HAProxy的方法&#xff…

Java | 一分钟掌握定时任务 | 8 - XXL-Job分布式定时任务

作者&#xff1a;Mars酱 声明&#xff1a;本文章由Mars酱编写&#xff0c;部分内容来源于网络&#xff0c;如有疑问请联系本人。 转载&#xff1a;欢迎转载&#xff0c;转载前先请联系我&#xff01; 前言 java定时任务的框架可真是多啊&#xff0c;XXL-JOB也是一个分布式任务…

开源进展|WeCross v1.3.0发布,支持适配FISCO BCOS v3.0

WeCross是微众银行自主研发并完全开源的区块链跨链协作平台&#xff0c;致力于促进跨行业、机构和地域的跨区块链信任传递和商业合作&#xff0c;有助于实现异构区块链系统之间安全可信的互操作。 WeCross v1.2.0自发布以来&#xff0c;得到了众多社区伙伴的支持和反馈。目前&…

内网渗透(八十)之搭建额外域控

搭建额外域控 我们在之前搭建完成Windows Server 2012 R2 域控的基础上搭建一个额外的域控。多个域控的好处在于,当其中有域控出现了故障,仍然能够由其他域控来提供服务。选择一台Windows Server 2012 R2 服务器作为额外域控,主机名为DC2. 首先在DC2上配置IP地址为192.168…

如何有效控制城镇供水管网漏损

漏损问题是影响城镇供水管网稳定与可靠运行的重要问题。其中&#xff0c;城镇供水管网运行中&#xff0c;一旦存在漏损情况不仅会对供水管网的供水水质产生影响&#xff0c;导致其水质降低&#xff0c;而且会出现供水压力与供水量减少等变化&#xff0c;对供水企业的供水服务质…

硬核数据处理笔记本推荐(2023版)

2023年硬核数据处理笔记本推荐它来了&#xff01;&#xff01;&#xff01;在大家的呼声中它来了&#xff01;&#xff01;&#xff01; 去年的推荐收货不少好评&#xff0c;今年继续为大家分享选购攻略&#xff01; 选购背景&#xff1a; 1.今年英特尔处理器挤牙膏、出套娃…

【开源】diy一个wifi遥控小飞机

完成效果&#xff1a; 童年的纸飞机 资料中包含了PCB和参考的小飞机模型&#xff0c;我当时是用某宝上几块钱的手抛小飞机改装的&#xff0c;需要一定的动手能力。 硬件 材料 720空心杯电机 * 2107正反桨一对&#xff0c;搭配电机3.7V 300mAh锂离子电池 * 1控制板 * 148cm手…

【C++】异常+智能指针+特殊类和类型转换

上天可能觉得我太孤独&#xff0c;派你来和我一起对抗虚无。 文章目录 一、异常1.传统处理错误的方式vs异常2.异常的使用规则2.1 异常的抛出和捕获原则2.2 在函数调用链中异常栈展开匹配原则 3.异常安全和异常规范4.自定义异常体系5.标准库的异常体系和异常的优缺点 二、智能指…