前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用OpenCV 4.1.2的DNN模块部署深度学习模型

使用OpenCV 4.1.2的DNN模块部署深度学习模型

作者头像
OpenCV学堂
发布2019-11-15 16:13:47
2.9K1
发布2019-11-15 16:13:47
举报
文章被收录于专栏:贾志刚-OpenCV学堂

自3.3版本开始,OpenCV加入了对深度神经网络推理运算的支持模块-DNN模块,它支持多种深度学习框架的模型,如Tensorflow、Caffe、Torch、Darknet,以及ONNX格式的模型。

使用DNN模块部署模型非常简单,4.1.2版本加入了dnn::Model类以及针对不同任务的类dnn::ClassificationModel,dnn::DetectionModel,dnn::SegmentationModel,可以进行网络的自动预处理和后处理,更加简化了流程。

以目标检测为例,4.1.2之前的版本部署方式为:

代码语言:javascript
复制
int main()
{
    float model = "ssdlite_mobilenet_v2.pb";
    float config = "ssdlite_mobilenet_v2.pbtxt";
    float scale = 1.0;
    int inpWidth = 300;
    int inpHeight = 300;
    Scalar mean(103.939, 116.779, 123.68);
    float confThreshold = 0.5f;
    float nmsThreshold = 0.4f;
    // 1. 装载模型,设置参数
    Net net = readNet(model, config);
    net.setPreferableBackend(DNN_BACKEND_OPENCV);
    net.setPreferableTarget(DNN_TARGET_CPU);
    std::vector<String> outNames = net.getUnconnectedOutLayersNames();

    // 读入图像
    Mat image = imread("picture.jpg");

    Mat blob;
    // 2. 由输入图像生成blob,设置blob为模型输入
    blobFromImage(image, blob, scale, inpSize, mean, true, false);
    net.setInput(blob);
    std::vector<Mat> outs;
    // 3. 前向计算,检测结果存入outs
    net.forward(outs, outNames);
    // 4. 对检测结果进行非极大值抑制等后处理,结果存入outs
    postprocess(frame, outs, net);
}

4.1.2版本的部署方式为:

代码语言:javascript
复制
int main()
{
    float model = "ssdlite_mobilenet_v2.pb";
    float config = "ssdlite_mobilenet_v2.pbtxt";
    float scale = 1.0;
    int inpWidth = 300;
    int inpHeight = 300;
    Scalar mean(103.939, 116.779, 123.68);
    float confThreshold = 0.5f;
    float nmsThreshold = 0.4f;
    // 1. 装载模型,设置参数
    DetectionModel dnn_model(model, config);
    dnn_model.setPreferableBackend(DNN_BACKEND_OPENCV);
    dnn_model.setPreferableTarget(DNN_TARGET_CPU);
    dnn_model.setInputParams(scale, Size(inpWidth, inpHeight), mean, true, false);

    // 读入图像
    Mat image = imread("picture.jpg");

    std::vector<int> classIds;
    std::vector<float> confs;
    std::vector<Rect> boxes;
    // 2. 前向计算,检测结果矩形框存入boxes(已经过后处理)
    dnn_model.detect(image, classIds, confs, boxes, confThreshold, nmsThreshold);
}

OpenCV 4.1.2下载地址:

https://opencv.org/releases/

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-11-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 OpenCV学堂 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档