| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
iou3d算子支持ascend950 ascendc实现 Co-authored-by: lianjieyu<yulianjie@huawei.com> # message auto-generated for no-merge-commit merge: !1119 merge iou3d into master iou3d算子支持ascend950 ascendc实现 Created-by: lianjieyu Commit-by: lianjieyu Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> iou3d算子支持ascend950 ascendc实现 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> https://gitcode.com/cann/ops-cv/issues/617 ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] 🐛 Bug修复 - [x] ✨ 新特性 - [ ] ⚡ 性能优化 - [ ] ♻️ 重构 - [ ] 🧪 测试 - [ ] 📦 构建/CI - [ ] 🔧 配置变更 - [ ] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [ ] 🧹 代码清理 - [ ] ❓ 其他,请描述: See merge request: cann/ops-cv!1119 | 23 天前 | |
iou3d算子支持ascend950 ascendc实现 Co-authored-by: lianjieyu<yulianjie@huawei.com> # message auto-generated for no-merge-commit merge: !1119 merge iou3d into master iou3d算子支持ascend950 ascendc实现 Created-by: lianjieyu Commit-by: lianjieyu Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> iou3d算子支持ascend950 ascendc实现 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> https://gitcode.com/cann/ops-cv/issues/617 ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] 🐛 Bug修复 - [x] ✨ 新特性 - [ ] ⚡ 性能优化 - [ ] ♻️ 重构 - [ ] 🧪 测试 - [ ] 📦 构建/CI - [ ] 🔧 配置变更 - [ ] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [ ] 🧹 代码清理 - [ ] ❓ 其他,请描述: See merge request: cann/ops-cv!1119 | 23 天前 | |
修复日志质量扫描发现不合理日志 Co-authored-by: liu-wei<lovline.liuwei@huawei.com> # message auto-generated for no-merge-commit merge: !1297 merge master_log_fix into master 修复日志质量扫描发现不合理日志 Created-by: liu-wei Commit-by: liu-wei Merged-by: cann-robot Description: Closes #750 ## 描述 修复日志质量扫描发现的不合理日志,统一日志风格和代码格式。共 44 个文件,均为非功能性修改。 ### 修复类型 | 类型 | 示例 | 文件数 | |------|------|--------| | 日志文案规范化 | "set tiling data error" → "Failed to set tiling data" | 20+ | | 日志换行修复 | 字符串中嵌入 \n 的多行日志 → 单行 | 3 | | 代码格式对齐 | clang-format 缩进/换行统一 | 15+ | | License 头标准化 | HIT OpenBOAT 头 → 标准 CANN License 头 | 2 | | 多余空行清理 | 连续 2 个空行 → 1 个 | 2 | ### 涉及文件(按模块) | 模块 | 文件数 | |------|--------| | experimental/image | 4 | | experimental/objdetect | 1 | | image/ 各算子 tiling | 20+ | | image/ aicpu kernel | 4 | | objdetect/ | 8 | | common/ | 2 | | examples/ | 1 | ### 功能影响 纯日志文案和代码格式修改,无任何逻辑变更。 ## 关联的Issue ## 测试 ## 文档更新 ## 类型标签 - [ ] 🐛 Bug修复 - [ ] ✨ 新特性 - [ ] ⚡ 性能优化 - [ ] ♻️ 重构 - [ ] 🧪 测试 - [ ] 📦 构建/CI - [ ] 🔧 配置变更 - [ ] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [x] 🧹 代码清理 - [ ] ❓ 其他,请描述: See merge request: cann/ops-cv!1297 | 5 天前 | |
修复iou3d算子精度问题 Co-authored-by: lianjieyu<yulianjie@huawei.com> # message auto-generated for no-merge-commit merge: !1197 merge iou3d into master 修复iou3d算子精度问题 Created-by: lianjieyu Commit-by: lianjieyu Merged-by: cann-robot Description: ## 描述 ### 背景与根因 Iou3D 的 A5 实现与 MMCV CUDA 参考实现之间存在浮点运算路径差异,主要包括顶点生成顺序、交点收集与去重、极角排序分支以及面积累加顺序。完成几何路径对齐后,100 条用例的 TTK 原生 L1 三方校验仍有 iou3d_L2_008 失败。 隔离 AscendC::Sin 和 AscendC::Cos 后确认:该用例的剩余偏差来自默认 Cos 在 |theta| 约为 2.8~3.0 的角度归约精度,不是 Sin。以 CPU FP64 golden 为基准时,修复前该用例的小值域 ErrorCount 为 NPU/GPU=13/6,Ratio=2.1666666667,超过 L1 门槛 2.0。 ### 修改内容 1. 对齐 MMCV 几何计算路径: - BoxCorners 按 MMCV 的左下、右下、右上、左上顺序生成轴对齐顶点后逐点旋转; - CollectCorners 移除相对阈值去重,候选点上限由 8 调整为 16,并按 MMCV 顺序收集边交点和包含点; - SortPolygonArea 补齐 diamond-angle 第三象限分支 keyRaw = -2.0f - t,使排序与 atan2 的 [-pi, pi] 分支一致; - 所有 m >= 3 的多边形统一使用排序后首顶点扇形叉积累加,末尾一次 abs / 2,对齐 MMCV 的 fp32 运算顺序; - 对有限输入增加 Z 轴无交集短路,避免 BEV 中间结果溢出后产生 NaN * 0。 2. 仅修复 Cos,保留原生 Sin: - 使用官方 AscendC::Cos<float, false, CosConfig{CosAlgo::RADIAN_REDUCTION}> 生成高精度候选值; - host 侧使用同一 CosConfig 调用 GetCosMaxMinTmpSize,通过新增的 cosTmpSize tiling 字段向 kernel 传递显式 shared temporary buffer 大小; - 默认 Sin/Cos 仍先按原路径执行,仅在 2.8 <= |theta| <= 3.0 且高精度值与默认值差异 > 5.9e-8 时覆盖默认 Cos; - 不按 testcase、shape、batch 或元素下标特判,Sin 调用和结果缓冲保持不变; - 删除实验阶段的自拟合 FittedCos、Cody-Waite 归约和 Chebyshev 多项式,最终只使用现成官方 API。 涉及文件: - objdetect/iou3d/op_kernel/arch35/iou3d.h - objdetect/iou3d/op_kernel/arch35/iou3d_tiling_data.h - objdetect/iou3d/op_host/arch35/iou3d_tiling_arch35.cpp ### 影响范围 - 仅修改 arch35 的 Iou3D kernel/tiling 实现,不改变算子接口、输入输出 dtype、shape 或格式约束; - 100 条回归中仅 iou3d_L2_008 输出发生变化,其余 99 条逐元素完全一致; - iou3d_L2_008 改变 765/31250 个元素(2.448%),最大绝对变化 5.364418029785156e-7; - 完整 100 条共改变 765/49791 个元素(1.5364%),无精度状态回退; - 算子仍按 Vector-bound 场景评估。 ## 关联的 Issue 关联并修复:[#666 Iou3D 算子精度问题](https://gitcode.com/cann/ops-cv/issues/666) ## 测试 ### 测试方法 - TTK kernel 直调; - 从 kernel_iou3d.csv 选取 100 条覆盖不同 dtype、shape 和值域的用例; - CPU golden 使用 FP64 升精度,TTK 参数为 --golden-mode Promote; - GPU golden 对齐 MMCV/PyTorch 实现; - 精度级别:L1; - 三方结果使用 TTK 原生 CrossCheckComparison 判定。 ### 精度结果 | 项目 | 修复前 | 修复后 | |---|---:|---:| | TTK kernel 直调基础精度 | - | 100/100 PASS | | CPU FP64 / NPU / GPU 原生 L1 | 99/100 PASS | 100/100 PASS | | iou3d_L2_008 状态 | FAIL | PASS | | iou3d_L2_008 MARE Ratio | 1.0662077995 | 1.0662077995 | | iou3d_L2_008 MERE Ratio | 1.0590700508 | 1.0399741779 | | iou3d_L2_008 RMSE Ratio | 0.2802136132 | 0.2696275100 | | iou3d_L2_008 小值域 ErrorCount(NPU/GPU) | 13/6 | 12/6 | | iou3d_L2_008 小值域 ErrorCount Ratio | 2.1666666667 | 2.0(L1 PASS,位于门槛边界) | ### 性能结果 同一固定输入下的 kernel 计时: | 指标 | 结果 | |---|---:| | baseline A5 | 806.195 us | | 自拟合 Cos 实验版 A5 | 872.424 us | | 最终官方 API 版 A5 | 836.202 us | | 最终版相对 baseline | +3.7221% | | 最终版相对自拟合版 | -4.1519% | | GPU NVTX CUDA-kernel p50 | 315.745 us | | 最终 A5 / GPU | 2.6483x | ### 自动流水线 截至 2026-07-31、PR head 96ae285cdeb532d2636dd054aa37c2688407c6ff:编译矩阵、API_Check、PreSmoke_A900、PreSmoke_ATK_Test_A2 已通过;UT_Test 与 SCA 仍显示失败,具体状态和后续重跑结果以 PR 页面实时流水线为准,本描述不将其误标为通过。 ## 文档更新 无对外 API 或 README 文档变更;仅同步更新 kernel/tiling 实现注释。 ## 类型标签 - [x] 🐛 Bug修复 - [ ] ✨ 新特性 - [ ] ⚡ 性能优化 - [ ] ♻️ 重构 - [ ] 🧪 测试 - [ ] 📦 构建/CI - [ ] 🔧 配置变更 - [ ] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [ ] 🧹 代码清理 - [ ] ❓ 其他,请描述: See merge request: cann/ops-cv!1197 | 15 天前 | |
修复iou3d算子精度问题 Co-authored-by: lianjieyu<yulianjie@huawei.com> # message auto-generated for no-merge-commit merge: !1197 merge iou3d into master 修复iou3d算子精度问题 Created-by: lianjieyu Commit-by: lianjieyu Merged-by: cann-robot Description: ## 描述 ### 背景与根因 Iou3D 的 A5 实现与 MMCV CUDA 参考实现之间存在浮点运算路径差异,主要包括顶点生成顺序、交点收集与去重、极角排序分支以及面积累加顺序。完成几何路径对齐后,100 条用例的 TTK 原生 L1 三方校验仍有 iou3d_L2_008 失败。 隔离 AscendC::Sin 和 AscendC::Cos 后确认:该用例的剩余偏差来自默认 Cos 在 |theta| 约为 2.8~3.0 的角度归约精度,不是 Sin。以 CPU FP64 golden 为基准时,修复前该用例的小值域 ErrorCount 为 NPU/GPU=13/6,Ratio=2.1666666667,超过 L1 门槛 2.0。 ### 修改内容 1. 对齐 MMCV 几何计算路径: - BoxCorners 按 MMCV 的左下、右下、右上、左上顺序生成轴对齐顶点后逐点旋转; - CollectCorners 移除相对阈值去重,候选点上限由 8 调整为 16,并按 MMCV 顺序收集边交点和包含点; - SortPolygonArea 补齐 diamond-angle 第三象限分支 keyRaw = -2.0f - t,使排序与 atan2 的 [-pi, pi] 分支一致; - 所有 m >= 3 的多边形统一使用排序后首顶点扇形叉积累加,末尾一次 abs / 2,对齐 MMCV 的 fp32 运算顺序; - 对有限输入增加 Z 轴无交集短路,避免 BEV 中间结果溢出后产生 NaN * 0。 2. 仅修复 Cos,保留原生 Sin: - 使用官方 AscendC::Cos<float, false, CosConfig{CosAlgo::RADIAN_REDUCTION}> 生成高精度候选值; - host 侧使用同一 CosConfig 调用 GetCosMaxMinTmpSize,通过新增的 cosTmpSize tiling 字段向 kernel 传递显式 shared temporary buffer 大小; - 默认 Sin/Cos 仍先按原路径执行,仅在 2.8 <= |theta| <= 3.0 且高精度值与默认值差异 > 5.9e-8 时覆盖默认 Cos; - 不按 testcase、shape、batch 或元素下标特判,Sin 调用和结果缓冲保持不变; - 删除实验阶段的自拟合 FittedCos、Cody-Waite 归约和 Chebyshev 多项式,最终只使用现成官方 API。 涉及文件: - objdetect/iou3d/op_kernel/arch35/iou3d.h - objdetect/iou3d/op_kernel/arch35/iou3d_tiling_data.h - objdetect/iou3d/op_host/arch35/iou3d_tiling_arch35.cpp ### 影响范围 - 仅修改 arch35 的 Iou3D kernel/tiling 实现,不改变算子接口、输入输出 dtype、shape 或格式约束; - 100 条回归中仅 iou3d_L2_008 输出发生变化,其余 99 条逐元素完全一致; - iou3d_L2_008 改变 765/31250 个元素(2.448%),最大绝对变化 5.364418029785156e-7; - 完整 100 条共改变 765/49791 个元素(1.5364%),无精度状态回退; - 算子仍按 Vector-bound 场景评估。 ## 关联的 Issue 关联并修复:[#666 Iou3D 算子精度问题](https://gitcode.com/cann/ops-cv/issues/666) ## 测试 ### 测试方法 - TTK kernel 直调; - 从 kernel_iou3d.csv 选取 100 条覆盖不同 dtype、shape 和值域的用例; - CPU golden 使用 FP64 升精度,TTK 参数为 --golden-mode Promote; - GPU golden 对齐 MMCV/PyTorch 实现; - 精度级别:L1; - 三方结果使用 TTK 原生 CrossCheckComparison 判定。 ### 精度结果 | 项目 | 修复前 | 修复后 | |---|---:|---:| | TTK kernel 直调基础精度 | - | 100/100 PASS | | CPU FP64 / NPU / GPU 原生 L1 | 99/100 PASS | 100/100 PASS | | iou3d_L2_008 状态 | FAIL | PASS | | iou3d_L2_008 MARE Ratio | 1.0662077995 | 1.0662077995 | | iou3d_L2_008 MERE Ratio | 1.0590700508 | 1.0399741779 | | iou3d_L2_008 RMSE Ratio | 0.2802136132 | 0.2696275100 | | iou3d_L2_008 小值域 ErrorCount(NPU/GPU) | 13/6 | 12/6 | | iou3d_L2_008 小值域 ErrorCount Ratio | 2.1666666667 | 2.0(L1 PASS,位于门槛边界) | ### 性能结果 同一固定输入下的 kernel 计时: | 指标 | 结果 | |---|---:| | baseline A5 | 806.195 us | | 自拟合 Cos 实验版 A5 | 872.424 us | | 最终官方 API 版 A5 | 836.202 us | | 最终版相对 baseline | +3.7221% | | 最终版相对自拟合版 | -4.1519% | | GPU NVTX CUDA-kernel p50 | 315.745 us | | 最终 A5 / GPU | 2.6483x | ### 自动流水线 截至 2026-07-31、PR head 96ae285cdeb532d2636dd054aa37c2688407c6ff:编译矩阵、API_Check、PreSmoke_A900、PreSmoke_ATK_Test_A2 已通过;UT_Test 与 SCA 仍显示失败,具体状态和后续重跑结果以 PR 页面实时流水线为准,本描述不将其误标为通过。 ## 文档更新 无对外 API 或 README 文档变更;仅同步更新 kernel/tiling 实现注释。 ## 类型标签 - [x] 🐛 Bug修复 - [ ] ✨ 新特性 - [ ] ⚡ 性能优化 - [ ] ♻️ 重构 - [ ] 🧪 测试 - [ ] 📦 构建/CI - [ ] 🔧 配置变更 - [ ] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [ ] 🧹 代码清理 - [ ] ❓ 其他,请描述: See merge request: cann/ops-cv!1197 | 15 天前 | |
iou3d算子支持ascend950 ascendc实现 Co-authored-by: lianjieyu<yulianjie@huawei.com> # message auto-generated for no-merge-commit merge: !1119 merge iou3d into master iou3d算子支持ascend950 ascendc实现 Created-by: lianjieyu Commit-by: lianjieyu Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> iou3d算子支持ascend950 ascendc实现 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> https://gitcode.com/cann/ops-cv/issues/617 ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] 🐛 Bug修复 - [x] ✨ 新特性 - [ ] ⚡ 性能优化 - [ ] ♻️ 重构 - [ ] 🧪 测试 - [ ] 📦 构建/CI - [ ] 🔧 配置变更 - [ ] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [ ] 🧹 代码清理 - [ ] ❓ 其他,请描述: See merge request: cann/ops-cv!1119 | 23 天前 | |
iou3d算子支持ascend950 ascendc实现 Co-authored-by: lianjieyu<yulianjie@huawei.com> # message auto-generated for no-merge-commit merge: !1119 merge iou3d into master iou3d算子支持ascend950 ascendc实现 Created-by: lianjieyu Commit-by: lianjieyu Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> iou3d算子支持ascend950 ascendc实现 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> https://gitcode.com/cann/ops-cv/issues/617 ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] 🐛 Bug修复 - [x] ✨ 新特性 - [ ] ⚡ 性能优化 - [ ] ♻️ 重构 - [ ] 🧪 测试 - [ ] 📦 构建/CI - [ ] 🔧 配置变更 - [ ] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [ ] 🧹 代码清理 - [ ] ❓ 其他,请描述: See merge request: cann/ops-cv!1119 | 23 天前 |
Iou3D
产品支持情况
| 产品 | 是否支持 |
|---|---|
| Ascend 950PR/Ascend 950DT | √ |
| Atlas A3 训练系列产品/Atlas A3 推理系列产品 | √ |
| Atlas A2 训练系列产品/Atlas A2 推理系列产品 | √ |
| Atlas 200I/500 A2 推理产品 | × |
| Atlas 推理系列产品 | √ |
| Atlas 训练系列产品 | √ |
功能说明
-
算子功能:计算两组3D旋转框(7-DoF:
[x, y, z, w, h, d, theta])之间的3D IoU矩阵。 -
计算原理:
- BEV投影:每个框在XY平面按
theta旋转,得到4个顶点:P = center ± 0.5*w*(cos, sin) ± 0.5*h*(-sin, cos)。 - 交集面积:顶点包含测试 + 边相交,收集交集多边形顶点;0/3顶点直接算三角形面积,>3顶点质心分解 + 极角排序求和。
- Z轴重叠:
real_d = max(min(z1max, z2max) - max(z1min, z2min), 0),其中z_min = z - 0.5*d,z_max = z + 0.5*d。
- BEV投影:每个框在XY平面按
-
计算公式:
IoU3D=bev_area×real_dVA+VB−Vinter+ε,ε=10−6\text{IoU}_{3D} = \frac{\text{bev\_area} \times \text{real\_d}}{V_A + V_B - V_{inter} + \varepsilon}, \quad \varepsilon = 10^{-6} IoU3D=VA+VB−Vinter+εbev_area×real_d,ε=10−6
其中
V = w * h * d为框体积,V_inter = bev_area * real_d为交集体积。 -
数值稳定三守卫:分母加
epsilon = 1e-6防除零;Z轴重叠clamp到非负;退化多边形(顶点 < 3)面积置0。
参数说明
| 参数名 | 输入/输出/属性 | 描述 | 数据类型 | 数据格式 |
|---|---|---|---|---|
| bboxes | 输入 | 预测框,shape [B, 7, N]。第二维为7-DoF [x, y, z, w, h, d, theta]。 |
FLOAT | ND |
| gtboxes | 输入 | 真值框,shape [B, 7, K]。第二维为7-DoF [x, y, z, w, h, d, theta]。 |
FLOAT | ND |
| iou | 输出 | 3D IoU矩阵,shape [B, N, K],值域 [0, 1]。iou[b, n, k] = 第b批第n个预测框与第k个真值框的3D IoU。 |
FLOAT | ND |
- 7-DoF语义:
x, y, z为中心坐标,w, h, d为框在三个方向的尺寸,theta为绕Z轴的旋转角(弧度)。 - 三个Tensor的batch维
B必须一致;bboxes.shape[1] == gtboxes.shape[1] == 7。
约束说明
- 数据类型:
bboxes、gtboxes、iou均必须为float32。 - channel固定为7:
bboxes.shape[1]与gtboxes.shape[1]必须等于7(7-DoF),否则拒绝。 - K 无上限:对标 mmcv,
gtboxes.shape[2](K)不设上限;逐对计算的UB与极角排序(固定32元素)缓冲与K无耦合,任意K成立。 - 无效框排序:同一batch内无效框(
w * h * d = 0)不能排在有效框之前。
调用说明
| 调用方式 | 调用样例 | 说明 |
|---|---|---|
| GE图模式 | test_geir_iou3d | 通过算子IR构图方式调用Iou3D算子 |