2020-7-24 19:26:50 [显示全部楼层]
2742浏览
查看: 2742|回复: 0

[平台测评] 【DFRobot行业AI开发者大赛】OpenVINO 模型浮点数据输入方法

[复制链接]
OpenVINO 将 Intel 的各种计算设备整合在一起,方便地部署人工智能推理模型。但在官方的开发环境中,模型输入只给出了 Precision::U8 类型的数据转换函数:matU8ToBlob(),没有给出 Precision::FP32 类型输入数据的实现方法,使得其它浮点数输入模型转换为 IR 模型后不能准确推理。

这里给出一种实现 Precision::FP32 类型数据输入的方法,以方便大家使用。

首先将模型的输入精度设置为 FP32 :

    InputInfo::Ptr& inputInfoFirst = inputInfo.begin()->second;
    inputInfoFirst->setPrecision(Precision::FP32);
    input = inputInfo.begin()->first;

然后设置完成模型的其它参数,并将输入数据推入处理队列:

    Blob::Ptr inputBlob = request->GetBlob(input);
    matF32ToBlob(face, inputBlob, enquedFaces);

这里的 matF32ToBlob() 函数实现了 Precision::FP32 类型数据输入,具体定义如下:
[mw_shl_code=cpp,false]
void matFP32ToBlob(const cv::Mat& orig_image, InferenceEngine::Blob::Ptr& blob, int batchIndex = 0) {
    InferenceEngine::SizeVector blobSize = blob->getTensorDesc().getDims();
    const size_t width = blobSize[3];
    const size_t height = blobSize[2];
    const size_t channels = blobSize[1];
    InferenceEngine::MemoryBlob::Ptr mblob = InferenceEngine::as<InferenceEngine::MemoryBlob>(blob);
    if (!mblob) {
        THROW_IE_EXCEPTION << "We expect blob to be inherited from MemoryBlob in matF32ToBlob, "
            << "but by fact we were not able to cast inputBlob to MemoryBlob";
    }
    // locked memory holder should be alive all time while access to its buffer happens
    auto mblobHolder = mblob->wmap();

    float *blob_data = mblobHolder.as<float *>();

    cv::Mat resized_image(orig_image);
    if (static_cast<int>(width) != orig_image.size().width ||
            static_cast<int>(height) != orig_image.size().height) {
        cv::resize(orig_image, resized_image, cv::Size(width, height));
    }

    int batchOffset = batchIndex * width * height * channels;

    for (size_t c = 0; c < channels; c++) {
        for (size_t  h = 0; h < height; h++) {
            for (size_t w = 0; w < width; w++) {
                blob_data[batchOffset + c * width * height + h * width + w] =
                        resized_image.at<float>(h, w, c);
            }
        }
    }
}[/mw_shl_code]


以上就是一种便捷的浮点数输入方法,可以广泛应用于各种 IR 模型。

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail