C++环境下部署深度学习模型方案

本文介绍如何在C++环境中部署Python训练的深度学习模型。主要包括四种方法:C++直接调用Python、通过Python服务接口调用、Python转C++及使用深度学习部署框架。详细对比了各方法的优缺点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

一、问题背景

二、解决方案

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
TensorRTTensorRT部署深度学习模型 - 知乎 深度学习模型部署(1)-Pytorch转TensorRT(C++版) - 知乎
TensorFlowC++部署TensorFlow模型_蓬莱道人的博客-CSDN博客_c++ tensorflow
PaddlePaddle
  • Intel CPU平台

框架资料
Caffe
OpenVINOYOLOv5在最新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语法都能转换成功
深度学习部署框架直接交互
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Jason~shen

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

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

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

打赏作者

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

抵扣说明:

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

余额充值