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层.非线性变换层.内积运算层.归一化层.损失计算层等:本篇主要 ...
随机推荐
- SQL查询系列1---
1.查询关系为夫妻,年龄相加大于60的信息 表1 信息表 info id 编号 sex 性别 0-女,1-男 age 年龄 表2 关系表 rel id1 编号1 外键 id2 编号2 外键 r ...
- JavaScript:事件对象Event和冒泡
本文最初发表于博客园,并在GitHub上持续更新前端的系列文章.欢迎在GitHub上关注我,一起入门和进阶前端. 以下是正文. 绑定事件的两种方式 我们在上一篇文章中已经讲过事件的概念.这里讲一下注册 ...
- mysql修改root用户密码
自我总结,欢迎拍砖! 目的:若root用户密码忘记,则需要重新设置root用户的密码. 步骤: 1.找到mysql安装目录下的 my.ini 文件,找到[mysqlId]一行,在下方添加语句:skip ...
- 14_Python字符串操作方法总结
字符串方法总结 #s = '**i love you\n\t' 测试s.strip()使用的字符串 s = 'i love you' #1.首字符大写,其余字符小写 print(s.capitaliz ...
- kali初探:root用户打开wireshark打开失败
启动wireshark后,报错: 该界面提示在init.lua文件中使用dofile函数禁用了使用超级用户运行wireshark.这是因为wireshark工具是使用Lua语言编写的,并且在kali ...
- python小白之路
阅读目录: 第一章:计算机基础 计算机硬件.操作系统.网络协议 第二章:python基础 初识python.常量变量.输入输出运算符.条件与循环语句.数字与字符串.列表与字典.元组与集合.阶段小测.字 ...
- .Neter玩转Linux系列之四:Linux下shell介绍以及TCP、IP基础
基础篇 .Neter玩转Linux系列之一:初识Linux .Neter玩转Linux系列之二:Linux下的文件目录及文件目录的权限 .Neter玩转Linux系列之三:Linux下的分区讲解 .N ...
- 洛谷 [P2763]试题库问题
非常舒适的最大流 非常显然的建图方法,然而因为数组开小卡了很长时间 #include <iostream> #include <cstdio> #include <alg ...
- 数组的复制及ES6数组的扩展
一.数组的复制 // alert([1,2,3]==[1,2,3]); let cc = [0,1,2]; let dd = cc; alert(dd==cc);//此时改变dd会影响cc ES5 只 ...
- 如何使用JS实现banner图滚动
通过JS实现banner图的滚动主要是定时器的应用 先新建好banner图的几张图片,最后一张与第一张用同一个,保证滚动的不间断 改好样式,需注意所有图片要在同行显示,否则不能向左滚动 声明一个函数, ...