如何使用GIST+LIBLINEAR分類器提取CIFAR-10 dataset數據集中圖像特徵,並用測試數據進行實驗



上學期開了多媒體的課程,把其中一個課程設計實現的過程與你們分享。windows

 



轉載請註明出處,謝謝。
數組





這個課程設計是爲了實現圖像分類的整個過程,經過完成整個的工做過程,更好的理解圖像分類這一律念,提升本身的理論與實踐結合的能力。整個項目分爲四大步:導入數據、特徵提取部分、分類器訓練部分、標籤預測部分。根據課程,咱們選擇的數據集爲CIFAR-10,特徵提取採用的是GIST特徵提取方法,分類方法咱們使用的是LIBLINEAR中自帶的TrainPredict程序。到最後得出結果,進行結果分析。函數

工具及設計方案詳細介紹

CIFAR-10 dataset

CIFAR-10數據集包括6000032x32彩色圖像,分佈在在10,每一個類有6000幅圖像。這60000幅圖片中分別包括50000幅訓練圖像和10000幅測試圖像。  工具

數據集被分紅了五個訓練文件和一個測試文件,每個文件都有10000張圖片。測試文件中隨機的包含了每一個類的1000幅圖片,可是每一個訓練批次中的圖像是隨機的,其中包含的圖像並非固定同樣的。因此一些培訓批次可能某一個類包含更多的圖像。而五個訓練文件,每一個類的總數爲5000個,這樣就保證了樣本的機率平衡。測試

還須要注意的是,從CIFAR-10中加載的內容中的data數據是整數,須要咱們轉換成圖片,在網站上面咱們能夠看到也給出了相應的解釋。每個文件中有一個10000x3072N數組。數組的每一行存儲一個32x32的彩色圖像。前1024項表明的紅色,中間1024個表明的是綠色,和最後1024表明的是藍色。圖像存儲是按行主序,使數組的前32項是圖像的第一排紅色通道值。網站

GIST特徵提取

根據項目提供的網站,咱們能夠大體知道,GIST特徵提取是提出一個識別現實世界的計算模型,這個模型繞過個別對象或區域的分割和處理。用一個五維的感知維度來表明一個場景的主要內容,包括天然性、開放性、粗糙度、擴張性和堅固性。這些維度可以可靠的估計使用的光譜和粗定位信息,雖有可用這些維度來表明一個場景圖片。spa

LIBLINEAR分類器

LIBLINEAR是一個用於大規模數據分類的線性分類器,支持邏輯迴歸和向量機。同時,LIBLINEAR還爲開發者提供了好用的命令行和庫接口。不論是開發者仍是深層次的使用者,LIBLINEAR都有對應的文檔供其查閱。實驗證實,LIBLINEAR對於大規模數據分析十分有效。命令行

從上面的數據集咱們能夠知道,數據的數量爲60000,而相應的類卻僅僅爲10,數據數量遠遠大於數據類別。因此咱們使用LIBLINEAR分類器,設計

具體設計方案

從相應網站下載相應軟件。這裏CIFAR-10咱們下載MATLAB版,解壓數據獲得訓練和測試數據,能夠在MATLAB中用LOAD加載,只是如今的數據是整數類型,咱們須要將其轉換成圖片,而後對轉換後的圖片進行特徵提取,將相應的結果保存下來,保存的格式很是重要,咱們能夠將從LIBLINEAR中下載的數據中的heart-scale打開,記住相應的格式爲:labelIDfeartures。重複將全部的圖片都作一遍,而後將全部的結果保存到一個特定的地方(Feartures.txt),就至關於特徵已經提取出來,接下來要作的只是運用LIBLINEAR分類器將所得的特徵進行分類(Train),而後用相應的數據進行測試而後進行標籤預測(Predict)。從而完成整個圖片分類過程。對象

實踐操做

導入數據

實踐部分咱們根據上面的具體設計來進行



圖一:下載的CIFAR-10數據集包

將下載的數據在MATLABload後以下圖所示:


圖二:MATLAB中加載數據集

從上圖咱們能夠看到,data中的數據是以二維數組的形式存儲的圖片信息,每一行有3072個數據,恰好包括了紅、綠、藍三色,每一色的大小爲102432*32大小,每一行則表明一幅圖片。

下面進行二維數組到圖片的轉換。

RGB圖片的每個色由32*32的矩陣表示

因此咱們能夠設置變量RedGreenBlue三個數組來用於讀取相應的顏色,而後將相應的顏色值存進Image裏面,這時Image就表示一幅圖片了

過程以下:


圖三:將data數據轉換成圖片


Imshow(Image)結果以下:


圖四:CIFAR-10第一幅圖片


對着一幅圖片進行特徵提取,利用從網站下載下來的LMgist文件,能夠獲得以下的結果:


圖五:GIST特徵提取效果圖


下面咱們要對整個的數據進行收集,有50000個圖片信息要進行處理。分別load加載,能夠獲得相應的數據咱們設爲data1data2data3data4data5,而後用一個新的data合併這五個數據data=[data1;data2;data3;data4;data5]。這樣咱們就獲得一個50000*3072大小的矩陣了,這樣整個的數據就都導出來了。方法以下:


圖六:導入全部訓練數據


這樣數組sumdata中的數據就包含因此訓練數據了,sumdata1中的數據就是每一幅圖片的label了,代表每幅圖片屬於哪一個類。


特徵提取

這裏咱們使用的是Gist特徵提取,下載的gistdescriptor包中已經有了一個Gist函數,咱們只要進行調用就能夠,以下:


[gist1,param] = LMgist(Image,'',param);


這裏的Image就是數據導入的Image圖片,直接放入LMgist當中,能夠返回一個gist1數組,

咱們每導入一幅圖片的內容就進行相應的特徵提取,用一個150000的循環,將每一幅圖片都提取特徵。

過程以下:


圖七:調用LMgist進行特徵提取


將提取的特徵保存到相應的文件當中:


fid= fopen('E:/Feartrues.txt','w');

fprintf(fid,'%d',sumdata1(t));

fprintf(fid,'%d:%g', ii, gist1(1, ii));

fprintf(fid,'\n');


上面代碼將會在EFeartures.txt文件中保存提取的特徵,格式是按照前面提到的heart_scale文件中的格式的,labelIDFeartures。其中Feartures用一個512的向量進行保存。


分類器訓練

在前面咱們介紹到,下載的數據包爲Liblinear-1.94,咱們找到其中一個文件heart_scale,已經介紹了,相應的數據格式,在第二步中已有詳細介紹。

將特徵提取的Feartures.txt文件做爲訓練數據的輸入,即Train Feartures.tx 咱們能夠獲得一個Feartures.model,這個model就是由訓練得出的分類器模型。其中在windows環境下,咱們能夠直接使用已經編譯鏈接好的可執行文件,該文件在解壓後windows目錄下。

Train的格式爲:

train[options] training_set_file [model_file];其中train_set_file爲咱們要測試的文件,就是上面的Feartures.txtmodel_file爲輸出文件。

Options的一些操做,如multiclassclassification

-stype :對於多分類,指定使用的分類器(默認是1):

0-- L2-regularized logistic regression(primal)

1-- L2-regularized L2-loss support vectorclassification (dual)

2-- L2-regularized L2-loss support vectorclassification (primal)

3-- L2-regularized L1-loss support vectorclassification (dual)

4-- support vector classification by Crammerand Singer

5-- L1-regularized L2-loss support vectorclassification

6-- L1-regularized logistic regression

7-- L2-regularized logistic regression (dual)

咱們能夠在訓練的時候使用multiclassclassification


標籤預測

我使用的是下載包中自帶的Predict程序,在下載包中windows目錄下面能夠找到。而後用上面生成的Feartures.txt.model文件做爲一個輸入,而後從CIFAR-10中提出test_batch.mat文件做爲測試數據,而後output.txt爲輸出文件。

Predict用法:

predict[options] test_file model_file output_file

options:

-bprobability_estimates:是否輸出機率估計。默認是0,不輸出。只對logistic迴歸有用

-q:安靜模式(無輸出信息)

須要注意的是-b只在預測階段用到。這個和LIBSVM不一樣

結果及其分析

實驗結果

特徵提取的結果:】


圖八:特徵提取結果

從上面能夠看出,總共50000幅圖片,特徵提取的時間爲55.808367分鐘,電腦CPUOCRE-i5,執行速度仍是相對較快的。特徵提取完以後,在E盤下面生成了一個Feartures.txt文件,打開要花點時間,有300MB


圖九:Feartures.txt內容

文件中的格式,跟咱們設計的是同樣的,總共50000行,每一行有512個特徵值,第一個數字爲label,符合項目要求。

按照前面訓練數據提取特徵的方法,將test_batch.mat測試文件中的數據也進行特徵提取,存進Test_data.txt中,而後就能夠看成Predict程序的一個輸入了。


圖十:提取測試數據

下表是Train的不一樣方法所用的時間和相應Predict的結果:

Train–S type Feartures.txt默認爲1

表一:訓練和預測結果表

-Stypemulticlass classification

Train

時間

Predict時間

Predict結果

Accuracy

-S0L2-regularizedlogistic regression(primal)

91s

4.6s


58.23%(5823/10000)


-S1L2-regularizedL2-loss support vectorclassification (dual)

48s

7.9s

58.23%(5823/10000)


-S2L2-regularizedL2-loss support vectorclassification (primal)

75s

3.8s

58.2%(5820/10000)


-S3L2-regularizedL1-loss support vectorclassification (dual)

39s

3.6s


56.08%(5608/10000)


-S4supportvector classification by Crammerand Singer

45s

3.9s


57.84%(5784/10000)


-S5L1-regularizedL2-loss support vectorclassification

591s

2.6s

58.2%(5820/10000)


-S6L1-regularizedlogistic regression

46s


3.9s


57.98%(5798/10000)


-S7L2-regularizedlogistic regression (dual)

28.2s

3.4s


58.23%(5823/10000)



結果分析

從表中能夠看出不一樣模式下面的Train時間和Predict時間有所差距,可是差距都不是特別大,其中和其餘有較大差距的-S5Train時間,是其餘的十倍左右。Predict時間集中模式都差很少,predict結果Accuracy都在60%如下,其中有幾項數據同樣,好比-S0-S1-S7都爲58.23%-S2-S5都是58.2%,其中-S7train時間和Predict時間和結果綜合起來是這8種模式中最好的。

相關文章
相關標籤/搜索