在Mac/M2上部署Caffe框架

释放双眼,带上耳机,听听看~!
本文介绍了在Mac/M2上部署Caffe框架的过程,包括Caffe的介绍、优势、准备工作、部署问题、Demo演示等内容,同时提供了相关链接和解决方案。

近期研究了深度学习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.py models/bvlc_reference_caffenet

准备均值文件和synset_words.txt文件

有了caffemodel文件,就需要对应的均值文件,在测试阶段,需要把测试数据减去均值
在调用脚本文件下载均值的时候,synset_words.txt文件,里面放的是1000个类的名称

sudo sh ./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等算法模型来检测物体

引用

本网站的内容主要来自互联网上的各种资源,仅供参考和信息分享之用,不代表本网站拥有相关版权或知识产权。如您认为内容侵犯您的权益,请联系我们,我们将尽快采取行动,包括删除或更正。
AI教程

深度学习 | 卷积神经网络CNN全解析

2023-11-18 16:27:14

AI教程

SDXL 1.0出图效果直逼Midjourney!手把手教你快速体验!- Stability AI全新版本SDXL 1.0出图效果体验

2023-11-18 16:38:14

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索