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 支援 不等條件...