NCS AsyncInferQueue推理返回旧结果而非正确结果问题求助
AsyncInferQueue推理结果重复问题的原因与解决方法
问题原因
你遇到的重复结果问题,核心原因是AsyncInferQueue中的InferRequest对象是循环复用的,而你在回调函数中直接保存了输出张量的引用,没有复制数据:
- 当设置
jobs=1时,所有推理任务复用同一个InferRequest实例,后续推理完成后会覆盖该实例的输出内存,最终所有结果都指向最后一次推理的输出 - 当设置
jobs=2时,队列维护两个InferRequest实例,奇偶索引的任务分别复用这两个实例,因此结果会按索引奇偶重复
你打印的tensor.sum()已经证明输入是唯一的,但输出引用被复用覆盖,导致结果重复。
解决方案
在回调函数中复制输出张量的数据,而不是保存引用。修改回调内的result赋值逻辑,使用numpy的复制方法:
def _cb( infer_request: InferRequest, userdata: Any ) -> None: res.append( AsyncInferenceResult( id=userdata, result=np.copy(infer_request.output_tensors[0].data[:]) ) )
或者也可以使用张量的原生复制方法:
result=infer_request.output_tensors[0].data[:].copy()
关键注意点
- 不要直接保存
infer_request.output_tensors或其data属性的引用,这些资源属于复用的InferRequest实例,会被后续推理任务覆盖 - 异步推理场景下,必须确保每个请求的结果被独立存储,避免内存共享导致的数据覆盖问题
内容的提问来源于stack exchange,提问作者Axel Jacobsen
相关产品推荐
相关产品推荐

