| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
bounding_box_decode Co-authored-by: wow5522<wuao1@huawei.com> # message auto-generated for no-merge-commit merge: !1307 merge master into master bounding_box_decode Created-by: wow5523 Commit-by: wow5522 Merged-by: cann-robot Description: ## 描述 本 PR 新增了 bounding_box_decode 算子(目标检测边界框解码)的完整实现,覆盖 ascend950 架构。改动包括算子定义与注册、shape/dtype 推理、host 侧 tiling 切分逻辑、kernel 端解码计算,以及配套的 golden 脚本和单元测试。核心解码流程为:根据 rois(anchor box)计算宽高与中心,结合 deltas 反标准化得到 dx/dy/dw/dh,再通过 gw/gh/gx/gy 计算并裁剪出 bboxes,支持 fp32 与 fp16 两种数据类型以及空张量场景。 主要改动 1)算子定义与注册: 在 bounding_box_decode_def.cpp 中新增 BoundingBoxDecode 算子定义,声明 rois、deltas 两个输入和 bboxes 输出(支持 DT_FLOAT16/DT_FLOAT、FORMAT_ND),并定义 means、stds、max_shape、wh_ratio_clip 属性及 ascend950 的 AICore 配置。 Shape 与 Dtype 推理: 新增 InferShapeForBoundingBoxDecode 和 InferDataTypeForBoundingBoxDecode,输出形状与输入保持一致([N, 4]),校验 rank 为 2、最后一维为 4、两输入形状/类型一致,并支持未知 rank 与空张量(N=0)场景。 2)Host 侧 Tiling 逻辑: 新增 TilingFunc 及 BoundingBoxDecodePreCheck/ComputeMultiCoreSplit/ComputeUbSplit 等逻辑,完成多核按 box 数切分、UB 按 256B 对齐切分、异常校验、属性透传,以及基于 dtype 的 TilingKey 设置与空张量分支处理。 3)Kernel 端解码实现: 新增 BoundingBoxDecodeKernel 及多个 __simd_vf__ 向量函数(AnchorPreVF、DeltaDeStdVF、DecodeGwGxVF、BoxClipVF),实现 anchor 预处理、delta 反标准化、exp 解码与裁剪,fp32 路径使用自定义 Cody-Waite+Taylor 高精度 exp,fp16 路径使用 NPU 硬件 Reg::Exp。 4)测试与参考实现: 新增 golden.py 提供 torch 参考实现与容差配置,并新增 tiling 单元测试(覆盖 fp32/fp16、空张量、多核、非法 shape/dtype 等场景)、infershape 单元测试,以及一个 ge 运行示例。 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> ## 关联的Issue https://gitcode.com/cann/ops-cv/issues/754 <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] 🐛 Bug修复 - [x] ✨ 新特性 - [ ] ⚡ 性能优化 - [ ] ♻️ 重构 - [ ] 🧪 测试 - [ ] 📦 构建/CI - [ ] 🔧 配置变更 - [ ] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [ ] 🧹 代码清理 - [ ] ❓ 其他,请描述: See merge request: cann/ops-cv!1307 | 1 天前 | |
bounding_box_decode Co-authored-by: wow5522<wuao1@huawei.com> # message auto-generated for no-merge-commit merge: !1307 merge master into master bounding_box_decode Created-by: wow5523 Commit-by: wow5522 Merged-by: cann-robot Description: ## 描述 本 PR 新增了 bounding_box_decode 算子(目标检测边界框解码)的完整实现,覆盖 ascend950 架构。改动包括算子定义与注册、shape/dtype 推理、host 侧 tiling 切分逻辑、kernel 端解码计算,以及配套的 golden 脚本和单元测试。核心解码流程为:根据 rois(anchor box)计算宽高与中心,结合 deltas 反标准化得到 dx/dy/dw/dh,再通过 gw/gh/gx/gy 计算并裁剪出 bboxes,支持 fp32 与 fp16 两种数据类型以及空张量场景。 主要改动 1)算子定义与注册: 在 bounding_box_decode_def.cpp 中新增 BoundingBoxDecode 算子定义,声明 rois、deltas 两个输入和 bboxes 输出(支持 DT_FLOAT16/DT_FLOAT、FORMAT_ND),并定义 means、stds、max_shape、wh_ratio_clip 属性及 ascend950 的 AICore 配置。 Shape 与 Dtype 推理: 新增 InferShapeForBoundingBoxDecode 和 InferDataTypeForBoundingBoxDecode,输出形状与输入保持一致([N, 4]),校验 rank 为 2、最后一维为 4、两输入形状/类型一致,并支持未知 rank 与空张量(N=0)场景。 2)Host 侧 Tiling 逻辑: 新增 TilingFunc 及 BoundingBoxDecodePreCheck/ComputeMultiCoreSplit/ComputeUbSplit 等逻辑,完成多核按 box 数切分、UB 按 256B 对齐切分、异常校验、属性透传,以及基于 dtype 的 TilingKey 设置与空张量分支处理。 3)Kernel 端解码实现: 新增 BoundingBoxDecodeKernel 及多个 __simd_vf__ 向量函数(AnchorPreVF、DeltaDeStdVF、DecodeGwGxVF、BoxClipVF),实现 anchor 预处理、delta 反标准化、exp 解码与裁剪,fp32 路径使用自定义 Cody-Waite+Taylor 高精度 exp,fp16 路径使用 NPU 硬件 Reg::Exp。 4)测试与参考实现: 新增 golden.py 提供 torch 参考实现与容差配置,并新增 tiling 单元测试(覆盖 fp32/fp16、空张量、多核、非法 shape/dtype 等场景)、infershape 单元测试,以及一个 ge 运行示例。 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> ## 关联的Issue https://gitcode.com/cann/ops-cv/issues/754 <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] 🐛 Bug修复 - [x] ✨ 新特性 - [ ] ⚡ 性能优化 - [ ] ♻️ 重构 - [ ] 🧪 测试 - [ ] 📦 构建/CI - [ ] 🔧 配置变更 - [ ] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [ ] 🧹 代码清理 - [ ] ❓ 其他,请描述: See merge request: cann/ops-cv!1307 | 1 天前 | |
bounding_box_decode Co-authored-by: wow5522<wuao1@huawei.com> # message auto-generated for no-merge-commit merge: !1307 merge master into master bounding_box_decode Created-by: wow5523 Commit-by: wow5522 Merged-by: cann-robot Description: ## 描述 本 PR 新增了 bounding_box_decode 算子(目标检测边界框解码)的完整实现,覆盖 ascend950 架构。改动包括算子定义与注册、shape/dtype 推理、host 侧 tiling 切分逻辑、kernel 端解码计算,以及配套的 golden 脚本和单元测试。核心解码流程为:根据 rois(anchor box)计算宽高与中心,结合 deltas 反标准化得到 dx/dy/dw/dh,再通过 gw/gh/gx/gy 计算并裁剪出 bboxes,支持 fp32 与 fp16 两种数据类型以及空张量场景。 主要改动 1)算子定义与注册: 在 bounding_box_decode_def.cpp 中新增 BoundingBoxDecode 算子定义,声明 rois、deltas 两个输入和 bboxes 输出(支持 DT_FLOAT16/DT_FLOAT、FORMAT_ND),并定义 means、stds、max_shape、wh_ratio_clip 属性及 ascend950 的 AICore 配置。 Shape 与 Dtype 推理: 新增 InferShapeForBoundingBoxDecode 和 InferDataTypeForBoundingBoxDecode,输出形状与输入保持一致([N, 4]),校验 rank 为 2、最后一维为 4、两输入形状/类型一致,并支持未知 rank 与空张量(N=0)场景。 2)Host 侧 Tiling 逻辑: 新增 TilingFunc 及 BoundingBoxDecodePreCheck/ComputeMultiCoreSplit/ComputeUbSplit 等逻辑,完成多核按 box 数切分、UB 按 256B 对齐切分、异常校验、属性透传,以及基于 dtype 的 TilingKey 设置与空张量分支处理。 3)Kernel 端解码实现: 新增 BoundingBoxDecodeKernel 及多个 __simd_vf__ 向量函数(AnchorPreVF、DeltaDeStdVF、DecodeGwGxVF、BoxClipVF),实现 anchor 预处理、delta 反标准化、exp 解码与裁剪,fp32 路径使用自定义 Cody-Waite+Taylor 高精度 exp,fp16 路径使用 NPU 硬件 Reg::Exp。 4)测试与参考实现: 新增 golden.py 提供 torch 参考实现与容差配置,并新增 tiling 单元测试(覆盖 fp32/fp16、空张量、多核、非法 shape/dtype 等场景)、infershape 单元测试,以及一个 ge 运行示例。 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> ## 关联的Issue https://gitcode.com/cann/ops-cv/issues/754 <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] 🐛 Bug修复 - [x] ✨ 新特性 - [ ] ⚡ 性能优化 - [ ] ♻️ 重构 - [ ] 🧪 测试 - [ ] 📦 构建/CI - [ ] 🔧 配置变更 - [ ] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [ ] 🧹 代码清理 - [ ] ❓ 其他,请描述: See merge request: cann/ops-cv!1307 | 1 天前 | |
bounding_box_decode Co-authored-by: wow5522<wuao1@huawei.com> # message auto-generated for no-merge-commit merge: !1307 merge master into master bounding_box_decode Created-by: wow5523 Commit-by: wow5522 Merged-by: cann-robot Description: ## 描述 本 PR 新增了 bounding_box_decode 算子(目标检测边界框解码)的完整实现,覆盖 ascend950 架构。改动包括算子定义与注册、shape/dtype 推理、host 侧 tiling 切分逻辑、kernel 端解码计算,以及配套的 golden 脚本和单元测试。核心解码流程为:根据 rois(anchor box)计算宽高与中心,结合 deltas 反标准化得到 dx/dy/dw/dh,再通过 gw/gh/gx/gy 计算并裁剪出 bboxes,支持 fp32 与 fp16 两种数据类型以及空张量场景。 主要改动 1)算子定义与注册: 在 bounding_box_decode_def.cpp 中新增 BoundingBoxDecode 算子定义,声明 rois、deltas 两个输入和 bboxes 输出(支持 DT_FLOAT16/DT_FLOAT、FORMAT_ND),并定义 means、stds、max_shape、wh_ratio_clip 属性及 ascend950 的 AICore 配置。 Shape 与 Dtype 推理: 新增 InferShapeForBoundingBoxDecode 和 InferDataTypeForBoundingBoxDecode,输出形状与输入保持一致([N, 4]),校验 rank 为 2、最后一维为 4、两输入形状/类型一致,并支持未知 rank 与空张量(N=0)场景。 2)Host 侧 Tiling 逻辑: 新增 TilingFunc 及 BoundingBoxDecodePreCheck/ComputeMultiCoreSplit/ComputeUbSplit 等逻辑,完成多核按 box 数切分、UB 按 256B 对齐切分、异常校验、属性透传,以及基于 dtype 的 TilingKey 设置与空张量分支处理。 3)Kernel 端解码实现: 新增 BoundingBoxDecodeKernel 及多个 __simd_vf__ 向量函数(AnchorPreVF、DeltaDeStdVF、DecodeGwGxVF、BoxClipVF),实现 anchor 预处理、delta 反标准化、exp 解码与裁剪,fp32 路径使用自定义 Cody-Waite+Taylor 高精度 exp,fp16 路径使用 NPU 硬件 Reg::Exp。 4)测试与参考实现: 新增 golden.py 提供 torch 参考实现与容差配置,并新增 tiling 单元测试(覆盖 fp32/fp16、空张量、多核、非法 shape/dtype 等场景)、infershape 单元测试,以及一个 ge 运行示例。 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> ## 关联的Issue https://gitcode.com/cann/ops-cv/issues/754 <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] 🐛 Bug修复 - [x] ✨ 新特性 - [ ] ⚡ 性能优化 - [ ] ♻️ 重构 - [ ] 🧪 测试 - [ ] 📦 构建/CI - [ ] 🔧 配置变更 - [ ] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [ ] 🧹 代码清理 - [ ] ❓ 其他,请描述: See merge request: cann/ops-cv!1307 | 1 天前 | |
bounding_box_decode Co-authored-by: wow5522<wuao1@huawei.com> # message auto-generated for no-merge-commit merge: !1307 merge master into master bounding_box_decode Created-by: wow5523 Commit-by: wow5522 Merged-by: cann-robot Description: ## 描述 本 PR 新增了 bounding_box_decode 算子(目标检测边界框解码)的完整实现,覆盖 ascend950 架构。改动包括算子定义与注册、shape/dtype 推理、host 侧 tiling 切分逻辑、kernel 端解码计算,以及配套的 golden 脚本和单元测试。核心解码流程为:根据 rois(anchor box)计算宽高与中心,结合 deltas 反标准化得到 dx/dy/dw/dh,再通过 gw/gh/gx/gy 计算并裁剪出 bboxes,支持 fp32 与 fp16 两种数据类型以及空张量场景。 主要改动 1)算子定义与注册: 在 bounding_box_decode_def.cpp 中新增 BoundingBoxDecode 算子定义,声明 rois、deltas 两个输入和 bboxes 输出(支持 DT_FLOAT16/DT_FLOAT、FORMAT_ND),并定义 means、stds、max_shape、wh_ratio_clip 属性及 ascend950 的 AICore 配置。 Shape 与 Dtype 推理: 新增 InferShapeForBoundingBoxDecode 和 InferDataTypeForBoundingBoxDecode,输出形状与输入保持一致([N, 4]),校验 rank 为 2、最后一维为 4、两输入形状/类型一致,并支持未知 rank 与空张量(N=0)场景。 2)Host 侧 Tiling 逻辑: 新增 TilingFunc 及 BoundingBoxDecodePreCheck/ComputeMultiCoreSplit/ComputeUbSplit 等逻辑,完成多核按 box 数切分、UB 按 256B 对齐切分、异常校验、属性透传,以及基于 dtype 的 TilingKey 设置与空张量分支处理。 3)Kernel 端解码实现: 新增 BoundingBoxDecodeKernel 及多个 __simd_vf__ 向量函数(AnchorPreVF、DeltaDeStdVF、DecodeGwGxVF、BoxClipVF),实现 anchor 预处理、delta 反标准化、exp 解码与裁剪,fp32 路径使用自定义 Cody-Waite+Taylor 高精度 exp,fp16 路径使用 NPU 硬件 Reg::Exp。 4)测试与参考实现: 新增 golden.py 提供 torch 参考实现与容差配置,并新增 tiling 单元测试(覆盖 fp32/fp16、空张量、多核、非法 shape/dtype 等场景)、infershape 单元测试,以及一个 ge 运行示例。 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> ## 关联的Issue https://gitcode.com/cann/ops-cv/issues/754 <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] 🐛 Bug修复 - [x] ✨ 新特性 - [ ] ⚡ 性能优化 - [ ] ♻️ 重构 - [ ] 🧪 测试 - [ ] 📦 构建/CI - [ ] 🔧 配置变更 - [ ] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [ ] 🧹 代码清理 - [ ] ❓ 其他,请描述: See merge request: cann/ops-cv!1307 | 1 天前 | |
bounding_box_decode Co-authored-by: wow5522<wuao1@huawei.com> # message auto-generated for no-merge-commit merge: !1307 merge master into master bounding_box_decode Created-by: wow5523 Commit-by: wow5522 Merged-by: cann-robot Description: ## 描述 本 PR 新增了 bounding_box_decode 算子(目标检测边界框解码)的完整实现,覆盖 ascend950 架构。改动包括算子定义与注册、shape/dtype 推理、host 侧 tiling 切分逻辑、kernel 端解码计算,以及配套的 golden 脚本和单元测试。核心解码流程为:根据 rois(anchor box)计算宽高与中心,结合 deltas 反标准化得到 dx/dy/dw/dh,再通过 gw/gh/gx/gy 计算并裁剪出 bboxes,支持 fp32 与 fp16 两种数据类型以及空张量场景。 主要改动 1)算子定义与注册: 在 bounding_box_decode_def.cpp 中新增 BoundingBoxDecode 算子定义,声明 rois、deltas 两个输入和 bboxes 输出(支持 DT_FLOAT16/DT_FLOAT、FORMAT_ND),并定义 means、stds、max_shape、wh_ratio_clip 属性及 ascend950 的 AICore 配置。 Shape 与 Dtype 推理: 新增 InferShapeForBoundingBoxDecode 和 InferDataTypeForBoundingBoxDecode,输出形状与输入保持一致([N, 4]),校验 rank 为 2、最后一维为 4、两输入形状/类型一致,并支持未知 rank 与空张量(N=0)场景。 2)Host 侧 Tiling 逻辑: 新增 TilingFunc 及 BoundingBoxDecodePreCheck/ComputeMultiCoreSplit/ComputeUbSplit 等逻辑,完成多核按 box 数切分、UB 按 256B 对齐切分、异常校验、属性透传,以及基于 dtype 的 TilingKey 设置与空张量分支处理。 3)Kernel 端解码实现: 新增 BoundingBoxDecodeKernel 及多个 __simd_vf__ 向量函数(AnchorPreVF、DeltaDeStdVF、DecodeGwGxVF、BoxClipVF),实现 anchor 预处理、delta 反标准化、exp 解码与裁剪,fp32 路径使用自定义 Cody-Waite+Taylor 高精度 exp,fp16 路径使用 NPU 硬件 Reg::Exp。 4)测试与参考实现: 新增 golden.py 提供 torch 参考实现与容差配置,并新增 tiling 单元测试(覆盖 fp32/fp16、空张量、多核、非法 shape/dtype 等场景)、infershape 单元测试,以及一个 ge 运行示例。 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> ## 关联的Issue https://gitcode.com/cann/ops-cv/issues/754 <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] 🐛 Bug修复 - [x] ✨ 新特性 - [ ] ⚡ 性能优化 - [ ] ♻️ 重构 - [ ] 🧪 测试 - [ ] 📦 构建/CI - [ ] 🔧 配置变更 - [ ] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [ ] 🧹 代码清理 - [ ] ❓ 其他,请描述: See merge request: cann/ops-cv!1307 | 1 天前 | |
BoundingBoxDecode 修改资料支持A2/A3 Co-authored-by: wow5522<wuao1@huawei.com> # message auto-generated for no-merge-commit merge: !1332 merge master into master BoundingBoxDecode 修改资料支持A2/A3 Created-by: wow5523 Commit-by: wow5522 Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] 🐛 Bug修复 - [ ] ✨ 新特性 - [ ] ⚡ 性能优化 - [ ] ♻️ 重构 - [ ] 🧪 测试 - [ ] 📦 构建/CI - [ ] 🔧 配置变更 - [ ] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [ ] 🧹 代码清理 - [ ] ❓ 其他,请描述: See merge request: cann/ops-cv!1332 | 1 天前 |
BoundingBoxDecode
产品支持情况
| 产品 | 是否支持 |
|---|---|
| Ascend 950PR/Ascend 950DT | √ |
| Atlas A3 训练系列产品/Atlas A3 推理系列产品 | √ |
| Atlas A2 训练系列产品/Atlas A2 推理系列产品 | √ |
| Atlas 200I/500 A2 推理产品 | × |
| Atlas 推理系列产品 | × |
| Atlas 训练系列产品 | × |
功能说明
将目标检测回归分支预测的偏移量deltas结合锚框anchor_box解码为图像坐标空间的绝对框boxes,用于后续NMS、画框或COCO mAP评估。该算子是bounding_box_encode的逆运算,两者共享同一套(means, stds)标准化参数与(x1, y1, x2, y2)锚框坐标约定,配套使用才能保证训练与推理编码一致。
设锚框anchor_box=(x1, y1, x2, y2)、偏移量deltas=(dx', dy', dw', dh')、means=(m0,m1,m2,m3)、stds=(s0,s1,s2,s3)、max_shape=(H, W),解码步骤为:
pw=x2−x1+1,pcx=(x1+x2)×0.5pw = x2 - x1 + 1,\quad pcx = (x1 + x2) \times 0.5 pw=x2−x1+1,pcx=(x1+x2)×0.5
dx=dx′×s0+m0,dw=dw′×s2+m2dx = dx' \times s0 + m0,\quad dw = dw' \times s2 + m2 dx=dx′×s0+m0,dw=dw′×s2+m2
gw=pw×exp(dw),gx=pcx+pw×dxgw = pw \times \exp(dw),\quad gx = pcx + pw \times dx gw=pw×exp(dw),gx=pcx+pw×dx
x1out=clip(gx−gw×0.5+0.5, 0, W)x1_{out} = \mathrm{clip}(gx - gw \times 0.5 + 0.5,\ 0,\ W) x1out=clip(gx−gw×0.5+0.5, 0, W)
y维度(y1、y2)同理,裁剪上界为H。fp16输入时中间exp及乘加计算在fp32域进行后回cast到fp16。
参数说明
| 参数名 | 输入/输出/属性 | 描述 | 数据类型 | 数据格式 |
|---|---|---|---|---|
| anchor_box | 输入 | 锚框坐标(x1,y1,x2,y2),对应公式中anchor_box。 | FLOAT16、FLOAT | ND |
| deltas | 输入 | 回归偏移量(dx',dy',dw',dh'),对应公式中deltas。 | FLOAT16、FLOAT | ND |
| boxes | 输出 | 解码后的绝对框(x1,y1,x2,y2),对应公式中boxes。 | FLOAT16、FLOAT | ND |
| means | 可选属性 | deltas反标准化均值,长度4,默认[0.0, 0.0, 0.0, 0.0]。 | FLOAT | - |
| stds | 可选属性 | deltas反标准化标准差,长度4且各元素非0,默认[1.0, 1.0, 1.0, 1.0]。 | FLOAT | - |
| max_shape | 属性 | 解码框裁剪上限(H, W),长度2。 | INT64 | - |
| wh_ratio_clip | 可选属性 | 宽高比裁剪阈值,默认0.016。 | FLOAT | - |
约束说明
- anchor_box与deltas的shape必须完全一致(N, 4),无广播。
- anchor_box与deltas的dtype必须一致。
- means与stds长度必须为4,stds各元素不能为0。
- max_shape长度必须为2。
- wh_ratio_clip必须大于0,当前不参与核心解码公式,仅做入参校验。
- 输入仅支持ND数据格式。
调用说明
| 调用方式 | 样例代码 | 说明 |
|---|---|---|
| GE图模式 | - | test_geir_bounding_box_decode.cpp |