Caffe主要由Blob,Layer,Net 和 Solver这几个部分组成。
Caffe 的安装
首先安装brew
how to install brew on Mac_利弗莫尔_truefan的博客-CSDN博客
然后直接使用命令安装
brew install caffe
Caffe的卸载
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/uninstall)"
caffe源代码地址:
GitHub - BVLC/caffe: Caffe: a fast open framework for deep learning.https://github.com/BVLC/caffe
Blobs,Layers,and Nets:深度网络的组成模式表示为数据块工作的内部连接层的集合。
caffe定义了数据存储,层层的网络(一个Caffe层(Layer)是一个神经网络层的本质),网络和运行方式,以及如何训练一个网络(定义了损失函数和梯度下降函数)
具体的FCN16s的caffe架构如下所示
http://dl.caffe.berkeleyvision.org/siftflow-fcn16s-heavy.caffemodel
layer {
name: "data"
type: "Python"
top: "data"
top: "sem"
top: "geo"
python_param {
module: "siftflow_layers"
layer: "SIFTFlowSegDataLayer"
param_str: "{\'siftflow_dir\': \'../data/sift-flow\', \'seed\': 1337, \'split\': \'trainval\'}"
}
}
layer {
name: "conv1_1"
type: "Convolution"
bottom: "data"
top: "conv1_1"
param {
lr_mult: 1
decay_mult: 1
}
param {
lr_mult: 2
decay_mult: 0
}
convolution_param {
num_output: 64
pad: 100
kernel_size: 3
stride: 1
}
}
layer {
name: "relu1_1"
type: "ReLU"
bottom: "conv1_1"
top: "conv1_1"
}
layer {
name: "conv1_2"
type: "Convolution"
bottom: "conv1_1"
top: "conv1_2"
param {
lr_mult: 1
decay_mult: 1
}
param {
lr_mult: 2
decay_mult: 0
}
convolution_param {
num_output: 64
pad: 1
kernel_size: 3
stride: 1
}
}
layer {
name: "relu1_2"
type: "ReLU"
bottom: "conv1_2"
top: "conv1_2"
}
layer {
name: "pool1"
type: "Pooling"
bottom: "conv1_2"
top: "pool1"
pooling_param {
pool: MAX
kernel_size: 2
stride: 2
}
}
layer {
name: "conv2_1"
type: "Convolution"
bottom: "pool1"
top: "conv2_1"
param {
lr_mult: 1
decay_mult: 1
}
param {
lr_mult: 2
decay_mult: 0
}
convolution_param {
num_output: 128
pad: 1
kernel_size: 3
stride: 1
}
}
layer {
name: "relu2_1"
type: "ReLU"
bottom: "conv2_1"
top: "conv2_1"
}
layer {
name: "conv2_2"
type: "Convolution"
bottom: "conv2_1"
top: "conv2_2"
param {
lr_mult: 1
decay_mult: 1
}
param {
lr_mult: 2
decay_mult: 0
}
convolution_param {
num_output: 128
pad: 1
kernel_size: 3
stride: 1
}
}
layer {
name: "relu2_2"
type: "ReLU"
bottom: "conv2_2"
top: "conv2_2"
}
layer {
name: "pool2"
type: "Pooling"
bottom: "conv2_2"
top: "pool2"
pooling_param {
pool: MAX
kernel_size: 2
stride: 2
}
}
layer {
name: "conv3_1"
type: "Convolution"
bottom: "pool2"
top: "conv3_1"
param {
lr_mult: 1
decay_mult: 1
}
param {
lr_mult: 2
decay_mult: 0
}
convolution_param {
num_output: 256
pad: 1
kernel_size: 3
stride: 1
}
}
layer {
name: "relu3_1"
type: "ReLU"
bottom: "conv3_1"
top: "conv3_1"
}
layer {
name: "conv3_2"
type: "Convolution"
bottom: "conv3_1"
top: "conv3_2"
param {
lr_mult: 1
decay_mult: 1
}
param {
lr_mult: 2
decay_mult: 0
}
convolution_param {
num_output: 256
pad: 1
kernel_size: 3
stride: 1
}
}
layer {
name: "relu3_2"
type: "ReLU"
bottom: "conv3_2"
top: "conv3_2"
}
layer {
name: "conv3_3"
type: "Convolution"
bottom: "conv3_2"
top: "conv3_3"
param {
lr_mult: 1
decay_mult: 1
}
param {
lr_mult: 2
decay_mult: 0
}
convolution_param {
num_output: 256
pad: 1
kernel_size: 3
stride: 1
}
}
layer {
name: "relu3_3"
type: "ReLU"
bottom: "conv3_3"
top: "conv3_3"
}
layer {
name: "pool3"
type: "Pooling"
bottom: "conv3_3"
top: "pool3"
pooling_param {
pool: MAX
kernel_size: 2
stride: 2
}
}
layer {
name: "conv4_1"
type: "Convolution"
bottom: "pool3"
top: "conv4_1"
param {
lr_mult: 1
decay_mult: 1
}
param {
lr_mult: 2
decay_mult: 0
}
convolution_param {
num_output: 512
pad: 1
kernel_size: 3
stride: 1
}
}
layer {
name: "relu4_1"
type: "ReLU"
bottom: "conv4_1"
top: "conv4_1"
}
layer {
name: "conv4_2"
type: "Convolution"
bottom: "conv4_1"
top: "conv4_2"
param {
lr_mult: 1
decay_mult: 1
}
param {
lr_mult: 2
decay_mult: 0
}
convolution_param {
num_output: 512
pad: 1
kernel_size: 3
stride: 1
}
}
layer {
name: "relu4_2"
type: "ReLU"
bottom: "conv4_2"
top: "conv4_2"
}
layer {
name: "conv4_3"
type: "Convolution"
bottom: "conv4_2"
top: "conv4_3"
param {
lr_mult: 1
decay_mult: 1
}
param {
lr_mult: 2
decay_mult: 0
}
convolution_param {
num_output: 512
pad: 1
kernel_size: 3
stride: 1
}
}
layer {
name: "relu4_3"
type: "ReLU"
bottom: "conv4_3"
top: "conv4_3"
}
layer {
name: "pool4"
type: "Pooling"
bottom: "conv4_3"
top: "pool4"
pooling_param {
pool: MAX
kernel_size: 2
stride: 2
}
}
layer {
name: "conv5_1"
type: "Convolution"
bottom: "pool4"
top: "conv5_1"
param {
lr_mult: 1
decay_mult: 1
}
param {
lr_mult: 2
decay_mult: 0
}
convolution_param {
num_output: 512
pad: 1
kernel_size: 3
stride: 1
}
}
layer {
name: "relu5_1"
type: "ReLU"
bottom: "conv5_1"
top: "conv5_1"
}
layer {
name: "conv5_2"
type: "Convolution"
bottom: "conv5_1"
top: "conv5_2"
param {
lr_mult: 1
decay_mult: 1
}
param {
lr_mult: 2
decay_mult: 0
}
convolution_param {
num_output: 512
pad: 1
kernel_size: 3
stride: 1
}
}
layer {
name: "relu5_2"
type: "ReLU"
bottom: "conv5_2"
top: "conv5_2"
}
layer {
name: "conv5_3"
type: "Convolution"
bottom: "conv5_2"
top: "conv5_3"
param {
lr_mult: 1
decay_mult: 1
}
param {
lr_mult: 2
decay_mult: 0
}
convolution_param {
num_output: 512
pad: 1
kernel_size: 3
stride: 1
}
}
layer {
name: "relu5_3"
type: "ReLU"
bottom: "conv5_3"
top: "conv5_3"
}
layer {
name: "pool5"
type: "Pooling"
bottom: "conv5_3"
top: "pool5"
pooling_param {
pool: MAX
kernel_size: 2
stride: 2
}
}
layer {
name: "fc6"
type: "Convolution"
bottom: "pool5"
top: "fc6"
param {
lr_mult: 1
decay_mult: 1
}
param {
lr_mult: 2
decay_mult: 0
}
convolution_param {
num_output: 4096
pad: 0
kernel_size: 7
stride: 1
}
}
layer {
name: "relu6"
type: "ReLU"
bottom: "fc6"
top: "fc6"
}
layer {
name: "drop6"
type: "Dropout"
bottom: "fc6"
top: "fc6"
dropout_param {
dropout_ratio: 0.5
}
}
layer {
name: "fc7"
type: "Convolution"
bottom: "fc6"
top: "fc7"
param {
lr_mult: 1
decay_mult: 1
}
param {
lr_mult: 2
decay_mult: 0
}
convolution_param {
num_output: 4096
pad: 0
kernel_size: 1
stride: 1
}
}
layer {
name: "relu7"
type: "ReLU"
bottom: "fc7"
top: "fc7"
}
layer {
name: "drop7"
type: "Dropout"
bottom: "fc7"
top: "fc7"
dropout_param {
dropout_ratio: 0.5
}
}
layer {
name: "score_fr_sem"
type: "Convolution"
bottom: "fc7"
top: "score_fr_sem"
param {
lr_mult: 1
decay_mult: 1
}
param {
lr_mult: 2
decay_mult: 0
}
convolution_param {
num_output: 33
pad: 0
kernel_size: 1
}
}
layer {
name: "upscore2_sem"
type: "Deconvolution"
bottom: "score_fr_sem"
top: "upscore2_sem"
param {
lr_mult: 0
}
convolution_param {
num_output: 33
bias_term: false
kernel_size: 4
stride: 2
}
}
layer {
name: "score_pool4_sem"
type: "Convolution"
bottom: "pool4"
top: "score_pool4_sem"
param {
lr_mult: 1
decay_mult: 1
}
param {
lr_mult: 2
decay_mult: 0
}
convolution_param {
num_output: 33
pad: 0
kernel_size: 1
}
}
layer {
name: "score_pool4_semc"
type: "Crop"
bottom: "score_pool4_sem"
bottom: "upscore2_sem"
top: "score_pool4_semc"
crop_param {
axis: 2
offset: 5
}
}
layer {
name: "fuse_pool4_sem"
type: "Eltwise"
bottom: "upscore2_sem"
bottom: "score_pool4_semc"
top: "fuse_pool4_sem"
eltwise_param {
operation: SUM
}
}
layer {
name: "upscore16_sem"
type: "Deconvolution"
bottom: "fuse_pool4_sem"
top: "upscore16_sem"
param {
lr_mult: 0
}
convolution_param {
num_output: 33
bias_term: false
kernel_size: 32
stride: 16
}
}
layer {
name: "score_sem"
type: "Crop"
bottom: "upscore16_sem"
bottom: "data"
top: "score_sem"
crop_param {
axis: 2
offset: 27
}
}
layer {
name: "loss"
type: "SoftmaxWithLoss"
bottom: "score_sem"
bottom: "sem"
top: "loss"
loss_param {
ignore_label: 255
normalize: false
}
}
layer {
name: "score_fr_geo"
type: "Convolution"
bottom: "fc7"
top: "score_fr_geo"
param {
lr_mult: 1
decay_mult: 1
}
param {
lr_mult: 2
decay_mult: 0
}
convolution_param {
num_output: 3
pad: 0
kernel_size: 1
}
}
layer {
name: "upscore2_geo"
type: "Deconvolution"
bottom: "score_fr_geo"
top: "upscore2_geo"
param {
lr_mult: 0
}
convolution_param {
num_output: 3
bias_term: false
kernel_size: 4
stride: 2
}
}
layer {
name: "score_pool4_geo"
type: "Convolution"
bottom: "pool4"
top: "score_pool4_geo"
param {
lr_mult: 1
decay_mult: 1
}
param {
lr_mult: 2
decay_mult: 0
}
convolution_param {
num_output: 3
pad: 0
kernel_size: 1
}
}
layer {
name: "score_pool4_geoc"
type: "Crop"
bottom: "score_pool4_geo"
bottom: "upscore2_geo"
top: "score_pool4_geoc"
crop_param {
axis: 2
offset: 5
}
}
layer {
name: "fuse_pool4_geo"
type: "Eltwise"
bottom: "upscore2_geo"
bottom: "score_pool4_geoc"
top: "fuse_pool4_geo"
eltwise_param {
operation: SUM
}
}
layer {
name: "upscore16_geo"
type: "Deconvolution"
bottom: "fuse_pool4_geo"
top: "upscore16_geo"
param {
lr_mult: 0
}
convolution_param {
num_output: 3
bias_term: false
kernel_size: 32
stride: 16
}
}
layer {
name: "score_geo"
type: "Crop"
bottom: "upscore16_geo"
bottom: "data"
top: "score_geo"
crop_param {
axis: 2
offset: 27
}
}
layer {
name: "loss_geo"
type: "SoftmaxWithLoss"
bottom: "score_geo"
bottom: "geo"
top: "loss_geo"
loss_param {
ignore_label: 255
normalize: false
}
}