一、caffe框架各数据层详解:

  1. caffe网络配置文件中有prototxt和solver文件,其中prototxt文件定义了网络模型结构,solver文件定义了网络的超参数。
  2. 对prototxt中的数据层的详解如下:
    数据层是每一个模型的起始层或者底层,通过数据层完成blobs格式数据的上传,在数据层的某些参数可以实现数据的预处理(减去均值,放大缩小,剪裁,镜像等)。
    训练时的数据输入层:
name: "LeNet"
layer {
  name: "mnist"	 #对该层的命名
  type: "Data" 	 #对该层的类型定义
  top: "data" 	 #bottom代表输入数据,top代表输出的数据,可以有多个bottem和top
  top: "label" 
  include {
    phase: TRAIN #此网络层在训练阶段使用
  transform_param {
    scale: 0.00390625	#将数据进行缩放,实际其值为1/255, 即将输入数据由0-255归一化到0-1之间
    mean_file_size: mean.binaryproto	#将数据进行均值化,使用的是caffe框架自带的均值化操作
    mirror: 1	#其值可以是1或0,代表开启和关闭镜像 
    crop_size: 227	#表示以227×227进行裁剪
  data_param {
    source: "examples/mnist/mnist_train_lmdb"	#读取训练数据
    batch_size: 64	#训练时的batch大小,即批量处理数
    backend: LMDB	#训练的数据格式,数据格式有LevelDB、LMDB和hfd5格式

测试时的数据输入层(以上介绍过的不再重复介绍):

layer {
  name: "mnist"
  type: "Data"
  top: "data"
  top: "label"
  include {
    phase: TEST	#该层在测试阶段使用
  transform_param {
    scale: 0.00390625
  data_param {
    source: "examples/mnist/mnist_test_lmdb"	#读取测试数据
    batch_size: 100
    backend: LMDB

维度变换层:

layer {
 name: "reshape"
 type: "Reshape"    #不改变输入的数据值的大小,仅改变维度
 bottom: "input"
 top: "output"
 reshape_param{
 	shape{         #0:表示维度不变,即输入维度和输出维度的相等,-1表示系统自动计算维度。其它值:将原维度变为其它值
    	dim:0
    	dim:0
    	dim:0
   		dim: -1
  1. 对计算层的详解:
    卷积层:
layer {
  name: "conv1"
  type: "Convolution"
  bottom: "data"
  top: "conv1"
  param {
    lr_mult: 1		#网络权值学习率的系数,最终的学习率=solver文件中的基础学习率base_lr × lr_mult
    decay_mult: 1	#权重衰减
  param {
    lr_mult: 2		#偏置项学习率的系数,一般是权值系数的2倍
    decay_mult: 0	
  convolution_param {
    num_output: 20	#卷积核的个数,必须设置
    pad:2			#默认为0
    kernel_size: 5	#设置卷积核的大小为5×5
    stride: 1		#设置卷积核的步长为1
    weight_filler {
      type: "xavier"	#对权值进行初始化,默认为“constant”,即值全为0,还有“xavier”算法和“gaussian”算法,但一般使用“xavier”算法比较多,保证输出和输入尽可能地服从相同的概率分布,即均匀化分布。
    bias_filler {
      type: "constant"	#偏置项的初始化,一般是“constant”
layer {
  name: "pool1"
  type: "Pooling"
  bottom: "conv1"
  top: "pool1"
  pooling_param {
    pool: MAX		#设置为最大池化,可选方法还有平均池化和最小池化等
    kernel_size: 2	#设置池化尺寸的大小
    stride: 2		#设置池化的步长

LRN层:对输入的局部区域进行归一化,达到“侧抑制”的效果。对于输入除以一个归一化公式,这个最早是Alexnet提出的现在用的少。

layer {
  name: "norm1"
  type: "LRN"
  bottom: "pool1"
  top: "norm1"
  lrn_param {
    local_size: 3	#默认是5。如果是跨通道LRN,则表示求和的通道数;如果是通道内LRN,则表示求和的正方形区域长度。
    alpha: 5e-05	#默认是1,归一化公式中参数
    beta: 0.75		#默认是5,归一化公式中参数
    norm_region: WITHIN_CHANNEL	#默认为ACROSS_CHANNELS,ACROSS_CHANNELS表示在相邻的通道间求和归一化,WITHIN_CHANNEL表示在一个通道内部特定的区域内进行求和归一化

全连接层:类似卷积层,只是它的卷积核大小和原数据大小一致。因此它的参数基本和卷积层的参数一样。

layer {
  name: "ip1"
  type: "InnerProduct"
  bottom: "pool2"
  top: "ip1"
  param {
    lr_mult: 1
  param {
    lr_mult: 2
  inner_product_param {
    num_output: 500
    weight_filler {
      type: "xavier"
    bias_filler {
      type: "constant"

激活函数层:

layer {
  name: "relu1"
  type: "ReLU" 	#将激活函数设置为ReLU,还可以是Sigmoid等
  bottom: "ip1"
  top: "ip1"

dropout层:用来防止过拟合,一般在全连接层后。

layer {
  name: "drop6"
  type: "Dropout"
  bottom: "ip1" #输出和输入为同一层
  top: "ip1"
  dropout_param {
    dropout_ratio: 0.5	#让网络某些隐藏层节点的权重随机失活,其值为0.5即每个节点权重有50%的概率失活

BN层(BatchNormal):批量归一化或者正则化,使其不依赖初始值,加快训练速度。

layer {
  name: "batchnorm"
  type: "BatchNorm"
  bottom: "conv"
  top: "conv"
  batch_norm_param {
    use_global_stats: true
  include {
    phase: TRAIN/TEST

计算精度层:计算准确率,一般在测试阶段使用。

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

计算loss层:计算损失,输出loss值。

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

softmax层:输出概率值。

layer {
  name: "prob"
  type: "Softmax"
  bottom: "fc8-conv"
  top: "prob"
一.数据层及参数
要运行caffe,需要先创建一个模型(model),如比较常用的Lenet,Alex等, 而一个模型由多个屋(layer)构成,每一屋又由许多参数组成。所有的参数都定义在caffe.proto这个文件中。要熟练...
                                    创建caffe模型,首先要在protocol buffer 定义文件(prototxt)中定义结构。在caffe环境中,图像的明显特征是其空间结构。主要layers主要功能主要类型其他卷积层提取特征CONVOLUTION学习率、数据维度池化层特征池化POOLING池化方法,数据维度局部响应归一化层临近抑制LRN损失计算层loss计算SOFTMAX_LOSSEUCLIDEAN_LOSSHINGE_L...
layer {
  name: "conv1"
  type: &a
                                    ①Data
数据层是所有模型的最底层,主要有transform_param{},与data_param{}两中参数设置,data_param{}是数据集来源与训练批大小一些的设置,这个因人而异,根据自己实际情况设置好就行。其中,batch_size是根据训练图像大小,GPU使用情况设置的。transform_param{}是数据预处理的一些设置,一般有:mirror,表示是否开启镜像,crop_s...
                                         本文章,对研究过程中应用caffe平台构建卷积神经网络和残差神经网络过程中,用到的layer进行简单记录和讲解。    大致包含以下图层:"HDF5Data"(读取hdf5文件)  、"Convolution"(卷积层)、"ReLU"(激励层)、"Slice"(切片)、"Crop"(裁剪)、"Eltwise"(运算)、"Concat"(连接)    (1)  
要创建Caffe模型,您需要在协议缓冲区定义文件(prototxt)中定义模型体系结构。
Caffe图层及其参数在caffe.proto中项目的协议缓冲区定义中定义。
数据通过数据层进入Caffe:它们位于网络的底部。 数据可
    name:"cifar"
    type:"Data"
    top:"data" # 一般数据层都有两个输出,data和label
    top:"label"
                                    点击上方“小白学视觉”,选择加"星标"或“置顶”重磅干货,第一时间送达简介一、relu层1、前向传播2、反向传播二、dropout层1、dropout工作原理2、在哪里使用dropout3...
pytorch转onnx后,onnx转tensorRT 各种问题。主要是TX2安装的tensorRT版本较低,也没有去刷机升级的想法。
尝试了 onnx-tensorRT 以及torch2trt 项目,完全没心思搞了。
还是按照标准流程 转caffe 然后部署到tensorRT ,TX2也有官方支持的caffe的脚本。
1、Pytorch模型转Caffe模型小记
https://zhuanlan.zhihu.com/p/352750171
得到了pytorch2caffe工具: github.c