已关闭
[Bug-Report|缺陷反馈]: BoundingBoxEncode 空输入快速路径绕过 means/stds 属性校验 #935
KaranocaVe创建于  9月14日关闭于  9月17日
KaranocaVe
KaranocaVe
9月14日 创建

[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;这些约束在空输入时没有执行。

环境信息

  • 仓库/remote:cann/ops-cv / https://gitcode.com/cann/ops-cv.git
  • commit:b5708d1acfc1353f038ac1099f27dcfebd31be87
  • 主机:Linux aarch64;本复现不调用 NPU
  • 编译器:GCC 11.4.0,C++17

重现步骤

  1. 将 anchor_box 和 ground_truth_box 设为合法空 shape [0,4],dtype 设为相同的 DT_FLOAT。

  2. 分别测试下列属性:

    • 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]。
  3. 在 Host tiling 测试中运行上述属性组合,并检查返回值。

  4. 对照合法空属性和非空非法属性用例。

预期结果

合法 [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

likedislike
KaranocaVeKaranocaVe
9月14日 添加了label:bug-report
KaranocaVeKaranocaVe
9月14日 关联了pull request:[Fix] 校验 BoundingBoxEncode 空输入属性
liu-wei
liu-wei成员
9月14日 评论:

确认存在校验顺序问题。bounding_box_encode_tiling_arch35.cpp:233-235 的空输入早退(dim0==0 → return GRAPH_SUCCESS)在 ParseMeansStds(:238)之前,导致空输入时 means/stds 属性校验被跳过。

但实际不会产生功能问题:空输入时 kernel 不会执行计算,means/stds 属性值不会被使用。非法属性只在非空输入时才会影响计算结果,而非空输入会走 ParseMeansStds 校验。

建议将 ParseMeansStds 移到空输入早退之前,保持属性校验的一致性。

likedislike
liu-weiliu-wei成员
9月14日 将 caorenlei 设为负责人
liu-weiliu-wei成员
9月14日 移除了负责人 caorenlei
liu-wei
liu-wei成员
9月14日 评论:

/assign zhangyiyi

likedislike
zhangyiyi
zhangyiyi成员
9月14日 评论:

/assign @ugzhangyiyi

likedislike
CANN-robotCANN-robot成员
9月14日 将 ugzhangyiyi 设为负责人
CANN-robotCANN-robot成员
9月17日 关闭了 issue
CANN-robotCANN-robot成员
9月17日 添加了label:resolved
KaranocaVeKaranocaVe
9月21日 修改了issue 的描述
KaranocaVeKaranocaVe
9月21日 修改了issue 的描述
KaranocaVe
KaranocaVe
6 天前 评论:

@yourealize @liu-wei 您好,这个 Issue 对应的修复已经合入:https://gitcode.com/cann/ops-cv/merge_requests/1573

开发者计划反馈,Issue 需要有 Accepted 标签才能计入积分,仅关闭或标记 resolved 还不够。目前这条 Issue 尚未标记 Accepted,麻烦您结合问题和已合入的修复复核一下;确认符合受理条件后,帮忙补上 Accepted 标签。

感谢您的支持!

likedislike