opencv4:基于opencv4+dnn的多batch推理

OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉和机器学习软件库。它由英特尔公司发起并参与开发,以BSD许可证授权发行,可以在商业和研究领域中免费使用。OpenCV提供了大量的计算机视觉、图像处理和模式识别的算法,包括实时图像处理、视频分析、特征检测、目标跟踪、人脸识别、物体识别、图像分割、光流法、立体视觉、运动估计、机器学习和深度学习等。

OpenCV是一个跨平台的库,支持多种操作系统,包括Linux、Windows、Android、Mac OS和iOS等。它使用C++编写,同时也提供了Python、Java、MATLAB等语言的接口,方便不同编程语言的开发者使用。由于OpenCV的开源性和跨平台性,它已经成为计算机视觉领域最受欢迎的库之一,广泛应用于工业检测、医学影像处理、智能交通系统、安防监控系统、机器人视觉、游戏开发等领域。

OpenCV的设计初衷是实现计算机视觉的自动化,帮助计算机去理解我们的世界,以便自动完成一些基本的任务。它提供了一系列的算法和工具,使得开发者可以更加便捷地实现各种计算机视觉应用。同时,OpenCV也支持多种硬件加速技术,如Intel的IPP和GPU加速,使得计算机视觉应用的性能得到了极大的提升。

OpenCV作为推理框架可以用于推理深度学习模型比如检测模型,分类模型等等。而用于加载和推理深度学习模型的主要是dnn模块。下面介绍下dnn模块:
OpenCV中的深度学习模块(DNN)只提供了推理功能,不涉及模型的训练,支持多种深度学习框架,比如TensorFlow,Caffe,Torch和Darknet。
轻量型。DNN模块只实现了推理功能,代码量及编译运行开销远小于其他深度学习模型框架。
使用方便。DNN模块提供了内建的CPU和GPU加速,无需依赖第三方库,若项目中之前使用了OpenCV,那么通过DNN模块可以很方便的为原项目添加深度学习的能力。
通用性。DNN模块支持多种网络模型格式,用户无需额外的进行网络模型的转换就可以直接使用,支持的网络结构涵盖了常用的目标分类,目标检测和图像分割的类别

之前一直都是单batchsize + opencv+dnn去推理。突然想到opencv dnn应该是支持多batch的

下面我们介绍下如何使用opencv来推理多batch。

以yolov5s为案例,导出batchsize=4的onnx。如下图所示:

我们选取4张图:

将四张图进行预处理之后存放到vector容器中。之后进行dnn推理。推理结果:

可以看到输出确实没毛病。4*25200*85

推理结果:

部分代码展示:

 std::shared_ptr<yolov5> yolov5model = std::make_shared<yolov5>();

    std::string onnxpath = "../modelImg/yolov5ssim.onnx";

    yolov5model ->init(onnxpath, false);

    cv::Mat image1 = cv::imread("../modelImg/000000000139.jpg");
    cv::Mat image2 = cv::imread("../modelImg/000000000285.jpg");
    cv::Mat image3 = cv::imread("../modelImg/000000000785.jpg");
    cv::Mat image4 = cv::imread("../modelImg/000000000872.jpg");

    std::vector<cv::Mat> images = {image1,image2,image3,image4};
    std::vector<std::vector<UavOutput>> URST;
    yolov5model ->inference(images,URST);
    cv::RNG rng(12345);
    for (int i = 0; i < 4; ++i) {
        for (auto UR : URST[i])
        {
            int b = rng.uniform(0, 255);
            int g = rng.uniform(0, 255);
            int r = rng.uniform(0, 255);
            rectangle(images[i], cv::Point (UR.x1,UR.y1),cv::Point (UR.x2,UR.y2), cv::Scalar(b, g, r), 2); //
            putText(images[i], cv::format("num: %d", (int)URST[i].size()),
            cv::Point(0, 30), 0, 0.6, cv::Scalar(0, 0, 255), 2, cv::LINE_AA);

            putText(images[i], labelscoco[int(UR.classID)]+":"+std::to_string(UR.confidence),
                                    cv::Point(UR.x1,UR.y1 - 5),  0, 0.5, cv::Scalar(0, 0, 255),1,16);
        }
        cv::namedWindow("image",cv::WINDOW_NORMAL);
        cv::imshow("image",images[i]);
        //        cv::imwrite("result.jpg",images);
        cv::waitKey(0);
    }

    return 0;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mrs.Gril

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值