已关闭
[Bug-Report|缺陷反馈]: BoundingBoxEncode 空输入快速路径绕过 means/stds 属性校验 #935
KaranocaVe创建于 9月14日关闭于 9月17日
9月14日 添加了label:bug-report
9月14日 关联了pull request:[Fix] 校验 BoundingBoxEncode 空输入属性
liu-wei
9月14日 评论:
9月14日 评论:
确认存在校验顺序问题。bounding_box_encode_tiling_arch35.cpp:233-235 的空输入早退(dim0==0 → return GRAPH_SUCCESS)在 ParseMeansStds(:238)之前,导致空输入时 means/stds 属性校验被跳过。
但实际不会产生功能问题:空输入时 kernel 不会执行计算,means/stds 属性值不会被使用。非法属性只在非空输入时才会影响计算结果,而非空输入会走 ParseMeansStds 校验。
建议将 ParseMeansStds 移到空输入早退之前,保持属性校验的一致性。


9月14日 将 caorenlei 设为负责人
9月14日 移除了负责人 caorenlei
liu-wei
9月14日 评论:
9月14日 评论:
/assign zhangyiyi


zhangyiyi
9月14日 评论:
9月14日 评论:
/assign @ugzhangyiyi


9月14日 将 ugzhangyiyi 设为负责人
9月17日 关闭了 issue
9月17日 添加了label:resolved
9月21日 修改了issue 的描述
9月21日 修改了issue 的描述
KaranocaVe
6 天前 评论:
6 天前 评论:
@yourealize @liu-wei 您好,这个 Issue 对应的修复已经合入:https://gitcode.com/cann/ops-cv/merge_requests/1573
开发者计划反馈,Issue 需要有 Accepted 标签才能计入积分,仅关闭或标记 resolved 还不够。目前这条 Issue 尚未标记 Accepted,麻烦您结合问题和已合入的修复复核一下;确认符合受理条件后,帮忙补上 Accepted 标签。
感谢您的支持!


[Bug-Report|缺陷反馈]: BoundingBoxEncode 空输入 fast path 绕过 means/stds 属性校验
问题描述
固定 commit
b5708d1acfc1353f038ac1099f27dcfebd31be87的objdetect/bounding_box_encode/op_host/arch35/bounding_box_encode_tiling_arch35.cpp允许空 Tensor,但将
dim0 == 0的早退放在ParseMeansStds()之前。README 要求means和stds长度必须为 4,且每个stds元素不可为 0;这些约束在空输入时没有执行。环境信息
cann/ops-cv/https://gitcode.com/cann/ops-cv.gitb5708d1acfc1353f038ac1099f27dcfebd31be87aarch64;本复现不调用 NPU11.4.0,C++17重现步骤
将
anchor_box和ground_truth_box设为合法空 shape[0,4],dtype 设为相同的DT_FLOAT。分别测试下列属性:
means=[0,0,0],stds=[1,1,1,1];means=[0,0,0,0],stds=[1,1,1];means=[0,0,0,0],stds=[0,1,1,1]。在 Host tiling 测试中运行上述属性组合,并检查返回值。
对照合法空属性和非空非法属性用例。
预期结果
合法
[0,4]空输入和默认合法属性应返回GRAPH_SUCCESS。三组属性非法输入应在读取属性前返回GRAPH_FAILED,因为文档约束没有以空输入为例外。实际结果
固定控制流先执行
CheckInputsConsistency,然后清零 tiling;dim0 == 0时直接设置blockDim=1并返回
GRAPH_SUCCESS,因此上述三组非法属性都返回成功。相同非法属性用于非空[1,4]时返回GRAPH_FAILED,说明是空输入早退绕过,而不是属性模型本身不检查。观察结果
Host tiling 用例覆盖空输入早退、非法属性和非空失败对照,结果符合上述行为。
影响与规避方式
影响是非法
means/stds属性可随空输入进入成功的 tiling 结果,调用方可能误判模型已通过算子约束。当前空分支不读取属性,因此本材料不声称存在该分支的属性越界或整数除零。临时规避是始终在调用方保证means/stds长度为 4 且stds不含 0。建议的修复和回归测试
将
ParseMeansStds(context, tiling)移到if (dim0 == 0)之前;属性合法后仍对空输入设置blockDim=1并返回成功。增加合法[0,4]空输入、means 长度 3、stds 长度 3、stds 含 0 四个 Host tiling 回归用例,并保留非空失败对照及现有 shape/dtype 校验。关联 PR