Caffe,是一個兼具表達性、速度和思惟模塊化的深度學習框架。php
由伯克利人工智能研究小組和伯克利視覺和學習中心開發。css
雖然其內核是用C++編寫的,但Caffe有Python和Matlab 相關接口。html
Caffe支持多種類型的深度學習架構,面向圖像分類和圖像分割,還支持CNN、RCNN、LSTM和全鏈接神經網絡設計。python
Caffe支持基於GPU和CPU的加速計算內核庫,如NVIDIA cuDNN和Intel MKL。linux
conda是一個開源的軟件包管理系統和環境管理系統,用於安裝多個版本的軟件包及其依賴關係。c++
conda是爲python程序建立的,適用於Linux,OS X和Windows,也能夠打包和分發其餘軟件。git
conda是目前最流行的python環境管理工具。github
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/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 停用虛擬環境
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
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,折騰整整一天,最後一條命令便可
信息來源:
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源碼編譯了。
(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.生成Makefile.config文件:
git clone git://github.com/BVLC/caffe.git
cp Makefile.config.example 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/
(這個其實能夠根據具體路徑進行轉換,通常此路徑是對的,要是還出現問題,使用命令行查找該文件的正確路徑便可)
在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
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
(caffe2) root@ranxf-TEST:/workdisk/software# conda list
(caffe2) root@ranxf-TEST:/workdisk/software# conda remove caffe
首先若是沒有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'
1.安裝pip以及numpy
(caffe_src) root@ranxf-TEST:/workdisk/caffe# sudo apt-get install python-pip
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)
不報錯即表明安裝成功。
(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網絡,並用於分類任務