天天看點

Opencv與Caffe 安裝使用引言常用OpenCV庫與機器學習平台Caffe軟體安裝及錯誤解決方案

1 引言

2 常用OpenCV庫與機器學習平台Caffe

2.1 OpenCV在圖像進行中的使用介紹
2.2 機器學習平台:Caffe

3 軟體安裝及錯誤解決方案

3.1 Centos7無網絡環境安裝配置Opencv
3.2 Centos7無網絡環境安裝配置Caffe
3.3 軟體安裝中遇到的問題
3.3.1 錯誤 libprotobuf.so.14缺失問題

3.3.2 missing: Atlas_CLAPACK_INCLUDE_DIR Atlas_CBLAS_LIBRARY

Atlas_BLAS_LIBRARY Atlas_LAPACK_LIBRARY

3.3.3 libraries: libprotobuf.so.8 缺失問題:
3.3.4 僅編譯matcaffe 編譯問題(編譯參數設定)

3.3.5 Invalid MEX-file ‘/matlab/+caffe/private/caffe_.mexa64’:

libopenblas.so.0: cannot open shared object file: No such file or directory

3.3.6 MATLAB/R2014a/bin/glnxa64/…/…/sys/os/glnxa64/libstdc++.so.6: version

`GLIBCXX_3.4.18’ not found (required by /usr/local/lib/libprotobuf.so.14)

3.3.7 INSTALL NCCL,注意gencode architecture,不然編譯會出現問題
3.3.8 NCCL與MATLAB識别問題,如果未識别

入職以來,對門店客流系統的了解和進一步加深了解,在解決門店客流場景中的行人檢測,跟蹤和重識别問題,學者們提出了各種各樣的解決思路與方法。在對客流場景中的不同算法進行測試時,重新實作需要投入大量的時間與精力,直接使用作者發的工具與代碼進行算法快速疊代是保證項目快速推進疊代的有效手段。然而不同學者的研究背景和開發工具使用習慣,使得現有解決方案核心代碼實作基于不同的平台,比如Caffe,Keras等。這使得在進行項目研發的過程中,需要安裝不同的工具,對學者們提出的解決方法進行測試。進行測試的前提是對各種工具進行熟練的使用,在進行熟練使用的前提是對工具進行正确的安裝。本文針對入職以來,将目前工作伺服器環境中安裝工具過程中遇到的問題進行回顧,結合自己定期撰寫的部落格,就常用工具的安裝使用問題進行了系統總結與回顧,對工具安裝使用過種中存在的問題進行了舉例,希望與内部同僚加強溝通交流。

索引關鍵詞:圖像工具;caffe;工具使用;Opencv;安裝問題

引言

随着公司業務的拓展和對服務工作的細化,目前集團已全面邁入智慧零售發展的關鍵階段,智慧零售的本質是數字零售,是建立在資料化管理與分析基礎。網際網路時代,大資料是技術,與是工具,是貫穿工作始終且行之有效的準則。進行資料化管理與分析前提是對結合業務場景,利用機器學習等工具來解決業務場景需要解決的問題發掘資料價值,也就是理論結合業務指導實踐問題。在解決實踐問題中快速對思路和方法進行快速疊代。在這個過程中工具的價值也就發揮了巨大的作用。

工具是機器學習的重要組成部分,選擇合适的工具與使用最好的算法同等重要。機器學習工具使得應用機器學習更快,更簡單,更有趣。更快:好工具可以自動化應用機器學習過程中的每一步。這意味着,從提出創意到得到結果的時間大大縮短。如果你從頭開始自己實作每一個功能,這花的時間要比選擇現有工具要長的多。更簡單:你可以花時間來選擇合适的工具,而不是研究、實作技術來完成任務。如果你自己實作,你必須對每一個過程都十分精通。這需要研究,資深經驗來了解技術,以及高水準的工程技能來確定有效執行。

結合實際的業務,有目的地選擇工具,是進行項目快速疊代開發的前提。強大的機器學習工具展現了過程,配置和實作的最佳實踐。比如自動配置機器學習算法,工具内部結構良好的處理方式。這樣即在解決業務場景中的實際問題過程中,加深了對工具的了解。我們這裡主要讨論的是機器學習平台,比如Caffe等,對機器學習庫這裡不做主要讨論,因為這些庫在網絡環境較好的情況下依靠第三方安裝工具可以直接安裝使用。下面主要對圖像算法實踐過程中使用的主要機器學習平台Caffe和Opencv第三方庫的安裝使用過程存在的問題結合具體執行個體進行簡要的說明,以供學習與交流使用。

常用OpenCV庫與機器學習平台Caffe

OpenCV在圖像進行中的使用介紹

OpenCV是一個基于BSD許可(開源)發行的跨平台計算機視覺庫,可以運作在Linux、Windows、Android和Mac

OS作業系統上。它輕量級而且高效——由一系列 C 函數和少量 C++

類構成,同時提供了Python、Ruby、MATLAB等語言的接口,實作了圖像處理和計算機視覺方面的很多通用算法。

OpenCV用C++語言編寫,它的主要接口也是C++語言,但是依然保留了大量的C語言接口。該庫也有大量的Python,

Java and MATLAB/OCTAVE

(版本2.5)的接口。這些語言的API接口函數可以通過線上文檔獲得。如今也提供對于C#,Ch,

Ruby的支援。所有新的開發和算法都是用C++接口。一個使用CUDA的GPU接口也于2010年9月開始實作。

機器學習平台:Caffe

Caffe的全稱應該是Convolutional Architecture for Fast Feature

Embedding,它是一個清晰、高效的深度學習架構,它是開源的,核心語言是C++,它支援指令行、Python和Matlab接口,它既可以在CPU上運作也可以在GPU上運作。它的license是BSD

2-Clause。

軟體安裝及錯誤解決方案

這裡主要是針對軟體安裝過程中,公司内部網絡通過網上搜尋的等形式快速下載下傳相應的軟體包,是以這裡給出了相應軟體包,依賴包的下載下傳使用方法。

由于linux的包依賴關系較為複雜,因些這裡給出了幾種依賴包的關聯下載下傳使用方法。

方案一:用包安裝工具進行依賴庫關聯下載下傳。

以Centos上自帶的yum為例。yum是一個優秀的軟體擷取與系統更新的工具,主要應用于Redhat系列的發行版本上。

yum有一個plugin叫做yum-downloadonly,它就可以為使用者實作隻下載下傳軟體包的功能。完成安裝後,yum就多了兩個指令參數,分别是:–downloadonly、–downloaddir=/path/to/dir

方案二:直接修改包管工具配置檔案,對各個庫安裝的依賴庫儲存到本地。

也可直接修改/etc/yum.conf 将keepcache=0 修改為 keepcache=1,

安裝或者更新後,在目錄 /var/cache/yum 下就會有下載下傳的 rpm 包了

Centos7無網絡環境安裝配置Opencv

總得來講,opencv在安裝過程失敗,往往是因為缺少相應庫。我們這裡詳細讨論并介紹opencv

安裝過程中庫的依賴關系。

這裡主要針對

Opencv進行安裝配置時,下面給出不能正常聯網時,Opencv安裝的詳細過程,并提供了軟體安裝過程中需要的依賴包。注意這裡隻給出該系統版軟體包有依賴安裝的情況進行說明,對于不需要依賴安裝的軟體不做說明,直接下載下傳對應源進行安裝即可(位址

密碼:uy8a)。

系統環境(centos 7, 伺服器無聯網環境,注此伺服器版本為工作伺服器版本資訊):

Linux version 3.10.0-514.el7.x86_64 ([email protected]) (gcc

version 4.8.5 20150623 (Red Hat 4.8.5-11) (GCC) ) #1 SMP Tue Nov 22 16:42:41

UTC 2016

Opencv安裝:

Opencv安裝需要的庫:

• GCC 4.4.x or later

• CMake

• Git

• GTK+2.x or higher, including headers (libgtk2.0-dev)

• pkg-config

• Python 2.7 or later and Numpy 1.8 or later with developer packages

(python-dev, python-numpy)

• ffmpeg or libav development packages: libavcodec-dev, libavformat-dev,

libswscale-dev

• *[optional] libtbb2 libtbb-dev

• *[optional] libdc1394 2.x

• *[optional] libjpeg-dev, libpng-dev, libtiff-dev, libjasper-dev,

libdc1394-22-dev

Gcc安裝(下載下傳 位址 密碼:uy8a)

> 該Centos 7版本上gcc缺少的依賴庫隻有一個:

(1/2): libstdc+±devel-4.8.5-11.el7.x86_64.rpm | 1.5 MB

(2/2): gcc-c+±4.8.5-11.el7.x86_64.rpm | 7.2 MB

Lib-gtk(下載下傳 位址 密碼:uy8a)

> 該Centos 7版本上Lib-gtk依賴庫有13個:

(1/13): glib x86_64 1:1.2.10-41.el7 137 k

(2/13): glib-devel x86_64 1:1.2.10-41.el7 40 k

(3/13): gtk+ x86_64 1:1.2.10-77.el7 841 k

(4/13): libICE-devel x86_64 1.0.9-2.el7 49 k

(5/13): libSM-devel x86_64 1.2.2-2.el7 13 k

(6/13):libX11-devel x86_64 1.6.3-3.el7 980 k

(7/13):libXau-devel x86_64 1.0.8-2.1.el7 14 k

(8/13):libXext-devel x86_64 1.3.3-3.el7 75 k

(9/13): libXfixes-devel x86_64 5.0.1-2.1.el7 13 k

(10/13): libXi-devel x86_64 1.7.4-2.el7 105 k

(11/13): libXt-devel x86_64 1.1.4-6.1.el7 445 k

(12/13):libxcb-devel x86_64 1.11-4.el7 1.1 M

(13/13): xorg-x11-proto-devel noarch 7.7-13.el7 281 k

libav development[optional] (下載下傳 位址 密碼:uy8a)

gstreamer-devel libavc1394-devel libraw1394-devel libdc1394-devel jasper-devel

jasper-utils

安裝軟體版本:

gstreamer-devel.x86_64 0:0.10.36-7.el7

jasper-devel.x86_64 0:1.900.1-30.el7_3

jasper-utils.x86_64 0:1.900.1-30.el7_3

libavc1394-devel.x86_64 0:0.5.3-14.el7

libdc1394-devel.x86_64 0:2.2.2-3.el7

libraw1394-devel.x86_64 0:2.1.0-2.el7

對應依賴庫:

check-devel.x86_64 0:0.9.9-5.el7

freeglut.x86_64 0:2.8.1-3.el7

glib2-devel.x86_64 0:2.46.2-4.el7

jasper.x86_64 0:1.900.1-30.el7_3

libdc1394.x86_64 0:2.2.2-3.el7

libjpeg-turbo-devel.x86_64 0:1.2.90-5.el7

libxml2-devel.x86_64 0:2.9.1-6.el7_2.3

xz-devel.x86_64 0:5.2.2-1.el7

zlib-devel.x86_64 0:1.2.7-17.el7

ffmpeg 安裝(下載下傳 位址 密碼:uy8a)

ffmpeg (ffmpeg.x86_64

0:2.6.8-3.el7.nux)安裝時需要的依賴庫,總共需要18個依賴庫:

(1/18): SDL-1.2.15-14.el7.x86_64.rpm | 204 kB

(2/18): fdk-aac-0.1.4-1.x86_64.rpm | 375 kB

(3/18): faac-1.28-6.0.el7.nux.x86_64.rpm | 269 kB

(4/18): fribidi-0.19.4-6.el7.x86_64.rpm | 63 kB

(5/18): lame-libs-3.99.5-8.el7.x86_64.rpm | 343 kB

(6/18): libass-0.13.4-1.el7.x86_64.rpm | 92 kB

(7/18): ffmpeg-2.6.8-3.el7.nux.x86_64.rpm | 1.5 MB

(8/18): libvdpau-1.1-2.el7.x86_64.rpm | 32 kB

(9/18): libdc1394-2.2.2-3.el7.x86_64.rpm | 121 kB

(10/18): schroedinger-1.0.11-4.el7.x86_64.rpm | 291 kB

(11/18): soxr-0.1.2-1.el7.x86_64.rpm | 77 kB

(12/18): libavdevice-2.6.8-3.el7.nux.x86_64.rpm | 71 kB

(13/18): openal-soft-1.16.0-3.el7.x86_64.rpm | 282 kB

(14/18): libva-1.2.1-3.el7.x86_64.rpm | 68 kB

(15/18): x265-libs-1.9-1.el7.nux.x86_64.rpm | 1.5 MB

(16/18): x264-libs-0.142-11.20141221git6a301b6.el7.nux. | 570 kB

(17/18): xvidcore-1.3.2-5.el7.nux.x86_64.rpm | 258 kB

(18/18): ffmpeg-libs-2.6.8-3.el7.nux.x86_64.rpm | 5.0 MB

由于安裝ffmpeg

過程中需要的依賴庫較多,可以先将一台裝有centos版本的伺服器聯網,然後用yum 或者

(apt-get)等包管理工具将依賴庫進行儲存。

安裝軟體版本:

libpng-devel.x86_64 2:1.5.13-7.el7_2 libtiff-devel.x86_64 0:4.0.3-27.el7_3

libtool.x86_64 0:2.4.2-22.el7_3 nasm.x86_64 0:2.10.07-7.el7

swig.x86_64 0:2.0.10-5.el7

相應依賴庫:

autoconf.noarch 0:2.69-11.el7

automake.noarch 0:1.13.4-3.el7

m4.x86_64 0:1.4.16-10.el7

perl-Data-Dumper.x86_64 0:2.145-3.el7

perl-Test-Harness.noarch 0:3.28-3.el7

perl-Thread-Queue.noarch 0:3.02-2.el7

Opencv編譯過程中出現的問題:

安裝過程SIZE_MAX宏定義缺失問題:

In file included from /usr/include/jasper/jasper.h:77:0,

from /home/njuzxy/Desktop/opencv/modules/highgui/src/grfmt_jpeg2000.cpp:59:

/usr/include/jasper/jas_math.h: In function ‘bool jas_safe_size_mul(size_t,

size_t, size_t*)’:

/usr/include/jasper/jas_math.h:143:15: error: ‘SIZE_MAX’ was not declared in

this scope

if (x && y > SIZE_MAX / x) {

^

/usr/include/jasper/jas_math.h: In function ‘bool jas_safe_size_add(size_t,

size_t, size_t*)’:

/usr/include/jasper/jas_math.h:170:10: error: ‘SIZE_MAX’ was not declared in

this scope

if (y > SIZE_MAX - x) {

^

make[2]: ***

[modules/highgui/CMakeFiles/opencv_highgui.dir/src/grfmt_jpeg2000.cpp.o] Error 1

make[1]: *** [modules/highgui/CMakeFiles/opencv_highgui.dir/all] Error 2

make: *** [all] Error 2

解決方法:

由于錯誤提示沒有SIZE_MAX這個宏,通過修改__STDC_LIMIT_MACROS,并沒有解決以上問題,這裡我們直接對檔案/usr/include/jasper/jas_math.h進行修改,在#include

<stdint.h>添加SIZE_MAX宏定義:

#if ! defined SIZE_MAX

#define SIZE_MAX (4294967295U)

#endif

Opencv環境配置

1、添加路徑

如果不添加路徑到環境變量當運作測試程式時會出錯如下:

./drawing: error while loading shared libraries: libopencv_calib3d.so.2.4:

cannot open shared object file: No such file or directory

這裡主要讨論一般安裝不考慮,root權限下安裝。

針對目前使用者(使用者名:username):

輸入指令:vi /home/username/.bashrc

PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/where/you/install/opencv/lib/pkgconfig

Export PKG_CONFIG_PATH

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/ where/you/install/opencv/lib

更新環境變量:source /etc/profile; 更新系統庫緩存: ldconfig

2、難檢視opencv 是否安裝成功

輸入指令:pkg-config—cflags opencv

pkg-config—libs opencv

如果沒有出錯,說明安裝成功。

3、測試

生成 可執行檔案:g++demo.cpp `pkg-config --cflags --libs opencv` -o demo

生成動态連結庫可輸入:gcc demo.c `pkg-config --cflags --libs opencv` -fPIC

-shared -o libdemo.so

Centos7無網絡環境安裝配置Caffe

這裡主要針對

caffe進行安裝配置時,下面給出不能正常聯網時,caffe安裝的詳細過程,并提供了軟體安裝過程中需要的依賴包。注意這裡隻給出該系統版軟體包有依賴安裝的情況進行說明,對于不需要依賴安裝的軟體不做說明,直接下載下傳對應源,通過其它途徑拷貝到相應安裝位置即可。

系統環境(centos 7, 伺服器無聯網環境):

Linux version 3.10.0-514.el7.x86_64 ([email protected]) (gcc

version 4.8.5 20150623 (Red Hat 4.8.5-11) (GCC) ) #1 SMP Tue Nov 22 16:42:41

UTC 2016

Caffe 安裝依賴庫:

> protobuf-devel leveldb-devel snappy-devel

OpenCV-devel boost-devel hdf5-devel gflags

devel glog-devel lmdb-devel

這裡我們可以先使用聯網的機器和沒有通路限制的伺服器,使用上述介紹的方法下載下傳相應依賴庫,然後再進行安裝。

1) glog

wget https://google-glog.googlecode.com/files/glog-0.3.3.tar.gz

tar zxvf glog-0.3.3.tar.gz

cd glog-0.3.3

./configure

make && make install

2) gflags

wget https://github.com/schuhschuh/gflags/archive/master.zip

unzip master.zip

cd gflags-master

mkdir build && cd build

export CXXFLAGS=”-fPIC” && cmake … && make VERBOSE=1

make && make install

3) lmdb

Git clone https://github.com/LMDB/lmdb

cd lmdb/libraries/liblmdb

make && make install

4) protobuf重要

安裝步驟請參考 http://blog.csdn.net/tdmyl/article/details/31811317

5) hdf5安裝

hdf5安裝請檢視官方文檔

http://www.hdfgroup.org/HDF5/release/obtainsrc.html#src

6) leveldb安裝

leveldb下載下傳請見https://github.com/google/leveldb

安裝請見http://blog.sina.com.cn/s/blog_560e310001015jfx.html

缺失的步驟:

leveldb檔案夾下依次執行

make

cd out-shared

cp lib* /usr/local/lib

以下是聯網進行安裝的方法,由于本文說的是不聯網安裝,是以本文給出對于本版本伺服器的依賴庫的下載下傳位址[http://pan.baidu.com/s/1bpB2AYF]

密碼:21r4

由于在不聯網環境下很難對軟體包的依賴關系,利用包管理工具(yum,

apt-get等)做出更新,是以本文強調的是進行不聯網更新安裝。由于本文說的是不聯網安裝,是以本文給出對于本版本伺服器的依賴庫的下載下傳位址[http://pan.baidu.com/s/1bpB2AYF]

密碼:21r4,也在公司伺服器上下載下傳有相應代碼。通過将相應版本的代碼放置到一個目錄,通過Linux

yum,rpm指令進行更新安裝。其它步驟按照官方文檔進行配置就不會出錯。

軟體安裝中遇到的問題

軟體安裝過程中出現的編譯問題進行了整理,這裡由于貼出了出錯時的相應代碼,是以該部分請結合目錄進行搜尋檢視,這裡主要針對Matcaffe和Pycaffe的編譯安裝問題進行了整理回顧。

錯誤 libprotobuf.so.14缺失問題

問題描述:

PROTOC src/caffe/proto/caffe.proto

protoc: error while loading shared libraries: libprotobuf.so.14: cannot open

shared object file: No such file or directory

make: *** [.build_release/src/caffe/proto/caffe.pb.cc] Error 127

解決方案:

sudo ldconfig or export LD_LIBRARY_PATH=/usr/local/lib

missing: Atlas_CLAPACK_INCLUDE_DIR Atlas_CBLAS_LIBRARY Atlas_BLAS_LIBRARY Atlas_LAPACK_LIBRARY

問題描述:

CMake Error at

/usr/local/share/cmake-2.8/Modules/FindPackageHandleStandardArgs.cmake:108

(message):

Could NOT find Atlas (missing: Atlas_CLAPACK_INCLUDE_DIR

Atlas_CBLAS_LIBRARY Atlas_BLAS_LIBRARY Atlas_LAPACK_LIBRARY)

Solution:

Cmake –DBLAS=open …

解決方案:

cmake -DBLAS=open -DCMAKE_INCLUDE_PATH=~/packages/OpenBLAS/include

-DCMAKE_LIBRARY_PATH=~/packages/OpenBLAS/lib .

libraries: libprotobuf.so.8 缺失問題:

問題描述:

/bin/protoc: error while loading shared libraries: libprotobuf.so.8: cannot open

shared object file: No such file or directory

make[2]: *** [include/caffe/proto/caffe.pb.cc] Error 127

make[1]: *** [src/caffe/CMakeFiles/caffeproto.dir/all] Error 2

解決方案:

Git clone –recursive [源碼位址]

僅編譯matcaffe 編譯問題(編譯參數設定)

問題描述:

gnu++11 [enabled by default]

}), solvers_.end());

^

~/packages/caffe/matlab/+caffe/private/caffe_.cpp:208:4: error: no

matching function for call to

?.emove_if(std::vector<boost::shared_ptr<caffe::Solver<float> >

>::iterator, std::vector<boost::shared_ptr<caffe::Solver<float> >

>::iterator, delete_solver(int, mxArray**, int, const

mxArray**)::__lambda0)?

}), solvers_.end());

^

~/packages/caffe/matlab/+caffe/private/caffe_.cpp:208:4: note:

candidate is:

In file included from /usr/include/c++/4.8.2/algorithm:62:0,

from ./include/caffe/blob.hpp:4,

from ./include/caffe/caffe.hpp:7,

from ~/packages/caffe/matlab/+caffe/private/caffe_.cpp:18:

/usr/include/c++/4.8.2/bits/stl_algo.h:1134:5: note: template<class _FIter,

class _Predicate> _FIter std::remove_if(_FIter, _FIter, _Predicate)

remove_if(_ForwardIterator __first, _ForwardIterator __last,

^

/usr/include/c++/4.8.2/bits/stl_algo.h:1134:5: note: template argument

deduction/substitution failed:

~/packages/caffe/matlab/+caffe/private/caffe_.cpp: In substitution

of ?.emplate<class _FIter, class _Predicate> _FIter std::remove_if(_FIter,

_FIter, _Predicate) [with _FIter =

__gnu_cxx::__normal_iterator<boost::shared_ptr<caffe::Solver<float> >*,

std::vector<boost::shared_ptr<caffe::Solver<float> > > >; _Predicate =

delete_solver(int, mxArray**, int, const mxArray**)::__lambda0]?.

~/packages/caffe/matlab/+caffe/private/caffe_.cpp:208:4: required

from here

~/packages/caffe/matlab/+caffe/private/caffe_.cpp:208:4: error:

template argument for ?.emplate<class _FIter, class _Predicate> _FIter

std::remove_if(_FIter, _FIter, _Predicate)?.uses local type

?.elete_solver(int, mxArray**, int, const mxArray**)::__lambda0?

}), solvers_.end());

^

~/packages/caffe/matlab/+caffe/private/caffe_.cpp:208:4: error:

trying to instantiate ?.emplate<class _FIter, class _Predicate> _FIter

std::remove_if(_FIter, _FIter, _Predicate)?

~/packages/caffe/matlab/+caffe/private/caffe_.cpp: In function

?.oid delete_net(int, mxArray**, int, const mxArray**)?.

~/packages/caffe/matlab/+caffe/private/caffe_.cpp:293:3: warning:

lambda expressions only available with -std=c++11 or -std=gnu++11 [enabled by

default]

}), nets_.end());

^

~/packages/caffe/matlab/+caffe/private/caffe_.cpp:293:4: error: no

matching function for call to

?.emove_if(std::vector<boost::shared_ptr<caffe::Net<float> > >::iterator,

std::vector<boost::shared_ptr<caffe::Net<float> > >::iterator,

delete_net(int, mxArray**, int, const mxArray**)::__lambda1)?

}), nets_.end());

^

~/packages/caffe/matlab/+caffe/private/caffe_.cpp:293:4: note:

candidate is:

In file included from /usr/include/c++/4.8.2/algorithm:62:0,

from ./include/caffe/blob.hpp:4,

from ./include/caffe/caffe.hpp:7,

from ~/packages/caffe/matlab/+caffe/private/caffe_.cpp:18:

/usr/include/c++/4.8.2/bits/stl_algo.h:1134:5: note: template<class _FIter,

class _Predicate> _FIter std::remove_if(_FIter, _FIter, _Predicate)

remove_if(_ForwardIterator __first, _ForwardIterator __last,

^

/usr/include/c++/4.8.2/bits/stl_algo.h:1134:5: note: template argument

deduction/substitution failed:

~/packages/caffe/matlab/+caffe/private/caffe_.cpp: In substitution

of ?.emplate<class _FIter, class _Predicate> _FIter std::remove_if(_FIter,

_FIter, _Predicate) [with _FIter =

__gnu_cxx::__normal_iterator<boost::shared_ptr<caffe::Net<float> >*,

std::vector<boost::shared_ptr<caffe::Net<float> > > >; _Predicate =

delete_net(int, mxArray**, int, const mxArray**)::__lambda1]?.

~/packages/caffe/matlab/+caffe/private/caffe_.cpp:293:4: required

from here

~/packages/caffe/matlab/+caffe/private/caffe_.cpp:293:4: error:

template argument for ?.emplate<class _FIter, class _Predicate> _FIter

std::remove_if(_FIter, _FIter, _Predicate)?.uses local type ?.elete_net(int,

mxArray**, int, const mxArray**)::__lambda1?

}), nets_.end());

^

~/packages/caffe/matlab/+caffe/private/caffe_.cpp:293:4: error:

trying to instantiate ?.emplate<class _FIter, class _Predicate> _FIter

std::remove_if(_FIter, _FIter, _Predicate)?

make: *** [matlab/+caffe/private/caffe_.mexa64] Error 255

解決方案:

CXXFLAGS += -MMD -MP
CXXFLAGS += -std=c++11

Invalid MEX-file ‘/matlab/+caffe/private/caffe_.mexa64’: libopenblas.so.0: cannot open shared object file: No such file or directory

解決方案:

Add the openblas lib dir to LD_LIBRARY_PATH

MATLAB/R2014a/bin/glnxa64/…/…/sys/os/glnxa64/libstdc++.so.6: version `GLIBCXX_3.4.18’ not found (required by /usr/local/lib/libprotobuf.so.14)

解決方案:

Maybe this issue on caffe is helpful to you.

BVLC/caffe#827

In my case, export LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libstdc++.so.6 solved

the error.

strings /usr/anaconda2/pkgs/libgcc-5.2.0-0/lib/libstdc++.so.6 | grep

GLIBCXX(符合要求)

strings /usr/local/MATLAB/R2014a/sys/os/glnxa64/libstdc++.so.6 | grep GLIBCXX

strings /usr/anaconda2/lib/libstdc++.so.6 | grep GLIBCXX(符合要求)

也即添加上包含GLIBCXX_3.4.18版本的libstdc++.so.6

INSTALL NCCL,注意gencode architecture,不然編譯會出現問題

問題描述:

F0920 17:05:47.221035 23925 caffe.cpp:254] Multi-GPU execution not available -

rebuild with USE_NCCL

*** Check failure stack trace: ***

@ 0x7f00dbada84d google::LogMessage::Fail()

@ 0x7f00dbadc61c google::LogMessage::SendToLog()

@ 0x7f00dbada43c google::LogMessage::Flush()

@ 0x7f00dbadcf2e google::LogMessageFatal::~LogMessageFatal()

@ 0x40b72e train()

@ 0x40861c main

@ 0x7f00cef57af5 __libc_start_main

USE_NCCL,編譯方式來執行程度

nvcc fatal : Unsupported gpu architecture ‘compute_60’

make: *** [~/packages/nccl/build/obj/libwrap.o] Error 1

[[email protected] nccl]$ echo $LD_LIBRARY_PATH

Myself try to modify the architecture of the cuda

CUDA_ARCH := -gencode arch=compute_20,code=sm_20 \

-gencode arch=compute_20,code=sm_21 \

-gencode arch=compute_30,code=sm_30 \

-gencode arch=compute_35,code=sm_35 \

-gencode arch=compute_50,code=sm_50 \

-gencode arch=compute_52,code=sm_52 \

#-gencode arch=compute_60,code=sm_60 \

#-gencode arch=compute_61,code=sm_61 \

#-gencode arch=compute_61,code=compute_61

NCCL與MATLAB識别問題,如果未識别

NCCL對于已經安裝的NCCL, 如果nccl的lib和include

庫不在搜尋路徑裡面,記得把相應CMake Dependency

路徑,前提是NCCL已經安裝lib已經加入LD_LIBRARY_PATH裡面(成功案例,Caffe-reid(/prjdocs/person_reids/caffe-reid)

SOLUTION:

cmake -DBLAS=open -DBUILD_matlab=ON -DUSE_NCCL=ON

-DCMAKE_INCLUDE_PATH=~/packages/OpenBLAS/include

-DCMAKE_LIBRARY_PATH=~/packages/OpenBLAS/lib .

繼續閱讀