Ubuntu18.04下C++编译tensorflow并在QT中使用

本文介绍了如何在Ubuntu18.04上将训练好的Keras模型转换为TensorFlow C++接口,并在QT应用中使用。详细步骤包括环境配置、模型转换、TensorFlow C++接口的编译安装以及在C++中的模型调用。过程中需要注意TensorFlow版本与protobuf的匹配,以及模型接口名称的确定。

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

本博文参考:
https://blog.youkuaiyun.com/qq_25109263/article/details/81285952
https://blog.youkuaiyun.com/dragonchow123/article/details/80682787

介绍

最近要把模型落地了,由于整个系统是基于C++的,但是我们一般都是使用python来训练模型,这个时候就需要进行转换了。tensorflow提供了基于C++的API,但是需要编译,过程在这里记录下,网上的教程还是有点坑的。

PipeLine

整个工作流:keras训练->“my_model.h5”->转换到pb类型->“my_model.pb”->C++端用tensorflowAPI调用并运行模型。

必备环境配置

本机配置:GTX1080ti,Ubuntu18.04

(1)一个配有tensorflow和keras的python环境,建议用anaconda去创建

(2) CUDA9.1, cudnn7.1.2(安装CUDA和cudnn的方法请自行查找,不在本文范围内)

(3)OpenCV3.4(安装OpenCV的方法请自行查找,不在本文范围内)

(4)编译tensorflow C++接口,这在接下来会介绍

编译安装tensorflow的C++接口,本文编译的tensorflow C++是1.7版的

1.配置C++版tensorflow使用时的第三方依赖

(1)Protobuf!!!!!这玩意儿是重中之重,它的版本与tensorflow的版本密切相关,它的版本错了就无法work,我用的3.5.0。

先从以下网址下载protobuf-cpp-3.5.0.tar.gz
https://github.com/google/protobuf/releases
再解压出来,获得一个protobuf-3.5.0的文件夹
cd prtobuf-3.5.0
./configure
sudo make -j8
make check -j8
sudo make install
sudo ldconfig
以上步骤可以完成Protubuf的源码的编译和安装
如果遇到什么问题,建议去看Protobuf的官方的编译安装指南:
https://github.com/google/protobuf/blob/master/src/README.md

(2)Eigen,这是一个C++端的矩阵运算库,这个库只要下载压缩包,解压到某个自己知道的路径下即可

先下载eigen的压缩包
wget http://bitbucket.org/eigen/eigen/get/3.3.4.tar.bz2
下载之后解压,重新命名为eigen3,放到某个路径下,安装就好

mkdir build  
cd build  
cmake ..  
make  
sudo make install

2.编译安装Tensorflow

(1)下载安装编译工具bazel

先下载Bazel的安装包
https://github.com/bazelbuild/bazel/releases,我下载的是bazel-0.10.1-installer-linux-x86_64.sh
然后执行安装
./bazel-0.10.1-installer-linux-x86_64.sh

注意:bazel版本不能过高,否则会报错

(2)编译安装Tensorflow,我的源码路径是~/tensorflow

# 先下载tensorflow源码
git clone https://github.com/tensorflow/tensorflow.git

# 进入tensorflow文件夹
cd tensorflow

# 切换到1.7版本:
git checkout r1.7

# 执行configure
sudo ./configure
这一步需要你指定python路径,需要有各种y/N的选择
建议如下:

    python路径用anaconda的路径:/home/oliver/anaconda3/bin/python
    其他的第一个y/N选择y,后面的都是N
    cuda要选择y,然后会自动搜索cudnn版本
    nccl选择默认的1.3,
    后面的不是选择N就是默认

详见Tensorflow官网的提示:https://www.tensorflow.org/install/install_sources

也可以参考一个链接:https://blog.youkuaiyun.com/qq_37674858/article/details/81095101

# 使用bazel去编译
bazel build --config=opt //tensorflow:libtensorflow_cc.so // 无显卡,cpu版本
bazel build --config=opt --config=cuda //tensorflow:libtensorflow_cc.so // 有显卡


....漫长的等待编译,大约20分钟
# 最后显示类似如下的信息,说明编译成功了:
....
Target //tensorflow:libtensorflow_cc.so up-to-date:
  bazel-bin/tensorflow/libtensorflow_cc.so
INFO: Elapsed time: 1192.883s, Critical Path: 174.02s
INFO: 654 processes: 654 local.
INFO: Build completed successfully, 656 total actions

然后回到tensorflow目录下执行:

./tensorflow/contrib/makefile/download_dependencies.sh
#完成后会有一个download文件夹在makefile文件夹中。

然后:

在tensorflow/contrib/makefile下,执行build_all_linux.sh文件,成功后会出现一个gen文件夹。

操作完成后需要把"tensorflow/bazel-genfiles/tensorflow/"中的cc和core文件夹中的内容copy到"tensorflow/tensorflow/"中,然后完成覆盖即可,这一步是为了复制.pb.h和.cc文件。
在这里插入图片描述完成这一步之后:

# 再把必要.h头文件以及编译出来.so的动态链接库文件复制到指定的一些路径下:
sudo mkdir /usr/local/include/tf
sudo cp -r bazel-genfiles/ /usr/local/include/tf/
sudo cp -r tensorflow /usr/local/include/tf/
sudo cp -r third_party /usr/local/include/tf/
sudo cp bazel-bin/tensor
评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值