| feat: 新增 ascend950 BatchMultiClassNonMaxSuppression 算子 Co-authored-by: Huang-Peng<huangpeng98@huawei.com> # message auto-generated for no-merge-commit merge: !1176 merge feat/ascend950-batch-multiclass-nms into master feat: 新增 ascend950 BatchMultiClassNonMaxSuppression 算子 Created-by: Huang-Peng Commit-by: Huang-Peng Merged-by: cann-robot Description: ## 描述 为 BatchMultiClassNonMaxSuppression 新增 Ascend 950(arch35)后端实现,代码位于 objdetect/batch_multi_class_non_max_suppression/。 该算子用于目标检测后处理:对每个 batch、每个类别独立执行贪心 NMS,再跨类别按分数合并,最多保留 max_total_size 个检测框。 ### 主要改动 - **算子定义与图模式入口**:补充 OpDef、shape/dtype 推导,以及算子目录内的 op_graph/batch_multi_class_non_max_suppression_proto.h;Ascend950 图模式通过该 proto 构图。 - **Ascend950 Tiling 与 Kernel**:实现 arch35 tiling、workspace 规划和 AICore kernel,支持按 (batch, class) 处理候选框、阈值过滤、IoU 抑制和跨类别 TopK 合并。 - **ACLNN 接口**:提供两段式 GetWorkspaceSize + Execute 接口,支持可选 clip_window、num_valid_boxes,并处理非连续 Tensor。 - **构建接入**:新增 CMake、Ascend950 binary JSON、simplified key 和 AscendC 配置。 - **测试资产与样例**:新增 host infershape UT、TTK inputs/golden、CPU golden,以及 ACLNN/GE IR 调用样例。 - **文档**:补充算子 README 和 ACLNN 接口文档;文档中包含完整 ACLNN 调用示例。 ### 接口范围 - 支持 ND 格式的 FLOAT16/FLOAT boxes、scores 和可选 clip_window;num_valid_boxes 为 INT32。 - transpose_box=false 时,boxes 为 [B,N,q,4];为 true 时为 [B,q,4,N]。scores 为 [B,N,C],其中 q 为 1 或 C。 - 输出为 nmsed_boxes[B,M,4]、nmsed_scores[B,M]、nmsed_classes[B,M] 和 nmsed_num[B],其中 M 为 max_total_size。 - iou_threshold 取值范围为 [0,1];max_size_per_class、max_total_size 取值范围为 [1,1000]。 ## 关联的Issue 关联Issue #681 ## 测试 - cmake --build build --target cust_opmaster --parallel 2:通过,已编译本算子的 Ascend950 tiling 源文件。 - git diff --check:通过。 - Host infershape UT:覆盖公共输出 shape 推导和非法 boxes rank 拒绝。 - TTK inputs/golden 与 CPU golden:覆盖 fp16/fp32、transpose_box、clip_window、num_valid_boxes 和 change_coordinate_frame 语义。 - ACLNN 与 GE IR 样例:分别覆盖两段式 ACLNN 调用和算子 proto 构图流程。 ## 文档更新 - 新增 objdetect/batch_multi_class_non_max_suppression/README.md。 - 新增 objdetect/batch_multi_class_non_max_suppression/docs/aclnnBatchMultiClassNonMaxSuppression.md,包含接口约束和完整 ACLNN 调用示例。 ## 类型标签 - [ ] 🐛 Bug修复 - [x] ✨ 新特性 - [ ] ⚡ 性能优化 - [ ] ♻️ 重构 - [x] 🧪 测试 - [x] 📦 构建/CI - [x] 🔧 配置变更 - [x] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [ ] 🧹 代码清理 - [ ] ❓ 其他,请描述: See merge request: cann/ops-cv!1176 | 13 天前 |