使用caffe訓練mnist、驗證手寫圖片、畫模型結構

環境: ubuntu18.04   CUDA: 9.0    已安裝caffe    GPU: NVIDIA Corporation GP104

opencv: 3.4.5

 

1 caffe源碼下載和編譯

git clone https://github.com/BVLC/caffe

cd caffe

 

將Makefile.config.example拷貝一份成Makefile.config,修改Makefile.config中的以下內容(紅色是需要添加的內容):

INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include /usr/include/hdf5/serial/
LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib /usr/lib/x86_64-linux-gnu/hdf5/serial/

由於是CUDA 9.0, 找到CUDA_ARCH,去掉

-gencode arch=compute_20,code=sm_20 \  

-gencode arch=compute_20,code=sm_21 

 

運行make all,還是fail,

.build_release/lib/libcaffe.so: undefined reference to `cv::imread(cv::String const&, int)'
.build_release/lib/libcaffe.so: undefined reference to `cv::imencode(cv::String const&, cv::_InputArray const&, std::vector<unsigned char, std::allocator<unsigned char> >&, std::vector<int, std::allocator<int> > const&)'
.build_release/lib/libcaffe.so: undefined reference to `cv::imdecode(cv::_InputArray const&, int)'
collect2: error: ld returned 1 exit status
Makefile:635: recipe for target '.build_release/tools/upgrade_net_proto_binary.bin' failed
make: *** [.build_release/tools/upgrade_net_proto_binary.bin] Error 1

修改Makefile.config:

去掉配置文件Makefile.config裏下面幾行 前面的註釋.

USE_CUDNN := 1

OPENCV_VERSION := 3

WITH_PYTHON_LAYER := 1

USE_NCCL := 1

 

修改PYTHON_INCLUDE爲3.6版本:

PYTHON_INCLUDE := /usr/include/python3.6 \
        /usr/lib/python3/dist-packages/numpy/core/include

 

修改Makefile:

PYTHON_LIBRARIES ?= boost_python3-py36

這裏的boost_python3-py36來自於查找命令:

ll /usr/lib/x86_64-linux-gnu/ | grep python

libboost_python3.so -> libboost_python3-py36.so

 

下載hdf5-1.8.21版本代碼,放在/usr/local/hdf5-1.8.21下。修改以下兩句代碼:

INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include /usr/local/hdf5-1.8.21/hdf5/include
LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib /usr/lib/x86_64-linux-gnu /usr/local/hdf5-1.8.21/hdf5/lib

用來解決 Headers are 1.10.0, library is 1.8.21  SUMMARY OF THE HDF5 CONFIGURATION 報錯問題。

到此,make all可以ok了。

最好make clean一下,再執行 make all       make test       make runtest      make pycaffe,否則,會由於某些模塊在修改配置文件前編譯的,導致make test編譯不通過。

 

make runtest成功打印的結尾:

 

2 mnist 訓練

./data/mnist/get_mnist.sh
./examples/mnist/create_mnist.sh

一定要在caffe根目錄下運行./examples/mnist/create_mnist.sh,運行命令前,最好查看caffe/build/examples/mnist這個目錄下是否生成了convert_mnist_data.bin,如果沒有,則表示make all沒有成功,需要make clean,make all。


經過上述操作./examples/mnist/路徑下會有mnist_test_lmdb和mnist_train_lmdb兩個文件夾,分別是測試和訓練數據。

 

訓練命令:

./examples/mnist/train_lenet.sh

第一次運行,輸出

共迭代10000次,訓練完成後,自動用測試數據驗證模型。

最後訓練輸出了2個model. 路徑是caffe/examples/mnist

3 驗證分類

自己手動畫一張4的圖片,用訓練好的模型去識別圖片,並輸出結果

由於python3版本裝了多個,就安裝了anaconda3,借用anaconda3的python3去編譯caffe

安裝的anaconda3版本是:Anaconda3-2019.03-Linux-x86_64.sh

 

編譯boost.python庫:

下載解壓boost_1_70_0.tar.gz

cd到解壓後的boost目錄下:

./bootstrap.sh --with-libraries=python --with-toolset=gcc

./b2 --with-python include="/root/anaconda3/include/python3.7m/"

cp -rf  stage/lib/* /usr/lib/x86_64-linux-gnu/

 

再次進入caffe根目錄,修改Makefile和Makefile.config裏的參數爲

PYTHON_LIBRARIES := boost_python37 python3.7m

執行 make all -j4, 成功啦。。。

 

接下來是驗證自己畫的圖片了。

圖片要求:

1. 必須是256位黑白色

2. 必須是黑底白字

3. 像素大小必須是28*28

4. 數字在圖片中間,上下左右沒有過多空白

5. 圖片名稱是:“again.bmp",存放在caffe/examples/images/again.bmp

 

編寫一個python腳本,識別手寫數字的圖片。

import os

import sys

import numpy as np

import matplotlib.pyplot as plt

 

caffe_root = '/home/zhangjing/work/caffe/'

os.chdir(caffe_root) #change pwd

sys.path.insert(0,caffe_root+'python')

import caffe

 

MODEL_FILE = caffe_root + 'examples/mnist/lenet.prototxt'

PRETRAINED = caffe_root + 'examples/mnist/lenet_iter_10000.caffemodel'

IMAGE_FILE = caffe_root + 'examples/images/again.bmp'

input_image = caffe.io.load_image(IMAGE_FILE, color=False)

 

net = caffe.Classifier(MODEL_FILE, PRETRAINED)

prediction = net.predict([input_image], oversample=False)

print('predicted classes:', prediction[0].argmax())

 

在caffe根目錄下執行上述腳本。最後成功識別圖片中的數字。

執行腳本的命令:

python verify_mnist.py

 

第一次執行時,報錯:ImportError: No module named google.protobuf,這是因爲找不到對應的庫路徑導致。需要使用你的python 去安裝protocol buffer。

下載protobuf-all-3.7.1.tar.gz(去github protobuf下載)

解壓後依次執行:

./configure

make

make check

make install

最後一步涉及到權限,可能會需要sudo

再進入protobuf3.7.2/python執行命令sudo python setup.py install

 

然後到caffe根目錄下,執行python verify_mnist.py,看到輸出的最後一句是predicted classes: 4,用時9秒。

4 畫模型結構圖

cd caffe/python

python draw_net.py --rankdir TB ../examples/mnist/lenet.prototxt ../examples/mnist/lenet_structure.jpg

其中,--rankdir TB表示畫圖方向是從top到bottom, --rankdir LR就表示橫向繪製,從left到right

 

 

 

參考:

《深度學習--caffe之經典模型詳解與實戰》

https://blog.csdn.net/dym755833564/article/details/77965966

https://www.linuxidc.com/Linux/2016-09/135025.htm

https://www.cnblogs.com/cxyxbk/p/6881683.html

https://blog.csdn.net/bengqian1670/article/details/89222006

https://blog.csdn.net/u012243626/article/details/82469174

https://blog.csdn.net/m0_37407756/article/details/70789271

https://blog.csdn.net/qinglu000/article/details/17242011

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章