基於Opencv自帶BP網路的車標簡易識別

2021-09-07 19:28:38 字數 3129 閱讀 3670

**位址如下:

記得把這幾點描述好咯:**實現過程 + 專案檔案結構截圖 + 演示效果

先將資料集手動劃分成訓練集和測試集,並分好類,比如第一類就放在資料夾名為0的資料夾下,第二類就是1,如此類推。

當前程式只能處理10類以下車標,因為當前程式邏輯不支援10以上的數字識別(具體可以仔細看下**)

所有訓練集的放在train資料夾中,測試集放在test資料夾下。最終的檔案樹如下:

recarlog是工程名,即cardatamain.cpp同目錄。

測試集的類別數字和訓練集的要一一對應。因為程式將要用它們作為分類依據。

main.cpp目錄下準備兩個檔案,trainpath.txttestpath.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_sizeblock_sizestridecell_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...