tensorflow版本:r1.9
cuda: 9.0
cudnn: 7.3.0
bazel: 0.15
protobuf: 3.5.0 (版本要与tf对应)
eigen:使用tensorflow脚本生成。
nccl: 2.4.8
步骤:(基本参考:https://blog.youkuaiyun.com/qq_37541097/article/details/86232687)
- 安装protobuf
sudo apt-get install automake libtool
./autogen.sh#如果报错要apt-get install autoconf
./configure
make
sudo make install
sudo ldconfig
# sudo make uninstall 安装错版本后卸载指令
protoc --version # 3.5.0
刚开始装在用户目录下,在编译tf项目时报报protoc版本不兼容error This file was generated by a newer version of protoc which is
,原来/usr/bin/protoc要与/usr/include相对应。这样用户目录下protoc错误匹配了/usr/include头文件。
2. bazel
chmod +x bazel-0.15.2-installer-linux-x86_64.sh
./bazel-0.15.2-installer-linux-x86_64.sh --user
#bashrc中export PATH="$PATH:/home/liuch/bin"
-
nccl (在我资源里有)
下载nccl-2.4.8-1-x86_64.pkg.tar.xz。解压后将nccl-xxx所有文件夹及其下属文件拷到cuda-9.0/lib64目录下,也可以是其他目录,主要在tensorflow configure中指定nccl路径。 -
tensorflow
git clone --recursive https://github.com/tensorflow/tensorflow
cd ./tensorflow
git checkout r1.9
./configure
#python, lib都是用anaconda的,其他都选择N,然后cuda选Y,指定cuda,cudnn版本。
bazel build --config=opt --config=monolithic --config=cuda //tensorflow:libtensorflow_cc.so
- 安装eigen
在tensorflow/tensorflow/contrib/makefile/download_dependencies.sh
mkdir build
cd build
cmake .. -DCMAKE_INSTALL_PREFIX=/home/liuch/eigen3#能用户目录就用户目录
make
make install
- 编写main.cpp
#include <tensorflow/core/platform/env.h>
#include <tensorflow/core/public/session.h>
#include <iostream>
using namespace std;
using namespace tensorflow;
int main()
{
Session* session;
Status status = NewSession(SessionOptions(), &session);
if (!status.ok()) {
cout << status.ToString() << "\n";
return 1;
}
cout << "Session successfully created.\n";
return 0;
}
CMakeLists.txt
cmake_minimum_required(VERSION 3.10)
project(cpptensorflow)
set(CMAKE_CXX_STANDARD 11)
link_directories(/home/liuch/C/tensorflow/bazel-bin/tensorflow)
include_directories(
/home/liuch/C/tensorflow
/home/liuch/C/tensorflow/bazel-genfiles
/home/liuch/C/tensorflow/bazel-bin/tensorflow
/home/liuch/eigen3/include/eigen3
)
add_executable(cpptensorflow main.cpp)
target_link_libraries(cpptensorflow tensorflow_cc tensorflow_framework)
cmake make运行完成。
- opencv安装
如果在qt工程中使用接口,最好把编译文件整理一下,否则运行的时候得拷贝so文件。
- 拿出编译好的so文件
mkdir /home/liuch/tensorflow/lib
cp bazel-bin/tensorflow/libtensorflow_cc.so /home/liuch/tensorflow/lib
cp bazel-bin/tensorflow/libtensorflow_framework.so /home/liuch/tensorflow/lib
- 拷贝源代码
mkdir /home/liuch/tensorflow/google/tensorflow
cp -r tensorflow /home/liuch/tensorflow/google/tensorflow/
cp bazel-genfiles/tensorflow/core/framework/*.h /home/liuch/tensorflow/google/tensorflow/tensorflow/core/framework
cp bazel-genfiles/tensorflow/core/lib/core/*.h /home/liuch/tensorflow/google/tensorflow/tensorflow/core/lib/core
cp bazel-genfiles/tensorflow/core/protobuf/*.h /home/liuch/tensorflow/google/tensorflow/tensorflow/core/protobuf
cp bazel-genfiles/tensorflow/core/util/*.h /home/liuch/tensorflow/google/tensorflow/tensorflow/core/util
cp bazel-genfiles/tensorflow/cc/ops/*.h /home/liuch/tensorflow/google/tensorflow/tensorflow/cc/ops
cp bazel-genfiles/tensorflow/core/kernels/*.h /home/liuch/tensorflow/google/tensorflow/tensorflow/core/kernels
cp -r third_party /home/liuch/tensorflow/google/tensorflow/
rm -r /home/liuch/tensorflow/google/tensorflow/third_party/py
rm -r /home/liuch/tensorflow/google/tensorflow/third_party/avro
- qt
因为我只能在用户目录下安装qt,但是根目录可能被别人装过其他版本qt了,我这里装动态库始终没成功,所以装的静态版qt4.8.可自行百度qt4.8静态编译。
在cmake编译opencv前,CMakeLists.txt加上set(CMAKE_CXX_STANDARD 11)
,否则cv不支持c++11.
pro
INCLUDEPATH += /home/liuch/opencv/include \
/home/liuch/opencv/include/opencv \
/home/liuch/opencv/include/opencv2 \
/home/liuch/tensorflow/google/tensorflow \
/home/liuch/eigen3/include/eigen3
LIBS += /home/liuch/tensorflow/lib/libtensorflow_cc.so \
/home/liuch/tensorflow/lib/libtensorflow_framework.so \
/home/liuch/opencv/lib/libopencv_calib3d.so \
/home/liuch/opencv/lib/libopencv_shape.so.3.4.4 \
/home/liuch/opencv/lib/libopencv_calib3d.so.3.4 \
/home/liuch/opencv/lib/libopencv_stitching.so \
/home/liuch/opencv/lib/libopencv_calib3d.so.3.4.4 \
/home/liuch/opencv/lib/libopencv_stitching.so.3.4 \
/home/liuch/opencv/lib/libopencv_core.so \
/home/liuch/opencv/lib/libopencv_stitching.so.3.4.4 \
/home/liuch/opencv/lib/libopencv_core.so.3.4 \
/home/liuch/opencv/lib/libopencv_superres.so \
/home/liuch/opencv/lib/libopencv_core.so.3.4.4 \
/home/liuch/opencv/lib/libopencv_superres.so.3.4 \
/home/liuch/opencv/lib/libopencv_dnn.so \
/home/liuch/opencv/lib/libopencv_superres.so.3.4.4 \
/home/liuch/opencv/lib/libopencv_dnn.so.3.4 \
/home/liuch/opencv/lib/libopencv_videoio.so \
/home/liuch/opencv/lib/libopencv_dnn.so.3.4.4 \
/home/liuch/opencv/lib/libopencv_videoio.so.3.4 \
/home/liuch/opencv/lib/libopencv_features2d.so \
/home/liuch/opencv/lib/libopencv_videoio.so.3.4.4 \
/home/liuch/opencv/lib/libopencv_features2d.so.3.4 \
/home/liuch/opencv/lib/libopencv_video.so \
/home/liuch/opencv/lib/libopencv_features2d.so.3.4.4 \
/home/liuch/opencv/lib/libopencv_video.so.3.4 \
/home/liuch/opencv/lib/libopencv_flann.so \
/home/liuch/opencv/lib/libopencv_video.so.3.4.4 \
/home/liuch/opencv/lib/libopencv_flann.so.3.4 \
/home/liuch/opencv/lib/libopencv_videostab.so \
/home/liuch/opencv/lib/libopencv_flann.so.3.4.4 \
/home/liuch/opencv/lib/libopencv_videostab.so.3.4 \
/home/liuch/opencv/lib/libopencv_highgui.so \
/home/liuch/opencv/lib/libopencv_videostab.so.3.4.4 \
/home/liuch/opencv/lib/libopencv_highgui.so.3.4 \
/home/liuch/opencv/lib/libopencv_highgui.so.3.4.4 \
/home/liuch/opencv/lib/libopencv_imgcodecs.so \
/home/liuch/opencv/lib/libopencv_imgcodecs.so.3.4 \
/home/liuch/opencv/lib/libopencv_imgcodecs.so.3.4.4 \
/home/liuch/opencv/lib/libopencv_imgproc.so \
/home/liuch/opencv/lib/libopencv_imgproc.so.3.4 \
/home/liuch/opencv/lib/libopencv_imgproc.so.3.4.4 \
/home/liuch/opencv/lib/libopencv_ml.so \
/home/liuch/opencv/lib/libopencv_ml.so.3.4 \
/home/liuch/opencv/lib/libopencv_ml.so.3.4.4 \
/home/liuch/opencv/lib/libopencv_objdetect.so \
/home/liuch/opencv/lib/libopencv_objdetect.so.3.4 \
/home/liuch/opencv/lib/libopencv_objdetect.so.3.4.4 \
/home/liuch/opencv/lib/libopencv_photo.so \
/home/liuch/opencv/lib/libopencv_photo.so.3.4 \
/home/liuch/opencv/lib/libopencv_photo.so.3.4.4 \
/home/liuch/opencv/lib/libopencv_shape.so \
/home/liuch/opencv/lib/libopencv_shape.so.3.4
CONFIG += c++11
CONFIG += static
- dlib安装
- openblas
git clone https://github.com/xianyi/OpenBLAS.git
cd OpenBLAS
make -j8
make PREFIX=/home/liuchl/OpenBLAS install
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/liuchl/lib/
- dlib
git clone https://github.com/davisking/dlib.git
cd dlib
>>首先进入dlib的根目录下
>>再执行如下语句:
cd examples #进入dlib下的examples文件夹
mkdir build #新建build文件夹,存放cmake编译后的执行文件
cd build #进入新建好的build文件夹
cmake .. #cmake编译examples整个文件夹
cmake --build . --config Release
>>进入dlib根目录下
mkdir build
cd build
cmake ..
make release=1
#mkdir build; cd build; cmake .. -DDLIB_USE_CUDA=0 -DUSE_AVX_INSTRUCTIONS=1; cmake --build .
-DDLIB_USE_CUDA=0不使用cuda
-DUSE_AVX_INSTRUCTIONS=1使用cpu的AVX加速
pro
SOURCES += /home/liuch/dlib-19.17/dlib/all/source.cpp
LIBS += -L/home/liuch/dlib-19.17/dlib
INCLUDEPATH += /home/liuch/dlib-19.17
QMAKE_CXXFLAGS += -std=c++0x -DDLIB_PNG_SUPPORT -DDLIB_JPEG_SUPPORT