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层作为原始数据导入的应用的更多相关文章

  1. caffe添加python数据层

    caffe添加python数据层(ImageData) 在caffe中添加自定义层时,必须要实现这四个函数,在C++中是(LayerSetUp,Reshape,Forward_cpu,Backward ...

  2. 【转载】 【caffe转向pytorch】caffe的BN层+scale层=pytorch的BN层

    原文地址: https://blog.csdn.net/u011668104/article/details/81532592 ------------------------------------ ...

  3. AI:IPPR的数学表示-CNN基本结构分析( Conv层、Pooling层、FCN层/softmax层)

    类似于SVM,CNN为代表的DNN方法的边缘参数随着多类和高精度的要求必然增长.比如向量机方法,使用可以映射到无穷维的高斯核,即使进行两类分类,在大数据集上得到高精度,即保持准确率和高精度的双指标,支 ...

  4. [转]JAVA中Action层, Service层 ,modle层 和 Dao层的功能区分

    首先这是现在最基本的分层方式,结合了SSH架构.modle层就是对应的数据库表的实体类.Dao层是使用了Hibernate连接数据库.操作数据库(增删改查).Service层:引用对应的Dao数据库操 ...

  5. Android中的分层----service 层,domain层,dao 层,action层等设计

    service 层 服务层:直接为客户端提供的服务或功能.也是系统所能对外提供的功能. domain层 领域层:系统内的领域活动,存放实体. dao 层 持久层,DB操作都写在这里,数据访问对象,通过 ...

  6. linux环境下搭建osm_web服务器一(Postgresql配置及osm2pgsql原始数据导入):

    Postgresql配置及osm2pgsql原始数据导入 2012年,Ubuntu 12.04LTS发布,又一个长效支持版,我们又该更新OpenStreetMap服务器了,这次,将详细在博客中记录配置 ...

  7. 彩贝网app破解登入参数(涉及app脱壳,反编译java层,so层动态注册,反编译so层)

    一.涉及知识点 app脱壳 java层 so层动态注册 二.抓包信息 POST /user/login.html HTTP/1.1 x-app-session: 1603177116420 x-app ...

  8. caffe之(五)loss层

    在caffe中,网络的结构由prototxt文件中给出,由一些列的Layer(层)组成,常用的层如:数据加载层.卷积操作层.pooling层.非线性变换层.内积运算层.归一化层.损失计算层等:本篇主要 ...

  9. caffe之(二)pooling层

    在caffe中,网络的结构由prototxt文件中给出,由一些列的Layer(层)组成,常用的层如:数据加载层.卷积操作层.pooling层.非线性变换层.内积运算层.归一化层.损失计算层等:本篇主要 ...

随机推荐

  1. 揭开Java内存管理的面纱

    前言 相对于C.C++这些高性能语言,Java有着让此类程序员羡慕的功能:内存自动管理.似乎这样,Java程序员不用再关心内存,也不用去了解相关知识.但结果真的是这样吗?特别对于我们这种Android ...

  2. 刚买个炼狱蝰蛇1800dpi的下完驱动提示没有发现鼠标

    2017-02-19补充:可以下载下面的程序 ,也可以访问 http://cn.razerzone.com/synapse/  下载雷云 也可解决问题 ------------------------ ...

  3. Python CRM项目三

    1.分页: 分页使用Django内置的分页模块来实现 官方的分页案例 from django.core.paginator import Paginator, EmptyPage, PageNotAn ...

  4. JAVA 调用 R 语言

    1 简介 R是统计计算的强大工具,而JAVA是做应用系统的主流语言,两者天然具有整合的需要.关于整合,一方面,R中可以创建JAVA对象调用JAVA方法,另一方面,JAVA中可以转换R的数据类型调用R的 ...

  5. [置换群&Polya计数]【学习笔记】

    昨天看了一下午<组合数学>最后一章然后晚上去看别人的blog发现怎么都不一样,我一定是学了假的polya 其实是一样的,只不过<组合数学>没有太多的牵扯群论.于是又从群论角度学 ...

  6. 【转】JavaScript的三种消息框alert,confirm,prompt

    1. alert是弹出警告框,在文本里面加入\n就可以换行.2. confirm弹出确认框,会返回布尔值,通过这个值可以判断点击时确认还是取消.true表示点击了确认,false表示点击了取消.3. ...

  7. .net下使用socket.io随笔记录

    一.问题背景 目前公司在互联网产品上需要程序与前端部分要进行一个实时交互,在进行一定程度上的选型后,决定使用socket.io框架进行一个实践,算是公司的一个新的 尝试,也算是给自己增加增长见闻,由于 ...

  8. 让我们一起摇摆 Turnipbit体感遥控车

    相信大家对Microbit是非常熟悉的,而今天我们做的这个小玩具所用的核心板是Turnipbit,是基于 Microbit开发的一块适合儿童适用的板卡.基本使用原理是一样的,这里就不多介绍了,代码这方 ...

  9. 关于Apache配置虚拟主机后在局域网中让其他电脑访问

    #-----------adxssp------------# NameVirtualHost *:80 <VirtualHost *:80> ServerName www.b.com D ...

  10. 8、flask之flask-script组件

    Flask Script扩展提供向Flask插入外部脚本的功能,包括运行一个开发用的服务器,一个定制的Python shell,设置数据库的脚本,cronjobs,及其他运行在web应用之外的命令行任 ...