初识 Caffe

最近需要用Caffe跑一个车辆检测模型,由于博主之前一直在TensorFlow+Keras下做视觉任务,需要系统学习Caffe框架。现以此系列博客记录Caffe的学习历程,下面从Caffe的优势、架构、网络定义、各层定义、Caffe的安装配置、训练模型等方面介绍Caffe。

学习Caffe,必看的一个地方就是它的官网,地址为http://caffe.berkeleyvision.org/

Caffe简介

当前投身到计算机视觉研究方向的人越来越多,深度学习作为计算机视觉的一种研究方法受到人们的热捧,但要靠自己完全实现DNN是一个很困难的过程,一个好的框架显得至关重要。谷歌有TensorFlow,微软有CNTK,亚马逊有MxNet, 百度有Paddle,而BVLC(Berkeley Vision and Learning Center)发布的Caffe框架作为一个清晰高效的深度学习框架,因其上手简单,速度快,应用场景广,很多时候都会选用它来完成工程项目,作者是博士毕业于UC Berkeley的贾扬清,社区贡献者共同开发,开源license为BSD 2-Clause。

Caffe,全称为Convolutional Architecture for Fast Feature Embedding,基于服务器端,如果在终端做深度学习,目前很多场景都应用不了,比如说,手机端、嵌入式端。Caffe2Go框架定位在手机端,但目前还未开源。Caffe-jacinto框架致力于嵌入式端,且github开源。

Caffe框架相关开源地址如下:

BVLC:    https://github.com/BVLC/caffe

NVIDIA: https://github.com/NVIDIA/caffe

Tidsp:    https://github.com/tidsp/caffe-jacinto

深入浅出Caffe:https://github.com/RuidongFang/CaffeAll_Fred

Caffe是纯粹的C++/CUDA架构,底层完全用C++编写,支持命令行、Python和MATLAB接口;可以在CPU和GPU直接无缝切换:

Caffe::set_model(Caffe::GPU)

Caffe的优势

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

Caffe的安装与配置

Caffe:安装与配置

Caffe的网络定义

Caffe中的网络都是有向无环图的集合,可以直接定义:

name: "dummy-net"
layers {<span><span>name: <span>"data" …</span></span></span>}
layers {<span><span>name: <span>"conv" …</span></span></span>}
layers {<span><span>name: <span>"pool" …</span></span></span>}
layers {<span><span>name: <span>"loss" …</span></span></span>}

数据及其导数以blobs的形式在层间流动。

Caffe的各层定义

Caffe层的定义由2部分组成:层属性与层参数,例如

name:"conv1"
type:CONVOLUTION
bottom:"data"
top:"conv1"
convolution_param{
    num_output:<span>20
    kernel_size:5
    stride:1
    weight_filler{
        type: "<span style="color: #c0504d;">xavier</span>"
    }
}

这段配置文件的前4行是层属性,定义了层名称、层类型以及层连接结构(输入blob和输出blob);而后半部分是各种层参数

Blob是用以存储数据的4维数组,例如

  • 对于数据,NCHW(Number * Channel * Height * Width)
  • 对于卷积权重,Output * Input * Height * Width
  • 对于卷积偏置,Output * 1 * 1 * 1

训练网络

网络参数的定义也很方便,可以随意设置相应参数。甚至调用GPU运算只需要写一句话:

solver_mode:GPU

训练网络的例子见Caffe训练示例

Caffe(CNN,Deep Learning)

Caffe,Convolution Architecture For Feature Embedding (Extraction)

Caffe是什么?

  • CNN(Deep Learning)工具箱;
  • C++语言架构;
  • CPU和GPU无缝交换;
  • Python和Matlab的封装;
  • 但是,Decaf只是CPU版本。

为什么用Caffe?

  • 运算速度快,简单、友好的架构,用到的一些库;
  • Google Logging library(Glog):一个C++语言的应用级日志记录框架,提供了C++风格的流操作和各种助手宏;
  • leveldb(数据存储):是一个google实现的非常高效的kv数据库,单进程操作;
  • CBLAS library(CPU版本的矩阵操作);
  • CUBLAS library(GPU版本的矩阵操作)。

Caffe架构

深挖代码,Caffe主要包括四个部分,分别是Blob、Layer、Net和Solver。(重点研究下caffe.proto文件

  • Blob:Store data and derivatives(存储数据和导数);

  • Layer:Transforms bottom blobs to top blobs(网络由层构成);

  • Net:Many layers; computes gradients via forward/ backward(层次结构组成网络);

  • Solver:Uses grandients to update weights(网络是靠Solver文件来支配的,超参数如学习率、衰减率等等都是通过Solver文件来支配的)。

1. 预处理图像的LevelDB/LMDB构建

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

输出:LevelDB/LMDB(4)

指令里包含如下信息:

  1. conver_imageset (构建LevelDB的可运行程序)

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

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

  4. 输出的LevelDB文件夹的名字

  5. CPU/GPU (指定是在CPU上还是在GPU上运行code)

注:LevelDB/LMDB的介绍参见关于LevelDB和LMDB的介绍

2. CNN网络配置文件

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

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

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


:推荐一本不错的书:深度学习——21天实战Caffe      赵永科 著      电子工业出版社

附上两个个有趣的网站:JYQ的Caffe model zooSnailTyan的Caffe model zoo


不错的初学者参考链接,高手请绕过:

Caffe学习专栏

模型可视化工具——Netron

github_netron

Netron介绍

Caffe学习资料推荐

https://blog.csdn.net/qq_26898461/article/details/50427778

https://dirtysalt.github.io/html/caffe.html

https://blog.csdn.net/cham_3/article/details/72141753

https://blog.csdn.net/xygl2009/article/details/77829178

https://www.open-open.com/lib/view/open1421995285109.html

https://blog.csdn.net/xjz18298268521/article/details/52190058

https://blog.csdn.net/haoji007/article/details/81669057

https://www.cnblogs.com/dupuleng/articles/4242906.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值