甘麗
(馬鞍山師范高等專科學校軟件工程系,安徽 馬鞍山 243041)
隨著人工智能技術的高速發(fā)展,目標檢測作為計算機是覺得一個重要研究方向也得到了長足的發(fā)展和廣泛的應用。目前大多數(shù)目標檢測的研究側重在目標類別的識別,如公共汽車、小汽車、摩托車、自行車等,本研究側重在對不同品牌車輛的識別,對小目標的分類預測有著積極的參考意義。
Keras 是一個用Python 編寫的高級神經網絡API,能夠以TensorFlow,CNTK 等作為后端運行。沒有特定格式的單獨配置文件。模型定義在Python 代碼中,結構緊湊,易于調試,并且易于擴展。[1]Keras 的核心數(shù)據結構是神經網絡模型model,其中使用較多的是Sequential 順序模型,它是由多個神經層線性堆疊而成。在構建好模型后,可以簡單的通過add 方法將各層添加到模型中去,在訓練模型之前,最重要是的配置學習過程,主要通過compile 方法來完成,其中有三個參數(shù)是非常重要的,他們分別是優(yōu)化器,損失函數(shù)和評估函數(shù)。訓練模型通常使用fit 方法,最后利用訓練好的模型預測我們的測試集。
神經網絡的主要用途在于分類,整個神經網絡的分類還是圍繞著損失、優(yōu)化這兩部分的算法設計。[2-3]
公式的計算過程如圖1 所示。
圖1 softmax 計算過程
2.2 梯度下降算法
梯度下降是優(yōu)化神經網絡的首選方法,各種優(yōu)化器也是基于梯度下降算法。梯度下降法基于以下定義:如果實值函數(shù)f(x)在點啊處可微且有定義,那么函數(shù)f(x)在a 點沿著梯度相反的方向-?f(a)下降最多。梯度下降算法的目的是使得損失函數(shù)的值找到最小值。模型的訓練目標即是尋找合適的w與b 以最小化代價函數(shù)值。參數(shù)w和b 的更新公式如圖2。
圖2 梯度下降算法參數(shù)更新
其中α 表示學習速率,即每次更新的w的步伐長度。當w大于最優(yōu)解w'時,導數(shù)大于0,那么w就會向更小的方向更新。反之當w 小于最優(yōu)解w' 時,導數(shù)小于0,那么w 就會向更大的方向更新。迭代直到收斂。
2.3 卷積神經網絡
在計算機視覺領域,由于圖像特征數(shù)量對神經網絡效果的壓力,卷積神經網絡就能很好的解決這個問題。卷積神經網絡有一個或多個卷積層、池化層以及全連接層等組成[4-5],見圖3。
圖3 卷積神經網絡結構圖
卷積層的目的是提取輸入的不同特征,主要參數(shù)有卷積核Size 的大小,padding- 零填充,stride 步長。通過卷積層的計算,我們能提取特征,但并沒有減少圖片的特征數(shù)量,在最后的全連接層依然面臨大量的參數(shù),所以需要池化層進行特征數(shù)量的減少。池化層主要對卷積層學習到的特征圖進行亞采樣處理,池化的方式主要有最大池化和平均池化兩種,目的是為了降低后續(xù)網絡層的輸入維度,縮減模型大小,提高計算速度。卷積層+激活層+池化層可以看成是特征學習/特征提取層,而學習到的特征最終應用于模型任務需要先對所有Feature Map 進行扁平化處理,再接一個或多個全連接層,進行模型學習[6-7]。
利用keras 框架里面已經訓練好的VGG16 模型,對其進行微調,來做本研究中車輛類別的目標分類實踐。
使用一個ImageDataGenerator 圖片生成器,定義圖片處理以及數(shù)據增強相關功能
在不動VGG 最后的1000 輸出結果基礎上,加上全局池化層和兩個全連接層,構建自己的模型,實現(xiàn)代碼如下:
讓VGG 結構當中的權重參數(shù)不參與訓練,代碼如下:
編譯(指定優(yōu)化器,定義損失函數(shù),定義準確率)、訓練模型,在遷移學習中算法:學習率初始化較小的值:0.001,0.0001,因為在已訓練好的模型基礎之上更新,所以設置較小的學習率去學習。將訓練好的模型保存為h5 文件格式,實現(xiàn)代碼如下:
加載訓練的模型進行預測,加載待預測圖片,將圖片進行歸一化處理等,進行測試。
本文通過研究深度學習相關理論,利用Keras 框架實現(xiàn)了車輛類別的識別,在30 個epoch 后,訓練集的測試精度達到了95%,測試集的精度也能達到90%左右,通過增加epoch,將bath_size 設置為64,128 后,沒有使測試精度顯著提高。后續(xù)筆者會嘗試使用VGG19 模型,或者優(yōu)化參數(shù)的選擇,進一步研究提高模型性能的可能。