前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >AiDB: 一个集合了6大推理框架的AI工具箱 | 加速你的模型部署

AiDB: 一个集合了6大推理框架的AI工具箱 | 加速你的模型部署

作者头像
BBuf
发布于 2023-09-19 00:17:37
发布于 2023-09-19 00:17:37
1.1K00
代码可运行
举报
文章被收录于专栏:GiantPandaCVGiantPandaCV
运行总次数:0
代码可运行

AiDB: 一个集合了6大推理框架的AI工具箱 | 加速你的模型部署

项目地址: https://github.com/TalkUHulk/ai.deploy.box 网页体验: https://www.hulk.show/aidb-webassembly-demo/ PC: https://github.com/TalkUHulk/aidb_qt_demo Android: https://github.com/TalkUHulk/aidb_android_demo Go Server: https://github.com/TalkUHulk/aidb_go_demo Python Server: https://github.com/TalkUHulk/aidb_python_demo Lua: https://github.com/TalkUHulk/aidb_lua_demo

导读

本文介绍了一个开源的AI模型部署工具箱--AiDB。该项目使用C++开发,将主流深度学习推理框架抽象成统一接口,包括ONNXRUNTIME、MNN、NCNN、TNN、PaddleLite和OpenVINO,支持LinuxMacOSWindows、Android、Webassembly等平台。AiDB提供C/C++/Python/Lua等多种API接口。并且提供多种场景的部署实例Demo(Server、PC、Android等)。目前,AiDB集成了数十个开源算法(如Yolo系列、MobileSAM等),约300个模型,并且持续更新。

AiDB具备以下特点:

  • 集成了市面上主流的推理框架,并抽象成统一的接口;
  • 支持Linux、Windows、MacOS、Android、Webassembly等各种平台部署;
  • 支持C/C++、Python、Lua接口;
  • 使用友好,支持docker一键安装,开箱即用;
  • 丰富的部署实例,包括Android(kotlin)、PC(Qt5)、Server(Go Zeros | Python FastApi)、Web(Webassembly);
  • 提供C++/Python/Go/Lua的Colab demo;
  • 内置丰富的模型,涵盖检测、关键点、分类、分割、生成等十几种开源算法,300余个模型;

整体架构

整个项目的架构如下:

底层封装了六类推理框架,集成前后处理和日志模块,支持各类平台。内置十余种开源算法。提供C/C++、Python、Lua等接口。上层提供各种场景调用实例。

Backend封装

主流推理框架的调用接口其实大同小异。主要可以概括为4大步: 1.初始化;2.数据输入;3.预测;4.获取结果。但每个推理框架的具体参数和一些细节又各有不同,如MNN动态输入等。所以为了后续可以动态选择不同的backend,AiDB抽象出一个基类:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    class AIDB_PUBLIC Engine {
  public:
      Engine() = default;
      virtual StatusCode init(const Parameter&) = 0;
      virtual StatusCode init(const Parameter&, const void *buffer_in1, const void* buffer_in2) = 0;
      virtual ~Engine(){};
      virtual void forward(const void *frame, int frame_width, int frame_height, int frame_channel, std::vector<std::vector<float>> &outputs, std::vector<std::vector<int>> &outputs_shape) = 0;
      virtual void forward(const std::vector<void*> &input, const std::vector<std::vector<int>> &input_shape, std::vector<std::vector<float>> &outputs, std::vector<std::vector<int>> &outputs_shape) = 0;

      std::vector<std::string> _output_node_name;
      std::vector<std::string> _input_node_name;
      std::map<std::string, std::vector<int>> _input_nodes;  /*!< 输入节点信息*/
      bool _dynamic=false;
      std::string _model_name = "default";
      std::string _backend_name = "default";

  };

所有的backend通过Paramater初始化。当每个模型初始化后,通过forward函数完成预测操作。这里设计了两个forward函数。1.x版本只支持single input。这个函数可能已经满足了大部分模型的需求,但随着更多的模型加入,有些模型需要multi-input,如最近加入的MobileSAM。所以后续重新设计了forward,支持任意数量的输入和输出。

后面每类backend继承这个类实现各自的forward和init即可。比如我们要实现MNN backend:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 class MNNEngine: public Engine{
    public:
        MNNEngine();
        StatusCode init(const Parameter&) override;
        StatusCode init(const Parameter&, const void *buffer_in1, const void* buffer_in2) override;
        ~MNNEngine() override;
        void forward(const void *frame, int frame_width, int frame_height, int frame_channel, std::vector<std::vector<float>> &outputs, std::vector<std::vector<int>> &outputs_shape) override;
        void forward(const std::vector<void*> &input, const std::vector<std::vector<int>> &input_shape, std::vector<std::vector<float>> &outputs, std::vector<std::vector<int>> &outputs_shape) override;
    private:
        void reshape_input(const std::vector<int>&);
        std::shared_ptr<MNN::Tensor> get_output_by_name(const char *name);
        MNN::Tensor* get_input_tensor(const char *node_name);
        MNN::Tensor* get_input_tensor();

    private:
        std::shared_ptr<MNN::Interpreter> _mnn_net;
        MNN::ScheduleConfig _net_cfg;
        MNN::Session *_mnn_session;

    };

通过如上操作,分别实现onnx、mnn、ncnn、paddlelite和openvino的backend部分,之后我们就可以利用c++多态特性,通过配置文件动态初始化不同的backend:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
switch(engineType(model_node["backend"].as<std::string>())){

            case ONNX:{
#ifdef ENABLE_ORT
                ONNXParameter param = ONNXParameter(model_node);
                ptr_engine = new ONNXEngine();
                status = ptr_engine->init(param);
#endif
                break;
            }

            case MNN:{
#ifdef ENABLE_MNN
                MNNParameter param = MNNParameter(model_node);
                ptr_engine = new MNNEngine();
                status = ptr_engine->init(param);
#endif
                break;
            }

            case NCNN:{
#ifdef ENABLE_NCNN
                NCNNParameter param = NCNNParameter(model_node);
                ptr_engine = new NCNNEngine();
                status = ptr_engine->init(param);
#endif
                break;
            }
            case TNN:{
#ifdef ENABLE_TNN
                TNNParameter param = TNNParameter(model_node);
                ptr_engine = new TNNEngine();
                status = ptr_engine->init(param);
#endif
            }
                break;
            case OPENVINO:{
#ifdef ENABLE_OPV
                OPVParameter param = OPVParameter(model_node);
                ptr_engine = new OPVEngine();
                status = ptr_engine->init(param);
#endif
            }
                break;
            case PADDLE_LITE:{
#ifdef ENABLE_PPLite
                PPLiteParameter param = PPLiteParameter(model_node);
                ptr_engine = new PPLiteEngine();
                status = ptr_engine->init(param);
#endif
            }
                break;
            default:
                break;
        }

预处理

每个模型的inference代码区别不大,差异主要集中在预处理和后处理阶段。后处理部分根据各个任务的不同(分类、检测等),很难抽象出统一的接口。但预处理可以很简单的实现统一。这里AiDB实现了一个简单的预处理类:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class ImageInput: public AIDBInput{
    public:
        explicit ImageInput(const YAML::Node& input_mode);
        explicit ImageInput(const std::string& input_str);
        ~ImageInput() override;
        void forward(const cv::Mat &image, cv::Mat &blob) override;
        void forward(const std::string &image_path, cv::Mat &blob) override;
    private:
        void Normalize(cv::Mat &image);
        void Permute(const cv::Mat &image, cv::Mat &blob);
        void Resize(const cv::Mat &image, cv::Mat &resized);
        void cvtColor(const cv::Mat &image, cv::Mat &converted);
    };

使用yaml配置文件,为每个模型设置设置预处理操作:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
BISENET: &bisenet_detail
    num_thread: 4
    device: "CPU"
    PreProcess:
      shape: &shape
        width: 512
        height: 512
        channel: 3
        batch: 1
      keep_ratio: true
      mean:
        - 123.675
        - 116.28
        - 103.53
      var:
        - 58.395
        - 57.12
        - 57.375
      imageformat: "RGB"
      inputformat: &format "NCHW"
    input_node1: &in_node1
      input_name: "input"
      format: *format
      shape: *shape
    input_nodes:
      - *in_node1
    output_nodes:
      - "output"

接口

考虑Ai模型的主要部署场景,AiDB实现了两套接口,分别起名H-mode和S-mode,即静态模式和动态模式。以下两图展示了两种模式的不同(上-H-mode;下:S-mode):

<<< 左右滑动见更多 >>>

<<< 左右滑动见更多 >>>

动态模式适合用在服务端,可以方便的实现热插拔,而静态模式更注重效率和性能,适合在边缘上设备使用。

内置模型

目前,AiDB内置了十余种开源算法,约300个不同的模型。未来,AiDB会持续更新,加入更多不同的模型。

当前模型列表

部署实例

AiDB的最大目的就是加速AI模型的部署。所以以下内容展示了不同场景的部署实例。

Python

Python的语法相对简单明了,具有更高的可读性。在Ai领域, Python使用是比较广泛的。因此AiDB支持Python接口,简化调用难度。AiDB使用pybind11实现python绑定。目前只支持从源码安装pyAiDB:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
python setup.py build_ext --inplace

详细过程可以可以参考Colab中的python编译调用全过程(https://colab.research.google.com/drive/1gVKxkeIvgrnC56dVQOImyqQqVns-NtkR)。当完成编译安装,我们可以按如下方式调用对应的模型算法:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from pyAiDB import AiDB, AIDB_ModelID
import cv2
import numpy as np
from PIL import Image, ImageDraw, ImageFont

ImagePath = "./doc/test/face.jpg" 
Model = "scrfd_500m_kps" # @param {"type": "string"}
Backend = "mnn" # @param {"type": "string"}
bgr = cv2.imread(ImagePath)
h, w, c = bgr.shape
aidb = AiDB()
models = [Model]
backend = [Backend]
aidb.init(AIDB_ModelID.SCRFD, models, backend, "./config")
result = aidb.forward(bgr.data, w, h)

当然,python 绑定/调用C++的方式有很多,为了满足不同需求,这里也提供了ctypes调用so的例子(https://link.zhihu.com/?target=https%3A//github.com/TalkUHulk/aidb_python_demo/tree/master)(fastapi搭建的AI服务)

Go

公司实际业务中,我们常会使用Go/Java,为了更贴近实际业务,AiDB提供了基于Go Zeros的服务实例(https://github.com/TalkUHulk/aidb_go_demo)。

Go Server

Go调用AiDB通过CGO的方式,如果你对此感兴趣,可以参考Colab(https://colab.research.google.com/drive/15DTMnueAv2Y3UMk7lhXMMN_VVUCBA0qh?usp=drive_link):

Android

MNN、NCNN等推理框架主要针对移动端设计优化,AiDB也因此继承式地支持手机端的部署。这里给出一个Android部署实例。重点就是实现JNI部分,开发语言使用Kotlin。【测试机器:Google Pixel 4, Android:13]

<<< 左右滑动见更多 >>>

PC(Qt5)

实际业务或是开发过程中,我们需要将自己的模型show出来,或是演示,或是作为一个里程碑,亦或是一个demo产品。鉴于此,AiDB提供一个桌面级部署实例,考虑跨平台需求,选用Qt5开发。

<<< 左右滑动见更多 >>>

Web(Webassembly)

WebAssembly即WASM, WebAssembly是一种新的编码格式并且可以在浏览器中运行,它让我们能够使用JavaScript以外的语言(例如C,C++)编写程序,然后将其编译成WebAssembly,进而生成一个加载和执行速度非常快的Web应用程序。目前NCNN和OpenVINO都支持wasm,AiDB已经支持了NCNN wasm版本,openvino列入计划。同时,AiDB也提供了一个wasm的demo,同时支持在线体验(http://www.hulk.show/aidb-webassembly-demo/):

<<< 左右滑动见更多 >>>

彩蛋

在Rasberry Pi4部署AiDB:

<<< 左右滑动见更多 >>>

拾遗

AiDB开发过程中遇到了很多问题,主要集中在移动端,相关趟坑已经记录在github中。问题比较多的是paddle-lite和openvino的移动端部署。paddle-lite更多的是转模型过程中版本对应的问题。openvino则全网几乎没有移动端部署教程。官方给的也是java接口的调用。openvino的调用和mnn、ncnn这些对比,调用方式还是有很大不同的。总结下android端c++中调用openvino的方法:

  1. 编译对应平台的库(以下为AiDB使用的)
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_TOOLCHAIN_FILE=android-ndk-r25c/build/cmake/android.toolchain.cmake -DANDROID_ABI=arm64-v8a -DANDROID_PLATFORM=30 -DANDROID_STL=c++_shared  -DENABLE_SAMPLES=OFF  -DENABLE_OPENCV=OFF -DENABLE_CLDNN=OFF -DENABLE_VPU=OFF  -DENABLE_GNA=OFF -DENABLE_MYRIAD=OFF -DENABLE_TESTS=OFF  -DENABLE_GAPI_TESTS=OFF  -DENABLE_BEH_TESTS=OFF ..
  1. 把需要的.so扔到assets下(如果是ir模型,只需要基础的so和ir plugin)
  2. 如果你的设备没root,libc++.so 和 libc++_shared.so 也一起扔进 assets
  3. 在c++ cmakelist中做好相关配置
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
add_library(openvino SHARED IMPORTED)

set_target_properties(
                openvino
                PROPERTIES IMPORTED_LOCATION
                ${CMAKE_CURRENT_LIST_DIR}/../libs/android/openvino/libopenvino.so)

以及kotlin中

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
System.loadLibrary("openvino");

如何增加模型

在对应的config里增加模型配置,比如onnx_config.yaml

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SCRFD_2_5G_KPS: &scrfd_2_5g_kps
name: "SCRFD_2.5G_KPS"
model: *mp_scrfd_2_5g
backend: "ONNX"
detail: *scrfd_detail

mp_scrfd_2_5g为模型路径:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SCRFD_2_5G_KPS: &mp_scrfd_2_5g "./models/onnx/scrfd/scrfd_2.5g_kps_simplify"

scrfd_detail为详细的模型相关信息:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SCRFD: &scrfd_detail
    encrypt: false
    num_thread: 4
    device: "CPU"
    PreProcess:
      shape: &shape
        width: 640
        height: 640
        channel: 3
        batch: 1
      keep_ratio: true
      mean:
        - 127.5
        - 127.5
        - 127.5
      var:
        - 128.0
        - 128.0
        - 128.0
      border_constant:
        - 0.0
        - 0.0
        - 0.0
      imageformat: "RGB"
      inputformat: &format "NCHW"

    input_node1: &in_node1
      input_name: "images"
      format: *format
      shape: *shape
    input_nodes:
      - *in_node1
    output_nodes:
      - "out0"
      - "out1"
      - "out2"
      - "out3"
      - "out4"
      - "out5"
      - "out6"
      - "out7"
      - "out8"

最后在AIDBZOO里声明下模型:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
scrfd_2.5g_kps: *scrfd_2_5g_kps

如果新加入模型有额外预处理操作,则需要增加该部分代码。

更多详情,敬请登陆github,欢迎Star。

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

本文分享自 GiantPandaCV 微信公众号,前往查看

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

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
nndeploy:一款最新上线的支持多平台、简单易用、高性能的机器学习部署框架
nndeploy是一款最新上线的支持多平台、高性能、简单易用的机器学习部署框架,一套实现可在多端(云、边、端)完成模型的高性能部署。
BBuf
2023/09/19
5330
nndeploy:一款最新上线的支持多平台、简单易用、高性能的机器学习部署框架
Openvino初探(实际体验)
本篇文章主要内容为在使用OpenVino时的一些注意点,方便带大家快速入门。OpenVino相比TVM和libtorch在intelx86的CPU端还是有很大优势的,可以说在X86上推断速度没有什么框架可以媲美OpenVino。实际测试中OpenVino确实出乎了我的意料,值得尝试。另外,Intel也在大力发展OpenVino(从跟新频率可以看出来),也有一些相关的活动和比赛可以参与试试。
老潘
2023/10/19
1.4K0
Openvino初探(实际体验)
如何基于OpenVINO加速飞桨模型推理?
OpenVINO是英特尔基于自身现有的硬件平台开发的一种工具套件,主要用于快速开发高性能计算机视觉及深度学习视觉的应用程序和解决方案,从而实现人类视觉模拟、自动语音识别、自然语言处理和推荐系统任务。该工具套件基于最新一代的人工神经网络,包括卷积神经网络、递归网络和基于注意力的网络,可扩展跨英特尔硬件的计算机视觉和非视觉工作负载,从而最大限度地提高性能。基于OpenVINO,可提升应用程序在CPU计算设备上的推理速度。
用户1386409
2021/11/17
1.2K0
如何基于OpenVINO加速飞桨模型推理?
用YOLOv5模型识别出表情!
本文整体思路如下。提示:本文含完整实践代码,代码较长,建议先看文字部分的实践思路,代码先马后看
Datawhale
2021/09/22
1.2K0
Yolov5 + Opencv DNN + C++部署
OpenCV由各种不同组件组成。OpenCV源代码主要由OpenCV core(核心库)、opencv_contrib和opencv_extra等子仓库组成。近些年,OpenCV的主仓库增加了深度学习相关的子仓库:OpenVINO(即DLDT, Deep Learning Deployment Toolkit)、open_model_zoo,以及标注工具CVAT等。
AI小怪兽
2023/11/30
1.9K0
OpenVINO运行Tensorflow模型
请先阅读我的上一篇文章《Visual Studio 2017 配置OpenVINO开发环境》,在VS2017中配置好OpenVINO环境。
superhua
2019/11/20
2.6K1
从 0 到 1,使用 OpenPPL 实现一个 AI 推理应用
深度学习推理框架 OpenPPL 已经开源了,本文以一个图像分类实例,从 0 到 1 讲解如何部署一个深度学习模型,完成一个 AI 推理应用。
Aceyclee
2021/08/02
1.6K0
从 0 到 1,使用 OpenPPL 实现一个 AI 推理应用
全栈式多终端模型部署框架 nndeploy 重磅开源!
现在业界尚不存在各方面都远超其同类产品的推理框架,不同推理引擎在不同平台,硬件和模式下分别具有各自的优势,比如TensorRT有足够多的灵活性,在GPU执行时可以共享上下文,可以使用外部内存用于推理等,OpenVINO有高吞吐率模式,可以CPU与GPU异构设备同时推理,TNN提供给上层用户直接操作其内部分配的输入输出Blob的能力等,另外其他推理框架也都有其各自的特性,需要足够尊重以及了解这些推理框架,才能不丢失每一个推理框架的特性,并做到统一的使用的体验。但作为模型部署工程师,为了实现最优效率,如果针对不同环境都写一套代码去适配其最优推理框架,其耗费的学习成本和精力及代码量都将极其巨大。
点云PCL博主
2023/09/20
4830
全栈式多终端模型部署框架 nndeploy 重磅开源!
使用OpenVINO加速Pytorch表情识别模型
OpenVINO自带的表情识别模型是Caffe版本的,这里使用的模型是前面一篇文章中训练生成的pytorch全卷积网络,模型基于残差网络结构全卷积分类网络。
OpenCV学堂
2020/07/13
1.7K0
YOLOv8对象检测 + ONNXRUNTIME 部署 C++ 源码演示!
ONNXRUNTIME是主流的深度学习部署框架之一,支持ONNX格式模型在CPU、GPU、ARM等不同硬件平台上加速推理,支持C++、Python、Java、C#、JS等不同语言SDK。C++版本安装包下载如下:
OpenCV学堂
2023/08/22
10K0
YOLOv8对象检测 + ONNXRUNTIME 部署 C++ 源码演示!
安卓端深度学习模型部署-以NCNN为例
https://github.com/Arctanxy/DeepLearningDeployment/tree/master/SimplestNCNNExample
带萝卜
2020/10/23
3.7K0
安卓端深度学习模型部署-以NCNN为例
如何阅读一个前向推理框架?以NCNN为例。
CNN从15年的ResNet在ImageNet比赛中大放异彩,到今天各种层出不穷的网络结构被提出以解决生活中碰到的各种问题。然而,在CNN长期发展过程中,也伴随着很多的挑战,比如如何调整算法使得在特定场景或者说数据集上取得最好的精度,如何将学术界出色的算法落地到工业界,如何设计出在边缘端或者有限硬件条件下的定制化CNN等。前两天看到腾讯优图的文章:腾讯优图开源这三年 ,里面提到了NCNN背后的故事,十分感动和佩服,然后我也是白嫖了很多NCNN的算法实现以及一些调优技巧。所以为了让很多不太了解NCNN的人能更好的理解腾讯优图这个"从0到1"的深度学习框架,我将结合我自己擅长的东西来介绍我眼中的NCNN它是什么样的?
BBuf
2020/12/23
2K0
NCNN+INT8+YOLOV4量化模型和实时推理
【GiantPandaCV导语】本文记录了作者使用NCNN量化YOLOV4模型并进行推理的全过程,过程比较详细,希望对想使用NCNN这一功能的读者有帮助。本文同步发布于我的知乎,https://zhuanlan.zhihu.com/p/372278785,欢迎关注。
BBuf
2021/05/18
2.6K0
NCNN+INT8+YOLOV4量化模型和实时推理
nndeploy - 一款开源的模型端到端部署框架
项目地址:https://github.com/DeployAI/nndeploy 欢迎star和PR
BBuf
2024/04/12
6060
nndeploy - 一款开源的模型端到端部署框架
如何使用“LoRa”的方式加载ONNX模型:StableDiffusion相关模型 的C++推理
1.基于 onnxruntime,将 StableDiffusionInpaintPipeline、StableDiffusionControlNetImg2ImgPipeline(stablediffusion + controlnet + LoRa) C++工程化;
BBuf
2024/07/01
7840
如何使用“LoRa”的方式加载ONNX模型:StableDiffusion相关模型 的C++推理
关键点检测项目代码开源了!
本文通过自建手势数据集,利用YOLOv5s检测,然后通过开源数据集训练squeezenet进行手部关键点预测,最后通过指间的夹角算法来判断具体的手势,并显示出来。文章第四部分为用C++实现整体的ncnn推理(代码较长,可先马后看)
Datawhale
2022/02/17
7680
关键点检测项目代码开源了!
TensorRT加速推理三维分割网络C++实战
今天将分享TensorRT加速推理三维分割网络C++完整实现版本,为了方便大家学习理解整个流程,将整个流程步骤进行了整理,并给出详细的步骤结果。感兴趣的朋友赶紧动手试一试吧。
医学处理分析专家
2023/09/20
5390
TensorRT加速推理三维分割网络C++实战
OpenCV4.x的EAST场景文字检测
点击上方蓝字关注我们 微信公众号:OpenCV学堂 关注获取更多计算机视觉与深度学习知识 EAST模型 EAST( An Efficient and Accurate Scene Text Detector)是标题的英文首字母缩写,模型出自旷视科技。相比其他几种场景文字检测模型,表现开挂。在ICDAR 2015数据集上表现优异,见下图: 可以看到红色点标记EAST模型的速度与性能超过之前的模型。EAST模型是一个全卷积神经网络(FCN)它会预测每个像素是否是TEXT或者WORDS,对比之前的一些卷积神经网
OpenCV学堂
2022/08/29
5290
OpenCV4.x的EAST场景文字检测
基于OpenVINO在C++中部署YOLOv5-Seg实例分割模型
YOLOv5兼具速度和精度,工程化做的特别好,Git clone到本地即可在自己的数据集上实现目标检测任务的训练和推理,在产业界中应用广泛。开源社区对YOLOv5支持实例分割的呼声高涨,YOLOv5在v7.0中正式官宣支持实例分割。
SDNLAB
2023/02/26
2K0
基于OpenVINO在C++中部署YOLOv5-Seg实例分割模型
OpenCV4.2 + OpenVINO2020安装配置与应用演示
首先需要从官方下载安装文件,下载OpenVINO2020R01版本,然后默认安装,图示如下:
OpenCV学堂
2020/03/24
1.9K0
OpenCV4.2 + OpenVINO2020安装配置与应用演示
相关推荐
nndeploy:一款最新上线的支持多平台、简单易用、高性能的机器学习部署框架
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档