溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何使用Python生成caffe所需的lmdb文件和txt列表清單文件

發(fā)布時間:2021-11-09 17:48:52 來源:億速云 閱讀:118 作者:柒染 欄目:大數(shù)據(jù)

如何使用Python生成caffe所需的lmdb文件和txt列表清單文件,針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。

對于自己手里的一些圖片數(shù)據(jù)集,如何轉換圖片格式、如何計算圖片數(shù)據(jù)的均值、如何編寫prototxt配置文件是接下來筆記的主要內容。這里主要記錄如何將圖片數(shù)據(jù)轉換成db文件。

一、Caffe訓練學習步驟回顧

    1.準備數(shù)據(jù)集(訓練集和測試集)

    2.圖片數(shù)據(jù)轉換成db(leveldb/lmdb)文件

    3.計算圖片數(shù)據(jù)的均值

    4.prototxt配置文件

    5.訓練模型

    注意:還有一種不需要db文件和計算圖片數(shù)據(jù)的均值的訓練方法,而是只需要一個txt列表清單,另一種訓練步驟在講完此種學習方法后進行講解。

二、圖片數(shù)據(jù)轉換成db(leveldb/lmdb)文件

1.概述

    在深度學習的實際應用中,我們經(jīng)常用到的原始數(shù)據(jù)是圖片文件,如jpg,jpeg,png,tif等格式的,而且有可能圖片的大小還不一致。而在caffe中經(jīng)常使用的數(shù)據(jù)類型是lmdb或leveldb,因此就產(chǎn)生了這樣的一個問題:如何從原始圖片文件轉換成caffe中能夠運行的db(leveldb/lmdb)文件?

    在caffe中,作者為我們提供了這樣一個文件:convert_imageset.cpp,存放在caffe根目錄下的tools目錄下。編譯好caffe之后,會生成對應的可執(zhí)行文件放在 build/tools/目錄下,這個可執(zhí)行文件convert_imageset的作用就是用于將圖片文件轉換成caffe框架中能直接使用的db文件。

    該文件的使用格式如下所示:

convert_imageset [FLAGS] ROOTFOLDER/ LISTFILE DB_NAME

    需要帶四個參數(shù): - FLAGS: 圖片參數(shù)組,后面詳細介紹 - ROOTFOLDER/: 圖片存放的絕對路徑,從linux系統(tǒng)根目錄開始 - LISTFILE: 圖片文件列表清單,一般為一個txt文件,一行一張圖片 - DB_NAME: 最終生成的db文件存放目錄     因此如果想使用convert_imageset這個工具生成我們需要的db文件,就需要先得到圖片文件列表清單txt文件。     在caffe根目錄的/examples/image目錄下,有兩張共我們測試的圖片,它們是cat.jpg和fish-bike.jpg。我們可以使用eog命令在終端查看這兩個圖片(遠程登錄ssh不行,vnc可以,當然不是遠程登錄是可以使用的),它們分別如下:

如何使用Python生成caffe所需的lmdb文件和txt列表清單文件   如何使用Python生成caffe所需的lmdb文件和txt列表清單文件

    我們可以使用這兩圖片學習如何制作圖片文件列表清單txt文件。這個圖片列表清單txt文件 格式如下:

圖片文件名 標簽

    以cat.jpg和fish-bike.jpg為例,那么這兩個圖片的列表清單txt文件即為:

cat.jpg 1
fish-bike.jpg 2

    依此類推,一行一張圖片標簽。我們定義1標簽是貓的標簽,2標簽是自行車的標簽。很顯然,如果就這么兩個圖片我們手寫一個圖片列表清單txt文件即可,但是如果是很多圖片,我們又該如何處理呢?

    顯然,我們可以使用腳本,有很多方法可供選擇shell腳本,python腳本等。而我采用的方式是使用python腳本處理這些文件,生成最終的圖片列表清單txt文件。

2.利用python腳本編寫圖片列表清單txt文件

(1)在caffe根目錄下創(chuàng)建一個我們的工程目錄my-caffe-project,使用如下指令:

cd /home/Jack-Cui/caffe-master && mkdir my-caffe-project

(2)創(chuàng)建并編輯create_db.py文件,使用如下指令:

vim create_db.py

文件編輯內容如下:

# -*- coding: UTF-8 -*-import osimport re"""
函數(shù)說明:生成圖片列表清單txt文件

Parameters:
    images_path - 圖片存放目錄
    txt_save_path - 圖片列表清單txt文件的保存目錄
Returns:
    無
Author:
    Jack Cui
Modify:
    2017-03-29
"""def createFileList(images_path, txt_save_path):#打開圖片列表清單txt文件fw = open(txt_save_path,"w")#查看圖片目錄下的文件,相當于shell指令lsimages_name = os.listdir(images_path)#遍歷所有文件名for eachname in images_name:#正則表達式這里可以根據(jù)情況進行更改#正則表達式規(guī)則:找以cat開頭,緊跟0到10個數(shù)字,并以jpg結尾的圖片文件pattern_cat = r'(^cat\d{0,10}.jpg$)'#正則表達式規(guī)則:找以fish-bike開頭,緊跟0到10個數(shù)字,以jpg結尾的圖片文件pattern_bike = r'(^fish-bike\d{0,10}.jpg$)'#正則表達式匹配cat_name = re.search(pattern_cat, eachname)
        bike_name = re.search(pattern_bike, eachname)#按照規(guī)則將內容寫入txt文件中if cat_name != None:
            fw.write(cat_name.group(0) + ' 1\n')if bike_name != None:
            fw.write(bike_name.group(0) + ' 2\n')#打印成功信息print "生成txt文件成功"#關閉fwfw.close()if __name__ == '__main__':#caffe_root目錄caffe_root = '/home/Jack-Cui/caffe-master/'#my-caffe-project目錄my_caffe_project = caffe_root + 'my-caffe-project/'#圖片存放目錄images_path = caffe_root + 'examples/images/'#生成的圖片列表清單txt文件名txt_name = 'filelist.txt'#生成的圖片列表清單txt文件的保存目錄txt_save_path = my_caffe_project + txt_name#生成txt文件createFileList(images_path, txt_save_path)

(3)運行create_db.py腳本文件,使用如下指令:

python create_db.py

(4)使用指令cat create_filelist.py,查看結果如下:

如何使用Python生成caffe所需的lmdb文件和txt列表清單文件!=

3.利用python腳本執(zhí)行convert_imageset文件生成db文件

    生成的這個filelist.txt文件,就可以作為第三個參數(shù),直接使用了。

    接下來,我們來了解一下FLAGS這個參數(shù)組,有些什么內容:

  • gray: 是否以灰度圖的方式打開圖片。程序調用opencv庫中的imread()函數(shù)來打開圖片,默認為false

  • backend:需要轉換成的db文件格式,可選為leveldb或lmdb,默認為lmdb

  • resize_width/resize_height: 改變圖片的大小。在運行中,要求所有圖片的尺寸一致,因此需要改變圖片大小。 程序調用opencv庫的resize()函數(shù)來對圖片放大縮小,默認為0,不改變

  • check_size: 檢查所有的數(shù)據(jù)是否有相同的尺寸。默認為false,不檢查

  • encoded: 是否將原圖片編碼放入最終的數(shù)據(jù)中,默認為false

  • encode_type: 與前一個參數(shù)對應,將圖片編碼為哪一個格式:‘png’,’jpg’……

    好了,知道這些參數(shù)后,我們就可以調用命令來生成最終的lmdb格式數(shù)據(jù)了。

(1)繼續(xù)編寫create_db.py文件,使用如下指令:

vim create_db.py

文件添加內容如下:

# -*- coding: UTF-8 -*-import commandsimport osimport re"""
函數(shù)說明:生成圖片列表清單txt文件

Parameters:
    images_path - 圖片存放目錄
    txt_save_path - 圖片列表清單txt文件的保存目錄
Returns:
    無
Author:
    Jack Cui
Modify:
    2017-03-29
"""def createFileList(images_path, txt_save_path):#打開圖片列表清單txt文件fw = open(txt_save_path,"w")#查看圖片目錄下的文件,相當于shell指令lsimages_name = os.listdir(images_path)#遍歷所有文件名for eachname in images_name:#正則表達式這里可以根據(jù)情況進行更改#正則表達式規(guī)則:找以cat開頭,緊跟0到10個數(shù)字,并以jpg結尾的圖片文件pattern_cat = r'(^cat\d{0,10}.jpg$)'#正則表達式規(guī)則:找以fish-bike開頭,緊跟0到10個數(shù)字,以jpg結尾的圖片文件pattern_bike = r'(^fish-bike\d{0,10}.jpg$)'#正則表達式匹配cat_name = re.search(pattern_cat, eachname)
        bike_name = re.search(pattern_bike, eachname)#按照規(guī)則將內容寫入txt文件中if cat_name != None:
            fw.write(cat_name.group(0) + ' 1\n')if bike_name != None:
            fw.write(bike_name.group(0) + ' 2\n')#打印成功信息print "生成txt文件成功"#關閉fwfw.close()"""
函數(shù)說明:生成lmdb文件

Parameters:
    caffe_root - caffe根目錄
    images_path - 圖片存放目錄
    txt_save_path - 圖片列表清單txt文件的保存目錄
Returns:
    無
Author:
    Jack Cui
Modify:
    2017-03-29
"""def create_db(caffe_root, images_path, txt_save_path):#lmdb文件名字lmdb_name = 'img_train.lmdb'#生成的db文件的保存目錄lmdb_save_path = caffe_root + 'my-caffe-project/' + lmdb_name#convert_imageset工具路徑convert_imageset_path = caffe_root + 'build/tools/convert_imageset'cmd = """%s --shuffle --resize_height=256 --resize_width=256 %s %s %s"""status, output = commands.getstatusoutput(cmd % (convert_imageset_path, images_path, 
        txt_save_path, lmdb_save_path))print outputif(status == 0):print "lmbd文件生成成功"if __name__ == '__main__':#caffe_root目錄caffe_root = '/home/Jack-Cui/caffe-master/'#my-caffe-project目錄my_caffe_project = caffe_root + 'my-caffe-project/'#圖片存放目錄images_path = caffe_root + 'examples/images/'#生成的圖片列表清單txt文件名txt_name = 'filelist.txt'#生成的圖片列表清單txt文件的保存目錄txt_save_path = my_caffe_project + txt_name#生成txt文件createFileList(images_path, txt_save_path)#生成lmdb文件create_db(caffe_root, images_path, txt_save_path)

    設置參數(shù)-shuffle,打亂圖片順序。設置參數(shù)-resize_height和-resize_width將所有圖片尺寸都變?yōu)?56*256。     ./home/xxx/caffe-master/examples/images/ 為圖片保存的絕對路徑,我的caffe放在了/home/Jack-Cui目錄下。     最終結果運行如下,大功告成!

如何使用Python生成caffe所需的lmdb文件和txt列表清單文件

關于如何使用Python生成caffe所需的lmdb文件和txt列表清單文件問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業(yè)資訊頻道了解更多相關知識。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內容。

AI