**位址如下:
記得把這幾點描述好咯:**實現過程 + 專案檔案結構截圖 + 演示效果先將資料集手動劃分成訓練集和測試集,並分好類,比如第一類就放在資料夾名為
0
的資料夾下,第二類就是1
,如此類推。
當前程式只能處理10類以下車標,因為當前程式邏輯不支援10以上的數字識別(具體可以仔細看下**)所有訓練集的放在
train
資料夾中,測試集放在test
資料夾下。最終的檔案樹如下:
在recarlog
是工程名,即cardata
和main.cpp
同目錄。測試集的類別數字和訓練集的要一一對應。因為程式將要用它們作為分類依據。
main.cpp
目錄下準備兩個檔案,trainpath.txt
和testpath.txt
,用以儲存所有訓練集和測試集的路徑。程式需要這兩個檔案來讀取訓練集和測試集的。舉例如下(trainpath.txt
)
建議使用相對路徑。
這樣,當我們讀取一張的時候,可以利用的路徑名稱,通過split
呼叫確定該車標的類別(使用切分字元'/'
,第4個值即類別(0,1,2,3,4...))
**很簡單,就乙個main.cpp
檔案。大致分為以下3塊
全域性函式:模組劃分,使得main
函式不顯得臃腫。
自定義網路類:myneraulnetwork
用於搭建簡單bp網路和訓練**
分3步:
訓練集裝載
定義網路+訓練網路
測試網路
全域性變數設定:
#define n_sample 1000
#define f_num 1764
#define classnum 5
float data[n_sample][f_num]; // 資料存放
float label[n_sample][classnum] // 標籤存放
訓練網路輸入是兩個二維矩陣,第乙個矩陣是資料矩陣(第一維是樣本個數n_sample
,第二維是每個樣本的特徵向量是,寬度為f_num
),第二個矩陣是標籤矩陣,對應每個樣本,都有乙個類別標籤,如果是第一類,則它的標籤向量為1,0,0,0,0
(本例是5維)。
這裡主要提一下資料矩陣的第二維是怎麼確定的。
每個樣本的特徵向量即每張的hog特徵。hog特徵是乙個一維向量。hog特徵維度確定
對於一張,使用乙個滑動視窗以一定的步進滑動,分別獲取每個視窗的特徵值,是一般的人工影象特徵提取方式。簡單說下hog特徵的提取。
假設一張的維度是img_size=64x64
,我們使用的滑動視窗大小為block_size=16x16
,滑動步進stride=8x8
,那麼對乙個這樣的影象,能得到(64-8)/8 x (64-8)/8=7x7=49
個視窗,對於每個視窗block
,hog特徵細分為胞元cell_size=8x8
。於是乙個block
就有2x2=4
個胞元,每個胞元預設有9
個特徵值,所以在上述引數的情況下,hog特徵的維度為49x4x9=1764
,這也是本工程的預設引數。
opencv自帶hog特徵提取,裝載過程img_size
、block_size
、stride
和cell_size
都需要自行設定,因此需要事先計算好特徵維度,才能確定資料矩陣第二維的寬度。
read trainpath.txt; // 讀取路徑檔案
for each trainimg in trainpath.txt :
gethog(trainimg) // 獲取hog特徵
getlabel according to its path
put its hog into data
put its label into label
對opencv自帶網路類進行了簡單的封裝,如下:
定義和使用**裡說的很清楚了,這裡再提下兩個建構函式:
帶引數的建構函式使用網路引數檔名作為引數。可以直接使用訓練好的網路引數檔案直接初始化網路,而不需要initialnn
。
讀取測試檔案,輸入網路,獲得輸出。
輸入為每次乙個,所以輸入的二維矩陣為test[1][f_num]
。mynerualnetwork().predict(img)
獲得乙個**值,可以跟實際值(分析檔案路徑名獲得)做對比,得到分類正確率。
**位址如下:
基於BP神經網路的分類
使用的是乙個簡單的資料集fisheriris,該資料集資料類別分為3類,setosa,versicolor,virginica。每類植物有50個樣本,共150個樣本代表150朵花瓣。每個樣本有4個屬性,分別為花萼長,花萼寬,花瓣長,花瓣寬。其中meas是150 4的矩陣代表著有150個樣本每個樣本有...
BP神經網路(基於MATLAB)
clc clear all 匯入資料 load s data.mat s含量所用資料 n 12 n 是自變數的個數 m 1 m 是因變數的個數 讀取訓練資料 train num 1600 訓練樣本數 train data s data 1 train num,特徵值歸一化 train input,m...
opencv中使用bp神經網路
2.神經網路的訓練 intcvann mlp train constmat inputs,constmat outputs,constmat sampleweights,constmat sampleidx mat cvann mlp trainparams params cvann mlp tra...