1, 添加依赖
sudo apt-get install -y vim make cmake gcc g++ git python-pip
sudo apt-get install -y libprotobuf-dev libleveldb-dev libsnappy-dev protobuf-compiler
sudo apt-get install -y libhdf5-serial-dev libboost-all-dev libhdf5-serial-dev libatlas-base-dev
sudo apt-get install -y liblmdb-dev libboost-all-dev libopencv-dev libgflags-dev libgoogle-glog-dev
# sudo apt-get install libopenblas-dev
2,安装python相关包
sudo apt-get install -y libopencv-dev python-opencv python3-pip python-pandas python-sympy
sudo apt-get install -y python-numpy python-scipy python-matplotlib ipython python-nose
3,caffe,用root权限,安装在root家目录
3.1 下载caffe源码
git clone https://github.com/BVLC/caffe.git
# git clone https://gitee.com/luolinll1212/caffe.git
cd caffe
3.2 添加upsample和mish
git clone https://github.com/Linby1103/Dark2Caffe
# git clone https://gitee.com/luolinll1212/Dark2Caffe.git
caffe_layers/mish_layer/mish_layer.hpp
caffe_layers/upsample_layer/upsample_layer.hpp
-> caffe/include/caffe/layers/.
caffe_layers/mish_layer/mish_layer.cpp和mish_layer.cu
caffe_layers/upsample_layer/upsample_layer.cpp和upsample_layer.cu
-> caffe/src/caffe/layers/.
vim src/caffe/proto/caffe.proto
// LayerParameter next available layer-specific ID: 147 (last added: recurrent_param)
message LayerParameter {
optional TileParameter tile_param = 138;
optional VideoDataParameter video_data_param = 207;
optional WindowDataParameter window_data_param = 129;
++optional UpsampleParameter upsample_param = 149; //added by chen for Yolov3, make sure this id 149 not the same as before.
++optional MishParameter mish_param = 150; //added by chen for yolov4,make sure this id 150 not the same as before.
}
// added by chen for YoloV3
++message UpsampleParameter{
++ optional int32 scale = 1 [default = 1];
++}
// Message that stores parameters used by MishLayer
++message MishParameter {
++ enum Engine {
++ DEFAULT = 0;
++ CAFFE = 1;
++ CUDNN = 2;
++ }
++ optional Engine engine = 2 [default = DEFAULT];
++}
3.3 配置python
安装位置,anaconda/bin/python,anaconda-python3.7
cd python
cat requirements.txt # 查看安装caffe的依赖
pip install --upgrade pip
for req in $(cat requirements.txt); do pip install $req;done
4,配置make.config,编译准备
pwd
/home/rose/work/caffe
cp Makefile.config.example Makefile.config
sudo gedit Makefile.config
4.1 基本配置,cuda与cpu,opencv版本号
1,CPU_ONLY :=1,去掉前面#符号,CPU版本
2,删除Makefile.config,包含compute_20的两行
3, OPENCV := 3
4.2,anaconda_home,python_include
ANACONDA_HOME := $(HOME)/anaconda3
PYTHON_INCLUDE := $(ANACONDA_HOME)/include \
$(ANACONDA_HOME)/include/python3.7m \
$(ANACONDA_HOME)/lib/python3.7/site-packages/numpy/core/include
4.3,python_lib,python_libraries
PYTHON_LIB := $(ANACONDA_HOME)/lib
PYTHON_LIBRARIES := boost_python3 python3.7m
4.4 hdf5
Whatever else you find you need goes here.
INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include
LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib
改为
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
4.5,编译opencv配置
USE_PKG_CONFIG :=
LIBRARIES += glog gflags protobuf leveldb snappy \
lmdb boost_system hdf5_hl hdf5 m \
opencv_core opencv_highgui opencv_imgproc opencv_imgcodecs \
boost_thread stdc++ boost_regex
5,编译caffe
5.1 编译指令
pwd
/home/rose/work/caffe
sudo make all -j 8
sudo make pycaffe -j 8
sudo make test -j 8
sudo make runtest -j 8
执行以上步骤,编译成功
include目录,build/include
lib 目录,build/lib
tools 目录,build/tools
5.2 make runtest报错,anaconda/lib -> /usr/lib
su - root
cd /home/rose/anaconda3/lib
# rm -rf `ls -l | grep lrwxrwxrwx | awk '{print $9}'` # 删除所有软连接
# for req in $(ls -l | grep .so | awk '{print $9}');do echo ${req:0:len-6}; done # 修改软连接,2个
cp `ls | grep so` /usr/lib # runtest使用,提前使用会报错,anaconda/lib -> /usr/lib
6,训练MNIST
6.1 添加用户环境变量
vim ~/.bashrc
export PYTHONPATH=/home/rose/work/caffe/python:$PYTHONPATH
source ~/.bashrc
6.2 添加到系统python3.6
cp -r ~/software/caffe/python/caffe /usr/local/lib/python3.6/dist-packages # caffe中python -> 系统的python3.6
vim ~/.bashrc # 配置链接库
# caffe
CAFFE_HOME=/home/rose/software/opt/caffe/.build_release
export LD_LIBRARY_PATH=$CAFFE_HOME/lib:$LD_LIBRARY_PATH
export PATH=$CAFFE_HOME/tools:$PATH
source ~/.bashrc # 控制台使用
6.3 mnist数据,网络可视化和训练
cd caffe
bash data/mnist/get_mnist.sh # 下载mnist数据,4个基础数据
bash examples/mnist/create_mnist.sh # 转换为caffe格式的数据,lmdb数据格式
python python/draw_net.py mnist.prototxt aa.png --rankdir=BT|LR # 查看网络结构文件,从下到上,从左到右
bash .build_release/tools/caffe time -model hbk_mnist.prototxt -iterations 10 # caffe使用cpu迭代10次
bash .build_release/tools/caffe time -model hbk_mnist.prototxt -iterations 10 -gpu 0 # caffe使用gpu迭代10次
bash .build_release/tools/caffe train -solver hbk_mnist_solver.prototxt # 训练模型,运行solver
bash .build_release/tools/caffe train -solver hbk_mnist_solver.prototxt 2>&1 | tee a.log # 训练模型,运行solver保存a.log文件
6.4 测试
import caffe
caffe.set_device(0)
caffe.set_mode_gpu()
7,c++部署
7.1 报错:fatal error: caffe/proto/caffe.pb.h: No such file or directory #include “caffe/proto/caffe.pb.h”
cd .build_release
mkdir -p include/caffe/proto
cp src/caffe/proto/caffe.pb.h include/caffe/proto
版本问题,文件位置不对