Ubuntu16.04下caffe CPU版的詳細安裝步驟

1、caffe簡介

Caffe,是一個兼具表達性、速度和思惟模塊化的深度學習框架php

伯克利人工智能研究小組和伯克利視覺和學習中心開發。css

雖然其內核是用C++編寫的,但Caffe有Python和Matlab 相關接口。html

Caffe支持多種類型的深度學習架構,面向圖像分類和圖像分割,還支持CNN、RCNN、LSTM和全鏈接神經網絡設計。python

Caffe支持基於GPU和CPU的加速計算內核庫,如NVIDIA cuDNN和Intel MKL。linux

2、ubuntu16.04 搭建python Conda 環境

conda是一個開源的軟件包管理系統和環境管理系統,用於安裝多個版本的軟件包及其依賴關係。c++

conda是爲python程序建立的,適用於Linux,OS X和Windows,也能夠打包和分發其餘軟件。git

conda是目前最流行的python環境管理工具。github

(一)下載

  1. 可選擇官網下載  https://www.anaconda.com/download/
  2. 清華大學開源軟件鏡像站下載相應的anaconda的版本

(二)個人安裝順序

cd /workdisk/software  # 切換到本身建立的下載目錄
/workdisk/software# wget https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/Anaconda3-5.3.1-Linux-x86_64.sh
/workdisk/software# ls
Anaconda3-5.3.1-Linux-x86_64.sh

安裝過程根據提示點擊回車和輸入yes或no,中途有提示輸入環境變量,若是沒有配置, 安裝完成後配置也能夠。
手動配置環境變量:
/workdisk/software# vim ~/.bashrc

增長  export PATH=/root/anaconda3/bin:$PATH算法

使環境變量生效sql

/workdisk/software# source ~/.bashrc

驗證conda是否安裝成功

/workdisk/software# conda -V

conda 4.5.11

(三)建立tensorflow1.5環境

/workdisk/software# conda create -n tensorflow1.5 python=3.5

/workdisk/software# conda create -n tensorflow1.5 python=3.5
Solving environment: done


==> WARNING: A newer version of conda exists. <==
  current version: 4.5.11
  latest version: 4.7.11

Please update conda by running

    $ conda update -n base -c defaults conda



## Package Plan ##

  environment location: /root/anaconda3/envs/tensorflow1.5

  added / updated specs: 
    - python=3.5


The following packages will be downloaded:

    package                    |            build
    ---------------------------|-----------------
    libgcc-ng-9.1.0            |       hdf63c60_0         8.1 MB
    libstdcxx-ng-9.1.0         |       hdf63c60_0         4.0 MB
    wheel-0.31.1               |           py35_0          63 KB
    sqlite-3.29.0              |       h7b6447c_0         1.9 MB
    ca-certificates-2019.5.15  |                1         134 KB
    python-3.5.6               |       hc3d631a_0        28.3 MB
    zlib-1.2.11                |       h7b6447c_3         120 KB
    libedit-3.1.20181209       |       hc058e9b_0         188 KB
    certifi-2018.8.24          |           py35_1         139 KB
    setuptools-40.2.0          |           py35_0         571 KB
    _libgcc_mutex-0.1          |             main           3 KB
    pip-10.0.1                 |           py35_0         1.8 MB
    ncurses-6.1                |       he6710b0_1         958 KB
    openssl-1.0.2s             |       h7b6447c_0         3.1 MB
    ------------------------------------------------------------
                                           Total:        49.4 MB

The following NEW packages will be INSTALLED:

    _libgcc_mutex:   0.1-main               
    ca-certificates: 2019.5.15-1            
    certifi:         2018.8.24-py35_1       
    libedit:         3.1.20181209-hc058e9b_0
    libffi:          3.2.1-hd88cf55_4       
    libgcc-ng:       9.1.0-hdf63c60_0       
    libstdcxx-ng:    9.1.0-hdf63c60_0       
    ncurses:         6.1-he6710b0_1         
    openssl:         1.0.2s-h7b6447c_0      
    pip:             10.0.1-py35_0          
    python:          3.5.6-hc3d631a_0       
    readline:        7.0-h7b6447c_5         
    setuptools:      40.2.0-py35_0          
    sqlite:          3.29.0-h7b6447c_0      
    tk:              8.6.8-hbc83047_0       
    wheel:           0.31.1-py35_0          
    xz:              5.2.4-h14c3975_4       
    zlib:            1.2.11-h7b6447c_3  

Proceed ([y]/n)? y


Downloading and Extracting Packages
libgcc-ng-9.1.0      | 8.1 MB    | ##################################### | 100%
wheel-0.31.1         | 63 KB     | ##################################### | 100%
pip-10.0.1           | 1.8 MB    | ##################################### | 100%
sqlite-3.29.0        | 1.9 MB    | ##################################### | 100%
ca-certificates-2019 | 134 KB    | ##################################### | 100%
libedit-3.1.20181209 | 188 KB    | ##################################### | 100%
_libgcc_mutex-0.1    | 3 KB      | ##################################### | 100%
libstdcxx-ng-9.1.0   | 4.0 MB    | ##################################### | 100%
setuptools-40.2.0    | 571 KB    | ##################################### | 100%
openssl-1.0.2s       | 3.1 MB    | ##################################### | 100%
python-3.5.6         | 28.3 MB   | ##################################### | 100%
certifi-2018.8.24    | 139 KB    | ##################################### | 100%
ncurses-6.1          | 958 KB    | ##################################### | 100%
zlib-1.2.11          | 120 KB    | ##################################### | 100%
Preparing transaction: done
Verifying transaction: done
Executing transaction: done
#
# To activate this environment, use
#
#     $ conda activate tensorflow1.5 激活虛擬環境
#
# To deactivate an active environment, use
#
#     $ conda deactivate 停用虛擬環境

(四)建立caffe2環境

root@ranxf-TEST:/workdisk/software# conda create -n caffe2 python=3.5Solving environment: done


==> WARNING: A newer version of conda exists. <==
  current version: 4.5.11
  latest version: 4.7.11

Please update conda by running

    $ conda update -n base -c defaults conda



## Package Plan ##

  environment location: /root/anaconda3/envs/caffe2

  added / updated specs: 
    - python=3.5


The following NEW packages will be INSTALLED:

    _libgcc_mutex:   0.1-main               
    ca-certificates: 2019.5.15-1            
    certifi:         2018.8.24-py35_1       
    libedit:         3.1.20181209-hc058e9b_0
    libffi:          3.2.1-hd88cf55_4       
    libgcc-ng:       9.1.0-hdf63c60_0       
    libstdcxx-ng:    9.1.0-hdf63c60_0       
    ncurses:         6.1-he6710b0_1         
    openssl:         1.0.2s-h7b6447c_0      
    pip:             10.0.1-py35_0          
    python:          3.5.6-hc3d631a_0       
    readline:        7.0-h7b6447c_5         
    setuptools:      40.2.0-py35_0          
    sqlite:          3.29.0-h7b6447c_0      
    tk:              8.6.8-hbc83047_0       
    wheel:           0.31.1-py35_0          
    xz:              5.2.4-h14c3975_4       
    zlib:            1.2.11-h7b6447c_3      

Proceed ([y]/n)? y

Preparing transaction: done
Verifying transaction: done
Executing transaction: done
#
# To activate this environment, use
#
#     $ conda activate caffe2
#
# To deactivate an active environment, use
#
#     $ conda deactivate

(base) root@ranxf-TEST:/workdisk/software# 

(五)激活虛擬環境

root@ranxf-TEST:/workdisk/software# conda activate tensorflow1.5  激活tensorflow1.5的虛擬環境
(tensorflow1.5) root@ranxf-TEST:/workdisk/software# 

(base) root@ranxf-TEST:/workdisk/software# conda activate caffe2 激活caffe2虛擬環境
(caffe2) root@ranxf-TEST:/workdisk/software#

(六)停用虛擬環境

/workdisk/software# conda deactivate
(base) root@ranxf-TEST:/workdisk/software# 

(七)查看已有的環境

(base) root@ranxf-TEST:/workdisk/software# conda info -e
# conda environments:
#
base                  *  /root/anaconda3
caffe2                   /root/anaconda3/envs/caffe2
tensorflow1.5            /root/anaconda3/envs/tensorflow1.5

3、虛擬環境下安裝caffe

gpu版:conda install -c defaults caffe-gpu
cpu版:conda install -c defaults caffe

 

/workdisk/software# conda install -c defaults caffe
Solving environment: done


==> WARNING: A newer version of conda exists. <==
  current version: 4.5.11
  latest version: 4.7.11
…………

在網上搜索了不少方法(源碼安裝等)來安裝caffe2,折騰整整一天,最後一條命令便可

(一)虛擬環境下安裝caffe2

信息來源:

https://pytorch.org/

https://github.com/pytorch/pytorch

原有的caffe2源代碼如今位於PyTorch存儲庫中

conda install pytorch torchvision cudatoolkit = 10.0 -c pytorch                         #  安裝pytorch

方式比較簡單,只是由於caffe2集成到了pytorch當中,因此安裝pytorch就安裝了caffe2,而且若是你的電腦中有顯卡而且安裝了cuda,會自動安裝成gpu版。

可是這個方式沒有c/c++版的庫,若是想要使用caffe2寫c/c++程序,就只能經過caffe2源碼編譯了。

(二)源碼安裝caffe

(base) root@ranxf-TEST:/workdisk/caffe# conda activate caffe_src
(caffe_src) root@ranxf-TEST:/workdisk/caffe# apt-get update

安裝caffe以前須要安裝一些依賴庫:
    sudo apt-get install libprotobuf-dev  
    sudo apt-get install libleveldb-dev  
    sudo apt-get install libsnappy-dev  
    sudo apt-get install libopencv-dev  
    sudo apt-get install libhdf5-serial-dev  
    sudo apt-get install protobuf-compiler  
    sudo apt-get install libgflags-dev  
    sudo apt-get install libgoogle-glog-dev  
    sudo apt-get install liblmdb-dev  
    sudo apt-get install libatlas-base-dev  
    sudo apt-get install --no-install-recommends libboost-all-dev

1下載源碼

1.生成Makefile.config文件:
git clone git://github.com/BVLC/caffe.git
cp Makefile.config.example Makefile.config
 

2.修改配置Makefile.config 文件

1)編輯Makefile.config文件:

 vim Makefile.config

2)去掉CPU_ONLY:=1前面的#號:

3)配置引用文件路徑:(增長部分主要是解決新版本下,HDF5的路徑問題)

  將   INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include

  換成 INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/include/hdf5/serial/

(這個其實能夠根據具體路徑進行轉換,通常此路徑是對的,要是還出現問題,使用命令行查找該文件的正確路徑便可)

3.修改Makefile文件

在Makefile文件,把 hdf5_hl 和hdf5修改成hdf5_serial_hl 和 hdf5_serial,也就是把下面第一行代碼改成第二行代碼。

 
LIBRARIES += glog gflags protobuf boost_system boost_filesystem m hdf5_hl hdf5
變成
LIBRARIES += glog gflags protobuf boost_system boost_filesystem m hdf5_serial_hl hdf5_serial
 

4.執行編譯

make all  
make test  
make runtest 

編譯狀況

(caffe_src) root@ranxf-TEST:/workdisk/caffe# make test後的部分截圖

 

(caffe_src) root@ranxf-TEST:/workdisk/caffe# make runtest開始的部分截圖(我目前安裝的是CPU 版)

省略中間部分,最後面的截圖

 若是編譯報錯

/usr/local/bin/ld: /root/anaconda3/lib/libpng16.so.16: undefined reference to `inflateValidate@ZLIB_1.2.9' collect2: error: ld returned 1 exit status
該錯誤的解決方法
問題多是python是經過anaconda安裝的而不是直接安裝
解決辦法:在Makefile.config中加入下列信息:
LINKFLAGS := -Wl,-rpath,/root/anaconda3/lib

4、卸載安裝

(caffe2) root@ranxf-TEST:/workdisk/software# conda list 
(caffe2) root@ranxf-TEST:/workdisk/software# conda remove caffe

5、編譯Python接口

首先若是沒有Python接口,導入caffe時是要報錯的

(caffe_src) root@ranxf-TEST:/workdisk/caffe# python 
Python 3.5.6 |Anaconda, Inc.| (default, Aug 26 2018, 21:41:56) 
[GCC 7.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> 
>>> 
>>> import caffe
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/workdisk/caffe/python/caffe/__init__.py", line 1, in <module>
    from .pycaffe import Net, SGDSolver, NesterovSolver, AdaGradSolver, RMSPropSolver, AdaDeltaSolver, AdamSolver, NCCL, Timer
  File "/workdisk/caffe/python/caffe/pycaffe.py", line 11, in <module>
    import numpy as np
ImportError: No module named 'numpy'

(一).安裝pip以及numpy

 1.安裝pip以及numpy

(caffe_src) root@ranxf-TEST:/workdisk/caffe# sudo apt-get install python-pip
  (caffe_src) root@ranxf-TEST:/workdisk/caffe# sudo apt- get install python-numpy

2.安裝python接口依賴庫:

在安裝依賴庫前,須要先安裝gfortran編輯器:

(caffe_src) root@ranxf-TEST:/workdisk/caffe#sudo apt-get install gfortran 

而後安裝依賴庫,首先進入caffe目錄下的python文件中:

(caffe_src) root@ranxf-TEST:/workdisk/caffe# cd python/
(caffe_src) root@ranxf-TEST:/workdisk/caffe/python# for req in $(cat requirements.txt); do pip install $req; done

指定iPython版本

sudo pip install ipython==5.3.0

安裝完後,執行下面一條語句,該語句的做用是檢查依賴庫是否都已經安裝成功,若是成功會顯示requirement already saitisfied,若是未成功會繼續安裝:

sudo pip install -r requirements.txt

3.添加環境變量:(或許已經存在,打開確認便可)

打開配置文件bashrc:sudo vim ~/.bashrc

或者直接打開該文件也能夠,在文件的最後面添加:

export PYTHONPATH=/workdisk/caffe/python:$PYTHONPATH

保存文件後關閉,而後輸入下面語句,使環境變量生效:

source ~/.bashrc 

 4.編譯python接口:(在caffe目錄下)

(caffe_src) root@ranxf-TEST:/workdisk/caffe# make pycaffe
CXX/LD -o python/caffe/_caffe.so python/caffe/_caffe.cpp
touch python/caffe/proto/__init__.py
PROTOC (python) src/caffe/proto/caffe.proto

編譯完後,若無錯誤提示,則說明編譯成功。

5.驗證python接口:

進入python環境,引入caffe包

(caffe_src) root@ranxf-TEST:/workdisk/caffe# python
Python 3.5.6 |Anaconda, Inc.| (default, Aug 26 2018, 21:41:56) 
[GCC 7.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import caffe
>>> 

如上顯示,說明python接口編譯成功。若是顯示no model named caffe則說明python接口編譯失敗,從新檢查上述步驟或百度解決。至此整個caffe安裝編譯的過程就所有結束了。

caffe_CPU版本編譯安裝參考文章:ubuntu16.04下安裝caffe(cpu only)

6、是否安裝成功

不報錯即表明安裝成功。

(caffe2) root@ranxf-TEST:/workdisk/software# python
Python 3.5.6 |Anaconda, Inc.| (default, Aug 26 2018, 21:41:56)
[GCC 7.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import caffe
>>>

以上爲caffe安裝的詳細步驟

如下爲學習時的零散筆記,能夠略過,後期再來整理

 

7、caffe的使用

 訓練圖片文章參見:

https://blog.csdn.net/u013832707/article/details/52943935

https://www.cnblogs.com/denny402/p/5083300.html

 

 

 

基礎篇——瞭解caffe的基本知識

實戰篇——面向工程實踐瞭解caffe的相關使用技巧

caffe介紹

深度學習框架,純粹的C++CUDA架構,支持命令行,python和MATLAB接口,能夠在CPU和GPU之間無縫切換。

不須要本身編寫程序。

 

caffe對比其餘框架

容易上手(對於新手,都是採用配置文件實現)

訓練速度快

組件模塊化

tensorFlow在github上下載量是最多的。資深的深度學習算法工程師可使用,,靈活性高於其餘框架。對於新手來講,要難一些。

 

caffe對比caffe2
caffe2是2017年4月18日開幕的F8年度開發者大會上,Facebook發佈的一款全新的開源深度學習框架;

一個輕量級和模塊化的深度學習框架。caffe2以原始Caffe爲基礎,在設計時充分考慮了表達,速度和模塊性。在強調輕便性的同時,也保持了可擴展性和計算性能。

caffe2:有工具支持將caffe轉caffe2模型

官網:http://caffe2.ai/

源碼:http://github.com/caffe2/caffe2

支持分佈式訓練

支持IOS系統,Android系統和樹莓派上訓練和部署模型

簡單調用caffe2中預先訓練好的Model Zoo模型

caffe2框架已經應用在Facebook平臺上

NVIDIA(英偉達),Qualcomm(高通),intel(英特爾),Amazon(亞馬遜)和Microsoft(微軟)等公司的雲平臺都已支持。

簡化依賴,按需配置,完美的解決了依賴問題

採用operator方式,由更細粒度的operator組合而成

對caffe中的Blob進行擴展,支持了更多的類型,這就讓BinarynNe,模型的量化壓縮變得可行。

對於工程實踐來講,模型壓縮具備很是重要的意義,對於一個大模型和對於一個須要跑在芯片上的網絡,原始的網絡設計須要佔用更多的網絡資源,而經過量化壓縮之後可以大大下降網絡的參數規模,可以提升網絡的計算速度。對於嵌入式系統來講,具備重要意義,尤爲對於目前AI產品的落地。

不少時候,計算瓶頸是決定產品是否可以市場化的關鍵因素。

 

caffe中的基本概念

caffe模塊包括4個部分,

  Blob:caffe中數據結構的封裝,而且封裝後的數據用於在layer層流通,也就是說能夠做爲網絡層的輸入和輸出的數據。

  Blob基本概念:Blob思惟連續數組,一般表示爲(n,k,w,h)是基礎的數據結構,其中n表示了一個milipit,也就是說一個批量樣本的大小,也就是樣本的個數。k表示通道的數量。w表示圖像的寬度。h表示圖像的高度。可表示網絡層輸入輸出的數據,也能夠表示參數數據;

    

  Layer:主要定義了網絡結構。具體的網路結構也是至關豐富的,有輸入層,輸出層,神經網絡層的抽象。網絡層數據的傳輸依賴於Blob這樣一個數據結構。

  layer神經網絡基本單元,一樣定義各類各樣的類。每一類中不一樣的層定義了3種計算:

    初始化網絡參數

      完成建立blobs和layers

      調用layers的setup函數來初始化layers

    前向傳播

      定義Forward函數

    後向傳播  

      定義backward函數

 

  Net:整個layer層經過組合以後,就可以構造一個相應的網絡,而這個網絡就經過net數據結構來表示,能將layer層關聯,這關聯依賴於必定的準則。

  caffe中Net爲無迴路有向圖,

 

  Solver:關於網絡的訓練和測試部分經過Solver來完成。在Solver配置文件中給出網絡訓練和測試中各類參數。

   建立訓練網絡和測試網絡

  週期性的測試網絡(經過配置文件來對網絡進行循環測試)

  調用前向和反響函數進行的迭代優化和參數更新

  slover每輪迭代都會經過前向函數計算輸出和損失(loss),還用反向傳播來計算梯度(梯度的計算關係到參數的更新,好比常見的網絡優化算法SGD、RPMS等,這些算法的優化也是經過slovers來完成的)

 

caffe model主要用於保存和恢復網絡參數,後綴爲.caffemodel。主要是在網絡訓練以後獲得的模型,一般這也是咱們要交互的模型。

solver保存和恢復運行狀態,後綴爲.solverstate。

  

caffe配置

須要安裝cuda和cudnn,能夠分別從官網進行下載,在安裝的時候,注意cuda和cudnn的版本須要對飲,

caffe源碼解讀(略)

安裝好caffe的依賴後,下載源碼後編譯,先須要修改makefile.config。在裏面加入python、cuda等支持項,修改支持GPU。

編譯caffe,進入caffe項目目錄,使用make all -j32(多線程命令),若是有錯誤,就去掉多線程,直接用makefile。

 

進入caffe

caffe是經過一些配置文件來完成網絡的搭建,訓練和測試的過程。

一個完整的caffe網絡須要哪些必須配備的文件,除去咱們編譯生成的一些工具外,咱們須要額外配置的文件有:

solver.prototxt——配置模型訓練的超參數——定義網絡訓練的中間的規則

  

 

 

train_test.prototxt——訓練網絡

 

 

 

以上截圖給出了訓練網絡的基本配置,定義了數據層,對於數據層,只須要定義top層,他對應該層的輸出,該層的輸入對應了。另外將訓練網絡和測試網絡,咱們如何區分一個層是否用在訓練網絡仍是測試網絡中,經過定義include這個參數,若是phase定義爲TRAIN,就應用在train網絡中。若是phase定義爲TEST(注意大寫),那麼久應用在測試網絡中。若是咱們去掉這個參數phase,這個層就會同時出如今測試網絡和訓練網絡中。對於哪些層會存在這些問題,就是loss層。在訓練網絡中,須要用到loss層來計算梯度,而在測試網路中,不須要用到loss層來計算精度,只須要前向傳播就能夠。

  在測試網路中,須要用精度層來直接爲咱們計算精度

deploy.prototxt——測試網絡

deploy.prototxt用於網絡訓練完成後,每每經過deploy.prototxt文件進行網絡測試

 

 

linux_caffe腳本使用說明

pycaffe使用範例

深度學習標準層在caffe中定義

caffe中特殊層添加

caffe中如何fine_tuning

caffe中學習率使用技巧

caffe中參數共享技巧

caffe網絡通用設計技巧(工程實現中遇到的問題)

caffe訓練網絡中的數據打包

設計一個caffe網絡,並用於分類任務

相關文章
相關標籤/搜索