AI Edge Box 多路 RTSP 视频流接入 QNN 推理,部分流随机出现推理结果错乱,如何排查是否是输入张量内存越界导致?

风声wind 2026-08-06 11:56:35

AI Edge Box 多路 RTSP 视频流接入 QNN 推理,部分流随机出现推理结果错乱,如何排查是否是输入张量内存越界导致?
 

...全文
28 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
老杨261 08-06 20:40
  • 打赏
  • 举报
回复

分步排查流程
日志排查:开启 QNN 调试日志QNN_LOG_LEVEL=DEBUG,查看报错日志是否出现tensor write overflow字段,出现即可判定内存越界;
输入校验:打印每一路视频送入张量的图像尺寸、字节长度,对比模型规定输入维度,确认是否存在缩放失败导致尺寸不匹配;
内存模式排查:多路流共用同一个输入 Tensor 缓冲区时,后写入的视频帧覆盖前一帧未推理完成的数据,造成结果错乱;
根治方案
每一路视频流分配独立的输入输出 Tensor 缓冲区,禁止多路流共用张量内存;推理未结束前锁定对应 buffer,推理完成再释放复用。
多路隔离代码片段
cpp
运行
// 给每一路摄像头分配独立张量
std::unordered_map<int, QnnTensor*> cam_tensor_map;

// 初始化,每个通道单独创建张量
void init_cam_tensor(int cam_id, QnnContext* ctx) {
QnnTensor* in_tensor = nullptr;
QnnContext_createInputTensor(ctx, &in_tensor);
cam_tensor_map[cam_id] = in_tensor;
}

// 单路推理上锁,防止覆盖
void single_stream_infer(int cam_id, cv::Mat frame) {
std::lock_guardstd::mutex lock(stream_mtx[cam_id]);
QnnTensor* tensor = cam_tensor_map[cam_id];
QnnTensor_writeData(tensor, frame.data, frame.total() * frame.elemSize());
QnnContext_execute(ctx);
}

7,651

社区成员

发帖
与我相关
我的任务
社区描述
本论坛以AI、WoS 、XR、IoT、Auto、生成式AI等核心板块组成,为开发者提供便捷及高效的学习和交流平台。 高通开发者专区主页:https://qualcomm.csdn.net/
人工智能物联网机器学习 技术论坛(原bbs) 北京·东城区
社区管理员
  • csdnsqst0050
  • chipseeker
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧