近期研究了深度学习caffe结构,合理预备快乐运用时,发现网上教程过于零星,在mac/m2 silicon支持略差,在建立这个结构的时分入了很多坑,遂预备收拾一版便利后续学习和运用,以下enjoy~

Caffe介绍

Caffe(全称Convolutional Architecture for Fast Feature Embedding)是一个兼具表达性、速度和思维模块化的深度学习结构,由伯克利人工智能研究小组和伯克利视觉和学习中心开发。 尽管其内核是用C++编写的,但Caffe有Python和Matlab相关接口。

Caffe的优势

  1. 上手快:模型与相应优化都是以文本形式而非代码形式给出。
    Caffe给出了模型的定义、最优化设置以及预练习的权重,便利当即上手。
  2. 速度快:能够运转最棒的模型与海量的数据。
    Caffe与cuDNN结合运用,测验AlexNet模型,在K40上处理每张图片只需求1.17ms.
  3. 模块化:便利扩展到新的使命和设置上。
    能够运用Caffe供给的各层类型来定义自己的模型。
  4. 开放性:公开的代码和参阅模型用于再现。
  5. 社区好:能够经过BSD-2参加开发与讨论。

预备工作

测验过mac下布置caffe,可是一向出错,终究放弃挑选了虚拟机

装置vmware

虚拟机也存在很多坑,首先m1/m2 silicon是arm架构,现已布置在电脑上的virtualbox只支持x86所以现已打不开了:{,遂测验运用vmware fusion

  1. vmware fusion install
  2. ubuntu desktop environment install

装置caffe及依靠库

基本配置能够参阅这儿

需求留意的是要在Make.config做如下修正

  1. 由于是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
  1. 需求指定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

存在问题

  1. 在调用的时分会出现这个问题

    _open() got an unexpected keyword argument ‘as_grey‘
    

    解决方案: 定位到 caffe/python/caffe/io.py

    Mac m2部署caffe

  2. 用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]]
    

分类成果

Mac m2部署caffe

Mac m2部署caffe

Mac m2部署caffe

Mac m2部署caffe

后续

借助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…