一、caffe框架各数据层详解:
-
caffe网络配置文件中有prototxt和solver文件,其中prototxt文件定义了网络模型结构,solver文件定义了网络的超参数。
-
对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
- 对计算层的详解:
卷积层:
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