分享好友 人工智能首页 频道列表

深度学习框架Caffe —— Deep learning in Practice

Caffe教程  2023-02-09 19:265980

因工作交接需要, 要将caffe使用方法及整体结构描述清楚。 鉴于也有同学问过我相关内容, 决定在本文中写个简单的tutorial, 方便大家参考。 
本文简单的讲几个事情:

  • Caffe能做什么?
  • 为什么选择caffe?
  • 环境
  • 整体结构
  • Protocol buffer
  • 训练基本流程
  • Python中训练
  • Debug

Caffe能做什么?

  • 定义网络结构
  • 训练网络
  • C++/CUDA 写的结构
  • cmd/python/Matlab接口
  • CPU/GPU工作模式
  • 给了一些参考模型&pretrain了的weights

为什么选择caffe?

  • 模块化做的好
  • 简单:修改结构无需该代码
  • 开源:共同维护开源代码

环境:

  • $ lsb_release -a 
    Distributor ID: Ubuntu 
    Description: Ubuntu 12.04.4 LTS 
    Release: 12.04 
    Codename: precise

  • $ cat /proc/version 
    Linux version 3.2.0-29-generic (buildd@allspice) (gcc version 4.6.3 (Ubuntu/Linaro 4.6.3-1ubuntu5) ) #46-Ubuntu SMP Fri Jul 27 17:03:23 UTC 2012

  • Vim + Taglist + Cscope


整体结构:

定义CAFFE为caffe跟目录,caffe的核心代码都在$CAFFE/src/caffe 下,主要有以下部分:net, blob, layer, solver.

  • net.cpp
    net定义网络, 整个网络中含有很多layers, net.cpp负责计算整个网络在训练中的forward, backward过程, 即计算forward/backward 时各layer的gradient。

  • layers
    在$CAFFE/src/caffe/layers中的层,在protobuffer (.proto文件中定义message类型,.prototxt或.binaryproto文件中定义message的值) 中调用时包含属性name, type(data/conv/pool…), connection structure (input blobs and output blobs),layer-specific parameters(如conv层的kernel大小)。定义一个layer需要定义其setup, forward 和backward过程。

  • blob.cpp
    net中的数据和求导结果通过4维的blob传递。一个layer有很多blobs, e.g,

    • 对data,weight blob大小为Number * Channels * Height * Width, 如256*3*224*224;
    • 对conv层,weight blob大小为 Output 节点数 * Input 节点数 * Height * Width,如AlexNet第一个conv层的blob大小为96 x 3 x 11 x 11;
    • 对inner product 层, weight blob大小为 1 * 1 * Output节点数 * Input节点数; bias blob大小为1 * 1 * 1 * Output节点数( conv层和inner product层一样,也有weight和bias,所以在网络结构定义中我们会看到两个blobs_lr,第一个是weights的,第二个是bias的。类似地,weight_decay也有两个,一个是weight的,一个是bias的); 


      blob中,mutable_cpu/gpu_data() 和cpu/gpu_data()用来管理memory,cpu/gpu_diff()和 mutable_cpu/gpu_diff()用来计算求导结果。

  • slover.cpp
    结合loss,用gradient更新weights。主要函数: 
    Init(), 
    Solve(), 
    ComputeUpdateValue(), 
    Snapshot(), Restore(),//快照(拷贝)与恢复 网络state 
    Test();

    在solver.cpp中有3中solver,即3个类:AdaGradSolverSGDSolverNesterovSolver可供选择。

    关于loss,可以同时有多个loss,可以加regularization(L1/L2);


Protocol buffer:

上面已经将过, protocol buffer在 .proto文件中定义message类型,.prototxt或.binaryproto文件中定义message的值;

  1. Caffe 
    Caffe的所有message定义在$CAFFE/src/caffe/proto/caffe.proto中。

  2. Experiment 
    在实验中,主要用到两个protocol buffer: solver的和model的,分别定义solver参数(学习率啥的)和model结构(网络结构)。

    技巧:

    • 冻结一层不参与训练:设置其blobs_lr=0
    • 对于图像,读取数据尽量别用HDF5Layer(因为只能存float32和float64,不能用uint8, 所以太费空间)

训练基本流程:

  1. 数据处理 
    法一,转换成caffe接受的格式:lmdb, leveldb, hdf5 / .mat, list of images, etc.;法二,自己写数据读取层(如https://github.com/tnarihi/tnarihi-caffe-helper/blob/master/python/caffe_helper/layers/data_layers.py)
  2. 定义网络结构
  3. 配置Solver参数
  4. 训练:如 caffe train -solver solver.prototxt -gpu 0




在python中训练: 
Document & Examples: https://github.com/BVLC/caffe/pull/1733 

核心code:

  • $CAFFE/python/caffe/_caffe.cpp 
    定义Blob, Layer, Net, Solver类
  • $CAFFE/python/caffe/pycaffe.py 
    Net类的增强功能

Debug:

  • 在Make.config中设置DEBUG := 1
  • 在solver.prototxt中设置debug_info: true
  • 在python/Matlab中察看forward & backward一轮后weights的变化

经典文献: 
[ DeCAF ] J. Donahue, Y. Jia, O. Vinyals, J. Hoffman, N. Zhang, E. Tzeng, and T. Darrell. Decaf: A deep convolutional activation feature for generic visual recognition. ICML, 2014. 
[ R-CNN ] R. Girshick, J. Donahue, T. Darrell, and J. Malik. Rich feature hierarchies for accurate object detection and semantic segmentation. CVPR, 2014. 
[ Zeiler-Fergus Visualizing] M. Zeiler and R. Fergus. visualizing and understanding convolutional networks. ECCV, 2014. 
[ LeNet ] Y. LeCun, L. Bottou, Y. Bengio, and P. Haffner. Gradient-based learning applied to document recognition. IEEE, 1998. 
[ AlexNet ] A. Krizhevsky, I. Sutskever, and G. Hinton. Imagenet classification with deep convolutional neural networks. NIPS, 2012. 
[ OverFeat ] P. Sermanet, D. Eigen, X. Zhang, M. Mathieu, R. Fergus, and Y. LeCun. Overfeat: Integrated recognition, localization and detection using convolutional networks. ICLR, 2014. 
[ Image-Style (Transfer learning) ] S. Karayev, M. Trentacoste, H. Han, A. Agarwala, T. Darrell, A. Hertzmann, H. Winnemoeller. Recognizing Image Style. BMVC, 2014. 
[ Karpathy14 ] A. Karpathy, G. Toderici, S. Shetty, T. Leung, R. Sukthankar, and L. Fei-Fei. Large-scale video classification with convolutional neural networks. CVPR, 2014. 
[ Sutskever13 ] I. Sutskever. Training Recurrent Neural Networks. PhD thesis, University of Toronto, 2013. 
[ Chopra05 ] S. Chopra, R. Hadsell, and Y. LeCun. Learning a similarity metric discriminatively, with application to face verification. CVPR, 2005.

 

from: http://blog.csdn.net/abcjennifer/article/details/46424949

查看更多关于【Caffe教程】的文章

展开全文
相关推荐
反对 0
举报 0
图文资讯
热门推荐
优选好物
更多热点专题
更多推荐文章
caffe调试 ubuntu1404+eclipse
转自:http://blog.csdn.net/yaoxingfu72/article/details/47999795首先确保你caffe编译成功,而且makefile.config中将DEBUG:=1那一行取消注释,我的caffe根目录为 caffe-master。你也可以在Eclipse中编译caffe,我是先编译好caffe,然后进入Eclipse中调试1

0评论2023-03-08522

Caffe hdf5 layer data 大于2G 的导入
问题:      Datatype class: H5T_FLOAT,      Check failed: error == cudaSuccess (2 vs. 0)  out of memory.      hdf5 layer 最大的导入的大小是2G, 超过会报错[1]。解决方法:     有人 h5repart -m1g 将数据集分割成多个文件每个是

0评论2023-02-10987

caffe神经网络中不同的lr_policy间的区别
lr_policy可以设置为下面这些值,相应的学习率的计算为:- fixed:   保持base_lr不变.- step:    如果设置为step,则还需要设置一个stepsize,  返回 base_lr * gamma ^ (floor(iter / stepsize)),其中iter表示当前的迭代次数- exp:     返回base_lr

0评论2023-02-10949

Ubuntu配置GPU+CUDA+CAFFE ubuntu配置dns
参考网站:http://blog.csdn.net/xizero00/article/details/43227019/ (主要参考)http://www.cnblogs.com/platero/p/3993877.html (caffe+cudaGPU)http://www.cnblogs.com/platero/p/4118139.html (cuDNN)http://developer.download.nvidia.com/compute/cuda/

0评论2023-02-10616

关于深度学习(deep learning)的常见疑问 --- 谷歌大脑科学家 Caffe缔造者 贾扬清
问答环节问:在finetuning的时候,新问题的图像大小不同于pretraining的图像大小,只能缩放到同样的大小吗?” 答:对的:)问:目前dl在时序序列分析中的进展如何?研究思路如何,能简单描述一下么答:这个有点长,可以看看google最近的一系列machine trans

0评论2023-02-10646

使用caffe的HDF5数据完毕回归任务
    一直在研究怎样用caffe做行人检測问题。然而參考那些经典结构比方faster-rcnn等,都是自己定义的caffe层来完毕的检測任务。这些都要求对caffe框架有一定程度的了解。近期看到了怎样用caffe完毕回归的任务,就想把检測问题当成回归问题来解决。   

0评论2023-02-09943

Caffe 编译: undefined reference to imencode()
本系列文章由 @yhl_leo 出品,转载请注明出处。 文章链接:http://blog.csdn.net/yhl_leo/article/details/52150781 整理之前编译工程中遇到的一个Bug,贴上提示log信息:...CXX/LD -o .build_release/examples/siamese/convert_mnist_siamese_data.bin.build

0评论2023-02-09884

[caffe]caffe资料收集 Caffeine.
1.caffe主页,有各种tutorial。2.Evan Shelhamer的tutorial,包括视频。 

0评论2023-02-09776

caffe_ssd学习-用自己的数据做训练 ssd caffe
几乎没用过linux操作系统,不懂shell编程,linux下shell+windows下UltraEdit勉勉强强生成了train.txt和val.txt期间各种错误辛酸不表,照着examples/imagenet/readme勉勉强强用自己的数据,按imagenet的训练方法,把reference_caffenet训起来了,小笔记本的风

0评论2023-02-09664

caffe Python API 之中值转换
# 编写一个函数,将二进制的均值转换为python的均值def convert_mean(binMean,npyMean):blob = caffe.proto.caffe_pb2.BlobProto()bin_mean = open(binMean, 'rb' ).read()blob.ParseFromString(bin_mean)arr = np.array( caffe.io.blobproto_to_array(blob)

0评论2023-02-09843

Windows10安装ubuntu & caffe GPU版
1.Ubuntu https://www.cnblogs.com/EasonJim/p/7112413.htmlhttps://blog.csdn.net/jesse_mx/article/details/61425361 安装后启动不了,直接进入windows.解决方案:https://www.cnblogs.com/lymboy/p/7783756.htmlhttps://jingyan.baidu.com/article/5553fa

0评论2023-02-091018

caffe(1) 网络结构层参数详解
prototxt文件是caffe的配置文件,用于保存CNN的网络结构和配置信息。prototxt文件有三种,分别是deploy.prototxt,train_val.prototxt和solver.prototxt。solver.prototxt是caffe的配置文件。里面定义了网络训练时候的各种参数,比如学习率、权重衰减、迭代次

0评论2023-02-09738

更多推荐