caffe︱ImageData层、DummyData层作为原始数据导入的应用
Part1:caffe的ImageData层
ImageData是一个图像输入层,该层的好处是,直接输入原始图像信息就可以导入分析。
在案例中利用ImageData层进行数据转化,得到了一批数据。
但是笔者现在还有几个问题,
- 这个ImageData只能显示一个batch的图像信息,不能在同一案例循环使用的是吧?
- L.ImageData之后的数据,可以直接用于框架的输入数据吗?(待尝试)
.
一、官方文档中的使用
在案例《Fine-tuning a Pretrained Network for Style Recognition》官方文档中,用来作为数据导入的方法:
transform_param = dict(mirror=train,crop_size=227,mean_file=caffe_root +'data/ilsvrc12/imagenet_mean.binaryproto')
L.ImageData(transform_param=transform_param, source=source,batch_size=50, new_height=256, new_width=256, ntop=2)
其中transform_param包含了一些参数:
- 1、mean_file,数据均值文件存放地
- 2、source,train_txt的txt文件,其中不论是训练集还是测试集最好有标签,没有标签可以随便标啊,有了这个是为了避免程序出错,每个文档的格式最好都如下(/caffe/data/flickr_style):
/caffe/data/flickr_style/images/8483553476_79bae22144.jpg 1
/caffe/data/flickr_style/images/11801337354_7bf2aa44b4.jpg 0
- 3、new_height、new_width(可有可无,但是有了之后就会对图片进行resize)如果new_height or
new_width 不等于0,则会resize图像,最好new_height、new_width、crop_size 三个都标同一数值。
同时crop_size,new_height,new_width 一定要和论文中给出的一致(经验来源于博客:Caffe C++API 提取任意一张图片的特征系列一—-ImageData) - 4、★crop_size
修剪上限,超过227的就会进行修剪,一般height和width与crop_size一致就对了,从原图随机crop的尺寸,crop就是截图,利用crop_size这种方式可以剪裁中心关注点和边角特征
其中crop_size 在训练集与验证集中也不尽相同,如果我们输入的图片尺寸大于crop_size,那么图片会被裁剪。当 phase模式为 TRAIN 时,裁剪是随机进行裁剪,而当为TEST 模式时,其裁剪方式则只是裁剪图像的中间区域。
caffe中提供了过采样的方法(oversample),详见/caffe/python/caffe/io.py,裁剪的是图片中央、4个角以及镜像共10张图片。(该部分见博客:caffe中使用crop_size剪裁训练图片) - 5、mirror:false,1表示开启镜像,0表示关闭,也可用ture和false来表示,是否要对输入图像采用随机水平镜像,mirror可以产生镜像,弥补小数据集的不足
- 6、batch_size,就是每一次载入的数量,多了就放不下了
- 7、shuffle(可有可无,最好打乱) 每一个 epoch是否打乱数据.
该层输入上述参数后,返回:图像修整、载入过的图像特征。
同时,另外一点:mirror+crop_size 代表着对 images 进行水平镜像处理或者随机裁剪处理,这两个操作都可以看做是简单的数据增强操作。(来源于:Caffe官方教程中译本_CaffeCN社区翻译(caffecn.cn))
.
.
二、用ImageData进行原始图像数据导入
对于ImageData使用方式,我总结的不知道对不对:
- 1、设置transform_param参数
其中包括:均值文件目录、是否修整mirror、crop_size修整上限
2、ImageData引擎
设置batch_size,height*width图像尺寸,按照框架要求,source代表数据集txt文件
3、扔入框架构建caffenet的框架文件
style_net(train=False, subset='train')
不知道这个步骤中,L.ImageData之后的数据,可以直接用于框架的输入数据吗?(待尝试)
- 4、构建预测引擎
caffe.Net(style_net(train=False, subset='train'),weights, caffe.TEST)
- 5、前馈
untrained_style_net.forward()
- 6、拿出图像
style_data_batch = untrained_style_net.blobs['data'].data.copy()
ImageData层源码解读博客:
caffe源码之ImageDataLayer解析
caffe层解读系列——Data以及ImageData层用法
.
.
Part2:caffe中DummyData层的使用
DummyData:虚拟数据,可以用这一层模拟预测过程.在官方案例中,借用DummyData层来较快完成预测任务。使用流程:
- 利用DummyData设置备选图框,给新来的图像留个坑
dummy_data=L.DummyData(shape=dict(dim=[1, 3, 227, 227]))
不同框架size不一致
- 构建框架文件deploy.prototxt,用caffenet
caffenet(data=dummy_data, train=False)
- 设置预测引擎
net=caffe.Net(imagenet_net_filename, weights, caffe.TEST)
其中需要加载框架权值
- 单张预测
disp_imagenet_preds(net, image)
其中image是图像的信息,可以是之前ImageData层,也可以是其他转化过的图像特征信息。
caffe︱ImageData层、DummyData层作为原始数据导入的应用的更多相关文章
- caffe添加python数据层
caffe添加python数据层(ImageData) 在caffe中添加自定义层时,必须要实现这四个函数,在C++中是(LayerSetUp,Reshape,Forward_cpu,Backward ...
- 【转载】 【caffe转向pytorch】caffe的BN层+scale层=pytorch的BN层
原文地址: https://blog.csdn.net/u011668104/article/details/81532592 ------------------------------------ ...
- AI:IPPR的数学表示-CNN基本结构分析( Conv层、Pooling层、FCN层/softmax层)
类似于SVM,CNN为代表的DNN方法的边缘参数随着多类和高精度的要求必然增长.比如向量机方法,使用可以映射到无穷维的高斯核,即使进行两类分类,在大数据集上得到高精度,即保持准确率和高精度的双指标,支 ...
- [转]JAVA中Action层, Service层 ,modle层 和 Dao层的功能区分
首先这是现在最基本的分层方式,结合了SSH架构.modle层就是对应的数据库表的实体类.Dao层是使用了Hibernate连接数据库.操作数据库(增删改查).Service层:引用对应的Dao数据库操 ...
- Android中的分层----service 层,domain层,dao 层,action层等设计
service 层 服务层:直接为客户端提供的服务或功能.也是系统所能对外提供的功能. domain层 领域层:系统内的领域活动,存放实体. dao 层 持久层,DB操作都写在这里,数据访问对象,通过 ...
- linux环境下搭建osm_web服务器一(Postgresql配置及osm2pgsql原始数据导入):
Postgresql配置及osm2pgsql原始数据导入 2012年,Ubuntu 12.04LTS发布,又一个长效支持版,我们又该更新OpenStreetMap服务器了,这次,将详细在博客中记录配置 ...
- 彩贝网app破解登入参数(涉及app脱壳,反编译java层,so层动态注册,反编译so层)
一.涉及知识点 app脱壳 java层 so层动态注册 二.抓包信息 POST /user/login.html HTTP/1.1 x-app-session: 1603177116420 x-app ...
- caffe之(五)loss层
在caffe中,网络的结构由prototxt文件中给出,由一些列的Layer(层)组成,常用的层如:数据加载层.卷积操作层.pooling层.非线性变换层.内积运算层.归一化层.损失计算层等:本篇主要 ...
- caffe之(二)pooling层
在caffe中,网络的结构由prototxt文件中给出,由一些列的Layer(层)组成,常用的层如:数据加载层.卷积操作层.pooling层.非线性变换层.内积运算层.归一化层.损失计算层等:本篇主要 ...
随机推荐
- Git多帐号配置,管理多个SSH
查看自己所有的SSH-Key $ cd ~/.ssh $ ls id_rsa id_rsa.pub known_hosts 如果你已经创建过git账号那你可能和我一样会看到只有一个SSH-Key, 这 ...
- ResultSet详细
1. ResultSet细节1功能:封锁结果集数据操作:如何获得(取出)结果 package com.sjx.a; import java.sql.Connection; import java.sq ...
- mongodb监控常用方法
列举mongodb监控的常用命令 1.监控统计 mongostat 可用于查看当前QPS/内存使用/连接数,以及多个shard的压力分布 命令参考 ./mongostat --port 27071 - ...
- 奇怪的问题0xc000007b
自己的程序运行debug版本正常,运行release版本main函数还未进入就弹出异常. 令我感觉很奇怪. 觉得应该就是动态库哪里有问题. 仔细检查,发现并没有缺什么动态库.也不存在版本问题. 最后我 ...
- 17_Python装饰器
一.什么是装饰器 目的:给func()方法,增加一个功能,在fun()执行期间,同时把fun()执行速率机算出来 import time def func(): print('嘻嘻哈哈') start ...
- js、jQuery实现2048小游戏
2048小游戏 一.游戏简介: 2048是一款休闲益智类的数字叠加小游戏 二. 游戏玩法: 在4*4的16宫格中,您可以选择上.下.左.右四个方向进行操作,数字会按方向移动,相邻的两个数字相同就会合 ...
- quartz的一些记录
定时任务总会遇到任务重叠执行的情况,比如一个任务1分钟执行一次,而任务的执行时间超过了1分钟,这样就会有两个相同任务并发执行了.有时候我们是允许这种情况的发生的,比如任务执行的代码是幂等的,而有时候我 ...
- C++/C高质量编程指南-笔记
复习: C/C++高质量编程指南: [规则1-2-1]为了防止头文件被重复引用,应当用ifndef/define/endif结构产生预处理块. [规则1-2-2]用 #include <file ...
- HDU 4825 Xor sum
trie树的异或和问题 本题是一道经典题,使用trie树维护所给出的集合,我们知道等比数列前n项的和比第n+1项小,所以本题可以使用贪心策略,对于每一个询问,我们从高位向低位匹配,寻找最大异或值,向下 ...
- 【算法】哈希表的诞生(Java)
参考资料 <算法(java)> — — Robert Sedgewick, Kevin Wayne <数据结构> ...