我自己构造了输入并进行推理应用,部分代码如下:
uint32_t input[1][500][2500][1]; // 注意这个数组的大小是固定的
input已经从txt中读取了数据......
// 指定张量形状
std::vector<uint32_t> shape{1, 3, 16, 16};
MxBase::Tensor input_tensor(&input[0][0][0][0], shape, MxBase::TensorDType::UINT32);
input_tensor.ToDevice(0);
MxBase::TensorBase tensor;
MemoryData decodememorydata;
decodememorydata.ptrData = input_tensor.GetData();
decodememorydata.size = input_tensor.GetByteSize();
decodememorydata.deviceId = input_tensor.GetDeviceId();
decodememorydata.type = input_tensor.GetMemoryType();
tensor = TensorBase(decodememorydata, true, input_tensor.GetShape(), TensorDataType::TENSOR_DTYPE_UINT32);
// STEP4:推理开始
std::vector<MxBase::TensorBase> detect_inputs = {};
std::vector<MxBase::TensorBase> detect_outputs = {};
detect_inputs.push_back(tensor);
//根据模型的输出创建空的TensorBase变量
auto dtypes = data_model_->GetOutputDataType();
for (size_t i = 0; i < data_modelDesc_.outputTensors.size(); ++i) {
std::vector<uint32_t> shape = {};
for (size_t j = 0; j < data_modelDesc_.outputTensors[i].tensorDims.size(); ++j) {
shape.push_back((uint32_t)data_modelDesc_.outputTensors[i].tensorDims[j]);//添加400和2500
}
MxBase::TensorBase tensor(shape, dtypes[i], MxBase::MemoryData::MemoryType::MEMORY_DEVICE, deviceId_);
APP_ERROR ret = MxBase::TensorBase::TensorBaseMalloc(tensor);
if (ret != APP_ERR_OK) {
LogError << "TensorBaseMalloc failed, ret=" << ret << ".";
return ret;
}
detect_outputs.push_back(tensor);
}
//模型推理部分
//进行模型推理,结果存入outputs
MxBase::DynamicInfo dynamicInfo = {};
dynamicInfo.dynamicType = MxBase::DynamicType::STATIC_BATCH; // 设置类型为静态batch
ret = data_model_->ModelInference(detect_inputs,detect_outputs,dynamicInfo);
if (ret != APP_ERR_OK) {
LogError << "detection_inference failed, ret=" << ret << ".";
return ret;
}
在执行推理的时候报错了,错误信息如下:
E20240827 14:06:33.005061 54938 ModelInferenceProcessorDptr.hpp:279] Failed to model infer execute. (Calling Function = aclmdlExecute, Code = 500002, Message = "ACL error, please refer to the document of CANN.")
E20240827 14:06:33.005156 54938 ModelInferenceProcessor.cpp:98] Failed to execute model infer. (Code = -1, Message = "ACL: general failure")
我自己构造了输入并进行推理应用,部分代码如下:
uint32_t input[1][500][2500][1]; // 注意这个数组的大小是固定的
input已经从txt中读取了数据......
// 指定张量形状
std::vector<uint32_t> shape{1, 3, 16, 16};
MxBase::Tensor input_tensor(&input[0][0][0][0], shape, MxBase::TensorDType::UINT32);
input_tensor.ToDevice(0);
MxBase::TensorBase tensor;
MemoryData decodememorydata;
decodememorydata.ptrData = input_tensor.GetData();
decodememorydata.size = input_tensor.GetByteSize();
decodememorydata.deviceId = input_tensor.GetDeviceId();
decodememorydata.type = input_tensor.GetMemoryType();
tensor = TensorBase(decodememorydata, true, input_tensor.GetShape(), TensorDataType::TENSOR_DTYPE_UINT32);
// STEP4:推理开始
std::vector<MxBase::TensorBase> detect_inputs = {};
std::vector<MxBase::TensorBase> detect_outputs = {};
detect_inputs.push_back(tensor);
//根据模型的输出创建空的TensorBase变量
auto dtypes = data_model_->GetOutputDataType();
for (size_t i = 0; i < data_modelDesc_.outputTensors.size(); ++i) {
std::vector<uint32_t> shape = {};
for (size_t j = 0; j < data_modelDesc_.outputTensors[i].tensorDims.size(); ++j) {
shape.push_back((uint32_t)data_modelDesc_.outputTensors[i].tensorDims[j]);//添加400和2500
}
MxBase::TensorBase tensor(shape, dtypes[i], MxBase::MemoryData::MemoryType::MEMORY_DEVICE, deviceId_);
APP_ERROR ret = MxBase::TensorBase::TensorBaseMalloc(tensor);
if (ret != APP_ERR_OK) {
LogError << "TensorBaseMalloc failed, ret=" << ret << ".";
return ret;
}
detect_outputs.push_back(tensor);
}
//模型推理部分
//进行模型推理,结果存入outputs
MxBase::DynamicInfo dynamicInfo = {};
dynamicInfo.dynamicType = MxBase::DynamicType::STATIC_BATCH; // 设置类型为静态batch
ret = data_model_->ModelInference(detect_inputs,detect_outputs,dynamicInfo);
if (ret != APP_ERR_OK) {
LogError << "detection_inference failed, ret=" << ret << ".";
return ret;
}
在执行推理的时候报错了,错误信息如下:
E20240827 14:06:33.005061 54938 ModelInferenceProcessorDptr.hpp:279] Failed to model infer execute. (Calling Function = aclmdlExecute, Code = 500002, Message = "ACL error, please refer to the document of CANN.")
E20240827 14:06:33.005156 54938 ModelInferenceProcessor.cpp:98] Failed to execute model infer. (Code = -1, Message = "ACL: general failure")