利用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

相关文章

Linux线程之线程的创建、属性、回收、退出、取消方式

《Linux线程之线程的创建、属性、回收、退出、取消方式》文章总结了线程管理核心知识:线程号唯一、创建方式、属性设置(如分离状态与栈大小)、回收机制(join/detach)、退出方法(返回/pthr... 目录1. 线程号2. 线程的创建3. 线程属性4. 线程的回收5. 线程的退出6. 线程的取消7.

创建Java keystore文件的完整指南及详细步骤

《创建Javakeystore文件的完整指南及详细步骤》本文详解Java中keystore的创建与配置,涵盖私钥管理、自签名与CA证书生成、SSL/TLS应用,强调安全存储及验证机制,确保通信加密和... 目录1. 秘密键(私钥)的理解与管理私钥的定义与重要性私钥的管理策略私钥的生成与存储2. 证书的创建与

SQL中如何添加数据(常见方法及示例)

《SQL中如何添加数据(常见方法及示例)》SQL全称为StructuredQueryLanguage,是一种用于管理关系数据库的标准编程语言,下面给大家介绍SQL中如何添加数据,感兴趣的朋友一起看看吧... 目录在mysql中,有多种方法可以添加数据。以下是一些常见的方法及其示例。1. 使用INSERT I

Python使用vllm处理多模态数据的预处理技巧

《Python使用vllm处理多模态数据的预处理技巧》本文深入探讨了在Python环境下使用vLLM处理多模态数据的预处理技巧,我们将从基础概念出发,详细讲解文本、图像、音频等多模态数据的预处理方法,... 目录1. 背景介绍1.1 目的和范围1.2 预期读者1.3 文档结构概述1.4 术语表1.4.1 核

MySQL 删除数据详解(最新整理)

《MySQL删除数据详解(最新整理)》:本文主要介绍MySQL删除数据的相关知识,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录一、前言二、mysql 中的三种删除方式1.DELETE语句✅ 基本语法: 示例:2.TRUNCATE语句✅ 基本语

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