看了很多大牛的文章,淌过了好多好多坑。
终于完整走过了一个流程。
这里就不写我参考的文章了,零零碎碎很多,我也记不清了。
我这里分两部分,第一部分配置caffe,第二部分使用mnist
尽量用了最简单的方式直接出结果
涉及到配置使用的部分我就直接来干货,不写一堆中间过程和解释了
我这里安装在用户主目录下(/home/用户名/caffe)
Ubuntu18.04(话说这个新发的版本不错)
opencv3(所以编译的前的配置需要修改)
python2.7(想弄3来着,倒腾好久,失败了,放弃了)
简单点,就四个步骤,顺序搞下来就成
用户主目录下运行:
sh caffeCfg.sh
这个sh文件手动写的,内容:
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 --no-install-recommends libboost-all-dev sudo apt-get install libatlas-base-devsudo apt-get install python-dev sudo apt-get install libgflags-dev sudo apt-get install libgoogle-glog-dev sudo apt-get install liblmdb-devcd ~sudo apt-get install git git clone https://github.com/BVLC/caffe.gitcd caffe/pythonsudo apt-get install python-pipfor req in $(cat requirements.txt); do pip install $req; done sudo apt-get install python-numpysudo pip install opencv-python
caffe目录下:
cp Makefile.config.example Makefile.config
Makefile.config文件进行以下修改:
去掉CPU_ONLY := 1前面的注释 去掉OPENCV_VERSION := 3前面的注释 修改: 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/serial6个步骤,前面五个是数据准备与训练,最后一个是调用
这里插一句:
这部分用的不是原始图像数据,是mnist例子里的东西。
我另外收集了些资料,打包整理了一套完整流程,使用图像数据,进行转换格式、训练以及调用。
caffe mnist数据源+完整训练+调用代码:
https://download.csdn.net/download/jiyanglin/10403784
caffe/data/mnist目录下执行
sh get_mnist.sh
caffe目录下执行
sudo sh ./examples/mnist/create_mnist.sh
3)配置训练数据caffe/examples/mnist/下新建文件夹model
修改caffe/examples/mnist/下lenet_solver.prototxt 文件:
snapshot_prefix字段修改:snapshot_prefix: "examples/mnist/model/lenet"
solver_mode:GPU 默认GPU,修改为CPUcaffe目录下:
sudo sh ./examples/mnist/train_lenet.sh
caffe目录下:
sudo ./build/tools/caffe.bin test -model=examples/mnist/lenet_train_test.prototxt -weights=examples/mnist/model/lenet_iter_10000.caffemodel在caffe目录下运行这个python代码文件
caffe/examples/mnist/ 两个文件夹:mnist_train_lmdb, and mnist_test_lmdb
如果有访问权限,搞掉。不然运行会报错。
记得图像必须是28*28单通道,白底黑字。(因为训练时候用的就是这种图像)
调用函数的代码这样(目录得写全路径):
img = "/home/jyl/0.png"proto = "/home/jyl/caffe/examples/mnist/lenet.prototxt"model = "/home/jyl/caffe/examples/mnist/model/lenet_iter_10000.caffemodel"
test(img,proto,model)
代码如下: import caffe import numpy as np import cv2 def test(img,proto,model): net = caffe.Net(proto, model, caffe.TEST) print net.blobs['data'].data.shape transformer = caffe.io.Transformer({'data': net.blobs['data'].data.shape}) transformer.set_transpose('data', (2, 0, 1)) transformer.set_raw_scale('data', 255) im = caffe.io.load_image(img, False) cv2.imshow("imgshow", im) cv2.waitKey(0) net.blobs['data'].data[...] = transformer.preprocess('data', im) print net.blobs['data'].data out = net.forward() print out prob = net.blobs['prob'].data[0].flatten() print prob order = prob.argsort()[-1] print 'pic num:', orderimg = "/home/jyl/0.png"proto = "/home/jyl/caffe/examples/mnist/lenet.prototxt"model = "/home/jyl/caffe/examples/mnist/model/lenet_iter_10000.caffemodel"test(img,proto,model
caffe mnist数据源+完整训练+调用代码