caffe 将数据(非图像和图像)转成lmdb格式的数据
使用Python API
两个参考地址:
Creating an LMDB database in Python
Training Multi-Layer Neural Network with Caffe
添加一个我自己使用过得程序,每一个样本是 75*75*3的数组数据,注意,不是图片数据!
def load_data_into_lmdb(lmdb_name, features, labels=None):env = lmdb.open(lmdb_name, map_size=features.nbytes*10)print np.shape(features)for i in range(features.shape[0]):datum = caffe.proto.caffe_pb2.Datum()datum.channels = features.shape[3]datum.height = features.shape[1]datum.width = features.shape[2]if features.dtype == np.int:datum.data = features[i].tostring()elif features.dtype == np.float64: datum.float_data.extend(features[i].flat)else:raise Exception("features.dtype unknown.")if labels is not None:datum.label = int(labels[i])str_id = '{:08}'.format(i)with env.begin(write=True) as txn:txn.put(str_id, datum.SerializeToString())def load_data(lmdb_name, X, labels = None):map_size = X.nbytes * 10env = lmdb.open(lmdb_name, map_size=map_size)print np.shape(X)with env.begin(write=True) as txn:# txn is a Transaction objectfor i in range(X.shape[0]):datum = caffe.proto.caffe_pb2.Datum()datum.channels = X.shape[3]datum.height = X.shape[1]datum.width = X.shape[2]datum.data = X[i].tobytes() # or .tostring() if numpy < 1.9if labels is not None:datum.label = int(labels[i])str_id = '{:08}'.format(i)# The encode is only essential in Python 3txn.put(str_id.encode('ascii'), datum.SerializeToString())
对图像数据使用caffe工具convert_imageset
此工具由convert_imageset.cpp编译而成的执行文件,此文件位于cafferoot/tools中,编译的工具位于(一般情况)caffe_root/tools中,编译的工具位于(一般情况)caffe_root/build/tools中。
源文件中带有使用的注释:
// This program converts a set of images to a lmdb/leveldb by storing them
// as Datum proto buffers.
// Usage:
// convert_imageset [FLAGS] ROOTFOLDER/ LISTFILE DB_NAME
//
// where ROOTFOLDER is the root folder that holds all the images, and LISTFILE
// should be a list of files as well as their labels, in the format as
// subfolder1/file1.JPEG 7
// ....
首先,最关键的三个参数:
- ROOTFOLDER:是包含所有要处理图片的文件夹,为绝对路径。
- LISTFILE:是图像名字和对应label的txt文件。非常要注意每一行的格式问题。
- ROOTFOLDER/LISTFILE即构成每一张图像的绝对路径!
- DB_NAME :生成的db文件存放的文件夹(程序自动生成)
FLAGS参数:
gray: 是否以灰度图的方式打开图片。程序调用opencv库中的imread()函数来打开图片,默认为falseshuffle: 是否随机打乱图片顺序。默认为false
backend:需要转换成的db文件格式,可选为leveldb或lmdb,默认为lmdb
resize_width/resize_height: 改变图片的大小。在运行中,要求所有图片的尺寸一致,因此需要改变图片大小。程序调用opencv库的resize()函数来对图片放大缩小,默认为0,不改变
check_size: 检查所有的数据是否有相同的尺寸。默认为false,不检查
encoded: 是否将原图片编码放入最终的数据中,默认为false
encode_type: 与前一个参数对应,将图片编码为哪一个格式:‘png’,’jpg’
首先生成图像文件的txt文件
# /usr/bin/env sh
#目录
DATA=examples/images
#训练集文件夹路径(每个文件夹下分正样本文件夹neg和负样本文件夹pos)
DATA_train=examples/images/train
rm -rf $DATA/train.txt
find $DATA_train/pos -name *.jpg | cut -d '/' -f3 | sed "s/$/ 1/">>$DATA/train.txt
find $DATA_trian/neg -name *bike.jpg | cut -d '/' -f3 | sed "s/$/ 2/">>$DATA/tmp1.txt
cat $DATA/tmp1.txt>>$DATA/train.txtrm -rf $DATA/tmp1.txt
echo "Done.."
现在就有了train.txt
利用工具进行转换
首先要将train下的neg文件夹和pos文件夹进行合并,可做好备份,假设合并的文件夹叫Train,同样放在images文件下。
创建create_image_lmdb.sh
#!/usr/bin/en sh
DATA=examples/images
rm -rf $DATA/img_train_lmdb
build/tools/convert_imageset --shuffle \
--resize_height=256 --resize_width=256 \
/home/xxx/caffe/examples/images/train $DATA/train.txt $DATA/img_train_lmdb
运行脚本:
sudo sh examples/images/create_image_lmdb.sh
参考博客网址:https://www.cnblogs.com/denny402/p/5082341.html
caffe 将数据(非图像和图像)转成lmdb格式的数据相关推荐
- Jquery 将后台返回的字符串转换成Json格式的数据
//code by:博客园-曹永思 第一步:将DataTable转换成 Json格式的数据 方法 一 View Code /// <summary>/// DataTable转成Json格 ...
- SLCP验厂辅导,SLCP数据收集和验证工具整合成在线格式的托管平台来完成
SLCP是独立于SAC的另外一个机构,但是SLCP和SAC之间又有密切的合作关系.SLCP本身只是一个行业标准,但是SLCP没有开发自己的IT平台,也没有自己的对验证机构的认可/授信团队,所以他们寻求 ...
- caffe学习之conver_imageset.bin的使用方法,caffe下图片转lmdb格式类型数据总结
第一步: 这一步是前提(务必做到这一步后,再操作后面的) 首先:对于像我这样的初学者,对Linux指令相当不熟悉,不过没关系,推荐一个Linux快速入门的学习网站 http://www.runoob. ...
- 如何使用微图将影像和矢量一起导出成CAD格式的数据
微图刚刚推出的时候由于其能够直接加载在线和离线地图到CAD内的功能受到了行业用户的好评和收获了广大的用户群体,到现在,已经有很多行业的用户在使用微图做项目和规划.之前版本的微图只能将在地图上画的图进行 ...
- 前端传JSON格式数据给后端,将数据封装成JSON格式(@RequestBody注解)
在前端开发过程中,碰到了后端要求前端提供JSON格式数据 如图所示,后端使用了@RequestBody注解. @RequestBody的作用其实是将json格式的数据转为java对象 因此需要我们前端 ...
- java接收xml数据_关于java后台如何接收xml格式的数据
业务场景:用户发送下单请求,格式为xml格式,服务器接收数据完成下单,并返回结果给客户. 请求格式: 这段请求报文是xml格式的,在后台我们可以使用 javax.xml.bind.annotation ...
- C语言——把结构体数据封装成TLV格式的数据
功能描述: typedef struct { unsigned char ucPort; pid_t stPid; }TEST_INFO_S; 结构体TETS_INFO_S内有两个变量 ...
- python代码html显示数据_通过AJAX success方法以html格式显示数据
我正在编写下面的代码,用json格式从数据库返回的html表中显示数据success : function(data){ alert("declaring variable"); ...
- 如何在EXCEL中的度分秒格式的经纬度转换成度格式的数据
以118°15′49″为例 经度:用公式 =MID(A1,1,3)+MID(A1,5,2)/60+MID(A1,8,2)/3600 数据放在A列里,这个公式放在B1里,向下填充即可批量转换! 度分秒在 ...
- 图像超分辨率增强ESRGAN运行教程,有数据
向AI转型的程序员都关注了这个号???????????? 人工智能大数据与深度学习 公众号:datayx ESRGAN是一个较新的的低分辨率转高分辨率的GAN模型,在SRGAN的基础上做了增强. 其 ...
最新文章
- [Ubuntu]更改所有子文件和子目录所有者权限
- 2020-11-28(全局变量和局部静态变量)
- 20155313 2016-2017-2 《Java程序设计》第三周学习总结
- 被迫学计算机,电脑强迫人学习
- [Postgres]Postgres复制表
- 莫名的证书错误...ERROR ITMS-90035:Invalid Signature.
- 敏捷研发项目,我们该如何度量?
- 3-26 C++ 学习
- 操作系统学习之GCC内联汇编
- iOS开发之获取手机本地语言
- LIO-SAM探秘第三章之代码解析(二) --- featureExtraction.cpp
- qqkey获取原理_QQ key盗号木马原理分析
- 判断单链表是否中心对称
- 用计算机怎么刷试听量,QQ音乐怎么刷播放次数,快速增加播放量
- 美术课上用计算机玩游戏,人教版一年级下册美术教案-07-乘上大船游世界
- 5、passcode
- 翻译GDC演讲:《Procedurally Crafting Manhattan for ‘Marvel‘s Spider-Man‘》(在‘漫威蜘蛛侠’中使用程序化的方式精心制作曼哈顿)
- CSS3中的伪元素选择器与scss
- 云服务器ECS选购集锦之九云服务器选购常见FAQ
- PHP面试高频算法面试题 -- 判断链表是否有环
热门文章
- 整合Settings.bundle显示版本信息
- helvetica字体未嵌入问题
- HTML Agility Pack 搭配 ScrapySharp,彻底解除Html解析的痛苦
- [Lintcode]118. Distinct Subsequences/[Leetcode]115. Distinct Subsequences
- 局域网从另一台电脑copy文件(Linux系统下)
- 服务器启动之后运行脚本在/etc/rc.d/rc.local中配置
- JavaEE笔记(十)
- CSDN 编辑器使用指南
- 【经验之谈】掌握这13个PyTorch Trick,让你做实验行云流水~
- 【CNN长文详解】大话卷积神经网络CNN(干货满满)