Lmdb生成的过程简述

  • 1、整理并约束尺寸,文件夹。图片放在不同的文件夹之下,注意图片的size需要规约到统一的格式,不然计算均值文件的时候会报错。

  • 2、将内容生成列表放入txt文件中。两个txt文件,train训练文件、val测试文件。 Train里面就是你的分类了。

  • 3、形成LMDB数据集。
  • 4、形成训练集的均值文件。

整理并规约。一般情况下整理用数据增强的功能,一般用opencv,这块笔者还没有探究,所以先不说。


一、图片列表生成

图片内容变成列表。这个办法很多,很多软件都可以用,python、R、linux系统也可以。

其中如果出现,根据图片中的名字进行定位重命名的话,可以看一下博客:Caffe学习系列(11):图像数据转换成db(leveldb/lmdb)文件

该博客中教你用linux的命令通过抓取一些关键词,来生成列表。

生成列表的时候有这么几个问题?

  • 1、txt列表时如何设置路径名?

列表生成的时候,前面要加的路径名该怎么写?网上关于生成列表的时候,前缀都是五花八门的,譬如有:



啥都不加的(参考:http://www.mamicode.com/info-detail-1338521.html)



前面加了一堆乱七八糟的(参考:http://www.voidcn.com/blog/garfielder007/article/p-5005545.html)

笔者作为一枚小白,瞬间蒙圈了…经过自己实践之后发现,路径名尽量少写,因为在后面编辑create_imagenet.sh文件的时候,可以设置。

所以一般情况下,比较方便的办法是:

如果是训练集需要多加一个分类路径;验证集就直接写图片名称即可。

譬如训练集为0/1两分类,则路径名称:

训练集:

0/pic1.jpg 0
1/pic2.jpg 1
...

测试集:

Pic3:jpg 0
Pic4.jpg 1

这样简单方便,即可达到效果。之后可以看编辑create_imagenet.sh时候,会跟这边有关联关系。

注意:Train.txt文件最好是以标签0的图片开始,作为第一张这样会比较好。

  • 2、图片名称需要规范成统一的格式吗?

    图片名称倒是没有严格规定,但是呢,有规定方便你日后查找。

二、利用create_imagenet.sh生成LMDB文件

Caffe中需要固定的格式,所以需要利用create_imagenet.sh生成LMDB文件。

create_imagenet.sh文件一般在/caffe/examples/imagenet之中,其中为一个imagenet案例,也可以借鉴看出里面如何修改。

1、文件修改

打开之后要修改地方有三块,说起来这些内容的修改,本来应该简单的吧…一看网上就傻眼了…各种版本,尼玛,又让我一顿蒙逼…



文件场景:譬如我现在在caffe/examples/lmdb_test/train文件夹下,放入了train图片训练文件夹(0/1分类)、val图片验证文件夹。然后把create_imagenet.sh复制到这个文件夹来。

这里有一个“难点”:我在train文件夹下放入train图片文件夹

  • 修改部分一:数据、工具存放路径
EXAMPLE=/caffe/examples/lmdb_test/train # example是下面第三步、第四步要用的,注意~

DATA=/caffe/examples/lmdb_test/train
#数据存在哪?图片集合所在路径train

TOOLS=/caffe/build/tools
#工具在哪?一般都在这个目录下,照抄就行

——数据路径存放位置,注意不是那么细致,跟第三部分生成LMDB文件对应起来,注意看!

  • 修改部分二:训练、验证数据集存放路径

    (跟“一、图片列表生成”有关)
TRAIN_DATA_ROOT=/caffe/examples/lmdb_test/train/train/(训练集路径)
VAL_DATA_ROOT=/caffe/examples/lmdb_test/train/val/(验证集路径)

——训练、验证集数据存放路径,而且每个路径下的val/后面的”/”一定要加上。

这一部分跟图片生成列表对应的,譬如我的train数据集:

/caffe/examples/lmdb_test/train/train/0/pic1.jpg 0
/caffe/examples/lmdb_test/train/train/1/pic2.jpg 1

验证集:

/caffe/examples/lmdb_test/train/val/Pic3:jpg 0
/caffe/examples/lmdb_test/train/val/Pic4.jpg 1

看到没,这一个部分跟文本列表是完美契合的!所以,前面在设置文本列表的txt时候,保持简洁即可。网上那么多版本又没有说明白的都尼玛坑人呀!!

  • 修改部分三:LMDB文件生成路径
GLOG_logtostderr=1 $TOOLS/convert_imageset \
    --resize_height=$RESIZE_HEIGHT \
    --resize_width=$RESIZE_WIDTH \
    --shuffle \
    $TRAIN_DATA_ROOT \
    $DATA/train.txt \
    $EXAMPLE/train_lmdb

echo "Creating val lmdb..."

GLOG_logtostderr=1 $TOOLS/convert_imageset \
    --resize_height=$RESIZE_HEIGHT \
    --resize_width=$RESIZE_WIDTH \
    --shuffle \
    $VAL_DATA_ROOT \
    $DATA/val.txt \
    $EXAMPLE/val_lmdb

值得注意的就是$$EXAMPLE,$DATA部分,这里路径跟“修改部分一”对应。


$DATA/train.txt == /caffe/examples/lmdb_test/train/train.txt 

一般默认,只要$DATA设置对了就没问题了,当然train.txt的文件名改动过了,就得仔细看看了呢

$EXAMPLE/train_lmdb == /caffe/examples/lmdb_test/train/train_lmdb

这里呢,主要就是生成LMDB文件夹,所以名字可以任意修改,前面$DATA部分,可不行!

  • 额外需要修改部分四:
RESIZE=false
if $RESIZE; then
  RESIZE_HEIGHT=256
  RESIZE_WIDTH=256
else
  RESIZE_HEIGHT=0
  RESIZE_WIDTH=0

注意:这里RESIZE一般都是false关闭,就是不进行图片尺寸修改,这边如果需要进行图片修正需要打开。

这里一般都是需要统一成一样的size会比较好。

提问——RESIZE=TRUE时候,是否需要安装opencv?

答:不用,不是一个模块

2、文件运行并检查

Sh 或者来到文件夹直接./create_imagenet.sh即可。

如果这个数据包好了我们所有的训练图片数据,查一下这个文件的大小是否符合预期大小,如果文件的大小才几k而已,那么就代表你没有打包成功,估计是因为路径设置错误。

路径错误是主要错误,如果确定不是路径错误要排查数据,可能需要打开看看:可以参考博客:深度学习(十三)caffe之训练数据格式(http://www.voidcn.com/blog/garfielder007/article/p-5005545.html)

最终图,会出现Done:

3、报错

    -
报错一:
E0102 06:07:33.180974  3151 io.cpp:80] Could not open or find file /caffe/examples/lmdb_test/train/train/0/1376_faceimage49773.jpg

图片列表生成的时候,出错了,一些图片都没有匹配上…但是不影响整体的运行。

    -
报错二:
(2)Check failed: mkdir(source.c_str(), 0744) == 0 (-1 vs. 0) mkdir /caffe/examples/train/train_lmdb failed

参数写错了,回去再看看

-

报错三:
Mkdir(source.c_str(),0744)== 0(-1 vs. 0) mkdir examples/.../train_lmdb failed

因为自己的文件夹里面包含了这个名字的文件夹,生成不出来了。

参考博客:(原)caffe中通过图像生成lmdb格式的数据


4、h5py格式数据

Lmdb是一张图片一个标签,但是如果是人脸识别这样的,一张图片要输入4个,那么则需要使用h5py格式数据。

caffe使用h5py数据格式的话,需要自己在外部,进行数据扩充,数据归一化等相关的数据预处理操作,caffe比较麻烦。

暂不做深究,可参考博客:深度学习(十三)caffe之训练数据格式(http://www.voidcn.com/blog/garfielder007/article/p-5005545.html)


三、利用make_imagenet_mean.sh生成图片均值

为什么需要让图片减去均值呢?

  • 概括来看:图像的稳定性(降低波动性),可以提高分类精度
  • 而且减去均值一般会让亮度下降,但是亮度其实对图像分类来说,不那么重要。
  • 另外一般会选择对数据进行标准化处理,但是计算图像方差是么有意义的,所以何不选择更加简单的均值规整的办法。

观点参考博客:深度学习—–数据预处理(http://blog.csdn.net/dcxhun3/article/details/47999281)

  • **注意一:**make_imagenet_mean.sh设置跟之前的create_imagenet.sh原理一样,但是有一点要了解,均值文件只是针对训练集的,不针对验证集!
  • **注意二:**create_imagenet.sh是在LMDB文件之上计算均值的,并不是在原始图像上。

1、make_imagenet_mean.sh文件修改

EXAMPLE=/caffe/examples/lmdb_test/train
DATA=/caffe/examples/lmdb_test/train
TOOLS=/caffe/build/tools

–以上三个,中间的DATA尤其注意,这个文件里面的DATA是存放均值文件的路径,所以可以稍微随意一些

$TOOLS/compute_image_mean $EXAMPLE/train_lmdb \
  $DATA/imagenet_mean.binaryproto

–这里要小心,

$EXAMPLE/train_lmdb == /caffe/examples/lmdb_test/train/train_lmdb 

这里的EXAMPLE是需要你的训练集LMDB路径

$DATA代表的是生成均值文件的目录,而且文件名字你可以随便修改,存放路径可以随意一些。

之后跟之前一样运行即可。

2、mean.binaryproto转mean.npy

 使用Caffe的C++接口进行操作时,需要的图像均值文件是pb格式,例如常见的均值文件名为mean.binaryproto;但在使用Python接口进行操作时,需要的图像均值文件是numpy格式,例如mean.npy。所以在跨语言进行操作时,需要将mean.binaryproto转换成mean.npy

(参考博客:Caffe学习系列——工具篇:计算数据集的图像均值)

3、报错

报错一:
Check failed: size_in_datum == data_size (332667 vs. 17787) Incorrect data field size 332667

均值文件尺寸出现不匹配,说明你的图片尺寸没有统一,没有统一的话就会出现这样的报错。

详情可见博客: caffe实际运行中遇到的问题(持续更新

解决办法:生成LMDB的阶段resize=TRUE,笔者亲测,可用!!

参考博文:

1、CAFFE学习笔记(四)将自己的jpg数据转成lmdb格式(http://lib.csdn.net/article/deeplearning/55138)

2、(原)caffe中通过图像生成lmdb格式的数据(http://www.cnblogs.com/darkknightzh/p/5909121.html)

Caffe︱构建lmdb数据集、binaryproto均值文件及各类难辨的文件路径名设置细解的更多相关文章

  1. 利用caffe生成 lmdb 格式的文件,并对网络进行FineTuning

    利用caffe生成 lmdb 格式的文件,并对网络进行FineTuning 数据的组织格式为: 首先,所需要的脚本指令路径为: /home/wangxiao/Downloads/caffe-maste ...

  2. Caffe系列4——基于Caffe的MNIST数据集训练与测试(手把手教你使用Lenet识别手写字体)

    基于Caffe的MNIST数据集训练与测试 原创:转载请注明https://www.cnblogs.com/xiaoboge/p/10688926.html  摘要 在前面的博文中,我详细介绍了Caf ...

  3. 实践详细篇-Windows下使用VS2015编译的Caffe训练mnist数据集

    上一篇记录的是学习caffe前的环境准备以及如何创建好自己需要的caffe版本.这一篇记录的是如何使用编译好的caffe做训练mnist数据集,步骤编号延用上一篇 <实践详细篇-Windows下 ...

  4. windows下使用caffe测试mnist数据集

    在win10机子上装了caffe,感谢大神们的帖子,要入坑caffe-windows的朋友们看这里,还有这里,安装下来基本没什么问题. 好了,本博文写一下使用caffe测试mnist数据集的步骤. 1 ...

  5. pytorch 计算图像数据集的均值和标准差

    在使用 torchvision.transforms进行数据处理时我们经常进行的操作是: transforms.Normalize((0.485,0.456,0.406), (0.229,0.224, ...

  6. caffe的python接口学习(5):生成deploy文件

    如果要把训练好的模型拿来测试新的图片,那必须得要一个deploy.prototxt文件,这个文件实际上和test.prototxt文件差不多,只是头尾不相同而也.deploy文件没有第一层数据输入层, ...

  7. caffe的python接口学习(2):生成solver文件

    caffe在训练的时候,需要一些参数设置,我们一般将这些参数设置在一个叫solver.prototxt的文件里面,如下: base_lr: 0.001 display: 782 gamma: 0.1 ...

  8. 配置caffe过程中,生成解决方案出错。无法打开包括文件: “gpu/mxGPUArray.h”

    ------ 已启动生成: 项目: matcaffe, 配置: Release x64 ------12> MatlabPreBuild.cmd : Create output director ...

  9. caffe python lmdb读写

    caffe中可以采取lmdb健值数据库的方式向网络中输入数据. 所以操作lmdb就围绕"键-值"的方式访问数据库就好了. Write 我们可以采用cv2来读入自己的图像数据,采用d ...

随机推荐

  1. JavaSE基础篇—MySQL三大范式—数据库设计规范

    1.概   念     范式是一种符合设计要求的总结,要想设计一个结构合理的关系型数据库,必须满足一定的范式.各个范式是以此嵌套包含的,范式越高,设计等级越高,在现实设计中也越难实现,一般数据库只要打 ...

  2. OpenStack云平台网络模式及其工作机制

    转自:http://openstack.csdn.net/content.html?arcid=2808381 OpenStack云平台网络模式及其工作机制 网络,是OpenStack的部署中最容易出 ...

  3. 文字滚动效果,jquery和marquee标签

    链接:https://pan.baidu.com/s/1pMwHYH1 密码:r9ys marquee标签是微软创建的,后来大部分浏览器都适用后,微软在IE8把这个标签去掉了.为符合W3C规范,还是使 ...

  4. javascipt中的DOM对象

    1.HTML中DOM对象的概念 HTML Document Object Model(文档对象模型) HTML DOM定义了访问和操作HTML文档的标准方法 HTML DOM把HTML文档呈现为带有元 ...

  5. python中的进程池

    1.进程池的概念 python中,进程池内部会维护一个进程序列.当需要时,程序会去进程池中获取一个进程. 如果进程池序列中没有可供使用的进程,那么程序就会等待,直到进程池中有可用进程为止. 2.进程池 ...

  6. ABP官方文档翻译 3.8 数据过滤器

    数据过滤器 介绍 预定义过滤器 ISoftDelete 何时使用? IMustHaveTenant 何时使用? IMayHaveTenant 何时使用 禁用过滤器 关于using语句 关于多租户 全局 ...

  7. netstream播放rtmp直播流卡顿

    标准的flash播放器ActionScript3语句,播放flash publish的rtmp流,NetConnection--->NetStream--->play--->atta ...

  8. Facebook发布React 16 专利条款改为MIT开源协议

    9 月 26 日,用于构建 UI 的 JavaScript 库 React 16 的最新版本上线. Facebook 最终在现有的两种 React 版本中选择了出现 bug 概率最少的一款.这次版本更 ...

  9. 洛谷 [P3384] 树链剖分 模版

    支持各种数据结构上树,注意取膜. #include <iostream> #include <cstring> #include <algorithm> #incl ...

  10. POJ 2185 Milking Grid [KMP]

    Milking Grid Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 8226   Accepted: 3549 Desc ...