如何使用GIST+LIBLINEAR分类器提取CIFAR-10 dataset数据集中图像特征,并用测试数据进行实验
上學期開了多媒體的課程,把其中一個課程設計實現的過程與大家分享。
?
轉載請注明出處,謝謝。
最近整理文件的時候,發現了我以前寫的文檔和源碼,附上github的下載地址
https://github.com/bigfishman/Gist-LIBLINEAR-CIFAR-10 ??
喜歡的朋友可以fork
這個課程設計是為了實現圖像分類的整個過程,通過完成整個的工作過程,更好的理解圖像分類這一概念,提高自己的理論與實踐結合的能力。整個項目分為四大步:導入數據、特征提取部分、分類器訓練部分、標簽預測部分。根據課程,我們選擇的數據集為CIFAR-10,特征提取采用的是GIST特征提取方法,分類方法我們使用的是LIBLINEAR中自帶的Train和Predict程序。到最后得出結果,進行結果分析。
工具及設計方案詳細介紹
CIFAR-10 dataset
CIFAR-10數據集包括60000個32x32彩色圖像,分布在在10類,每個類有6000幅圖像。這60000幅圖片中分別包括50000幅訓練圖像和10000幅測試圖像。
數據集被分成了五個訓練文件和一個測試文件,每一個文件都有10000張圖片。測試文件中隨機的包含了每個類的1000幅圖片,但是每個訓練批次中的圖像是隨機的,其中包含的圖像并不是固定一樣的。所以一些培訓批次可能某一個類包含更多的圖像。而五個訓練文件,每個類的總數為5000個,這樣就保證了樣本的概率平衡。
還需要注意的是,從CIFAR-10中加載的內容中的data數據是整數,需要我們轉換成圖片,在網站上面我們可以看到也給出了相應的解釋。每一個文件中有一個10000x3072N數組。數組的每一行存儲一個32x32的彩色圖像。前1024項代表的紅色,中間1024個代表的是綠色,和最后1024代表的是藍色。圖像存儲是按行主序,使數組的前32項是圖像的第一排紅色通道值。
GIST特征提取
根據項目提供的網站,我們可以大致知道,GIST特征提取是提出一個識別現實世界的計算模型,這個模型繞過個別對象或區域的分割和處理。用一個五維的感知維度來代表一個場景的主要內容,包括自然性、開放性、粗糙度、擴張性和堅固性。這些維度能夠可靠的估計使用的光譜和粗定位信息,雖有可用這些維度來代表一個場景圖片。
LIBLINEAR分類器
LIBLINEAR是一個用于大規模數據分類的線性分類器,支持邏輯回歸和向量機。同時,LIBLINEAR還為開發者提供了好用的命令行和庫接口。不管是開發者還是深層次的使用者,LIBLINEAR都有對應的文檔供其查閱。實驗證明,LIBLINEAR對于大規模數據分析十分有效。
從上面的數據集我們可以知道,數據的數量為60000,而相應的類卻僅僅為10,數據數量遠遠大于數據類別。所以我們使用LIBLINEAR分類器,
具體設計方案
從相應網站下載相應軟件。這里CIFAR-10我們下載MATLAB版,解壓數據得到訓練和測試數據,可以在MATLAB中用LOAD加載,只是現在的數據是整數類型,我們需要將其轉換成圖片,然后對轉換后的圖片進行特征提取,將相應的結果保存下來,保存的格式非常重要,我們可以將從LIBLINEAR中下載的數據中的heart-scale打開,記住相應的格式為:labelID:feartures。重復將所有的圖片都做一遍,然后將所有的結果保存到一個特定的地方(Feartures.txt),就相當于特征已經提取出來,接下來要做的只是運用LIBLINEAR分類器將所得的特征進行分類(Train),然后用相應的數據進行測試然后進行標簽預測(Predict)。從而完成整個圖片分類過程。
實踐操作
導入數據
實踐部分我們根據上面的具體設計來進行
圖一:下載的CIFAR-10數據集包
將下載的數據在MATLAB中load后如下圖所示:
圖二:MATLAB中加載數據集
從上圖我們可以看到,data中的數據是以二維數組的形式存儲的圖片信息,每一行有3072個數據,剛好包括了紅、綠、藍三色,每一色的大小為1024即32*32大小,每一行則代表一幅圖片。
下面進行二維數組到圖片的轉換。
RGB圖片的每一個色由32*32的矩陣表示
所以我們可以設置變量Red,Green,Blue三個數組來用于讀取相應的顏色,然后將相應的顏色值存進Image里面,這時Image就表示一幅圖片了
過程如下:
圖三:將data數據轉換成圖片
用Imshow(Image)結果如下:
圖四:CIFAR-10第一幅圖片
對著一幅圖片進行特征提取,利用從網站下載下來的LMgist文件,可以得到如下的結果:
圖五:GIST特征提取效果圖
下面我們要對整個的數據進行收集,有50000個圖片信息要進行處理。分別load加載,可以得到相應的數據我們設為data1、data2、data3、data4、data5,然后用一個新的data合并這五個數據data=[data1;data2;data3;data4;data5]。這樣我們就得到一個50000*3072大小的矩陣了,這樣整個的數據就都導出來了。方法如下:
圖六:導入所有訓練數據
這樣數組sumdata中的數據就包含所以訓練數據了,sumdata1中的數據就是每一幅圖片的label了,表明每幅圖片屬于哪個類。
特征提取
這里我們使用的是Gist特征提取,下載的gistdescriptor包中已經有了一個Gist函數,我們只要進行調用就可以,如下:
[gist1,param] = LMgist(Image,'',param);
這里的Image就是數據導入的Image圖片,直接放入LMgist當中,可以返回一個gist1數組,
我們每導入一幅圖片的內容就進行相應的特征提取,用一個1:50000的循環,將每一幅圖片都提取特征。
過程如下:
圖七:調用LMgist進行特征提取
將提取的特征保存到相應的文件當中:
fid= fopen('E:/Feartrues.txt','w');
fprintf(fid,'%d',sumdata1(t));
fprintf(fid,'%d:%g', ii, gist1(1, ii));
fprintf(fid,'\n');
上面代碼將會在E盤Feartures.txt文件中保存提取的特征,格式是按照前面提到的heart_scale文件中的格式的,labelID:Feartures。其中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.txt,model_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分鐘,電腦CPU是OCRE-i5,執行速度還是相對較快的。特征提取完之后,在E盤下面生成了一個Feartures.txt文件,打開要花點時間,有300多MB。
圖九: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時間有所差距,但是差距都不是特別大,其中和其他有較大差距的-S5的Train時間,是其他的十倍左右。Predict時間集中模式都差不多,predict結果Accuracy都在60%以下,其中有幾項數據一樣,比如-S0、-S1、-S7都為58.23%,-S2和-S5都是58.2%,其中-S7的train時間和Predict時間和結果綜合起來是這8種模式中最好的。
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的如何使用GIST+LIBLINEAR分类器提取CIFAR-10 dataset数据集中图像特征,并用测试数据进行实验的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Ubuntu下硬盘读写时声音很响问题的解
- 下一篇: 个人喜欢的关于模式识别、机器学习、推荐系