1. 程式人生 > >深度學習caffe平臺--製作自己.lmdb格式資料集及分類標籤檔案

深度學習caffe平臺--製作自己.lmdb格式資料集及分類標籤檔案

caffe對於訓練資料格式,支援:lmdb、h5py……,其中lmdb資料格式常用於單標籤資料,像分類等,經常使用lmdb的資料格式。對於迴歸等問題,或者多標籤資料,一般使用h5py資料的格式。當然好像還有其它格式的資料可用,本文就主要針對lmdb資料格式的製作方法,進行簡單講解。 以一個簡單的例子來介紹一下如何生成自己的影象集。主要分為兩步: (1)生成標籤檔案列表,即生成 .txt 檔案 (2)將 txt 檔案列表中的影象與train影象庫、val影象庫的影象相連線,生成lmdb格式檔案 lmdb資料

lmdb用於單標籤資料。為了簡單起見,我後面通過一個性別分類作為例子,進行相關資料製作講解。

1、資料準備

首先我們要準備好訓練資料,然後新建一個名為train的資料夾和一個val的檔案夾:

train檔案存放訓練資料,val檔案存放驗證資料。然後我們在train檔案下面,把訓練資料貓、狗圖片各放在一個資料夾下面:


同樣的我們在val檔案下面也建立資料夾:


兩個檔案也是分別存我們用於驗證的圖片資料貓與狗影象檔案。我們在test_cat下面存放了都是貓的圖片,然後在test_dog下面存放的都是驗證資料的狗圖片。

將train 與 val 資料夾放到一個資料夾內,本文中放到了Data_Test資料夾內。

2、標籤檔案.txt檔案製作.

接著我們需要製作一個train.txt、val.txt檔案,這兩個檔案分別包含了我們上面的訓練資料的圖片路徑,以及其對應的標籤,如下所示。

我們把貓圖片標號為1,狗圖片標記為0。標籤資料檔案txt的生成可以通過如下程式碼,通過掃描路徑貓、狗下面的圖片,得到標籤檔案train.txt和val.txt:

需要注意的是路徑與標籤之間是一個空格標籤最好從0開始。

  1. <pre class="python" name="code">#coding:utf-8
  2. ''''' 
  3. Created on Jul 29, 2016 
  4. @author: sgg 
  5. '''
  6. "<span style=""font-family:Arial;font-size:18px;"">"
  7. "<span style="
    "font-size:18px;"">"
  8. "<span style=""font-size:18px;"">"
  9. import os  
  10. def IsSubString(SubStrList,Str):  
  11.     flag=True
  12.     for substr in SubStrList:  
  13.         ifnot(substr in Str):  
  14.             flag=False
  15.     return flag  
  16. #掃面檔案
  17. def GetFileList(FindPath,FlagStr=[]):  
  18.     FileList=[]  
  19.     FileNames=os.listdir(FindPath)  
  20.     if len(FileNames)>0:  
  21.         for fn in FileNames:  
  22.             if len(FlagStr)>0:  
  23.                 if IsSubString(FlagStr,fn):  
  24.                     fullfilename=os.path.join(FindPath,fn)  
  25.                     FileList.append(fullfilename)  
  26.             else:  
  27.                 fullfilename=os.path.join(FindPath,fn)  
  28.                 FileList.append(fullfilename)  
  29.     if len(FileList)>0:  
  30.         FileList.sort()  
  31.     return FileList  
  32. train_txt=open('train.txt','w')  
  33. #製作標籤資料,如果是狗的,標籤設定為0,如果是貓的標籤為1
  34. imgfile=GetFileList('train/train_cat')#將資料集放在與.py檔案相同目錄下
  35. for img in imgfile:  
  36.     str1=img+' '+'1'+'\n'#用空格代替轉義字元 \t 
  37.     train_txt.writelines(str1)  
  38. imgfile=GetFileList('train/train_dog')  
  39. for img in imgfile:  
  40.     str2=img+' '+'0'+'\n'
  41.     train_txt.writelines(str2)  
  42. train_txt.close()  
  43. #測試集檔案列表
  44. test_txt=open('val.txt','w')  
  45. #製作標籤資料,如果是男的,標籤設定為0,如果是女的標籤為1
  46. imgfile=GetFileList('val/test_cat')#將資料集放在與.py檔案相同目錄下
  47. for img in imgfile:  
  48.     str3=img+' '+'1'+'\n'
  49.     test_txt.writelines(str3)  
  50. imgfile=GetFileList('val/test_dog')  
  51. for img in imgfile:  
  52.     str4=img+' '+'0'+'\n'
  53.     test_txt.writelines(str4)  
  54. test_txt.close()  
  55. print("成功生成檔案列表")  

將上述程式碼儲存為.py的Python檔案,執行該Python程式碼生成 txt 檔案。

:本文中生成txt檔案時,Data_Test資料夾與生成檔案列表的程式碼.py檔案位於同一個目錄下。

3、生成lmdb資料

接著我們的目的就是要通過上面的四個檔案(兩個txt檔案列表、train與val兩個相簿),把圖片的資料和其對應的標籤打包起來,打包成lmdb資料格式:

在caffe-master建立My_Files資料夾,然後將caffe-master下的imagenet資料夾的create_imagenet.sh複製到該資料夾下進行修改,進行訓練和測試路徑的設定,執行該sh.

注意:這裡是對.sh檔案進行修改,在終端開啟該檔案後進行修改並儲存。這裡為了排版所以程式碼型別選擇了Python程式碼型別。

  1. <pre class="python" name="code">#!/usr/bin/env sh
  2. # Create the imagenet lmdb inputs
  3. # N.B. set the path to the imagenet train + val data dirs
  4. set -e  
  5. EXAMPLE=My_Files/Build_lmdb      #生成模型訓練資料資料夾,即create_imagenet.sh所在資料夾
  6. DATA=My_Files/Data_Test             #python指令碼處理資料路徑,即生成的檔案列表.txt檔案所在資料夾
  7. TOOLS=build/tools              #caffe的工具庫,不用更改
  8. TRAIN_DATA_ROOT=<span style="font-size:14px;">/home/sgg/workspace/caffe_learn/scr/Data_Test/</span>     #待處理的訓練資料
  9. VAL_DATA_ROOT=<span style="font-size:14px;">/home/sgg/workspace/caffe_learn/scr/Data_Test/</span>      #待處理的驗證資料
  10. # Set RESIZE=true to resize the images to 256x256. Leave as false if images have
  11. # already been resized using another tool.
  12. RESIZE=true  #是否需要對圖片進行resize
  13. if $RESIZE; then  
  14.   RESIZE_HEIGHT=256
  15.   RESIZE_WIDTH=256
  16. else
  17.   RESIZE_HEIGHT=0
  18.   RESIZE_WIDTH=0
  19. fi  
  20. if [ ! -d "$TRAIN_DATA_ROOT" ]; then  
  21.   echo "Error: TRAIN_DATA_ROOT is not a path to a directory: $TRAIN_DATA_ROOT"
  22.   echo "Set the TRAIN_DATA_ROOT variable in create_imagenet.sh to the path" \  
  23.        "where the ImageNet training data is stored."
  24.   exit 1
  25. fi  
  26. if [ ! -d "$VAL_DATA_ROOT" ]; then  
  27.   echo "Error: VAL_DATA_ROOT is not a path to a directory: $VAL_DATA_ROOT"
  28.   echo "Set the VAL_DATA_ROOT variable in create_imagenet.sh to the path" \  
  29.        "where the ImageNet validation data is stored."
  30.   exit 1
  31. fi  
  32. echo "Creating train lmdb..."
  33. rm -rf $EXAMPLE/train_lmdb  
  34. rm -rf $EXAMPLE/val_lmdb    #刪除已存在的lmdb格式檔案,若在已存在lmdb格式的資料夾下再新增lmdb檔案,會出現錯誤
  35. GLOG_logtostderr=1 $TOOLS/convert_imageset \  
  36.     --resize_height=$RESIZE_HEIGHT \  
  37.     --resize_width=$RESIZE_WIDTH \  
  38.     --shuffle \  
  39.     $TRAIN_DATA_ROOT \  
  40.     $DATA/train.txt \  
  41.     $EXAMPLE/train_lmdb  
  42. echo "Creating val lmdb..."
  43. GLOG_logtostderr=1 $TOOLS/convert_imageset \  
  44.     --resize_height=$RESIZE_HEIGHT \  
  45.     --resize_width=$RESIZE_WIDTH \  
  46.     --shuffle \  
  47.     $VAL_DATA_ROOT \  
  48.     $DATA/val.txt \  
  49.     $EXAMPLE/val_lmdb  
  50. echo "Done."

這裡對程式中所涉及的幾個路徑做簡單說明:

先通過幾張圖瞭解一下每個資料夾所包含的內容與位置:

1、訓練與測試影象庫,即 train 與 val 資料夾所在位置,可以通過檢視屬性來確定其位置,本文中其位置是位於/home/sgg/workspace/caffe_learn/scr/Data_Test

   

2、生成的txt檔案,即 train.txt 與 test.txt 檔案所在位置,可以通過檢視屬性來確定其位置,本文中其位置是位於/home/sgg/Downloads/caffe-master/My_Files/Data_Test

3、生成lmdb的.sh檔案,即 進行修改後的create_imagenet.sh檔案所在位置,可以通過檢視屬性來確定其位置,本文中其位置是位於/home/sgg/Downloads/caffe-master/My_Files/Build_lmdb

4、生成後的lmdb格式檔案,即 生成的train_lmdb與val_lmdb資料夾所在位置,其位置與生成檔案create_imagenet.sh位於同一目錄下,本文中其位置是位於/home/sgg/Downloads/caffe-master/My_Files/Build_lmdb

正式介紹檔案中的幾個路徑值

1、EXAMPLE

EXAMPLE 表示生成模型訓練資料資料夾,即create_imagenet.sh所在資料夾

本文設為EXAMPLE=My_Files/Build_lmdb     ,其中My_Files資料夾位於caffe-master資料夾下

2、DATA

DATA 表示python指令碼處理資料路徑,即生成的檔案列表.txt檔案所在資料夾

本文設為 DATA=My_Files/Data_Test            

注:1)本文開始為了測試DATA 值的設定,在該目錄下直接拷貝了eclipse工作空間下的Data_Test檔案,所以這裡要注意這裡是含有Data_Test資料夾的。

(2)該DATA路徑直接寫為 My_Files/Data_Test   ,不用將其變為 /home/sgg/Downloads/caffe-master/My_Files/Data_Test ,寫成這樣是錯誤的。具體原因尚不明確。

3、TOOLS

TOOLS  表示caffe的工具庫,為  TOOLS=build/tools   不用更改

4、TRAIN_DATA_ROOT

TRAIN_DATA_ROOT 表示待處理的訓練資料,即 train 訓練影象庫所在位置。

注:

(1)這裡需要寫具體地址,這就是為什麼看地址時需要通過檔案的屬性進行檢視具體地址,寫的地址為屬性中所顯示的地址。

像本文train 訓練影象庫所在位置為  /home/sgg/workspace/caffe_learn/scr/Data_Test/train/   ,我們經常在終端定位時寫的比較簡單,在終端定位時的地址為: /workspace/caffe_learn/scr/Data_Test/train/   ,會直接省略 /home/sgg ,但如果在程式中省略的話是出錯誤的,所以這裡的地址要是完整地址。

(2)由於我們在生成txt 檔案時路徑中包含了 “train” 與" val ",所以在 .sh 檔案中寫路徑時去掉了train,將其路徑定義為 /home/sgg/workspace/caffe_learn/scr/Data_Test/  ,TRAIN_DATA_ROOT所設定的值與 txt 檔案中路徑兩者合起來是影象的整體路徑。

5、VAL_DATA_ROOT

VAL_DATA_ROOT 表示待處理的驗證資料,即 val 訓練影象庫所在位置,其要求與TRAIN_DATA_ROOT 相同。

4、驗證生成的lmdb資料

通過執行上面的指令碼,我們將得到資料夾train_lmdb\val_lmdb:

我們開啟train_lmdb資料夾

並檢視一下檔案data.mdb資料的大小,如果這個資料包好了我們所有的訓練圖片資料,查一下這個檔案的大小是否符合預期大小,如果檔案的大小才幾k而已,那麼就代表你沒有打包成功,估計是因為路徑設定錯誤。

在生成過程中遇到了如下問題:

1、如果資料夾下含有lmdb格式的檔案,那麼生成時會出現錯誤,所以在生成之前需要對create_imagenet.sh 所在資料夾進行檢查,刪除之前的 lmdb 檔案。程式碼中添加了程式碼,來輔助完成此檢查:

  1. rm -rf $EXAMPLE/train_lmdb  
  2. rm -rf $EXAMPLE/val_lmdb    #刪除已存在的lmdb格式檔案,若在已存在lmdb格式的資料夾下再新增lmdb檔案,會出現錯誤
2、在生成lmdb過程中,出現can not find or open  …//////.......jpg 這個錯誤時這個錯誤中會給出相應的影象路徑:

首先,檢視路徑是否正確,若路徑不正確,則需要更改相應的影象路徑。再執行,看問題是否解決。

若問題還沒有解決,則檢查train.txt中,路徑和標籤之間是否只有一個空格!

在一些程式中,在對影象加標籤時,標籤與路徑之間的空格使用轉義字元 “  \t  ”來生成,可是在生成txt中,路徑與標籤之間的距離往往多於一個空格,所以在生成標籤文件時,程式中用空格代替轉義字元 \t  。如下方程式所示:

相關推薦

深度學習caffe平臺--製作自己.lmdb格式資料分類標籤檔案

caffe對於訓練資料格式,支援:lmdb、h5py……,其中lmdb資料格式常用於單標籤資料,像分類等,經常使用lmdb的資料格式。對於迴歸等問題,或者多標籤資料,一般使用h5py資料的格式。當然好像還有其它格式的資料可用,本文就主要針對lmdb資料格式的製作方法,進行簡

深度學習caffe平臺-----裁剪層(Crop Layer)引數引數詳解

       在Fully Convolutional Networks(FCN)中,會用到Crop 層,他的主要作用是進行裁切。下面我們舉一個例子來說明如何使用Crop 層。   Caffe中的資料是以 blobs形式存在的,blob是四維資料,即 (Batch s

深度學習caffe平臺-----啟用層(Activiation Layers)引數引數詳解

 在啟用層中,對輸入資料進行啟用操作(實際上就是一種函式變換),是逐元素進行運算的。從bottom得到一個blob資料輸入,運算後,從top輸入一個blob資料。在運算過程中,沒有改變資料的大小,即輸入和輸出的資料大小是相等的。 輸入:n*c*h*w 輸出:n*c*

caffe-ssd 訓練自己的VOC資料(一):轉換VOC xml資料lmdb格式

假設你已經做好了VOC資料標籤,也就是xml檔案,並且已經配置好了caffe-ssd的環境 第一步,在caffe-ssd/data目錄下本身自帶有如下資料夾: 然後在caffe-ssd/data目錄下新建一個資料夾命名為VOCdevkit: 然後data目錄下有:

深度學習Caffe平臺安裝——Ubuntu安裝CPU模式的caffe

先將Makefile.config檔案中OPENCV_VERSION :=3 註釋掉,只修改USE_OPENCV := 1修改後的結果:USE_OPENCV := 1#OPENCV_VERSION := 3在caffe根目錄下,找到Makefile檔案,開啟檔案查詢“Derive include and li

【目標檢測實戰】目標檢測實戰之一--手把手教你LMDB格式資料製作

文章目錄 1 目標檢測簡介 2 lmdb資料製作 2.1 VOC資料製作 2.2 lmdb檔案生成 lmdb格式的資料是在使用caffe進行目標檢測或分類時,使用的一種資料格式。這裡我主要以目標檢測為例講解lmdb格式資料的製作。 1 目標檢測簡介 【1】目標檢測主要有兩個任務: 判斷影

TensorFlow 製作自己的TFRecord資料 讀取、顯示程式碼詳解

準備圖片資料 筆者找了2類狗的圖片, 哈士奇和吉娃娃, 全部 resize成128 * 128大小 如下圖, 儲存地址為D:\Python\data\dog 每類中有10張圖片   現在利用這2 類 20張圖片製作TFRecord檔案 製作TFRECO

深度學習(六)——自動生成圖片資料

    最近做了一個漢字驗證碼識別的專案,該專案最大的難點就是資料集的準備。在自己沒有資料集的情況下選擇了自動生成,不過自己生成的資料集訓練出來的模型,只在用自己方法生成的資料上表現比較好,但是在真實資料集上表現比較差,也算是自己為自己踩了一格坑。不過自己生成資料集的經歷,還

吳恩達深度學習筆記(28)-網路訓練驗證測試資料的組成介紹

從今天開始我們進入新的一個大方向了,改善深層神經網路:超引數除錯、正則化以及優化,首先進入深度學習的一個新層面,先認識下在深度學習中的資料集的分類。 之前可能大家已經瞭解了神經網路的組成的幾個部分,那麼我們將繼續學習如何有效運作神經網路,內容涉及超引數調優,如何構建資料,以及如何確保優化

製作自己的yolo2資料進行訓練

說明 本文承接上一篇修改yolo2相關配置的部落格,用來說明如何製作自己的訓練資料,。主要流程就是手動標註目標資訊了,當然,圖片首先要自己準備好。 注意:本文的識別型別只有1類 工具 - 畫框程式 https://github.com/puzzledqs/BBox-Lab

人工智慧深度學習TensorFlow通過感知器實現鳶尾花資料分類

一.iris資料集簡介 iris資料集的中文名是安德森鳶尾花卉資料集,英文全稱是Anderson’s Iris data set。iris包含150個樣本,對應資料集的每行資料。每行資料包含每個樣本的四個特徵和樣本的類別資訊,所以iris資料集是一個150行5列的二維表。 通俗地說,iris

用Tensorflow處理自己資料製作自己的TFRecords資料

前言    最近一直在研究深度學習,主要是針對卷積神經網路(CNN),接觸過的資料集也有了幾個,最經典的就是MNIST, CIFAR10/100, NOTMNIST, CATS_VS_DOGS 這幾種,由於這幾種是在深度學習入門中最被廣泛應用的,所以很多深

深度學習caffe製作lmdb資料來源

前提:ubuntu系統,安裝了caffe,python。 Caffe深度學習訓練網路模型需要的資料的格式分三種,資料直接來源於圖片,使用lmdb資料來源,使用hdf5資料來源。 本文件把圖片製作成lmdb資料來源 首先任何位置新建資料夾:比如我新建了xytest

深度學習Caffe實戰筆記(20)Windows平臺 Faster-RCNN 訓練自己資料

1、把自己的資料集放到Faster-master中 我覺得這個過程是最重要的一個過程吧,博主在這裡跳了很多的坑,最後找到了一個非常簡單高效的方法。不用修改任何檔案,就可以輕鬆實現載入自己的資料集。 在faster_rcnn-master資料夾下,有一個d

深度學習Caffe實戰(9)Windows 平臺caffe用MATLAB介面實現訓練網路和測試

上一篇介紹了網路協議中各個引數的作用,知道了各個引數的作用,想必應該可以嘗試修改網路結構了。前幾篇部落格介紹的都是用命令列訓練和測試網路,這篇部落格介紹如何用MATLAB介面實現訓練和測試網路,window平臺下caffe使用者本來就少,這方面的資料更少了,下一

深度學習Caffe實戰筆記(21)Windows平臺 Faster-RCNN 訓練好的模型測試資料

前一篇部落格介紹瞭如何利用Faster-RCNN訓練自己的資料集,訓練好會得到一個模型,這篇部落格介紹如何利用訓練好的模型進行測試資料。 1、訓練好的模型存放位置 訓練好的模型存放在faster_rcnn-master\output\faster_rcnn_

深度學習Caffe實戰筆記(3)用AlexNet跑自己資料

上一篇部落格介紹瞭如何在caffe框架平臺下,用LeNet網路訓練車牌識別資料,今天介紹用AlexNet跑自己的資料,同樣基於windows平臺下,會比基於Ubuntu平臺下麻煩一些,特別是後面的Siamese網路,說起Siamese網路真是一把辛酸一把淚啊,先

深度學習Caffe實戰筆記(5)Windows caffe平臺跑Siamese mnist資料

前幾篇部落格介紹了環境搭建,caffe跑lenet,alexnet,cifar10,基礎的一些操作都介紹的很詳細了。這篇部落格介紹如何使用Siamese網路跑mnist資料集,下一篇介紹如何用Siamese網路跑自己的資料集。說到Siamese網路,這次不哭了,

深度學習Caffe實戰筆記(18)Windows平臺 Faster-RCNN 環境配置

好久不寫部落格了,因為前一段時間博主身體抱恙,感觸頗多。。。。。。都說windows平臺做caffe和tensorflow坑多,博主沒有太多優點,唯獨的一個優點就是不服輸,Windows平臺雖然坑多,但是填坑也是蠻有意思的一件事情。另外,在Siamese網路訓練

openSUSE 多個GPU設置 深度學習 Caffe PyTorch 等

div 深度學習 學習 正常 gpo 原來 caf 顯示 nvi 原來只有一張卡Titian x,最近又添加一個1080TI,插好以後 nvidia-smi 顯示只有一張卡。 看了下\dev 下nvidia1普通用戶沒有權限,切換到root下正常。但是在root下還是不太好