You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++部署YOLOv5+OpenVINO出现写入访问冲突及NotImplemented异常求助

问题解决方案

针对你遇到的两个报错,可按以下步骤排查修复:

  • 修复输入形状 reshape 逻辑
    你当前代码获取输入形状后未修改尺寸就直接调用reshape,属于无效操作。如果导出的YOLOv5 IR模型输入尺寸不是1x3x640x640,后续向Blob写入640x640尺寸的图像数据会触发内存越界,导致写入访问冲突。修改代码如下:
ICNNNetwork::InputShapes inputShapes = cnnNetwork.getInputShapes();
SizeVector& inSizeVector = inputShapes.begin()->second;
// 显式指定输入尺寸为1batch 3通道 640x640分辨率
inSizeVector[0] = 1;
inSizeVector[1] = 3;
inSizeVector[2] = 640;
inSizeVector[3] = 640;
cnnNetwork.reshape(inputShapes);
  • 增加空指针校验避免非法调用
    InferenceEngine::NotImplemented异常大概率是因为Blob类型转换失败返回空指针,你直接调用wmap()触发未实现异常。在获取Blob数据指针前增加校验逻辑:
Blob::Ptr frameBlob = infer_request.GetBlob(_input_name);
auto memory_blob = InferenceEngine::as<InferenceEngine::MemoryBlob>(frameBlob);
if (!memory_blob) {
    cout << "输入Blob不是MemoryBlob类型" << endl;
    return false;
}
InferenceEngine::LockedMemory<void> blobMapped = memory_blob->wmap();
float* blob_data = blobMapped.as<float*>();
if (!blob_data) {
    cout << "Blob数据指针为空" << endl;
    return false;
}
  • 校验OpenVINO版本与IR模型兼容性
    如果模型转换时使用的Model Optimizer版本和当前运行时的OpenVINO版本不一致,会出现接口未实现异常。确保模型转换和运行时使用的OpenVINO主版本完全相同。

  • 增加Blob尺寸校验
    写入Blob前先打印Blob尺寸,确认和预期的1x3x640x640一致,避免尺寸不匹配导致内存越界:

auto blob_dims = frameBlob->getTensorDesc().getDims();
// 校验维度数量与尺寸
if (blob_dims.size() != 4 || blob_dims[2] != 640 || blob_dims[3] != 640) {
    cout << "Blob尺寸不匹配" << endl;
    return false;
}

内容的提问来源于stack exchange,提问作者ベスマ・ゲスミ

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 08:12:01