首页/新闻资讯/正文详情

Kornia Boxes3D 的 xyzwhd 模式修复:非对称 3D 框中 width/height/depth 字段顺序的保持与验证

发布时间:2026/11/4 4:26:49 来源:云帆数科 栏目:资讯中心
Kornia Boxes3D 的 xyzwhd 模式修复:非对称 3D 框中 width/height/depth 字段顺序的保持与验证
Kornia Boxes3D 的 xyzwhd 模式修复非对称 3D 框中 width/height/depth 字段顺序的保持与验证【免费下载链接】kornia Geometric Computer Vision Library for Spatial AI项目地址: https://gitcode.com/GitHub_Trending/ko/korniaBoxes3D是 Kornia 中用于表示三维边界框八顶点六面体的核心容器其from_tensor(..., modexyzwhd)接口允许以(xmin, ymin, zmin, width, height, depth)格式导入 3D 框。本篇文章聚焦于一项具体的 bug 修复对应变更片段 changelog.d/migration-100.fixed.md修复后xyzwhd模式在转换非对称盒子width、height、depth 互不相等时会严格保留字段顺序不再发生宽高深度错位。读完本文你将掌握Boxes3D的坐标表示约定、xyzwhd模式的导入/导出实现原理以及如何在自定义管线中规避同类字段顺序陷阱。修复背景一个 changelog 片段背后的数据表示问题该修复以 Towncrier 变更片段的形式记录在 changelog.d/migration-100.fixed.md全文如下FixBoxes3D.from_tensor(..., modexyzwhd)to preserve width, height, and depth field order for asymmetric boxes. (#4189)这段文字对应 PR #4189属于fixedbug 修复类别。按仓库的变更管理约定见 changelog.d/README.md每个产生用户可见变更的 PR 都会在changelog.d目录下添加一个独立片段文件命名规则为PR号.类型.md最终由 Towncrier 在发版时合并进CHANGELOG.md。migration-*前缀文件是迁移工作流引入时一次性保留的遗留条目使用 Towncrier 的 orphan 前缀以避免重复生成 PR 链接。要理解这个修复的实际影响必须回到Boxes3D本身的数据表示与转换逻辑。Boxes3D 的数据表示与三种输入模式Boxes3D类定义于 kornia/geometry/boxes.py。与 2D 的Boxes存储四边形顶点类似Boxes3D将每个盒子存储为八顶点六面体张量形状为(N, 8, 3)或(B, N, 8, 3)顶点顺序为前上左、前上右、前下右、前下左、后上左、后上右、后下右、后下左front-top-left, front-top-right, front-bottom-right, front-bottom-left, 以及相同的四个 back 顶点。from_tensor是导入其他表示的入口kornia/geometry/boxes.py接受形状(N, 6)或(B, N, 6)的输入共支持三种模式模式字符串匹配不区分大小写模式字段格式尺寸定义xyzxyzxmin, ymin, zmin, xmax, ymax, zmaxwidth xmax - xmin不含端点xyzxyz_plusxmin, ymin, zmin, xmax, ymax, zmaxwidth xmax - xmin 1含端点xyzwhdxmin, ymin, zmin, width, height, depth第 3、4、5 个字段直接就是宽、高、深其中xyzwhd是本修复的核心对象其第 3 个字段是宽度width第 4 个是高度height第 5 个是深度depth对应 x/y/z 三个轴。对于非对称盒子三个方向尺寸互不相等一旦这个顺序被打乱宽高深就会互相错位且数值上无法察觉——因为三个值本身不同错位后仍能通过简单的合法性检查。修复的源码实现字段顺序的严格保持在from_tensor中xyzwhd分支的实现非常直接kornia/geometry/boxes.pyelif mode xyzwhd: width, height, depth boxes[..., 3], boxes[..., 4], boxes[..., 5]即从输入张量的第 3、4、5 列分别取出 width、height、depth然后交给_boxes3d_to_polygons3dkornia/geometry/boxes.py构造八顶点六面体。修复确保的正是这一步的映射关系字段 3 → width字段 4 → height字段 5 → depth三个量在各分支中保持一致的命名与赋值顺序。对称地to_tensor(modexyzwhd)的导出分支kornia/geometry/boxes.py也以相同顺序回写elif mode in (xyzwhd, vertices, vertices_plus): width boxes[..., 3] - boxes[..., 0] 1 height boxes[..., 4] - boxes[..., 1] 1 depth boxes[..., 5] - boxes[..., 2] 1 boxes[..., 3] width boxes[..., 4] height boxes[..., 5] depth导出时先以amin/amax对 8 个顶点求轴对齐包围盒再换算成含端点的尺寸并回填到字段 3/4/5。导入与导出两侧的顺序约定完全一致这正是字段顺序被保留的保证from_tensor(x, modexyzwhd).to_tensor(modexyzwhd)可以精确还原输入。另一个与该顺序强相关的点是get_boxes_shapekornia/geometry/boxes.pyboxes_xyzwhd self.to_tensor(modexyzwhd) widths, heights, depths boxes_xyzwhd[..., 3], boxes_xyzwhd[..., 4], boxes_xyzwhd[..., 5] return depths, heights, widths它内部正是依赖xyzwhd字段顺序来提取尺寸然后按(depths, heights, widths)的约定顺序返回。也就是说xyzwhd的字段顺序一旦出错会连带污染get_boxes_shape的返回结果影响所有依赖该方法的几何计算如to_mask的 mask 尺寸。这解释了为何该修复的优先级较高它不只影响显式使用xyzwhd模式的用户。测试佐证对称与非对称盒子的回归覆盖仓库测试 tests/geometry/test_boxes.py 为xyzwhd模式提供了多组回归用例其中最能体现本次修复价值的是一组非对称盒子测试。非对称盒子的字段顺序校验test_convention_from_tensor_xyzxyz_stores_inclusive_front_then_back_verticestests/geometry/test_boxes.py构造了一个三个方向尺寸均不同的盒子x 从 1 到 5宽度 4、y 从 2 到 5高度 3、z 从 3 到 8深度 5随后断言expected_whd torch.tensor([[1.0, 2.0, 3.0, 4.0, 3.0, 5.0]], devicedevice, dtypedtype) self.assert_close(boxes.to_tensor(xyzwhd), expected_whd, atol0.0, rtol0.0)输出严格为[xmin1, ymin2, zmin3, width4, height3, depth5]——width(4)、height(3)、depth(5) 三个互不相同的数值落在正确的字段位置上。如果修复前存在字段顺序错乱例如 width 与 height 互换该断言会立即失败因为 4、3、5 无法与错位后的排列匹配。这正是 changelog 中 preserve width, height, and depth field order for asymmetric boxes 的测试级体现只有非对称盒子才能暴露顺序错误对称盒子三个值相同顺序错了也测不出来。其他 xyzwhd 相关回归test_boxes_to_tensortests/geometry/test_boxes.py用一组随机化顶点构造六面体逐一校验xyzxyz、xyzxyz_plus、xyzwhd、vertices、vertices_plus五种导出模式的输出其中xyzwhd期望输出[[1, 2, 1, 2, 2, 2]]。test_from_tensortests/geometry/test_boxes.py对(1, 6)与(1, 1, 6)两种布局验证三种模式导入到八顶点表示的结果一致。test_convention_from_tensor_rejects_non_positive_extents_in_mode_conventiontests/geometry/test_boxes.py验证validate_boxesTrue时按各模式自身约定校验正尺寸如xyzwhd下 width0 会抛出匹配widths的ValueError而 width0.5 可正常通过。test_wart_to_tensor_default_mode_ignores_the_stored_label_4251tests/geometry/test_boxes.py验证Boxes3D.to_tensor()无参时默认导出xyzxyz且transform_boxes复制路径会把标签重置为xyzxyz_plus。此外tests/geometry/test_boxes.py 中还包含对Boxes3D.from_tensor(x, modexyzwhd).data的 gradcheck 验证说明该路径在可微性上也被纳入了测试保障。实战要点正确使用 xyzwhd 模式结合源码与测试在实际项目中使用Boxes3D的xyzwhd模式时有几点值得注意1. 明确字段语义。xyzwhd的第 3、4、5 个字段是尺寸而非角点坐标width xmax - xmin、height ymax - ymin、depth zmax - zmin不含端点与xyzxyz的尺寸定义一致区别于含端点的xyzxyz_plus。导入示例import torch from kornia.geometry.boxes import Boxes3D # 非对称盒子width4, height3, depth5 boxes Boxes3D.from_tensor(torch.tensor([[1.0, 2.0, 3.0, 4.0, 3.0, 5.0]]), modexyzwhd) print(boxes.data.shape) # (1, 8, 3)内部为八顶点六面体 print(boxes.mode) # xyzwhd # 导出可精确还原第 3/4/5 字段仍为 width/height/depth print(boxes.to_tensor(modexyzwhd)) # tensor([[1., 2., 3., 4., 3., 5.]])2. 注意get_boxes_shape的返回顺序。它返回的是(depths, heights, widths)与xyzwhd字段顺序width, height, depth不同。如果你的下游代码按宽、高、深解包需要显式调整depths, heights, widths boxes.get_boxes_shape()3. 留意to_tensor的默认导出模式。Boxes3D.to_tensor()无参时默认导出xyzxyz与 2DBoxes默认导出存储模式不同这是仓库已知的 API 分歧见类文档中的 #4251 注释。若需xyzwhd格式务必显式传modexyzwhd。4. 尺寸合法性校验。from_tensor默认validate_boxesTrue会拒绝非有限坐标与按模式约定非正的尺寸在xyzwhd下 width/height/depth 必须为正width0 会报错width0.5 合法。若在导出图捕获export场景下校验会被跳过源码中通过is_exporting()判断以便支持图捕获。小结Boxes3D的xyzwhd模式修复#4189看似只是 changelog 中一行描述实际修复的是一个隐蔽的数据正确性问题在 width、height、depth 互不相同的非对称盒子上字段顺序错位会产生看似合法、实则错误的结果并波及依赖同一顺序的get_boxes_shape等内部逻辑。仓库通过 kornia/geometry/boxes.py 中导入/导出两侧的对称实现以及 tests/geometry/test_boxes.py 中以非对称盒子为主的回归测试将这一约定牢牢固定下来。对于在 3D 检测、体素化或空间 AI 管线中使用 KorniaBoxes3D的开发者理解这一字段顺序约定是避免宽高深错位类 bug 的第一步。【免费下载链接】kornia Geometric Computer Vision Library for Spatial AI项目地址: https://gitcode.com/GitHub_Trending/ko/kornia创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关推荐

Kornia 颜色变换精度修复解析:YUV/XYZ 转换的整数输入与 float64 系数保真
Kornia 颜色变换精度修复解析:YUV/XYZ 转换的整数输入与 float64 系数保真

Kornia 颜色变换精度修复解析:YUV/XYZ 转换的整数输入与 float64 系数保真 【免费下载链接】kornia 🐍 Geometric Computer Vision Library for Spatial AI 项目地址: https://gitcode.com/GitHub_Trending/ko/kornia 本篇文章围绕 Kornia 仓库中 … · 2026/11/4 3:40:45

流程控制之if,switch判断
流程控制之if,switch判断

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 22:45:50

抖音 TikTok 作品批量下载与账号数据归档:DouK-Downloader 交付物清单
抖音 TikTok 作品批量下载与账号数据归档:DouK-Downloader 交付物清单

抖音 TikTok 作品批量下载与账号数据归档:DouK-Downloader 交付物清单 【免费下载链接】TikTokDownloader 抖音 / TikTok 平台作品下载/数据采集工具 项目地址: https://gitcode.com/GitHub_Trending/ti/TikTokDownloader DouK-Downloader(曾用名… · 2026/11/3 21:49:05

谷歌开源ARTEMIS:移动端AI自动化从原理到落地实践
谷歌开源ARTEMIS:移动端AI自动化从原理到落地实践

移动端 AI 自动化这两年一直挂着“看着热闹、落地稀碎”的标签。手机上的日常操作,本质上就是“看屏幕、定计划、动手操作”,这跟 AI 智能体最擅长的“感知、决策、执行”几乎是一一对应的,可真的能让 AI 自己跑到手机里点按钮、滑页面、填表… · 2026/11/4 4:43:46

微电网容量配置的双层优化与工程实践
微电网容量配置的双层优化与工程实践

1. 微电网容量配置的双层优化逻辑剖析微电网规划本质上是一个多目标决策问题,既要考虑初期建设成本,又要兼顾长期运行经济性。传统单层优化模型往往将容量配置和运行调度割裂处理,导致规划结果在实际运行中出现"水土不服"。这就好比… · 2026/11/4 4:43:46

智慧物业管理系统架构设计与实施指南
智慧物业管理系统架构设计与实施指南

1. 智慧物业管理系统核心架构解析武汉橙毅科技的智慧物业管理系统采用了典型的三层架构设计,这种架构在行业中被广泛验证为最稳定可靠的方案。我在实际部署过7个同类系统的经验中发现,这种分层方式能有效隔离业务逻辑,降低系统耦合度。1.1 基… · 2026/11/4 4:43:46

多模态RAG实战:跨模态对齐与融合的工程取舍
多模态RAG实战:跨模态对齐与融合的工程取舍

简介:面向自然语言处理与多模态学习方向的研究者与工程实践者,这份资料围绕多模态检索增强生成(Multimodal RAG)展开系统综述,聚焦跨模态对齐与推理这一核心难题,帮助读者理解如何借助外部动态知识库缓解大… · 2026/11/4 4:43:46

上下文即服务:AI应用从能用到愿用的关键基础设施
上下文即服务:AI应用从能用到愿用的关键基础设施

1. 这不是概念炒作,而是产品逻辑的底层迁移“上下文即服务”这六个字,最近在技术圈和产品会上被反复提起,但很多人听完还是云里雾里——它不像“大模型”“Agent”那样有具象的代码或界面,也不像“RAG”“微调”那样能立刻对应到一… · 2026/11/4 4:43:46

工业互联网解决方案:智能制造系统架构与实施
工业互联网解决方案:智能制造系统架构与实施

1. 项目概述:工业互联网如何重构生产管理三年前我去东莞一家注塑厂调研时,车间主任老张正带着三个班长满车间跑,他们需要实时盯着二十多台注塑机的状态,记录每个工单的完成进度,手动调整设备参数。这种场景在传统制造业… · 2026/11/4 4:42:45

双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 3:16:49

STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 6:04:24

DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 5:52:46

AI辅助技术栈评估:提升研发决策效率60%
AI辅助技术栈评估:提升研发决策效率60%

1. 项目背景与核心价值技术决策一直是研发团队面临的重大挑战。随着技术生态的快速演进,技术栈的选择、维护和迭代变得愈发复杂。我们团队在过去两年里,先后经历了三次重大技术栈迁移,每次都需要投入大量人力进行技术评估和风险分析。直到去年… · 2026/11/4 0:00:17

从生成Token到直接决策:Jev如何重塑AI Agent工程实践
从生成Token到直接决策:Jev如何重塑AI Agent工程实践

1. 从"生成文字"到"拍板决策":Jev 到底在解决什么问题大多数人第一次接触大模型,脑子里建立的模型是"输入问题、输出文字"。你问它今天天气怎么样,它给你一段描述;你让它写个周报,它给你… · 2026/11/4 0:00:17

32G统一内存跑大模型:内存账、TPS实测与端云分流
32G统一内存跑大模型:内存账、TPS实测与端云分流

想在一台 32G 统一内存的小主机上把大模型跑成"日常可用",这件事我前后折腾了小半年。标题里说的这台 Mac mini M6,是我们这次讨论的目标平台,具体到手规格以实物为准;但下面这套推算方法和实测思路,对任何统… · 2026/11/4 0:00:17

双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 3:16:49

STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 6:04:24

DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 5:52:46

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码