利用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.png
    Inputs:
    file_path: path of image file
    txtpath: '.txt' file used to save all images' names and labels
    Return: none
    """
    # remove the old list file
    if 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_label
            f.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 lmdb

DATA=/home/meringue/DataBase/cifar-10-batches-py
IMGDIRNAME=train_valid
IMGLIST=img_name_list/train_valid.txt
LMDBNAME=train_valid_lmdb

rm -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 獲取所有權限。否則有時候程序調用會出現類似沒有權限的錯誤。

發佈了56 篇原創文章 · 獲贊 214 · 訪問量 36萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章