Caffe,protobuf 編譯安裝

2021-09-24 04:59:49 字數 3784 閱讀 6963

caffe,全稱convolutional architecture for fast feature embedding。

caffe是乙個深度學習框架。

caffe依賴protobuf

注:如果caffe要和tensorflow一起使用,需要調整依賴項版本:要基於protobuf-3.6.0版本來編譯caffe才行。

protobuf依賴boost

注:如果caffe要和tensorflow一起使用,則要基於boost1.58版本來編譯protobuf才行。

# 使用apt安裝boost1.58

$ sudo apt install libboost1.58-dev

解壓並進入protobuf-3.6.0:

# 依賴項

$ sudo

apt-get

install autoconf automake libtool curl

make g++ unzip

# 編譯

$ cd protobuf-3.6.0

$ ./autogen.sh

$ ./configure

$ make -j12

$ make check # 如果「make check」失敗,您仍然可以安裝,但該庫的某些功能可能無法在您的系統上正常執行。

# 安裝

$ sudo

make

install

$ sudo ldconfig # refresh shared library cache.

預設情況下,程式包將安裝到/usr/local

但是,在許多平台上,/usr/local/lib不是ld_library_path的一部分。您可以新增它,但可能更容易安裝到/usr。為此,請按如下方式呼叫configure:

./configure --prefix=/usr

如果您已經使用不同的字首構建了包,請確保在再次構建之前執行make clean

有關configure和make的高階用法資訊,請參閱autoconf文件:

$ cd caffe

# 依賴項(根據上述步驟,我們會已經安裝好需要的依賴了)

#$ sudo apt-get install

# 修改選項 # 修改makefile.config,例如我們可以開啟cpu_only選項。

$ cp makefile.config.example makefile.config

# 我是開啟了use_cudnn選項,關閉cpu_only

$ gedit makefile.config

use_cudnn := 1

# cpu_only := 1

cuda_dir := /usr/local/cuda

# 編譯

$ make clean # 如果編譯有奇怪問題,乾脆直接clean一下。

$ make all -j12

# make runtest -j16

# make pycaffe

下面編譯的是cpu版本:

# 修改選項 # 需要關閉use_cudnn選項,開啟cpu_only選項:

$ gedit makefile.config

# use_cudnn := 1

cpu_only := 1

# 因為我系統裡是opencv4,include目錄和opencv3有些不同,所以手動設定了路徑:

include_dirs += /usr/local/include/opencv4

# 編譯

$ make clean # 如果編譯有奇怪問題,乾脆直接clean一下。

$ make all -j12

# 編譯問題1:

src/caffe/layers/window_data_layer.cpp:293:42: error: 『cv_load_image_color』 was not declared in this scope

cv_img = cv::imread(image.first, cv_load_image_color)

; ^

# opencv4裡的 cv_load_image_color 應該使用 cv::imread_color 來代替:

cv::imread(image.first, cv::imread_color)

;# 好幾個這樣的問題,都需要這樣去改原始碼。

# 例:cv_load_image_grayscale 換成 cv::imread_grayscale 等等。。。

# 問題2:

src/caffe/layers/hdf5_output_layer.cpp:4:18: fatal error: hdf5.h: no such file or directory

# 需要在makefile.config裡新增hdf5的路徑:

$ gedit makefile.config

include_dirs += /usr/include/hdf5/serial/

# 注:修改過巨集定義,因為與openvino衝突。

# 不是我修改的,所以具體改動點不明確。

庫呼叫

對於api呼叫,可以在cmakelists.txt中使用include_directories()寫入指定呼叫路徑。

我是把這些檔案拷貝到了另乙個資料夾下:

新建shell指令碼auto_include_caffe.s**件,寫入以下內容,然後根據自己的目錄執行指令碼:

#!/bin/bashif[

"$1"

=="-h"];

then

echo

"執行的檔名:$0"

;echo

echo

"用法:$ bash 檔名 [源目錄] [目標目錄]"

echo

"例子:$ bash auto_include_caffe.sh /home/toson/soft/caffes/caffe /home/toson/compile_libs/caffe"

exit 0;

fiif

["$1"

==""];

then

echo

"請輸入源目錄!"

exit 0;

fiif

["$2"

==""];

then

echo

"請輸入目標目錄!"

exit 0;

fimkdir -p "$2"

cp -r "$1"

"/include"

"$2"

cp -r "$1"

"/.build_release/src"

"$2"

cp -r "$1"

"/.build_release/lib"

"$2"

echo

"end."

include_directories(

/home/toson/compile_libs/caffe/include

/home/toson/compile_libs/caffe/src)

link_directories(

/home/toson/compile_libs/caffe/lib)

編譯 交叉編譯

交叉編譯含義 是指在乙個平台上生成另乙個平台上的可執行 同乙個體系結構可以執行不同的作業系統,同樣乙個作業系統也可以在不同的體系結構上執行 例 常說的x86 linux平台 指inter x86體系結構及linux for x86作業系統 x86 winnt平台 指inter x86體系結構及win...

核心編譯 模組編譯

目前是嵌入式 linux 的初學者感覺有所體會 1.從demo 學起 tiny 6410 上的開發,我的任務不斷是新增小模組。交叉編譯器,以及其它一系列 tool chains 可直使用產商提供的工具。避免過多細節的好處在於,你可以從整體處著手你從書本學到的理論知識。2.kernel 編譯其它很簡單...

Golang 編譯 條件編譯

條件編譯 標籤編譯 build tag build build linux and 386 or darwin and not cgo 以 開始,例如 build 支援 goos 與 goarch 並可以具有多個值,用 分割,例如 build linux,darwin,freebsd 支援 不等條件...