深度學習caffe平臺--製作自己.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開始。
- <pre class="python" name="code">#coding:utf-8
- '''''
- Created on Jul 29, 2016
- @author: sgg
- '''
- "<span style=""font-family:Arial;font-size:18px;"">"
-
"<span style="
- "<span style=""font-size:18px;"">"
- import os
- def IsSubString(SubStrList,Str):
- flag=True
- for substr in SubStrList:
- ifnot(substr in Str):
- flag=False
- return flag
- #掃面檔案
- def GetFileList(FindPath,FlagStr=[]):
- FileList=[]
- FileNames=os.listdir(FindPath)
- if len(FileNames)>0:
- for fn in FileNames:
- if len(FlagStr)>0:
- if IsSubString(FlagStr,fn):
- fullfilename=os.path.join(FindPath,fn)
- FileList.append(fullfilename)
- else:
- fullfilename=os.path.join(FindPath,fn)
- FileList.append(fullfilename)
- if len(FileList)>0:
- FileList.sort()
- return FileList
- train_txt=open('train.txt','w')
- #製作標籤資料,如果是狗的,標籤設定為0,如果是貓的標籤為1
- imgfile=GetFileList('train/train_cat')#將資料集放在與.py檔案相同目錄下
- for img in imgfile:
- str1=img+' '+'1'+'\n'#用空格代替轉義字元 \t
- train_txt.writelines(str1)
- imgfile=GetFileList('train/train_dog')
- for img in imgfile:
- str2=img+' '+'0'+'\n'
- train_txt.writelines(str2)
- train_txt.close()
- #測試集檔案列表
- test_txt=open('val.txt','w')
- #製作標籤資料,如果是男的,標籤設定為0,如果是女的標籤為1
- imgfile=GetFileList('val/test_cat')#將資料集放在與.py檔案相同目錄下
- for img in imgfile:
- str3=img+' '+'1'+'\n'
- test_txt.writelines(str3)
- imgfile=GetFileList('val/test_dog')
- for img in imgfile:
- str4=img+' '+'0'+'\n'
- test_txt.writelines(str4)
- test_txt.close()
- 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程式碼型別。
- <pre class="python" name="code">#!/usr/bin/env sh
- # Create the imagenet lmdb inputs
- # N.B. set the path to the imagenet train + val data dirs
- set -e
- EXAMPLE=My_Files/Build_lmdb #生成模型訓練資料資料夾,即create_imagenet.sh所在資料夾
- DATA=My_Files/Data_Test #python指令碼處理資料路徑,即生成的檔案列表.txt檔案所在資料夾
- TOOLS=build/tools #caffe的工具庫,不用更改
- TRAIN_DATA_ROOT=<span style="font-size:14px;">/home/sgg/workspace/caffe_learn/scr/Data_Test/</span> #待處理的訓練資料
- VAL_DATA_ROOT=<span style="font-size:14px;">/home/sgg/workspace/caffe_learn/scr/Data_Test/</span> #待處理的驗證資料
- # Set RESIZE=true to resize the images to 256x256. Leave as false if images have
- # already been resized using another tool.
- RESIZE=true #是否需要對圖片進行resize
- if $RESIZE; then
- RESIZE_HEIGHT=256
- RESIZE_WIDTH=256
- else
- RESIZE_HEIGHT=0
- RESIZE_WIDTH=0
- fi
- if [ ! -d "$TRAIN_DATA_ROOT" ]; then
- echo "Error: TRAIN_DATA_ROOT is not a path to a directory: $TRAIN_DATA_ROOT"
- echo "Set the TRAIN_DATA_ROOT variable in create_imagenet.sh to the path" \
- "where the ImageNet training data is stored."
- exit 1
- fi
- if [ ! -d "$VAL_DATA_ROOT" ]; then
- echo "Error: VAL_DATA_ROOT is not a path to a directory: $VAL_DATA_ROOT"
- echo "Set the VAL_DATA_ROOT variable in create_imagenet.sh to the path" \
- "where the ImageNet validation data is stored."
- exit 1
- fi
- echo "Creating train lmdb..."
- rm -rf $EXAMPLE/train_lmdb
- rm -rf $EXAMPLE/val_lmdb #刪除已存在的lmdb格式檔案,若在已存在lmdb格式的資料夾下再新增lmdb檔案,會出現錯誤
- GLOG_logtostderr=1 $TOOLS/convert_imageset \
- --resize_height=$RESIZE_HEIGHT \
- --resize_width=$RESIZE_WIDTH \
- --shuffle \
- $TRAIN_DATA_ROOT \
- $DATA/train.txt \
- $EXAMPLE/train_lmdb
- echo "Creating val lmdb..."
- GLOG_logtostderr=1 $TOOLS/convert_imageset \
- --resize_height=$RESIZE_HEIGHT \
- --resize_width=$RESIZE_WIDTH \
- --shuffle \
- $VAL_DATA_ROOT \
- $DATA/val.txt \
- $EXAMPLE/val_lmdb
- 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 檔案。程式碼中添加了程式碼,來輔助完成此檢查:
- rm -rf $EXAMPLE/train_lmdb
- rm -rf $EXAMPLE/val_lmdb #刪除已存在的lmdb格式檔案,若在已存在lmdb格式的資料夾下再新增lmdb檔案,會出現錯誤
首先,檢視路徑是否正確,若路徑不正確,則需要更改相應的影象路徑。再執行,看問題是否解決。
若問題還沒有解決,則檢查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下還是不太好