C++环境下部署深度学习模型方案
目录
一、问题背景
二、解决方案
2.1 C++调用python
2.2 Python服务接口
2.3 Python转c++(不推荐)
2.4 深度学习部署框架(推荐)
三、总结
3.1 接口形式分类
3.2 优缺点比较
一、问题背景
现在的深度学习框架一般都是基于 Python 来实现,构建、训练、保存和调用模型都可以很容易地在 Python 下完成。但有时候,我们在实际应用这些模型的时候可能需要在其他编程语言下进行,本文将总结在C++环境下如何部署Py训练好的模型。
二、解决方案
2.1 C++调用python
Python 提供了一套 C API库,使得开发者能很方便地从C/ C++ 程序中调用 Python 模块。
参考我另一篇博客
C++调用Python完成“表达式计算”功能并打包发布_俊俊的博客-CSDN博客
2.2 Python服务接口
使用flask后台框架创建一个http服务器
客户端POST一个请求上来(例如上传了一张图片的url),服务器检测到有请求,就会解析url的图片,接着调用深度学习模型,得到推理结果后以json的格式把结果返回给客户端
模型部署3/3-手把手实现利用flask深度学习模型部署 - 知乎
Flask深度学习模型服务端部署 - 简书
或者自己手写一个TCP通信,自定义通信数据格式,可采用yaml或者json格式
2.3 Python转c++(不推荐)
Pythran翻译
一条命令自动把 Python 翻译成等价 C++ - 知乎
有些语法、函数不识别,不适合转复杂项目,只适合简单运算
比如:字符串格式化format
#pythran export eval_function(str)
def eval_function(a):print("input:{}".format(a))try:val = eval(a)return float(val)except Exception as e:print("err:{}".format(str(e)))return 0
报错
demo.py:18:10 error: Attribute 'format' unknown
----print("input:{}".format(a))^~~~ (o_0)
----
又如 :不识别eval函数
#pythran export eval_function(str)
def eval_function(a):try:val = eval(a)return float(val)except Exception as e:return 0
报错
pythran.analyses.aliases.UnboundIdentifierError
2.4 深度学习部署框架(推荐)
训练使用Python接口,部署使用部署框架的 C/C++ 接口来导入训练好的模型。目前主流的深度学习部署平台包含GPU、CPU、ARM等。模型部署框架则有英伟达推出的TensorRT,谷歌的Tensorflow和用于ARM平台的TF-Lite,开源的Caffe,百度的飞浆,腾讯的NCNN。
Nvidia GPU平台
框架 | 资料 |
---|---|
Caffe | |
TensorRT | TensorRT部署深度学习模型 - 知乎 深度学习模型部署(1)-Pytorch转TensorRT(C++版) - 知乎 |
TensorFlow | C++部署TensorFlow模型_蓬莱道人的博客-CSDN博客_c++ tensorflow |
PaddlePaddle |
Intel CPU平台
框架 | 资料 |
---|---|
Caffe | |
OpenVINO | YOLOv5在最新OpenVINO 2021R02版本的部署与代码演示详解 - 云+社区 - 腾讯云 YOLOX之OpenVINO部署:C++版 - 知乎 |
ARM平台
框架 | 资料 |
---|---|
NCNN | |
TF-Lite | |
Paddle-mobile |
FPGA平台
框架 | 资料 |
---|---|
xilinx |
三、总结
3.1 接口形式分类
Python接口封装
1、采用C++调用Python的方式
2、采用Python服务接口的方式
C++接口封装
1、采用python转c++
2、采用现有的C++深度学习部署框架
3.2 优缺点比较
方案 | 优点 | 缺点 |
---|---|---|
C++调用python | 直接交互 | 无法隐藏Py代码、Py运行库体积较大 |
Python服务接口 | 客户端与服务器分离,有利于维护,且可跨主机 | 间接交互,无法满足实时性强的场景 |
Python转C++ | 直接交互 | 并非所有python语法都能转换成功 |
深度学习部署框架 | 直接交互 |
C++环境下部署深度学习模型方案相关推荐
- 用pyinstaller打包pytorch环境下的深度学习模型,实现通过exe程序实现界面显示模型的分类效果
用pyinstaller打包pytorch环境下的深度学习模型,实现通过exe应用实现界面显示模型的分类效果 训练深度学习模型和界面显示,看我之前的博客,链接在下面: 通过残差网络实现CLFAR-10 ...
- 通过MACE在Android手机上部署深度学习模型
1. MACE的环境搭建 参考我的博客:MACE的环境搭建--conda实现 2. 构建项目 (1)下载MACE项目到本地 git clone https://github.com/XiaoMi/ma ...
- Transfer Learning Toolkit (TLT) + DeepStream (DS)快速部署深度学习模型(以口罩检测为例)
文章目录 简介 TLT DS 基于TLT进行迁移学习 环境准备 模型训练 基于DS的模型部署 总结 最近在做一个深度学习的横向,被实时性搞的很头疼,遂打算研究研究新的技术路线,做点技术储备.TLT+D ...
- 实践教程 | TensorRT部署深度学习模型
作者 | ltpyuanshuai@知乎 来源 | https://zhuanlan.zhihu.com/p/84125533 编辑 | 极市平台 本文仅作学术分享,版权归原作者所有,如有侵权请联系删 ...
- TensorRT部署深度学习模型
1.背景 目前主流的深度学习框架(caffe,mxnet,tensorflow,pytorch等)进行模型推断的速度都并不优秀,在实际工程中用上述的框架进行模型部署往往是比较低效的.而通过Nvidia ...
- 实战 | 深度学习轻松学:如何用可视化界面来部署深度学习模型 转载 2017年12月27日 00:00:00 109 翻译 | AI科技大本营 参与 | 王赫 上个月,我有幸结识了 DeepCogn
实战 | 深度学习轻松学:如何用可视化界面来部署深度学习模型 转载 2017年12月27日 00:00:00 标签: 109 编辑 删除 翻译 | AI科技大本营 参与 | 王赫 上个月,我有幸结识了 ...
- amd 深度学习模型部署_Web服务部署深度学习模型-续集
在上一篇中,本人介绍了如何使用Web服务部署深度学习模型,见知乎链接:刘聪NLP:Web服务部署深度学习模型. 有同学提问:"是否可以在web上有输入数据的接口,通过深度学习模型的计算数据的 ...
- 收藏 | TensorRT部署深度学习模型
点上方计算机视觉联盟获取更多干货 仅作学术分享,不代表本公众号立场,侵权联系删除 转载于:作者 | ltpyuanshuai@知乎 来源 | https://zhuanlan.zhihu.com/p/ ...
- 在英特尔硬件上部署深度学习模型的无代码方法 OpenVINO 深度学习工作台的三部分系列文章 - CPU AI 第一部
作者 Taylor, Mary, 翻译 李翊玮 关于该系列 了解如何转换.微调和打包推理就绪的 TensorFlow 模型,该模型针对英特尔®硬件进行了优化,仅使用 Web 浏览器.每一步都在云中使用 ...
最新文章
- 用linq查询html中div个数,C#使用Linq to XML进行XPath查询
- Vijos p1484 ISBN号码
- 从源码角度解析线程池中顶层接口和抽象类
- 美国 CISA 和 NIST 联合发布软件供应链攻击相关风险及缓解措施
- U盘怎么重装系统到电脑上
- matlab2c使用c++实现matlab函数系列教程-exppdf函数
- oracle怎么存视频地址,oracle的警告文件存储方式和地址
- 生活杂谈-空调的修理
- 服务器能不能用普通硬盘,服务器硬盘是什么 与普通硬盘区别
- 886n虚拟服务器ip,tl-wr886n怎么配置ip带宽控制
- ③电子产品拆解分析-充电宝台灯
- 王者荣耀-是用什么编程语言开发的(转)
- js-xlsx导入数据
- AFNetwork 2.0在请求时报错code=-1016 和 3840
- mysql5.7 1819_mysql5.7 ERROR 1819 (HY000): Your password does not satisfy the current policy requir.
- 如何打开计算机的用户和组,Win10系统如何打开本地用户和组
- Teechart7 for Delphi7安装说明
- PLC网关 工业PLC远程控制监控
- 公司绝不会告诉你的10个秘密
- 这款上线6年火爆应用即将消失
热门文章
- 麒麟信安携手河南IT联盟召开 《麒麟信安信创应用解决方案》线上分享会
- (力扣)171.Excel表列序号(c语言)
- c语言输入名字判断姓是否缩写,C语言复习笔记
- 强力推荐90个优秀外国英文网站
- 【react+umi】国际化配置:浏览器默认英文,如何让工程默认语言为中文?
- 在ubuntu上解包RK3288固件
- linux安装Oracle11g详细教程(redhat6、Centos7)
- C语言学习笔记(kk-zkx)
- 2022年终总结——工作第五年
- k8s 安装ingress nginx controller 并部署.net core ingress服务