01-CV-框架-caffe-001-慕课网caffe实战入门_第1页
01-CV-框架-caffe-001-慕课网caffe实战入门_第2页
01-CV-框架-caffe-001-慕课网caffe实战入门_第3页
01-CV-框架-caffe-001-慕课网caffe实战入门_第4页
01-CV-框架-caffe-001-慕课网caffe实战入门_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

caffe实战入门--by会写代码的好厨师caffe入门基础基本介绍深度学习主流框架对比caffe所有网路结构都是以配置文件的形式定义,不用额外的代码.state-of-the-art的模型就是指最新的模型caff2的特性caffe2vscaffe1:简化了依赖,caffe1中最简单的算子是layer,通常以层作为基本算子,caffe2中采用更细粒度的算子:将权重/偏置都划分为算子.caff2中对blob进行扩展,支持更多类型,这让模型的量化压缩变得可行.对于一个跑在芯片上的网络,原始的网络设计往往会占用更多的计算资源,而量化压缩以后,能够大大降低网络参数规模,能够提高网络计算速度,这样才能在嵌入式系统上运行,caff中的基本概念layer层组合之后构成netsolver作用:训练和测试网络.在sovler配置文件中会给出训练和测试需要的参数.blob四维数组:n*k*w*hbatchsize*通道*w*hblob和layersolver梯度的计算关系到网络的更新model.caffemodel是网络训练后得到的模型也是要交付的模型运行一个网络的前向必须的2个文件:protxt配置文件和caffemodelprotxt定义了网络的结构caffemodel得到每层参数的取值.solverstate保存网络在训练中的中间状态,如果网络突然中断就可以通过.soloverstate来恢复并继续训练.linux下的caffe安装pycaffe:caffe的python接口windows下的caffe安装下载caffe下载caffe后进入caffe-master的windows文件夹caffe源码解读实战入门totxt配置文件txt训练配置文件可以将训练和测试的配置放在同一个配置文件中也可以分开写配置文件.inclue参数中phase:train表示这个层用在训练中,如果没有这个参数表示训练和测试都用这个层totxt测试网络的配置文件totxt用于网络训练完成后的前向运算,也就是用于推理/预测.totxt的2种不同定义方式↓e.g定义input层和它的维度caffe可视化工具在线caffe网络可视化工具↓http://ethereon.github.io/netscope/#/editor深度学习标准层在caffe中定义标准层如何定义数据用blob封装特殊层如何添加gpu对应***.hpp文件cpu中对应的层的实现对应是**.cpp文件gpu中对应的层的实现对应是***.cu文件新层的实现包含:层的初始化,响应层的前向和反向,caffe中如何fine-tuning迁移学习经常会用到在解决实际任务时用到imageNet这种大的分类任务数据集对网络做预训练.预训练得到网络的一些初始化参数.通过imageNet这种大型网络训练得到的初始化参数往往比我们随机初始化训练出的网络性能更好.用预训练网络fine-tuning注意网络训练参数要修改成匹配.caffe中学习率使用策略可以通过巧妙的使用学习率来提升模型性能e.gmulitistepcaffe网络通用设计技巧卷积使用的技巧用3*3的卷积核的堆叠能实现用较少参数达到更大卷积核的感受野用1*1的卷积核实现改变通道数分组卷积:将某些channel合并用一个公共的卷积核来压缩模型的参数.但是可能会增加内存资源开销,如果使用不恰当,会造成虽然能降低参数但是对性能提升不大. depthwise卷积是分组卷积的一种极端形式,将每个特征图作为一组,学习不同的卷积核,这样每个卷积核只作用在一个特征图上,因此计算量就大大降低.但是这么做,只关注到特征图的特征忽略了channel的特征,这时就需要加一个pointwise卷积来学习通道之间的特征.pointwise就是1*1的卷积核,这时一个标准的卷积拆成了depthwise卷积+pointwise卷积,相对于原始的标准卷积计算量大大降低,这种卷积又称为深度可分离卷积,并且应用于mobilenet网络等轻量级网络中,且能跑在手机等终端设备上.空洞卷积,也就是膨胀卷积,核心思想是通过不使用pooling来增大标准卷积的感受野,主要用于语义分割的任务.inception结构e.g↓对于输入产生4个分支,分别才用不同的卷积核来学习不同的特征,将学习后的4个特征连接起来作为下一层的输入.inception结构也是我们增加网络宽度经常会用到的结构resnet残差结构第2版本中对resnet基本结构的改进:先1*1卷积进行channel降维,过3*3卷积,再过1*1卷积channel升维,这样可以降低参数量且增加网络非线性性(因为有2个relu).BN将数据归一到均值为0方差为1的分布上,可以加快收敛.(原因是:不同层参数在变化时分布不同,归一化后能确保不同层数据处于相同点正态分布,就能降低网络的依赖关系,确保每个层单独去训练)caffe创建lmdb数据集图片名列表清单:训练caffe举例:用cifar10/minist来完成分类任务lmdb格式数据打包和读取1e12表示10的12次方写模式cifar10公开的有10个类别的图像可以再官网下载数据集一些说明放到readme文本文件中生成caffe网络:#生成caffe网络

importcaffe

defcreate_net():

net=caffe.NetSpec()#生成网络net,用于放layer层

#定义数据层,定义成lmdb数据格式

#参数ntop=2,表示数据种类的格式有2个分别为data和label

net.data,net.label=caffe.layers.Data(source="data.lmdb",

backend=caffe.params.Data.LMDB,

batch_size=32,

ntop=2,

transform_param=dict(crop_size=40,mirror=True)

)

#定义卷积层输入为data层,核数20,weight_filter卷积核初始化参数

net.conv1=caffe.layers.Convolution(net.data,

num_output=20,

kernel_size=5,

weight_filter={'type':'xavier'},

bias_filter={'type':'xavier'}

)

#定义激活层

net.relu1=caffe.layers.ReLU(net.conv1,in_place=True)

#定义池化层

net.pool1=caffe.layers.Pooling(net.relu1,pool=caffe.params.Pooling.MAX,

kernel_size=3,stride=2)

#上述是定义了一层如果有多层将卷积层+relu+池化重复几遍即可,要修改核数or核大小orpadding

#定义全连接层fc输出为1024

net.fc3=caffe.layers.InnerProduct(net.pool1,num_output=1024,weight_filter=dict(type='xavier'))

#定义激活函数

net.relu2=caffe.layers.ReLU(net.fc3,in_place=True)

#定义dropout层

net.drop=caffe.layers.Dropout(net.relu2,dropout_param=dict(dropout_ratio=0.5))

#定义输出层

net.loss=caffe.layers.SoftmaxWit

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论