目录

一、问题背景

二、解决方案

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++环境下部署深度学习模型方案相关推荐

  1. 用pyinstaller打包pytorch环境下的深度学习模型,实现通过exe程序实现界面显示模型的分类效果

    用pyinstaller打包pytorch环境下的深度学习模型,实现通过exe应用实现界面显示模型的分类效果 训练深度学习模型和界面显示,看我之前的博客,链接在下面: 通过残差网络实现CLFAR-10 ...

  2. 通过MACE在Android手机上部署深度学习模型

    1. MACE的环境搭建 参考我的博客:MACE的环境搭建--conda实现 2. 构建项目 (1)下载MACE项目到本地 git clone https://github.com/XiaoMi/ma ...

  3. Transfer Learning Toolkit (TLT) + DeepStream (DS)快速部署深度学习模型(以口罩检测为例)

    文章目录 简介 TLT DS 基于TLT进行迁移学习 环境准备 模型训练 基于DS的模型部署 总结 最近在做一个深度学习的横向,被实时性搞的很头疼,遂打算研究研究新的技术路线,做点技术储备.TLT+D ...

  4. 实践教程 | TensorRT部署深度学习模型

    作者 | ltpyuanshuai@知乎 来源 | https://zhuanlan.zhihu.com/p/84125533 编辑 | 极市平台 本文仅作学术分享,版权归原作者所有,如有侵权请联系删 ...

  5. TensorRT部署深度学习模型

    1.背景 目前主流的深度学习框架(caffe,mxnet,tensorflow,pytorch等)进行模型推断的速度都并不优秀,在实际工程中用上述的框架进行模型部署往往是比较低效的.而通过Nvidia ...

  6. 实战 | 深度学习轻松学:如何用可视化界面来部署深度学习模型 转载 2017年12月27日 00:00:00 109 翻译 | AI科技大本营 参与 | 王赫 上个月,我有幸结识了 DeepCogn

    实战 | 深度学习轻松学:如何用可视化界面来部署深度学习模型 转载 2017年12月27日 00:00:00 标签: 109 编辑 删除 翻译 | AI科技大本营 参与 | 王赫 上个月,我有幸结识了 ...

  7. amd 深度学习模型部署_Web服务部署深度学习模型-续集

    在上一篇中,本人介绍了如何使用Web服务部署深度学习模型,见知乎链接:刘聪NLP:Web服务部署深度学习模型. 有同学提问:"是否可以在web上有输入数据的接口,通过深度学习模型的计算数据的 ...

  8. 收藏 | TensorRT部署深度学习模型

    点上方计算机视觉联盟获取更多干货 仅作学术分享,不代表本公众号立场,侵权联系删除 转载于:作者 | ltpyuanshuai@知乎 来源 | https://zhuanlan.zhihu.com/p/ ...

  9. 在英特尔硬件上部署深度学习模型的无代码方法 OpenVINO 深度学习工作台的三部分系列文章 - CPU AI 第一部

    作者 Taylor, Mary, 翻译 李翊玮 关于该系列 了解如何转换.微调和打包推理就绪的 TensorFlow 模型,该模型针对英特尔®硬件进行了优化,仅使用 Web 浏览器.每一步都在云中使用 ...

最新文章

  1. 用linq查询html中div个数,C#使用Linq to XML进行XPath查询
  2. Vijos p1484 ISBN号码
  3. 从源码角度解析线程池中顶层接口和抽象类
  4. 美国 CISA 和 NIST 联合发布软件供应链攻击相关风险及缓解措施
  5. U盘怎么重装系统到电脑上
  6. matlab2c使用c++实现matlab函数系列教程-exppdf函数
  7. oracle怎么存视频地址,oracle的警告文件存储方式和地址
  8. 生活杂谈-空调的修理
  9. 服务器能不能用普通硬盘,服务器硬盘是什么 与普通硬盘区别
  10. 886n虚拟服务器ip,tl-wr886n怎么配置ip带宽控制
  11. ③电子产品拆解分析-充电宝台灯
  12. 王者荣耀-是用什么编程语言开发的(转)
  13. js-xlsx导入数据
  14. AFNetwork 2.0在请求时报错code=-1016 和 3840
  15. mysql5.7 1819_mysql5.7 ERROR 1819 (HY000): Your password does not satisfy the current policy requir.
  16. 如何打开计算机的用户和组,Win10系统如何打开本地用户和组
  17. Teechart7 for Delphi7安装说明
  18. PLC网关 工业PLC远程控制监控
  19. 公司绝不会告诉你的10个秘密
  20. 这款上线6年火爆应用即将消失

热门文章

  1. 麒麟信安携手河南IT联盟召开 《麒麟信安信创应用解决方案》线上分享会
  2. (力扣)171.Excel表列序号(c语言)
  3. c语言输入名字判断姓是否缩写,C语言复习笔记
  4. 强力推荐90个优秀外国英文网站
  5. 【react+umi】国际化配置:浏览器默认英文,如何让工程默认语言为中文?
  6. 在ubuntu上解包RK3288固件
  7. linux安装Oracle11g详细教程(redhat6、Centos7)
  8. C语言学习笔记(kk-zkx)
  9. 2022年终总结——工作第五年
  10. k8s 安装ingress nginx controller 并部署.net core ingress服务