近期研究了深度学习caffe结构,合理预备快乐运用时,发现网上教程过于零星,在mac/m2 silicon支持略差,在建立这个结构的时分入了很多坑,遂预备收拾一版便利后续学习和运用,以下enjoy~
Caffe介绍
Caffe(全称Convolutional Architecture for Fast Feature Embedding)是一个兼具表达性、速度和思维模块化的深度学习结构,由伯克利人工智能研究小组和伯克利视觉和学习中心开发。 尽管其内核是用C++编写的,但Caffe有Python和Matlab相关接口。
Caffe的优势
- 上手快:模型与相应优化都是以文本形式而非代码形式给出。
Caffe给出了模型的定义、最优化设置以及预练习的权重,便利当即上手。 - 速度快:能够运转最棒的模型与海量的数据。
Caffe与cuDNN结合运用,测验AlexNet模型,在K40上处理每张图片只需求1.17ms. - 模块化:便利扩展到新的使命和设置上。
能够运用Caffe供给的各层类型来定义自己的模型。 - 开放性:公开的代码和参阅模型用于再现。
- 社区好:能够经过BSD-2参加开发与讨论。
预备工作
测验过mac下布置caffe,可是一向出错,终究放弃挑选了虚拟机
装置vmware
虚拟机也存在很多坑,首先m1/m2 silicon是arm架构,现已布置在电脑上的virtualbox只支持x86所以现已打不开了:{,遂测验运用vmware fusion
- vmware fusion install
- ubuntu desktop environment install
装置caffe及依靠库
基本配置能够参阅这儿
需求留意的是要在Make.config
做如下修正
- 由于是arm架构需求更新下衔接地址,而且需求include opencv4
# 查看opencv版别
pkg-config --modversion opencv4
INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include /usr/include/hdf5/serial /usr/include/opencv4
LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib /usr/lib/aarch64-linux-gnu /usr/lib/aarch64-linux-gnu/hdf5/serial
- 需求指定python的lib和include
PYTHON_LIBRARIES := boost_python38 python3.8
PYTHON_INCLUDE := /usr/include/python3.8 \
/usr/lib/python3/dist-packages/numpy/core/include
需求留意的是要在Makefile
做如下修正
LIBRARIES += glog gflags protobuf boost_system boost_filesystem m hdf5_hl hdf5 opencv_core opencv_highgui opencv_imgproc opencv_imgcodecs opencv_videoio
另外能够运用Anaconda来进行python版别办理,Anaconda附带了250个开源数据包,而且能够从Anaconda存储库中装置超过7500个其他包
布置问题
履行
make all -j16
问题1
error: ‘CV_LOAD_IMAGE_COLOR’ was not declared in this scope
error: ‘CV_LOAD_IMAGE_GRAYSCALE’ was not declared in this scope
解决方案:
在include/caffe/common.hpp
中新增如下代码(大约 70 行前后):
// Supporting OpenCV4
#if (CV_MAJOR_VERSION == 4)
#define CV_LOAD_IMAGE_COLOR cv::IMREAD_COLOR
#define CV_LOAD_IMAGE_GRAYSCALE cv::IMREAD_GRAYSCALE
#endif
// See PR #1236
namespace cv { class Mat; }
如果还存在其他没有declare的话一般按照这个规律
CV_FILLED=>cv::FILLED
CV_ADAPTIVE_THRESH_GAUSSIAN_C=>cv::ADAPTIVE_THRESH_GAUSSIAN_C
CV_*=>cv::*
问题2
# /lib/aarch64-linux-gnu/libgomp.so.1: cannot allocate memory in static TLS block
解决方案:
find / -name libgomp.so.1
export LD_PRELOAD=/usr/lib/aarch64-linux-gnu/libgomp.so.1
source ~/.bashrc
如果一切顺利,依次履行下面指令
make all
make test -j16
make runtest
make pycaffe
make pytest
进入python3环境,import caffe
如果没有报错,证明caffe这个包现已顺利装置好了~
Demo
caffe程序自带有一张小猫图片,存放途径为caffe根目录下的examples/images/cat.jpg, 能够用练习好的caffemodel来对其进行分类;
caffemodel(bvlc_reference_caffenet.caffemodel)
能够直接在浏览器里输入地址下载,也能够运转脚本文件下载。下载地址为:dl.caffe.berkeleyvision.org/bvlc_refere…
python3./scripts/download_model_binary.pymodels/bvlc_reference_caffenet
预备均值文件和synset_words.txt文件
有了caffemodel文件,就需求对应的均值文件,在测验阶段,需求把测验数据减去均值 在调用脚本文件下载均值的时分,synset_words.txt文件,里边放的是1000个类的称号
sudosh./data/ilsvrc12/get_ilsvrc_aux.sh
履行
- C++
sudo ./build/examples/cpp_classification/classification.bin \
models/bvlc_reference_caffenet/deploy.prototxt \
models/bvlc_reference_caffenet/bvlc_reference_caffenet.caffemodel \
data/ilsvrc12/imagenet_mean.binaryproto \
data/ilsvrc12/synset_words.txt \
examples/images/cat.jpg
- python
cd python
sudo python3 classify.py ../examples/images/cat.jpg result.npy
存在问题
-
在调用的时分会出现这个问题
_open() got an unexpected keyword argument ‘as_grey‘
解决方案: 定位到 caffe/python/caffe/io.py
-
用python方式会出现这个问题,而且成果没有打印
Mean shape incompatible with input shape
2.1.修正均值核算
# 定位到这一行 mean =np.load(args.mean_file) mean =mean.mean(1).mean(1)
2.2.修正文件,使得成果显现在指令行下
# 定位到这一行 start = time.time() predictions = classifier.predict(inputs, not args.center_only) print("Done in %.2f s." % (time.time() - start)) imagenet_labels_filename = '../data/ilsvrc12/synset_words.txt' labels = np.loadtxt(imagenet_labels_filename, str, delimiter='\t') top_k = predictions.flatten().argsort()[-1:-6:-1] for i in np.arange(top_k.size): print top_k[i], labels[top_k[i]]
分类成果
后续
借助caffe,结合例如ssd,RCNN,Faster R-CNN,yolo等算法模型来检测物体
引证
- baike.baidu.com/item/Caffe/…
- zhuanlan.zhihu.com/p/28104246
- blog.csdn.net/qq_24950043…
- dev.to/daud99/inst…
- blog.csdn.net/qq_45700350…
- www.myfreax.com/how-to-inst…
- blog.csdn.net/Cristal_yin…
- blog.csdn.net/gufeng_1992…
- arxiv.org/abs/1512.02…
- cs231n.github.io/convolution…