当前位置: 代码迷 >> 综合 >> caffe深度模式的组成模块:Blobs,Layers,and Nets
  详细解决方案

caffe深度模式的组成模块:Blobs,Layers,and Nets

热度:82   发布时间:2024-01-24 13:48:00.0

1.blob

(caffe中的数据操作基本单位)
Blobs封装了运行时的数据信息,提供了CPU和GPU的同步。
图片数据:
Blob可以表示为(NCH*W)这样一个4D数组
其中:N表示图片的数量;C表示图片的通道数;H和W分别表示图片的高度和宽度。
在模型中设定的参数,也是用Blob来表示和运算。它的维度会根据参数的类型不同而不同。

Blob是用以存储数据的4维数组,例如
对于数据:NumberChannelHeightWidth
对于卷积权重:Output
InputHeightWidth
对于卷积偏置:Output11*1

举个栗子:
在一个卷积层中,输入一张3通道图片,有96个卷积核,每个核大小为1111,因此这个Blob是9631111;
在一个全连接层中,假设输入1024通道图片,输出1000个数据,则Blob为1000*1024。

2、layer

(层是网络模型的组成要素和计算的基本单位)
层的类型比较多,如Data,Convolution,Pooling,ReLU,Softmax-loss,Accuracy等;其中一个层的定义大致如下:
在这里插入图片描述
从bottom进行数据的输入 ,计算后,通过top进行输出。图中的黄色多边形表示输入输出的数据,蓝色矩形表示层。

每一种类型的层都定义了三种关键的计算:setup,forward and backword

setup: 层的建立和初始化,以及在整个模型中的连接初始化。

forward: 从bottom得到输入数据,进行计算,并将计算结果送到top,进行输出。

backward: 从层的输出端top得到数据的梯度,计算当前层的梯度,并将计算结果送到bottom,向前传递。

3、Net

就像搭积木一样,一个net由多个layer组合而成。

现给出 一个简单的2层神经网络的模型定义( 加上loss 层就变成三层了),先给出这个网络的拓扑。
在这里插入图片描述
第一层:name为mnist, type为Data,没有输入(bottom),只有两个输出(top),一个为data,一个为label
第二层:name为ip,type为InnerProduct, 输入数据data, 输出数据ip
第三层:name为loss, type为SoftmaxWithLoss,有两个输入,一个为ip,一个为label,有一个输出loss,没有画出来
对应的配置文件prototxt(部署即deploy.prototxt)就可以这样写:
name: “LogReg”
layer {
name: “mnist”
type: “Data”
top: “data”
top: “label”
data_param {
source: “input_leveldb”
batch_size: 64
}
}
layer {
name: “ip”
type: “InnerProduct”
bottom: “data”
top: “ip”
inner_product_param {
num_output: 2
}
}
layer {
name: “loss”
type: “SoftmaxWithLoss”
bottom: “ip”
bottom: “label”
top: “loss”
}
复制代码
第一行将这个模型取名为LogReg, 然后是三个layer的定义,参数都比较简单,只列出必须的参数。具体的参数定义可参见本系列的前几篇文章。

Caffe生成的数据分为2种格式:Lmdb和Leveldb
它们都是键/值对(Key/Value Pair)嵌入式数据库管理系统编程库。
虽然lmdb的内存消耗是leveldb的1.1倍,但是lmdb的速度比leveldb快10%至15%,更重要的是lmdb允许多种训练模型同时读取同一组数据集。
因此lmdb取代了leveldb成为Caffe默认的数据集生成格式。

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 (包含测试网络的配置文件)