利用Caffe创建自己的lmdb数据集

2023-12-25 14:18
文章标签 数据 创建 caffe lmdb

本文主要是介绍利用Caffe创建自己的lmdb数据集,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

用Caffe进行模型训练时,除了用现有的公开数据集(如MNIST, CIFAR等),有时候我们还需要创建自己的数据集进行训练。本篇博客讲的就是如何利用Caffe中的模块创建自己lmdb数据集。

数据集准备

我们需要自己准备好带类别标签的图片数据,并将数据统一命名,这里为了方便,我直接从CIFAR10训练集中拿出5000张图片用于制作验证集,图片为.png格式,并采用‘图片编号_类别标签.png’的命名方式(这个实现起来应该不难,这里就不赘述了),保存在一个文件夹下,部分例子如下:


train_valid

创建图片名列表清单

这里我们需要创建一个txt文本用来存放所有图片的信息,文本中每行存放一个样本,内容包括图片名和类别标签信息,中间用空格分开。这个实现方法很多,这里我给出一个用python实现的方法:

import os
def create_image_list(file_path,txtpath):"""Create a list of all images and save to a '.txt' file, each image is named as'num_label.png'. For example: 1001_2.pngInputs:file_path: path of image filetxtpath: '.txt' file used to save all images' names and labelsReturn: none"""# remove the old list fileif os.path.isfile(txtpath):os.remove(txtpath)# get the name list of all images image_name_list = os.listdir(file_path)# save the names and labels of all images to the '.txt' file named 'txtname'with open(txtpath,'a') as f:print 'saving to '+txtpath+'...'for image_name in image_name_list:image_label = image_name.split('_')[1].split('.')[0]image_data = image_name+' '+image_labelf.write(image_data+'\n')print 'done.'  

注意:代码中输入参数的路径都是绝对路径,当然如果感觉用绝对路径麻烦也该以稍微改动一下变成相对路径。
自己写代码调用上面这个函数,就可以生成下面的txt文本:


train_valid_txt

生成lmdb文件

这里我们用到的是Caffe下自带的convert_imageset可执行文件,如果你已经成功编译Caffe,这个文件应该在caffe-master/build/tools/下。要用这个可执行文件,我们需要提供三个路径,分别是原始图片数据存放路径、图片列表清单路径(就是之前生成的txt文本路径)和生成的lmdb文件存放路径,这里给出我之前转化数据集时用的脚本:

#!/bin/bash
# convert images to lmdbDATA=/home/meringue/DataBase/cifar-10-batches-py
IMGDIRNAME=train_valid
IMGLIST=img_name_list/train_valid.txt
LMDBNAME=train_valid_lmdbrm -rf $DATA/$LMDBNAME
echo 'converting images...'
/home/meringue/Softwares/caffe-master/build/tools/convert_imageset --shuffle=true \
$DATA/$IMGDIRNAME/ $DATA/$IMGLIST $DATA/$LMDBNAME

上面代码中的参数shuffle=true表示打乱数据,还有很多其他参数设置可以在caffe-master/tools/convert_imageset.cpp中查看。
转化速度很快,运行结束后,我们可以在程序中指定的lmdb路径下看到类似下面的文件:


train_train_valid_lmdb

为了保险起见,最好看一下data.mdb这个文件的大小,当你的数据比较大的时候,这个文件也因该很大。如果发现data.mdb很小,说明转化的时候出现了问题,回去检查一下。一般我们最后需要给lmdb数据添加可读权限,可以通过linux下sudo chmod 777 -R ./PATH 获取所有权限。否则有时候程序调用会出现类似没有权限的错误。

这篇关于利用Caffe创建自己的lmdb数据集的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/535811

相关文章

MyBatisPlus如何优化千万级数据的CRUD

《MyBatisPlus如何优化千万级数据的CRUD》最近负责的一个项目,数据库表量级破千万,每次执行CRUD都像走钢丝,稍有不慎就引起数据库报警,本文就结合这个项目的实战经验,聊聊MyBatisPl... 目录背景一、MyBATis Plus 简介二、千万级数据的挑战三、优化 CRUD 的关键策略1. 查

python实现对数据公钥加密与私钥解密

《python实现对数据公钥加密与私钥解密》这篇文章主要为大家详细介绍了如何使用python实现对数据公钥加密与私钥解密,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录公钥私钥的生成使用公钥加密使用私钥解密公钥私钥的生成这一部分,使用python生成公钥与私钥,然后保存在两个文

mysql中的数据目录用法及说明

《mysql中的数据目录用法及说明》:本文主要介绍mysql中的数据目录用法及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、背景2、版本3、数据目录4、总结1、背景安装mysql之后,在安装目录下会有一个data目录,我们创建的数据库、创建的表、插入的

Navicat数据表的数据添加,删除及使用sql完成数据的添加过程

《Navicat数据表的数据添加,删除及使用sql完成数据的添加过程》:本文主要介绍Navicat数据表的数据添加,删除及使用sql完成数据的添加过程,具有很好的参考价值,希望对大家有所帮助,如有... 目录Navicat数据表数据添加,删除及使用sql完成数据添加选中操作的表则出现如下界面,查看左下角从左

python如何创建等差数列

《python如何创建等差数列》:本文主要介绍python如何创建等差数列的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录python创建等差数列例题运行代码回车输出结果总结python创建等差数列import numpy as np x=int(in

SpringBoot中4种数据水平分片策略

《SpringBoot中4种数据水平分片策略》数据水平分片作为一种水平扩展策略,通过将数据分散到多个物理节点上,有效解决了存储容量和性能瓶颈问题,下面小编就来和大家分享4种数据分片策略吧... 目录一、前言二、哈希分片2.1 原理2.2 SpringBoot实现2.3 优缺点分析2.4 适用场景三、范围分片

怎么用idea创建一个SpringBoot项目

《怎么用idea创建一个SpringBoot项目》本文介绍了在IDEA中创建SpringBoot项目的步骤,包括环境准备(JDK1.8+、Maven3.2.5+)、使用SpringInitializr... 目录如何在idea中创建一个SpringBoot项目环境准备1.1打开IDEA,点击New新建一个项

如何使用Maven创建web目录结构

《如何使用Maven创建web目录结构》:本文主要介绍如何使用Maven创建web目录结构的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录创建web工程第一步第二步第三步第四步第五步第六步第七步总结创建web工程第一步js通过Maven骨架创pytho

Redis分片集群、数据读写规则问题小结

《Redis分片集群、数据读写规则问题小结》本文介绍了Redis分片集群的原理,通过数据分片和哈希槽机制解决单机内存限制与写瓶颈问题,实现分布式存储和高并发处理,但存在通信开销大、维护复杂及对事务支持... 目录一、分片集群解android决的问题二、分片集群图解 分片集群特征如何解决的上述问题?(与哨兵模

浅析如何保证MySQL与Redis数据一致性

《浅析如何保证MySQL与Redis数据一致性》在互联网应用中,MySQL作为持久化存储引擎,Redis作为高性能缓存层,两者的组合能有效提升系统性能,下面我们来看看如何保证两者的数据一致性吧... 目录一、数据不一致性的根源1.1 典型不一致场景1.2 关键矛盾点二、一致性保障策略2.1 基础策略:更新数