Caffe学习。

#@author:       gr
#@date: 2015-08-30
#@email: forgerui@gmail.com

1. Install

详细可以见官方文档博客1博客2

1.1 Prerequisites

  • CUDA is required for GPU mode.

    library version 7.0 and the latest driver version are recommended, but 6.* is fine too

    5.5, and 5.0 are compatible but considered legacy
  • BLAS via ATLAS, MKL, or OpenBLAS.
  • Boost >= 1.55
  • OpenCV >= 2.4 including 3.0
  • protobuf, glog, gflags
  • IO libraries hdf5, leveldb, snappy, lmdb

Caffe requires BLAS as the backend of its matrix and vector computations. There are several implementations of this library. The choice is yours:

  • ATLAS: free, open source, and so the default for Caffe.
  • Intel MKL: commercial and optimized for Intel CPUs, with a free trial and student licenses.

    Install MKL.

    Set BLAS := mkl in Makefile.config
  • OpenBLAS: free and open source; this optimized and parallel BLAS could require more effort to install, although it might offer a speedup.

    Install OpenBLAS

    Set BLAS := open in Makefile.config

我们这里使用atlas。

1.2 Compilation

  1. 拷贝配置文件

     cp Makefile.config.example Makefile.config
  2. 在Makefile.config文件中第73行LIBRARY_DIRS加上atlas库所在的位置,我的在/usr/lib64/atlas/,修改后:

     LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib /usr/lib64/atlas/
  3. Makefile文件中在236行将boost_thread修改为boost_thread-mt,修改后:

     LIBRARIES += boost_thread-mt stdc++
  4. 编译

     make all -j 20            #多核编译,根据机子情况选定
  5. 编译matlab

    修改Makefile.config,MATLAB_DIR中加入matlab在机器中的位置:

     MATLAB_DIR := /usr/local/MATLAB/MATLAB_Production_Server/R2013a

    编译:

     make matcaffe -j 20
  6. 编译python

    修改Makefile.config,将PYTHON_INCLUDE, PYTHON_LIB修改为你机子正确的配置。

     PYTHON_INCLUDE := /usr/local/include/python2.7 \
    /usr/lib/python2.7/site-packages/numpy/core/include/numpy/ PYTHON_LIB := /usr/local/lib

    编译:

     make pycaffe -j 20

    注意:如果遇到如下问题,

     /usr/bin/ld: /usr/local/lib/libpython2.7.a(abstract.o): relocation R_X86_64_32 against `a local symbol' can not be used when making a shared object; recompile with -fPIC
    /usr/local/lib/libpython2.7.a: could not read symbols: Bad value
    collect2: ld returned 1 exit status

    可以下载python,加上--enable-shared-fPIC选项重新编译安装,命令如下:

     ./configure --prefix=/usr/local/  --enable-shared CFLAGS=-fPIC
    make
    make install

2. Usage

2.1 caffe中的例子

可以参见博客

2.1.1 mnist

mnist的网络框架在文件examples/mnist/lenet.prototxt中。分别运行如下命令,即可实现mnist:

sh data/mnist/get_mnist.sh
sh examples/mnist/create_mnist.sh
sh examples/mnist/train_lenet.sh

最后运行的结果,可以看到accuracy = 0.9907

I0830 21:56:59.506049 12371 solver.cpp:326] Iteration 10000, loss = 0.00290909
I0830 21:56:59.506080 12371 solver.cpp:346] Iteration 10000, Testing net (#0)
I0830 21:57:00.983238 12371 solver.cpp:414] Test net output #0: accuracy = 0.9907
I0830 21:57:00.983290 12371 solver.cpp:414] Test net output #1: loss = 0.0304467 (* 1 = 0.0304467 loss)
I0830 21:57:00.983304 12371 solver.cpp:331] Optimization Done.
I0830 21:57:00.983314 12371 caffe.cpp:214] Optimization Done.
2.1.2 cifair
sh data/cifar10/get_cifar10.sh
sh examples/cifar10/create_cifar10.sh
sh examples/cifar10/train_quick.sh

2.2 caffe 框架学习

2.2.1 框架

caffe的框架如下:

  1. 预处理图像的leveldb构建

    输入:一批图像和label (2和3)

    输出:leveldb (4)

    指令里包含如下信息:

    conver_imageset (构建leveldb的可运行程序)

    train/ (此目录放处理的jpg或者其他格式的图像)

    label.txt (图像文件名及其label信息)

    输出的leveldb文件夹的名字

    CPU/GPU (指定是在cpu上还是在gpu上运行code)

  2. CNN网络配置文件

    Imagenet_solver.prototxt (包含全局参数的配置的文件)

    Imagenet.prototxt (包含训练网络的配置的文件)

    Imagenet_val.prototxt (包含测试网络的配置文件)

2.2.2 Caffe层次

**Blob: **基础的数据结构,是用来保存学习到的参数以及网络传输过程中产生数据的类。

**Layer: **是网络的基本单元,由此派生出了各种层类。修改这部分的人主要是研究特征表达方向的。

**Net: **是网络的搭建,将Layer所派生出层类组合成网络。

**Solver: **是Net的求解,修改这部分人主要会是研究DL求解方向的。

2.3 RCNN

Training your own R-CNN detector on PASCAL VOC

!!! tvmonitor : 0.6483 0.6614
~~~~~~~~~~~~~~~~~~~~
Results:
0.6428
0.6963
0.5016
0.4191
0.3191
0.6251
0.7087
0.6036
0.3266
0.5852
0.4627
0.5616
0.6037
0.6684
0.5414
0.3157
0.5285
0.4889
0.5772
0.6483 0.5412 ~~~~~~~~~~~~~~~~~~~~ test_results = 1x20 struct array with fields: recall
prec
ap
ap_auc

Reference

1. http://caffe.berkeleyvision.org/installation.html

2. http://www.rthpc.com/plus/view.php?aid=351

3. http://www.cnblogs.com/platero/p/3993877.html

4. http://www.csdn.net/article/2015-01-22/2823663

### Caffe的更多相关文章

  1. 基于window7+caffe实现图像艺术风格转换style-transfer

    这个是在去年微博里面非常流行的,在git_hub上的代码是https://github.com/fzliu/style-transfer 比如这是梵高的画 这是你自己的照片 然后你想生成这样 怎么实现 ...

  2. caffe的python接口学习(7):绘制loss和accuracy曲线

    使用python接口来运行caffe程序,主要的原因是python非常容易可视化.所以不推荐大家在命令行下面运行python程序.如果非要在命令行下面运行,还不如直接用 c++算了. 推荐使用jupy ...

  3. 基于Caffe的Large Margin Softmax Loss的实现(中)

    小喵的唠叨话:前一篇博客,我们做完了L-Softmax的准备工作.而这一章,我们开始进行前馈的研究. 小喵博客: http://miaoerduo.com 博客原文:  http://www.miao ...

  4. 基于Caffe的Large Margin Softmax Loss的实现(上)

    小喵的唠叨话:在写完上一次的博客之后,已经过去了2个月的时间,小喵在此期间,做了大量的实验工作,最终在使用的DeepID2的方法之后,取得了很不错的结果.这次呢,主要讲述一个比较新的论文中的方法,L- ...

  5. 基于Caffe的DeepID2实现(下)

    小喵的唠叨话:这次的博客,真心累伤了小喵的心.但考虑到知识需要巩固和分享,小喵决定这次把剩下的内容都写完. 小喵的博客:http://www.miaoerduo.com 博客原文: http://ww ...

  6. 基于Caffe的DeepID2实现(中)

    小喵的唠叨话:我们在上一篇博客里面,介绍了Caffe的Data层的编写.有了Data层,下一步则是如何去使用生成好的训练数据.也就是这一篇的内容. 小喵的博客:http://www.miaoerduo ...

  7. 基于Caffe的DeepID2实现(上)

    小喵的唠叨话:小喵最近在做人脸识别的工作,打算将汤晓鸥前辈的DeepID,DeepID2等算法进行实验和复现.DeepID的方法最简单,而DeepID2的实现却略微复杂,并且互联网上也没有比较好的资源 ...

  8. 基于英特尔® 至强™ 处理器 E5 产品家族的多节点分布式内存系统上的 Caffe* 培训

    原文链接 深度神经网络 (DNN) 培训属于计算密集型项目,需要在现代计算平台上花费数日或数周的时间方可完成. 在最近的一篇文章<基于英特尔® 至强™ E5 产品家族的单节点 Caffe 评分和 ...

  9. 基于英特尔® 至强 E5 系列处理器的单节点 Caffe 评分和训练

    原文链接 在互联网搜索引擎和医疗成像等诸多领域,深度神经网络 (DNN) 应用的重要性正在不断提升. Pradeep Dubey 在其博文中概述了英特尔® 架构机器学习愿景. 英特尔正在实现 Prad ...

  10. Caffe Python MemoryDataLayer Segmentation Fault

    转载请注明出处,楼燚(yì)航的blog,http://home.cnblogs.com/louyihang-loves-baiyan/ 因为利用Pyhon来做数据的预处理比较方便,因此在data_l ...

随机推荐

  1. iOS开发-为程序添加应用设置

    一.设置捆绑包 设置捆绑包是应用自带的一组文件,用于告诉设置该应用期望得到用户的哪些偏好设置. 新建设置捆绑包:Command+N,在iOS部分中的Resource,选择Settings Bundle ...

  2. Oracle数据库程序包全局变量的应用

    1 前言  在程序实现过程中,经常用遇到一些全局变量或常数.在程序开发过程中,往往会将该变量或常数存储于临时表或前台程序的全局变量中,由此带来运行效率降低<频繁读取临时表>或安全隐患< ...

  3. SQL将本地图片文件插入到数据库

    GO RECONFIGURE GO GO RECONFIGURE GO --生成格式化文件 在此基础上再进行编辑,自己创建一个格式化文件有点问题 --10.0 -- --1 SQLBINARY 0 0 ...

  4. 我的VisualStudio工具箱

    代码神器 ReSharper 毫无疑问,我认为R#是目前VS插件中有史以来最强大的,各种快捷生成代码的方式, 代码重构, 很多很多的快捷键支持.相比较原生VS的,VS的智能功能简直弱爆了. dimec ...

  5. hihocoder #1224 : 赛车 dfs

    #1224 : 赛车 Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://hihocoder.com/problemset/problem/1224 ...

  6. Spark Core源代码分析: Spark任务运行模型

    DAGScheduler 面向stage的调度层,为job生成以stage组成的DAG,提交TaskSet给TaskScheduler运行. 每个Stage内,都是独立的tasks,他们共同运行同一个 ...

  7. Java语言与C++语言的差异总结

    Java的设计者曾说过,设计这门语言的灵感主要来自于C++. 世上先有C++,然后才有Java,整个Java语言的发展历史就是一部对C++的填坑史.所以在Java语言学习过程中,将其与C++语言对比是 ...

  8. Pass value from child popup window to parent page window using JavaScript--reference

    Here Mudassar Ahmed Khan has explained how to pass value from child popup window to parent page wind ...

  9. 阅读uboot

    下面是一个执行make XXX_config后的打印信息: pengdl@debian:~/work/costdown/new/Hi3520D_SDK_V1.0.2.2c/source/arm11/u ...

  10. 玩转Android之手摸手教你DIY一个抢红包神器!

    AccessibilityService是Google专门为残障人士设计的一个服务,可以让他们更方便的来操作手机.AccessibilityService一个主要功能是通过监听窗口的变化来判断用户当前 ...