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