薛开宇学习笔记二之总结笔记--caffe imagenet训练中train_val.prototxt中数据层及其参数设置
来源:互联网 发布:java cs 编辑:程序博客网 时间:2024/05/16 10:02
caffe的各种数据层在caffe.proto文件中有定义。通过对定义的caffe.proto文件进行编译,产生支持各种层操作的c++代码。后面将会详细解读caffe.proto文件(在caffe里就是当做一个自动代码生成工具来用)。
本文主要介绍caffe可以读入数据的各种格式,方便后面采用caffe训练自己的数据
数据的来源主要有以下几种:
(1)高效的数据库(LevelDB或者LMDB)
(2)内存
(3)硬盘文件,HDF5格式或者图片格式的文件。此种方式效率较差,目前一般是先将原生数据转换为(1)中的数据库格式,然后再来处理
绝大部分数据层在设置时,都可以先对数据进行一定的预处理,包括归一化scale,去中心化(减去平均值),水平镜像flip,随机裁剪crop等四种预处理方式。
该四种预处理方式可以靠该Layer的transform_params属性(HDF5 Layer没有该属性。。。)来指定。指定方式如下:
数据预处理只是数据层transfor_params属性的一部分,其余transform_params属性可以在caffe.proto文件里的Message类型:TransformationParameter下查找。
二.数据来源于数据库(LevelDB或者LMDB)
LMDB:Lightning MemoryMapped Databases,由于Caffe的文件读取方式使得该格式的数据输入最适用于1-K分类问题
层参数设置实例:
data_param里必须设置的参数有
(1)source:数据库文件名
(2)batch_size:每次处理的样本数目
可选参数:
(1)backend:数据库类型,默认为LMDB,可选LevelDB
(2)rand_skip:在开始的时候跳过rand_skip个输入数据,这个对异步SGD有效
减去均值的方法可以由另一种方法代替,由(一)中的代码示意可看出。
其中.binaryproto文件可由下述方式得到,由LMDB数据库计算得到均值文件
三.数据来源于原生图像文件
直接从文本文件读入所有要处理的图像文件的路径与label标签
层参数设置实例:
层的类型为ImageData,图像和标签文件来源为txt文本,文本内容如下所示,其中最后一列为该图像的标签
image_data_params参数必须设置的有:
(1)source:txt文件名
可选参数:
(1)batch_size:每次输入处理的图像个数,默认为1
(2)new_height:图像resize之后的height,默认为0,表示忽略
(3)new_width:图像resize之后的width,默认为0,表示忽略
(4)shuffle:是否随机打乱数据,默认为0,表示忽略
(5)rand_skip:同数据库层设置
四.图像来源于内存
可以很快的从内存中直接读取数据。
使用该方法来读入数据时,可以靠调用MemoryDataLayer::Reset
(from C++) orNet.set_input_arrays
(from Python)来指定一个具体的数据地址,如通常的存放所有输入数据的四维数组的首地址,这样就可以每次从改地址内读取batch_size大小的数据。
该方法也有可能会比较慢,如果使用之前先要将数据复制到内存中的话。
目前还不太清楚这种功能最适合在什么场合。。。
层参数设置实例:
batch_size,height,width,channels都是使用该层时所必须要设置的参数,这样才能正确的从内存中读入数据
五.数据来源于HDF5格式
不太适合图像,因为HDF5格式数据采用FP32格式的数据,而图像采用的是uint8,因此若将文件转为该格式则会很大。与其他层不同,该层没有transform_params属性。一般不要使用~~~
层设置实例:
hdf5_data_params必须设置的参数:
(1)batch_size
(2)source
可选设置
(1)shuffle:默认为0,表示忽略
六.数据来源于原始图片的窗口Windows
最适合目标检测任务,因为目标检测的训练样本都是标注好的窗口,而不是整张图像。这也是我目前最需要的~~~
训练时是针对每一个窗口进行训练,而不是一个图像。
层设置实例:
其中window_train.txt文件实例如下:
其中第一行是图片的index, 从0开始, 接下来三行依此是图片的channel, height, width, 接下来一行表示 bounding box 数量. 再接下来的每一行都是一个bounding box, 第一个数字表示label, 第二个数字表示与真实goundtruth 的overlap, 接下来的四个数字表示x1, y1, x2, y2。负样本的标签可以随意指定。
该层必须要设置的参数:
(1)source:包含原始图像,窗口位置大小,窗口类别的文本文件
(2)mean_file:整张图像的的mean_file
(3)batch_szie
可选参数:
(1)mirror
(2)crop_size:裁剪的窗口的大小
(3)crop_mode:裁剪方式,“warps”代表将窗口固定大小crop_size,“square”表示能够包围窗口的最小正方形;默认“warp”
(4)fg_threshold:foreground overlap threshold ,默认0.5,代表只有BoundingBox与GroundTruth的重合面积比大于0.5时才认为是正样本
(5)bg_threshold:background overlap threshold,默认0.5,代表只有BoundingBox与GroundTruth的重合比例小于0.5时才认为是负样本
(6)fg_fraction:默认0.25,一个batch里正样本窗口的比例
(7)context_pad:默认10个像素点,代表输入窗口数据的时候会自动在窗口周围数据补充10个像素点,像素值填充0.
如下图所示,最外围的一圈即为context填充,此时context_pad为1:
七.其他数据Layer
“Input”type:常用来测试网络的前向和后向传递时间
“DummyData”type:常用来debug,也可以用来测试网络传递时间
DummyData实例
在这个例子中,有两个数据层,一个blob一个层,data一个,label一个。在HDF5,Data数据库,ImageData,都是data和label放在一个层里。这样方便调试。
最后放一张前面的各种数据读入的类的继承关系~
- 薛开宇学习笔记二之总结笔记--caffe imagenet训练中train_val.prototxt中数据层及其参数设置
- 薛开宇学习笔记二之总结笔记--caffe 中solver.prototxt;train_val.prototxt的一些参数介绍
- caffe学习笔记9-train_val.prototxt学习
- 深度学习caffe平台--train_val.prototxt文件中数据层及参数详解
- 深度学习caffe平台--train_val.prototxt文件中视觉层(Vision Layers)层及参数详解
- caffe研究之Imagenet的train_val.prototxt解读
- caffe中train_val.prototxt和deploy.prototxt转换 ResNet_18_deploy.prototxt
- caffe中train_val.prototxt文件和deploy.prototxt文件区别和转换--caffe学习(14)
- 深度学习caffe平台--train_val.prototxt文件中激活层(Activiation Layers)及参数及参数详解
- caffe中train_val.prototxt和deploy.prototxt文件的区别
- caffe中train_val.prototxt与deploy.prototxt的区别
- caffe中train_val.prototxt和deploy.prototxt文件的区别
- Caffe各层的参数设置(在prototxt文件中设置)
- Caffe学习之数据层及参数设置
- 浅谈caffe中train_val.prototxt和deploy.prototxt文件的区别
- 浅谈caffe中train_val.prototxt和deploy.prototxt文件的区别
- caffe中关于train_val.prototxt和solver.prototxt设置的一些心得
- 浅谈caffe中train_val.prototxt和deploy.prototxt文件的区别
- getContextPath、getServletPath、getRequestURI、getRealPath、getRequestURL、的区别
- Stockbroker Grapevine
- could not get lock /var/lib/dpkg/lock -open
- C#中的抽象类的特征
- Atitit 拦截数据库异常的处理最佳实践
- 薛开宇学习笔记二之总结笔记--caffe imagenet训练中train_val.prototxt中数据层及其参数设置
- fragment中嵌套viewpager,vierpager中有多个fragment,不显示 ...
- java jquery ajax Servlet jsp页面异步请求验证用户名
- RxPermissions源码分析:使用RxJava处理Android 6.0运行时动态权限获取
- Map解析
- 选择排序相关问题
- matlab 的 legend 用法
- 《深入理解Nginx》阅读与实践(一):Nginx安装配置与HelloWorld
- JZOJ 4886 字符串 KMP+DP