MTCNN-Caffe(四)net.prototxt

在上篇博客生成train_lmdb与val_lmdb后,要进行网络与迭代器搭建,首先进行网络的搭建

1、数据层即输入层。

    Caffe中数据以blob的格式进行存储和传输,在这一层中是实现数据其他格式与blob之间的转换,例如从高效的数据库lmdb或者level-db转换为blob,也可以从低效的数据格式如hdf5或者图片。另外数据的预处理也可以在本层实现,如减均值,放大缩小,裁剪和镜像等。

name:"LeNet"
layer{
      name="mnist"
      type="Data"
      top="data"
      top="label"
      include {
       phase:TRAIN
}
transform_param{
     scale:0.00390625
}
data_param{
     source:"path"
     batch_size:64
     backend:LMDB
}
}

其中,name为:网络名称,自己定义,include:在其中规定是训练还是测试,如果没有定义,则表明训练和测试均有此层。

数据层:name:该layer的名称;

              type:层的类型。(1)如果是Data:数据来源于LMDB或者LevelDB,必须设置batch_size。source为包含数据库的目录名称。

                                        (2)MemoryData:数据来源于内存,必须设置batch_size,channels,weight,height,MemoryData的数据层为:

layer{
     top="data"
     top="label"
     name:"memory_data"
     type:"MemoryData"
     memory_data_param{
       batch_size:2
       channels:1
       height:100
       width:100
}
transform_param{
    scale:0.0078125
    mean_file:"mean_proto"
    mirror:false         
}
}

                                    (3)HDF5Data:数据来源于Hdf5,必须设置batch_size,source,其数据层为:

layer{
     top="data"
     top="label"
     name='data'
     type="HDF5Data"
    hdf5_data_param{
       source="path"
       batch_size=10
}
}

                                     (4)ImageData:数据来源于图片,必须设置的参数为source,batch_size,可选参数为:rand_skip,shuffle,new_height,new_width.

layer{
    top="data"
    top="label"
    name="data"
    type="ImageData"
    transform_param{
      mirror:false
      crop_size:227
      mean_file:"data/ilsvrc12/imagenet_mean.binaryproto"
  image_data_param {
    source: "examples/_temp/file_list.txt"
    batch_size: 50
    new_height: 256
    new_width: 256
  }
}

2  视觉层:包括convolution卷积层,pooling池化层,Local Response Normalization(LRN)局部极大值抑制,im2col等层。

2.1  层类型:Convilution

layer{
    name:'conv1'
    type:"Convolution"
    bottom:"data"
    top:"conv1"
    param{
        lr_mult:1}
    param{
        lr_mult:2}
    convolution_param{
        num_output:20
        kernel_size:5
        stride:1
        weight_filler{
            type:"xavier"
        }
        bias_filler{
            type:"constant"}
       }
    }

其中:lr_mult:第一个表示权重w的学习率的系数,学习率=base_lr*lr_mult,第二个表示偏重bias的学习率系数。

num_output:卷积核kernel的个数。

kernel_size:kernel的大小,如果kernel的宽和高不等,需要用,kernel_h和kernel_w分别设定。

stride:卷积运算的步长,默认为1,也可以用stride_h,stride_w来确定。

pad:填充边缘的大小,设置结果与原图相同。

weight_filler:权重初始化,若设置为"constant",则默认为0,也可以使用"xavier"或者"Gaussian"进行初始化

bias_term:是否开启偏执项(0/1)

group:分组

(2)  层类型:pooling

layer{
    name:"pool1"
    type:"Pooling"
    bottom:"conv1"
    top:"pool1"
    pooling_param{
        pool:MAX
        kernel_size:2
        stride:2
    }
}

必须设置的参数:kernel_size,其他参数:pool,pad,stride

(3)  层类型:LRN

layers{
    name:"norm1"
    type:"LRN"
    bottom:"pool1"
    top:"norm1"
    lrn_param{
        local_size:5
        alpha:0.0001
        beta:0.75
    }
}

local_size:默认为5,如果是跨通道LRN,则表示求和的通道数;如果是在通道内LRN,则表示求和的正方形区域长度。

alpha:默认为1,归一化公式中的参数。beta:默认为5,归一化公式中的参数。norm_region:默认为ACROSS_CHANNELS。有两个选择,ACROSS_CHANNELS表示在相邻的通道间求和归一化。

(4)层类型:img2col,将一个大矩阵,重叠的划分为多个子矩阵,对每个子矩阵序列化为向量,最后得到另外一个矩阵,在caffe中,卷积运算就是先对数据进行img2col操作,再进行求解内积运算,这样做,这样做比原始的卷积操作更快。

3  激活层,对输入数据进行激活操作,常用的激活函数有:Sigmoid/TanH/AbsVal/RELU/Leaky_RELU收敛速度最快

layer{
    name:"relu1"
    type:"Relu"
    bottom:"ip1"
    top:"ip1"
}

Relu函数可选参数为:Max(0,x),可选参数:negative_slope:默认为0,对标准的Relu函数进行变化,如果设置了这个值,name数据为负数时,将不会为0,而是negative_slope*x

Power:f(x)=(shift+scale*x)^power

layer{
    name:"layer"
    botton:"in"
    top:"out"
    type:"Power"
    power_param{
        power:2
        scale:1
        shift:0
    }
}

4 其他层:softmax_loss层,Inner Product层,accuracy层,reshape层和dropout层

(1)softmax_loss层

layer{
    name:"loss"
    bottom:"ip2"
    bottom:"label"
    top:"loss"
    type:"SoftmaxWithLoss"
    }

(2)全连接层:把输入当做一个向量,输出也是一个简单的向量

输入:n*c*h*w

输出:n*c*1*1

全连接层实际上也类似一种卷积层,只是它的卷积核大小和原数据大小一致,因此他的参数基本和卷积的参数一样

layer{
    name:"ip2"
    bottom:"ip1"
    top:"ip2"
    type:"InnerProduct"
    param{
        lr_mult:1
    }
    param{
        lr_mult:2
    }
    inner_product_param{
        num_putput:10
        weight_filter{
            type:"xavier"
        }
        bias_filter{
            type:"constant"
        }
    }
}

(3)accuracy

layer{
    name:"accuracy_1"
    bottom:"ip2"
    bottom:"label"
    top:"accuracy"
    type:"Accuracy"
    include{
        phase=TEST
    }
}

(4)reshape层,改变数据维度

layer{
    name:"reshape"
    type:"Reshape"
    bottom:"input"
    top:"output"
    reshape_param{
        shape{
            dim:0
            dim:2
            dim:3
            dim:-1
        }
    }
}

(5)Dropout层,防止过拟合,可以随机让网络某些隐含节点的权重不工作

layer{
    name:"drop7"
    bottom:"fc7-conv"
    top:"fc7-conv"
    type:"Dropout"
    dropout_param{
        dropout_ratio:0.5
    }
}

参考博客:https://blog.csdn.net/u014202086/article/details/75226445

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值