基于tensorflow的手勢識(shí)別貪吃蛇游戲_第1頁
基于tensorflow的手勢識(shí)別貪吃蛇游戲_第2頁
基于tensorflow的手勢識(shí)別貪吃蛇游戲_第3頁
基于tensorflow的手勢識(shí)別貪吃蛇游戲_第4頁
基于tensorflow的手勢識(shí)別貪吃蛇游戲_第5頁
已閱讀5頁,還剩33頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

本科畢業(yè)設(shè)計(jì)(論文)基于tensorflow的手勢識(shí)別貪吃蛇游戲GesturerecognitionSnakegamebasedontensorflow院(系)計(jì)算機(jī)學(xué)院成績評定成績項(xiàng)論文成績(百分制)折合比例實(shí)得成績(折合分)指導(dǎo)教師成績30%評閱教師成績20%答辯成績50%總評成績注:畢業(yè)設(shè)計(jì)(論文)成績按百分制評定。答辯成績不及格的(評分低于60分的),則該畢業(yè)設(shè)計(jì)(論文)總評成績?yōu)榇疝q成績。摘要圖像識(shí)別是人工智能技術(shù)的一門重要領(lǐng)域之一,現(xiàn)代個(gè)個(gè)領(lǐng)域有涉及到圖像識(shí)別功能,例如通信、醫(yī)療、軍事安全、機(jī)器視覺等等都有所應(yīng)用。到現(xiàn)在為止,圖像識(shí)別技術(shù)是人工智能的一個(gè)重要的分支,如Vuforia這個(gè)軟件平臺(tái)利用圖像識(shí)別技術(shù)提供了大量的有關(guān)AR和VR的相關(guān)技術(shù)與功能,F(xiàn)acebook通過圖像識(shí)別功能幫助盲人“看”照片,圖像識(shí)別是一個(gè)非常抽象的一門技術(shù)。但是它的應(yīng)用到具體的情境當(dāng)中的時(shí)候,它的潛力是無可反駁的。本論文作品所用到的是一種基于tensorflow而搭建的卷積神經(jīng)網(wǎng)絡(luò),首先是錄入圖像信息,調(diào)整攝像頭捕捉手勢的移動(dòng)方向,分類保存在不同的文件夾之中,用于之后卷積神經(jīng)網(wǎng)絡(luò)訓(xùn)練判別方向的圖像數(shù)據(jù)。接下來基于Tensorflow搭建一個(gè)卷積神經(jīng)網(wǎng)絡(luò),通過對卷積層、池化層、全連接層、優(yōu)化器中的學(xué)習(xí)率等進(jìn)行參數(shù)的調(diào)整測試,最終得到一個(gè)比較高準(zhǔn)確率訓(xùn)練好的模型。接著通過python中的pygame庫實(shí)現(xiàn)一個(gè)貪吃蛇游戲的桌面小游戲,然后使用之前訓(xùn)練好的模型對貪吃蛇的移動(dòng)方向進(jìn)行判斷操作。關(guān)鍵詞:圖像識(shí)別,tensorflow,卷積神經(jīng)網(wǎng)絡(luò)

AbstractImagerecognitionisoneofthemostimportantfieldsofartificialintelligencetechnology.Modernfieldsinvolveimagerecognitionfunctions,suchascommunication,medicaltreatment,militarysecurity,machinevisionandsoon.Uptonow,imagerecognitiontechnologyisanimportantbranchofartificialintelligence.Forexample,vuforiasoftwareplatformusesimagerecognitiontechnologytoprovidealotofrelatedtechnologiesandfunctionsaboutARandVR.Facebookhelpsblindpeople"see"photosthroughimagerecognitionfunction.Imagerecognitionisaveryabstracttechnology.Butwhenitisappliedtospecificsituations,itspotentialisirrefutable.Theworkofthispaperisaconvolutionalneuralnetworkbasedontensorflow.Firstly,theimageinformationisinput,thecameraisadjustedtocapturethemovingdirectionofthegesture,andtheclassificationissavedindifferentfolders,whichisusedtotrainanddistinguishthedirectionoftheconvolutionalneuralnetworkimagedata.Next,aconvolutionneuralnetworkisbuiltbasedontensorflow.Throughadjustingandtestingtheparametersoftheconvolutionlayer,poolinglayer,fullconnectionlayer,learningrateintheoptimizer,amoreaccuratetrainedmodelisfinallyobtained.Then,weimplementadesktopgameofSnakegamethroughpyGameLibraryinPython,andusethetrainedmodeltojudgethemovingdirectionofsnake.Keywords:Imagerecognition,tensorflow,convolutionalneuralnetwork

目錄TOC\o"1-4"\h\z\u1. 緒論 緒論1.1研究背景與意義1.1.1研究背景到現(xiàn)在為止,大家都很了解清楚,每個(gè)人是通過五感(視覺、聽覺、味覺、嗅覺、觸覺)來對身邊的事物進(jìn)行了解的。當(dāng)然,現(xiàn)階段人與人之間正常的交流使用語言,但是人與機(jī)器是怎么進(jìn)行交流的呢?1984年,人類首次使用上了鼠標(biāo)以輸入的方式引進(jìn)了個(gè)人計(jì)算機(jī),然后就是鼠標(biāo)與鍵盤連接了人與計(jì)算機(jī)的紐帶,是人與計(jì)算機(jī)的交互方式的一種。雖然后來有觸摸板這種,但是也算的上的鼠標(biāo)的變異種。再者,出現(xiàn)了觸摸屏幕,之后,隨著個(gè)人電子設(shè)備的普遍化、移動(dòng)化,傳統(tǒng)的交互形式更加是與時(shí)俱進(jìn)的。人與機(jī)器的交互,簡單來說是包括輸入方式和輸出方式。最新出現(xiàn)的交互方式,與其說是“輸入輸出”,不如說是人與機(jī)器的“溝通”。當(dāng)然所謂的“溝通”分為語言溝通和肢體語言溝通。就是目前來看,簡單來說,這些新的交互方式大致可以分為三類:非穿戴式(手勢、體感)、穿戴式(眼鏡、頭盔等)、人工智能(語音識(shí)別、圖像識(shí)別等)。這三類交互,共通的趨勢是不斷遵照人類身體最自然的交流形態(tài)。圖1-1,圖1-2手勢識(shí)別應(yīng)用領(lǐng)域示意圖1.1.2研究意義人工智能是人與計(jì)算機(jī)的交互方式的其中一種,它是想著了解智能的實(shí)質(zhì),想讓機(jī)器像人類一樣,對事物進(jìn)行認(rèn)知、學(xué)習(xí)、記憶、儲(chǔ)存等等相似與人,做出對于人類相似的反應(yīng)的智能機(jī)器。也就是說人工智能是人們給予機(jī)器有“思考”的能力,嘗試讓計(jì)算機(jī)可以對新的事物進(jìn)行獨(dú)立思考并進(jìn)行做出相應(yīng)的動(dòng)作,計(jì)算機(jī)通過各種交互形式來得到所需的規(guī)律,然后完成如人們一樣的?;蛘吣承┬袨樗筮M(jìn)行的相應(yīng)的交互?,F(xiàn)階段這個(gè)領(lǐng)域的研究包括的是機(jī)器人、圖像的識(shí)別、自然語言的處理、語言的識(shí)別和專家的系統(tǒng)等等。所以很清楚,圖像識(shí)別是人工智能的一個(gè)重要的分支,人類對圖像識(shí)別的能力是很強(qiáng)的,對于一張圖像人們可以清楚的答出你所想要的要求,做出你期望的答案。所以人們期望機(jī)器也能抓住圖像的主要特征,然后給出人們所期待的答案。我所了解到的圖像識(shí)別的發(fā)展歷程有著三個(gè)階段:數(shù)字圖像處理、文字識(shí)別、物體識(shí)別。文字識(shí)別很早就出現(xiàn)了,主要是研究的是識(shí)別符號、字母和數(shù)字。接著是數(shù)字圖像處理和識(shí)別的研究主要對圖像的失真。傳輸方面有著一定的作用。然后說的是物體的識(shí)別,當(dāng)然本論文研究作品也是物體圖像識(shí)別,它是屬于高級的計(jì)算機(jī)識(shí)別的范圍,主要是指三維空間里的認(rèn)識(shí),環(huán)境的認(rèn)識(shí)。所以,手勢可以說是很自然而且還直觀的人與人之間交流的一種模式,而對于視覺的手勢識(shí)別是可以成為現(xiàn)代人們與機(jī)器進(jìn)行交互所不可缺少的一種比較特殊的技術(shù)。然而,對于手勢來說,它本身就是具有多種多樣,而且時(shí)間和地點(diǎn)的不同都會(huì)存在差異性,,因此基于視覺的手勢識(shí)別是一個(gè)極富挑戰(zhàn)性的多學(xué)科交叉研究課題。對于本人來說,這次的論文作品通過自己的手勢然后經(jīng)過計(jì)算機(jī)的照相機(jī)得到所需要的圖像特征的時(shí)候,提取圖像的主要特征了解自己的要求,做出相應(yīng)的答案。自己通過學(xué)習(xí)開發(fā)這樣經(jīng)過tensorflow構(gòu)建的卷積神經(jīng)網(wǎng)絡(luò)所得到的模型,然后得出自己想要的結(jié)果。1.2研究現(xiàn)狀與分析1.2.1國外的研究現(xiàn)狀現(xiàn)階段,跟隨有著人機(jī)交互技術(shù)的不斷發(fā)展,主流的應(yīng)該說的是語音識(shí)別和手勢識(shí)別技術(shù),而且機(jī)器視覺不斷的完善,手勢識(shí)別的研究也取得了很大的進(jìn)步,關(guān)于手勢識(shí)別技術(shù)的描述來說,尤其對基于神經(jīng)網(wǎng)絡(luò)的視覺的手勢識(shí)別已經(jīng)被廣泛的進(jìn)行研究,韓國的KoreaPolytechnic大學(xué)和Inda大學(xué)的YoungJooLee、JongShillLee等人用的是熵分析算法對從背景很復(fù)雜的視頻中進(jìn)行分割出手勢的區(qū)域和進(jìn)行對手勢的區(qū)域來手勢識(shí)別。MeenakshiPanwar是一名印度的研究學(xué)者,他提出了一個(gè)比較合適的手勢識(shí)別算法,這個(gè)算法包括了結(jié)構(gòu)特征在內(nèi)的計(jì)算機(jī)視覺算法,進(jìn)一步檢查方向的動(dòng)作、消除一些不必要的特征,如背景等和出現(xiàn)多少手指進(jìn)行檢測,進(jìn)行對手勢的最終識(shí)別過程。接著就是很多國外比較大型的公司都注重著人工智能方向,并且在這個(gè)領(lǐng)域當(dāng)中都有著明顯的收獲。三星公司是一個(gè)擁有超全產(chǎn)業(yè)鏈的企業(yè),它在人工智能領(lǐng)域當(dāng)中投入的研究基金和研究力度是非常給力的,當(dāng)然收獲也很多,如2012年,三星公司就推出了一項(xiàng)智能產(chǎn)品電視機(jī)ES8000,不僅可以手勢識(shí)別,還可以語音識(shí)別,通過一些簡單的手勢,用戶就可以解決調(diào)節(jié)音量的大小、開關(guān)機(jī)等等一些基本操作。三星旗下的研究院院長張代君曾經(jīng)在AIWorld2017世界人工智能大會(huì)上提出了:一定要將AI和行業(yè)應(yīng)用、硬件進(jìn)行深度結(jié)合。從谷歌發(fā)布的AIFirst戰(zhàn)略之后,那么它在人工智能的道路上走得越來越遠(yuǎn),機(jī)器學(xué)習(xí)領(lǐng)域在谷歌的大部分產(chǎn)品都涉及到。如云端相片集,它可以用于照片的選擇性分類和人臉識(shí)別檢測;還有的它在語音識(shí)別上有著很大的突破,他推出了AI助手GoogleAssistant,他不僅可以回答你的問題,還可以理解上下文的情境,做出相應(yīng)的答案。這助手被廣泛的應(yīng)用在手機(jī)、電腦、家庭音響當(dāng)中。2019年,谷歌的研究部門推出了一種新的機(jī)器學(xué)習(xí)模型,完成了一個(gè)新成果:AI手勢識(shí)別追蹤技術(shù)。谷歌團(tuán)隊(duì)曾發(fā)布:“我們希望向更廣泛的研究和開發(fā)團(tuán)隊(duì)提供這種手感功能,帶來更多創(chuàng)造性案例,刺激新的應(yīng)用程序和研究途徑的產(chǎn)生。”在汽車方面手勢識(shí)別技術(shù)也取得了不錯(cuò)的影響,在CES2012上,奧迪公司在導(dǎo)航系統(tǒng)上運(yùn)用了手勢識(shí)別技術(shù);在CES2015上,手勢識(shí)別的熱度不減反增,寶馬公司通過車頂?shù)?D感應(yīng)器,在IDrive系統(tǒng)中進(jìn)行識(shí)別手勢,然后可以操作一些簡單的指令,如接電話、掛電話、放音樂等等。1.2.2國內(nèi)的研究現(xiàn)狀當(dāng)然,我國在手勢識(shí)別的研究發(fā)展對于國外來說落后許些,但是我國也并不放棄,隨著國內(nèi)的研究學(xué)者的不斷努力,實(shí)力也逐漸增強(qiáng),緊追慢趕的追上了的。而國內(nèi)的手勢識(shí)別研究主要分布在一些大企業(yè),如華為、百度、阿里等公司,還有各大高校和研究院等等。天津大學(xué)的研究人員將語音識(shí)別系統(tǒng)與機(jī)器人相結(jié)合,通過語言對機(jī)器人進(jìn)行操控,并且通過操作者的肢體動(dòng)作的信息對機(jī)器人的狀態(tài)進(jìn)行模擬,比較準(zhǔn)確的實(shí)現(xiàn)操作者的動(dòng)作形態(tài)。2001年,哈爾濱大學(xué)的高文、吳江琴等研究出了一種訓(xùn)練手語的識(shí)別類型方法,它是將ANN和HMM兩種方法混合在一起,這種方法對于模型估計(jì)參數(shù)的減少和分類特征的增加有著明顯的作用。它作用在中國手語的識(shí)別系統(tǒng)當(dāng)中的準(zhǔn)確率高達(dá)90%。2017年,沈陽中科院自動(dòng)化所研究員華春生在沈陽科技周上首次展示了手勢識(shí)別智能無人機(jī)系統(tǒng),該系統(tǒng)通過手勢識(shí)別對無人機(jī)的飛行狀態(tài)進(jìn)行改變。它實(shí)現(xiàn)了在戶外強(qiáng)光干擾下還可以正常的人機(jī)交互操作,這樣使得無人機(jī)能夠在高空中正常的作業(yè)功能。技術(shù)與工具平臺(tái)2.1卷積神經(jīng)網(wǎng)絡(luò)的理論介紹2.1.1人工神經(jīng)網(wǎng)絡(luò)人工神經(jīng)網(wǎng)絡(luò)(ArtificialNeuralNetwork,ANN)的出現(xiàn),它研究的先鋒者麥皮茨和卡洛克在1943年發(fā)表一種說法名字是“似腦機(jī)器(mindlikemachine)”的感想,這一種類似“機(jī)器”可以對關(guān)于于生物神經(jīng)元一些特征的相連接的模型來模仿,也可以說是神經(jīng)學(xué)網(wǎng)絡(luò)的基本概念。所以以前一說起神經(jīng)網(wǎng)絡(luò),我們可能是第一印象是大腦皮層的神經(jīng)網(wǎng)絡(luò);現(xiàn)在的話,我們可能會(huì)想到電腦,或者說是電腦里面的人工神經(jīng)網(wǎng)絡(luò)。他們是對人類大腦中大腦皮層的神經(jīng)元所構(gòu)造了一個(gè)可以表示大腦基本所組成部分的神經(jīng)元模型,這樣對于邏輯操作系統(tǒng)可以表現(xiàn)出的通用性。圖2-1神經(jīng)網(wǎng)絡(luò)中神經(jīng)元模型示意圖簡單來說,人工神經(jīng)網(wǎng)絡(luò)ANN類似圖1-1所示的那樣,ANN有三種組成模塊。分別是輸入層、網(wǎng)絡(luò)層、輸出層,輸入層是自己所需要的大量數(shù)據(jù)集,經(jīng)過自己的初步處理,轉(zhuǎn)化成相應(yīng)的訓(xùn)練數(shù)據(jù);接著是網(wǎng)絡(luò)層,網(wǎng)絡(luò)層也可以說是隱含層,隱含層的意思是就是對輸入層的數(shù)據(jù)的特征值,形象的提取到到另一個(gè)不同維度空間,來表現(xiàn)它的更加抽象化的特征,這些特征才能對數(shù)據(jù)進(jìn)行更好的劃分。隱含層可以分為兩種,一種是單層隱含層和多層隱含層。隱含層里面有著它的學(xué)習(xí)規(guī)則(LearningRule),它決定了網(wǎng)絡(luò)模型中的權(quán)重會(huì)根據(jù)訓(xùn)練時(shí)間的不斷推移進(jìn)而對權(quán)重進(jìn)行不斷的調(diào)整。為了提高模型的準(zhǔn)確性,對其中的數(shù)據(jù)所有到了激勵(lì)函數(shù)(activationfunction),這樣就可以處理很多數(shù)據(jù)的復(fù)雜性。圖2-2神經(jīng)元網(wǎng)絡(luò)示意圖所以現(xiàn)階段越來越多的研究學(xué)者都紛紛加入對ANN的實(shí)驗(yàn)研究中,所以促使了人工智能的研究成果越來越多?,F(xiàn)階段對于ANN所涉及到的產(chǎn)品也流通到不同行業(yè)當(dāng)中,如谷歌的搜索引擎、股票價(jià)格預(yù)算、智能圍棋、家庭助手等等各行各業(yè)的領(lǐng)域中有著不錯(cuò)的效果。圖2-3,圖2-4ANN所設(shè)計(jì)到的研究領(lǐng)域示意圖2.1.2卷積神經(jīng)網(wǎng)絡(luò)卷積神經(jīng)網(wǎng)絡(luò)(ConvolutionalNeuralNetworks,CNN)是一種具備著卷積計(jì)算并且具有深度結(jié)構(gòu)的前饋神經(jīng)網(wǎng)絡(luò),它與普遍的人工神經(jīng)網(wǎng)絡(luò)的相似程度很高,它們兩個(gè)都是對有可以學(xué)習(xí)訓(xùn)練更新的權(quán)重(weight)和偏置常量(biases)的神經(jīng)元所構(gòu)成。輸入在神經(jīng)元當(dāng)中的數(shù)據(jù),通過里面的網(wǎng)絡(luò)層的計(jì)算,得到的是數(shù)據(jù)分類的輸出值,RNN與CNN都有類似的計(jì)算方式。CNN是近年來逐漸興起的人工神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)之一,因?yàn)榭梢岳镁矸e神經(jīng)網(wǎng)絡(luò)在圖片或者語音識(shí)別方面可以給出更優(yōu)的測試結(jié)果,當(dāng)然由于CNN的不斷發(fā)展,現(xiàn)在還會(huì)應(yīng)用于視頻處理分析、藥物發(fā)現(xiàn)、自然語言處理等等,還有近期比較火的AlphaGo,讓計(jì)算機(jī)看懂圍棋,然后戰(zhàn)勝圍棋的世界冠軍,它也是運(yùn)用了這種技術(shù)。CNN由輸入層、卷積層、激活函數(shù)、池化層、全連接層這些網(wǎng)絡(luò)層構(gòu)成的一個(gè)完整的CNN。圖2-5CNN的每個(gè)層位置示意圖卷積層(Convolutionallayer),它是卷積神經(jīng)網(wǎng)路中對于每一層的卷積層是由多個(gè)卷積核單元組成,在卷積層當(dāng)中具有多多少的濾波器組成,而且每個(gè)卷積核單元的各種參數(shù)都是通過反向傳播算法優(yōu)化得到的。所以說它在神經(jīng)網(wǎng)絡(luò)當(dāng)中有著不可缺少的部分之一,卷積運(yùn)算主要是提取輸入圖片數(shù)據(jù)的不同特征值,一開始第一層卷積層就可以獲得一些比較低級的特征如線條、角、邊緣等等比較低級的特征,接下來隨著層數(shù)的增加,更多的卷積層可以從比較低級特征中重復(fù)運(yùn)算,進(jìn)一步提取更加復(fù)雜的特征數(shù)據(jù)。池化層(Poolinglayer),在卷積層提取出的大量數(shù)據(jù)特征之后,其特征的維度就會(huì)增大,池化層就可以將特征切分成許多個(gè)區(qū)域,然后就可以取它的平均值或者最大值,也就是maxpooling或者AveragePooling,得到的是比較新的而且維度較小的特征值。激活函數(shù)(ActivationFunction),它的作用是為了增加CNN模型的非線性能力。全連接層(Fully-Connectedlayer),根據(jù)卷積層、池化層和激活函數(shù)的作用下,將一組數(shù)據(jù)切分成許多局部的特征值,然后通過全連接層集合變成所需要的全局特征,這樣就可以計(jì)算每個(gè)輸出值的得分。2.1.2.1卷積卷積(Convolution)的計(jì)算公式為下圖所示:圖2-6卷積計(jì)算公式示意圖卷積在很多的領(lǐng)域中都有所定義(例如函數(shù)卷積的傅里葉變換是函數(shù)傅里葉變換的乘積)。當(dāng)然我想說的是具體在圖像處理這一方面的領(lǐng)域當(dāng)中,卷積操作是指使用一個(gè)卷積核矩陣,然后對圖片中的所有跟卷積核大小的相同的區(qū)域進(jìn)行相應(yīng)的卷積計(jì)算,。也就是該矩陣跟所對應(yīng)的像素點(diǎn)進(jìn)行相乘,然后求和得到一個(gè)數(shù)值。如圖2-7所示:圖2-7單卷積核操作示意圖當(dāng)然一張圖片不止幾個(gè)像素點(diǎn),所以通過步長(stride)決定卷積核在水平和垂直方向上移動(dòng)的步數(shù),這樣就可以得到一個(gè)全新的矩陣,得到所想要的目標(biāo)像素。圖2-8圖像數(shù)據(jù)卷積過程示意圖隨著卷積操作的次數(shù)增加的話,有可能得到的卷積結(jié)果比原來圖片大小會(huì)逐步降低,一些大型的卷積神經(jīng)網(wǎng)絡(luò)有著很多層數(shù),隨著卷積操作的不斷進(jìn)行,圖片的都會(huì)減少一點(diǎn)點(diǎn),最后有可能導(dǎo)致自己的圖片比卷積核的尺寸還小,所以為了解決這個(gè)問題,大家一般都會(huì)對卷積層進(jìn)行邊緣填充(padding),也就是在卷積操作之前都是進(jìn)行邊緣補(bǔ)充,然后在進(jìn)行相對應(yīng)的卷積。當(dāng)然對于擴(kuò)大的部分操作,一般都是填入0值。圖2-9進(jìn)行padding的示意圖那么當(dāng)圖片數(shù)據(jù)經(jīng)過卷積操作的時(shí)候,輸出結(jié)果的尺寸也是可以計(jì)算的,例如對于一個(gè)大小為w*w的正方形圖像的時(shí)候,,這個(gè)數(shù)值會(huì)根據(jù)之前的特征個(gè)數(shù)feature、邊緣padding、卷積核尺寸kernel、步長stride四個(gè)超參數(shù)的影響下。所以卷積結(jié)果尺寸為(w+2*padding-kernel)/stride+1,它的輸出結(jié)果的通道數(shù)等于特征值feature。2.1.2.2池化池化(pooling)的用處在卷積神經(jīng)網(wǎng)絡(luò)中也是一個(gè)非常重要的部分之一,它主要是降低參數(shù)的數(shù)量,防止過擬合問題。池化的最主要的目的是為了在盡量不改變圖片主要的空間信息的前提之下,可以適當(dāng)?shù)慕档蛨D片的大小,提高卷積層對主要特征的提取的準(zhǔn)確率,也是同時(shí)減少網(wǎng)絡(luò)的參數(shù)數(shù)量,防止過擬合。在CNN當(dāng)中下,如果特征提取的時(shí)候輸出的大小會(huì)影響到后面輸出結(jié)果,輸出尺寸太大會(huì)導(dǎo)致特征值增多,計(jì)算量就會(huì)很大,再將這些數(shù)據(jù)輸入到全連接層會(huì)導(dǎo)致過擬合現(xiàn)象。當(dāng)然之前卷積操作的時(shí)候我們可以通過卷積核降低圖像尺寸,如步長stride=2的時(shí)候。但是這些仍會(huì)保留一些不必要的參數(shù),池化層就不需要保留參數(shù)。池化層最常見的池化函數(shù)有均值或者最大值,也就是maxpooling或者meanPooling,均值池化的計(jì)算方式很簡單,也就是對圖像的領(lǐng)域內(nèi)的特征點(diǎn)進(jìn)行求平均值;然后是最大值池化,它是可以將所輸入的圖像的特征點(diǎn)切分成若干個(gè)矩形區(qū)域,接著是得到每個(gè)子區(qū)域的輸出最大值,這樣這些池化函數(shù)可以不斷減小數(shù)據(jù)特征點(diǎn)的空間大小,從而使得參數(shù)的個(gè)數(shù)還有計(jì)算量也隨即下降,一定程度上控制了CNN的過擬合現(xiàn)象。圖2-10最大值池化示意圖2.1.2.3激活函數(shù)激活函數(shù)(ActivationFunction),它是上層神經(jīng)元的輸出值與下層神經(jīng)元的輸出值的一種函數(shù)連接關(guān)系,每個(gè)卷積層里面的一般都是線性關(guān)系的,所以激活函數(shù)引進(jìn)給神經(jīng)網(wǎng)絡(luò)中的是一些非線性能力,當(dāng)然他也可以加快CNN中模型的收斂作用,所以它也是CNN訓(xùn)練中必不可少的一部分。接下來我們討論一下激活函數(shù)一般都有著幾個(gè)代表性的函數(shù)。閾值激活函數(shù):它可以說是線性激活函數(shù),算得上是一個(gè)比較簡單的函數(shù),它主要是說當(dāng)神經(jīng)元的激活值要是小于零的話,那么它將會(huì)處于抑制狀態(tài),也就是不會(huì)被激活,參數(shù)不會(huì)改變;它的激活值大于零的時(shí)候,參數(shù)將會(huì)發(fā)生變化。圖2-11閾值激活函數(shù)示意圖Relu函數(shù):它在現(xiàn)階段是對于人們來說是經(jīng)常會(huì)使用到它,它保留了上面所述的閾值激活函數(shù)中神經(jīng)元的激活值小于零的時(shí)候的輸出網(wǎng)絡(luò)值,但是當(dāng)輸入值大于零的時(shí)候發(fā)生改變,進(jìn)而它就可以被允許基于梯度下降的學(xué)習(xí)能力,它的函數(shù)還是求導(dǎo)函數(shù)都沒有復(fù)雜的計(jì)算公式,輸入值為負(fù)值的時(shí)候,神經(jīng)元激活值不會(huì)被激活,這就是說在同一時(shí)間的條件下只有一部分激活值被激活,造成的是網(wǎng)絡(luò)的稀疏,這樣更好的提高網(wǎng)絡(luò)的計(jì)算能力。這樣就可以更好的提取出相關(guān)的特征值,從而訓(xùn)練數(shù)據(jù)準(zhǔn)確率大大升高。圖2-12Relu函數(shù)計(jì)算公式示意圖圖2-13Relu函數(shù)圖像示意圖Sigmoid函數(shù):Sigmoid函數(shù)又可以叫做邏輯回歸函數(shù)(Logistic),它可以說是最早提出并且廣為流傳的一種函數(shù)算法,現(xiàn)階段Sigmoid函數(shù)在分類算法當(dāng)中也是很少大家的歡迎。它是一種S型飽和函數(shù),當(dāng)函數(shù)的輸入值無窮大或者無窮小的時(shí)候,會(huì)導(dǎo)致輸出值的梯度會(huì)無限趨于一個(gè)值,這樣會(huì)影響到梯度的彌散現(xiàn)象,而且還會(huì)導(dǎo)致收斂速度降低。進(jìn)而使得神經(jīng)網(wǎng)絡(luò)的計(jì)算能力。圖2-14Sigmoid函數(shù)計(jì)算公式示意圖圖2-15Sigmoid函數(shù)圖像示意圖由圖2-15可以看出,不管輸入?yún)?shù)的數(shù)值是多少,Sigmoid函數(shù)都將輸出的參數(shù)控制在[0-1]的區(qū)間內(nèi)。Tanh函數(shù):tanh函數(shù)其實(shí)跟Sigmoid函數(shù)是非常相似的,可以說的是tanh函數(shù)就是Sigmoid的變形,但是Sigmoid函數(shù)并沒有等于零,然而tanh函數(shù)是以“零為中心”的。所以在實(shí)際的運(yùn)用當(dāng)中,或許tanh函數(shù)可能比Sigmoid函數(shù)好一些,但是同樣在輸入值無窮大或者無窮小的時(shí)候,會(huì)造成神經(jīng)元飽和現(xiàn)象。圖2-16tanh函數(shù)計(jì)算公式示意圖圖2-17tanh函數(shù)圖像示意圖2.1.2.4全連接全連接層(fullyconnectedlayers,F(xiàn)C)它的作用是在卷積神經(jīng)網(wǎng)絡(luò)中對參數(shù)的特征進(jìn)行分類,然后通過全連接層對特征參數(shù)進(jìn)行合并分類。之前所說的卷積層、池化層和激活函數(shù)等這些操作實(shí)現(xiàn)的是將最開始的時(shí)候的一堆雜亂的數(shù)據(jù)數(shù)組,然后對數(shù)據(jù)里面的特征進(jìn)行挖掘,重點(diǎn)是挖掘其背后的隱藏特征數(shù)據(jù)的,而現(xiàn)在所說的全連接層則是將得到的數(shù)據(jù)進(jìn)行壓縮,得到的參數(shù)對隱藏特征的空間進(jìn)行比較,然后得出所需要的參數(shù)值。開發(fā)環(huán)境的搭建3.1tensorflow的簡介現(xiàn)階段,tensorflow是在人工智能之中,使用比較廣泛,是一種使用數(shù)據(jù)來對數(shù)值進(jìn)行計(jì)算的開源框架,它可以實(shí)現(xiàn)機(jī)器學(xué)習(xí),還有對于其它需要大量數(shù)字進(jìn)行運(yùn)算的算法庫之一。自從2017-2-16日,Google公司發(fā)布了tensorflow1.0版本之后,它是Google研究開發(fā)出來的屬于第二代人工智能學(xué)習(xí)系統(tǒng),屬于GitHub上比較歡迎的機(jī)器學(xué)習(xí)框架之一。自從計(jì)算機(jī)出現(xiàn)到至今為止,隨著時(shí)代的不斷發(fā)展,計(jì)算機(jī)的性能都越來越出色,我們可以利用它的高超的計(jì)算速度和巨大的存儲(chǔ)空間,所以現(xiàn)如今計(jì)算機(jī)可以說可以輕松的幫助人們完成一些對于人來說是非常困難的事情,而計(jì)算機(jī)卻輕而易舉的完成,比如數(shù)據(jù)儲(chǔ)存、一些位數(shù)高的數(shù)學(xué)計(jì)算、又或者休閑娛樂也行。但是這些都是能夠?qū)嶓w化出來的想法,也就是說計(jì)算機(jī)不能通過自己的想法思考問題,并且解決問題,這些都是目前計(jì)算機(jī)很難做到的事情。近年來,隨著計(jì)算機(jī)領(lǐng)域的不斷發(fā)展,一門新興行業(yè)的誕生,人工智能領(lǐng)域的出現(xiàn),讓人們看到了希望,這讓計(jì)算機(jī)類似于人們一樣,比如語音識(shí)別、圖像識(shí)別等等。所以在說tensorflow的時(shí)候,我們不妨可以了解人工智能、機(jī)器學(xué)習(xí)與深度學(xué)習(xí),里面用的是多種復(fù)雜的非線性結(jié)構(gòu)構(gòu)成的神經(jīng)網(wǎng)絡(luò)或者是一些復(fù)雜結(jié)構(gòu)算法對大量的數(shù)據(jù)進(jìn)行提取特征的算法。它們之間的關(guān)系如圖3-1所示:圖3-1人工智能、機(jī)器學(xué)習(xí)與深度學(xué)習(xí)關(guān)系示意圖Tensorflow的出現(xiàn)很明顯的造就了深度學(xué)習(xí)門檻的降低,只要你會(huì)Python或者C++,并且對機(jī)器學(xué)習(xí)有一定的基礎(chǔ),都能更好的利用tensorflow完成神經(jīng)網(wǎng)絡(luò)模型,Tensorflow的框架巧妙靈活,可以進(jìn)行多平臺(tái)并發(fā)式運(yùn)行計(jì)算,例如云系統(tǒng)、云服務(wù)器、臺(tái)式機(jī)等等,而且它還可以發(fā)揮多核計(jì)算,如GPU和CPU并行運(yùn)算的能力。CPU的設(shè)計(jì)出來的目的是為了可以處理不同數(shù)據(jù)類型的數(shù)據(jù),并且同時(shí)運(yùn)算大量的邏輯判斷,中斷處理或者跳轉(zhuǎn)實(shí)現(xiàn)也絕不含糊;GPU則是時(shí)時(shí)刻刻處理大量的圖像數(shù)據(jù)(游戲之類),這讓大量數(shù)據(jù)的數(shù)據(jù)類型統(tǒng)一并且還相互依賴,在這同時(shí)不會(huì)被打斷CPU的執(zhí)行,這讓玩游戲的人們更加流暢舒適。然而Tensorflow對于神經(jīng)網(wǎng)絡(luò)來說并不嚴(yán)格,但是這并不是說它的不好,Tensorflow對于當(dāng)前的卷積神經(jīng)網(wǎng)絡(luò)來說是最適合之一的,并且它在Google上是開源的框架,這說明tensorflow將會(huì)進(jìn)一步被研究學(xué)者完善利用。圖3-2Tensorflow數(shù)據(jù)流示意圖3.2Anaconda+tensorflow的安裝3.2.1安裝Anaconda本次實(shí)驗(yàn)項(xiàng)目運(yùn)用的是python語言,很多學(xué)習(xí)python語言的人們都知道,我們在使用python語言程序的時(shí)候需要下載一個(gè)解析器,如果沒有一個(gè)python解析器即便你的程序?qū)懙娜绾危彩且矡o法運(yùn)行出來的,所以你可以安裝python運(yùn)行環(huán)境,在里面你可以運(yùn)行你編寫好的代碼,當(dāng)然安裝運(yùn)行環(huán)境python.exe中也存在代碼的編輯器,當(dāng)然沒那么方便,你可以安裝一個(gè)pycharm,它可以調(diào)試、代碼跳轉(zhuǎn)、Project管理、語法高亮、自動(dòng)完成、智能提示、版本控制、單元測試等等,但是前提你要有個(gè)python運(yùn)行環(huán)境,也就是安裝python.exe。接下來我所講的是Anaconda,Anaconda是一個(gè)開源的發(fā)行的Python的版本,它里面包含了眾多的依賴項(xiàng)還有更多的運(yùn)行所需包,例如conda、python、update等等,所以安裝好了Anaconda,可以不用安裝python運(yùn)行環(huán)境,因?yàn)樗詭Я诉\(yùn)行環(huán)境,它可以解決python安裝的一些不必要的錯(cuò)誤。接下來我安裝Anaconda的版本是Anaconda3-2019.03-Windows-x86_64,結(jié)果如圖3-3所示:圖3-3安裝Anaconda示意圖當(dāng)然安裝好了Anaconda的時(shí)候同時(shí)會(huì)有一些工具配置,AnacondaPrompt:這個(gè)可以說的是Anaconda自身的一個(gè)命令指示符;然后是AnacondaNavigtor,這是一個(gè)關(guān)于這個(gè)的圖形化界面,并且可以管理所安裝好的工具包;spyder是一個(gè)可以用python語言的使用,是一個(gè)簡單的集成開發(fā)環(huán)境,并且可以跨平臺(tái)開發(fā);qtconsole可以說是一個(gè)能夠?qū)崿F(xiàn)代碼生成的圖形直接顯示,這個(gè)對于pythonshell界面來說,可以完成多行代碼運(yùn)行實(shí)現(xiàn);JupyterNotebook是一個(gè)在瀏覽器實(shí)現(xiàn)的用于編譯代碼的,可以用于分析數(shù)據(jù)的運(yùn)行界面。3.2.2基于Anaconda搭建tensorflow這次實(shí)驗(yàn)的基于tensorflow環(huán)境下所實(shí)現(xiàn)的實(shí)驗(yàn)項(xiàng)目,所以接下來是安裝tensorflow,由于之前是下載了Anaconda這個(gè)軟件,然后可以在AnacondaPrompt的界面下,輸入pipinstalltensorflow,這樣就可以安裝tensorflow;又或者可以在開始的菜單中選擇運(yùn)行AnacondaNavigator,點(diǎn)擊左側(cè)Environment選項(xiàng),然后在最左側(cè)進(jìn)行搜索tensorflow,然后就點(diǎn)擊你所想要的tensorflow版本。它同樣是分為GPU版本和CPU版本,然后查看我的tensorflow版本是1.14,且是CPU版本。圖3-4查看tensorflow版本第一次安裝tensorflow的時(shí)候會(huì)遇到許多的問題出錯(cuò)。例如:(1)安裝tensorflow的時(shí)候網(wǎng)絡(luò)有時(shí)候特別慢,有時(shí)會(huì)下載失??;(2)Tensorflow的版本與numpy的版本會(huì)造成版本沖突;(3)pip版本太低導(dǎo)致下載失敗;這些都是我之前下載安裝tensorflow所遭受到的問題。3.3實(shí)驗(yàn)所需工具包3.3.1安裝OpencvOpencv(OpenSourceComputerVisionLibrary)是一個(gè)開源的、跨平臺(tái)的一種計(jì)算機(jī)視覺庫,它可以在眾多的操作系統(tǒng)中運(yùn)行,如WINDOWS、LINUX、MACOS和ANDROID等等的操作系統(tǒng),Opencv是在1999年出現(xiàn)的,由Inter公司研究開發(fā)出來的,它的基礎(chǔ)語言是C語言和C++語言編寫的,這個(gè)工具包都被實(shí)現(xiàn)優(yōu)化了,所以它的運(yùn)算能力和效率都會(huì)得到很大的提升,而且它還是開源的以及作用到實(shí)時(shí)運(yùn)作。它對于計(jì)算機(jī)視覺能更好的提供非常好的函數(shù)的接口,這樣造成了越來越多關(guān)于計(jì)算機(jī)視覺的產(chǎn)品的出現(xiàn),這個(gè)工具包有著安全防護(hù)、視頻鎖定、各行業(yè)的圖像處理功能、空間成像以及人工智能方向等等許許多多領(lǐng)域都有關(guān)于它的函數(shù)接口。這些年過來,隨著計(jì)算機(jī)行業(yè)的快速發(fā)展,傳統(tǒng)的計(jì)算機(jī)功能已經(jīng)不適合當(dāng)前社會(huì)的發(fā)展,計(jì)算機(jī)視覺可以說是一個(gè)比較新興的技術(shù),正是因?yàn)樗c機(jī)器學(xué)習(xí)關(guān)系密切,所以才會(huì)讓Opencv工具包可以運(yùn)用一些簡單的機(jī)器學(xué)習(xí)算法功能函數(shù)。這些年來,Opencv在各行各業(yè)所涉及到的都有著它身影,檢測入侵、人臉識(shí)別、視頻追蹤等等能力。所以到現(xiàn)在為止,這世界上許多大型公司以及各大高校的科學(xué)研究人員都對Opencv的資源開發(fā)工具包盡量對它進(jìn)行優(yōu)化,更重要的是無論你是怎么使用它,商業(yè)開發(fā)或者科技發(fā)展研究,他都可以成為你比較理想的工具包,并且對于大眾來說,它還是完全免費(fèi)的。接下來說的是關(guān)于Opencv對這次實(shí)驗(yàn)項(xiàng)目的作用,大家都知道,一張圖片都是由很多的數(shù)字矩陣構(gòu)成的,總所周知顏色的基礎(chǔ)色彩是紅綠藍(lán)三種顏色,然后通過調(diào)配才會(huì)有更多的不同顏色,所以一張彩色圖片在計(jì)算機(jī)上面所呈現(xiàn)的是三個(gè)顏色通道(RGB),每一個(gè)染色通道可以說是一個(gè)矩陣形式,然后三個(gè)矩陣形式結(jié)合成一張彩色圖片。當(dāng)然還有個(gè)灰度圖,也就是人們常說的黑白照片,這個(gè)就只有一個(gè)顏色通道。因?yàn)槲倚枰氖菙?shù)據(jù)是圖片數(shù)據(jù),利用Opencv對攝像頭的視頻進(jìn)行操作,然后進(jìn)行圖像的顯示和保存;當(dāng)然也可以對圖片進(jìn)繪圖計(jì)算,得到所需要的圖片然后進(jìn)行一些圖片的算術(shù)運(yùn)算。那么怎么才能下載Opencv,我們可以更下載安裝tensorflow一樣,如:pipinstallopencv;或者在AnacondaNavigtor圖形化界面上下載安裝。我實(shí)驗(yàn)項(xiàng)目所用到的Opencv是4.1.0,如圖3-5所示:圖3-5Opencv的版本號示意圖3.3.2安裝NumpyNumpy(NumericPython)屬于python的一個(gè)函數(shù)庫,它里面存在著很多維度的對象數(shù)組和怎么處理對象數(shù)組的函數(shù)表達(dá)式而組合成的一個(gè)python包。它是一個(gè)python工具包中的功能很強(qiáng)大的包庫,它給大眾提供了十分便利的數(shù)學(xué)運(yùn)算和數(shù)據(jù)的操作。從Numpy出現(xiàn)到至今為止,它在計(jì)算機(jī)數(shù)值計(jì)算上面有著重要的作用,被廣泛的運(yùn)用在程序代碼當(dāng)中,例如機(jī)器學(xué)習(xí)訓(xùn)練模型中、數(shù)學(xué)的各種計(jì)算任務(wù)還有就是在圖像數(shù)據(jù)的處理以及計(jì)算機(jī)圖形學(xué)當(dāng)中都有著它的身影。所以在挖掘人工智能當(dāng)中的學(xué)習(xí)算法的時(shí)候,Numpy能夠更好的提供計(jì)算函數(shù),因?yàn)樵谶@之中矩陣與矩陣之間會(huì)有著各種各樣的計(jì)算公式,只要調(diào)用Numpy這個(gè)python庫就可以很好的并快速的計(jì)算,機(jī)器學(xué)習(xí)在訓(xùn)練數(shù)據(jù)模型的時(shí)候存在的大量的數(shù)據(jù)存儲(chǔ)在數(shù)組當(dāng)中,Numpy數(shù)組可以更好的管理訓(xùn)練數(shù)據(jù)集,它對數(shù)組中的運(yùn)算也起著重要的作用;而且它在數(shù)學(xué)的計(jì)算上也提供了許多計(jì)算公式的函數(shù),如一些位運(yùn)算、排序、線性代數(shù)、矩陣庫、算術(shù)函數(shù)等等,所以這就可以減少很多代碼,并且讓你節(jié)省時(shí)間計(jì)算。接下來是安裝Numpy的python庫,但是Numpy的版本要跟Tensorflow的版本不能沖突,因?yàn)橹霸?,?dǎo)致我安裝幾次Tensorflow不成功。具體它們之間版本兼容的是多少,大家可以上網(wǎng)查找。圖3-6Numpy的版本示意圖基于tensorflow框架的卷積神經(jīng)網(wǎng)絡(luò)的搭建4.1數(shù)據(jù)集簡介數(shù)據(jù)集的作用是讓圖像識(shí)別中從收集好的圖像數(shù)據(jù),提取當(dāng)中你所需要的圖像數(shù)據(jù)的特征,加以訓(xùn)練挖掘,然后得到你所需要的訓(xùn)練模型。其實(shí)也可以說訓(xùn)練數(shù)據(jù)集是神經(jīng)網(wǎng)絡(luò)當(dāng)中訓(xùn)練模型的基礎(chǔ)內(nèi)容,當(dāng)然,你搜集到的數(shù)據(jù)集越豐富越多,那么使得你所訓(xùn)練的模型的準(zhǔn)確率就越高,所以想要提高手勢識(shí)別的識(shí)別準(zhǔn)確能力,肯定是在數(shù)據(jù)集方面上要下足功夫。4.1.1收集數(shù)據(jù)集由于是我自己進(jìn)行的手勢識(shí)別功能的,當(dāng)然是對自己的手勢進(jìn)行收集,我是利用攝像頭的捕捉功能,將攝像頭拍到的視頻一幀一幀的將照片儲(chǔ)存在image文件夾里面,使用的是cv2庫里面的功能,得到的數(shù)據(jù)集。圖4-1數(shù)據(jù)集類別分布圖4.1.2數(shù)據(jù)預(yù)處理通過攝像頭所得到的圖片數(shù)據(jù)存放在image文件夾里面,然后通過os模塊對image文件夾的圖片數(shù)據(jù)進(jìn)行讀取,將image中的每個(gè)文件夾所包含的子文件夾,提取子文件夾中的圖像數(shù)據(jù),并將圖像統(tǒng)一大小為64*64*3,然后將數(shù)據(jù)存放在數(shù)組當(dāng)中:圖4-2讀取文件夾數(shù)據(jù)示意圖得到了訓(xùn)練數(shù)據(jù)集之后,接著是對數(shù)據(jù)集進(jìn)行預(yù)處理階段,我們首先是將數(shù)據(jù)集從文件夾當(dāng)中提取出來,儲(chǔ)存在數(shù)組當(dāng)中。建立好相應(yīng)的圖像數(shù)據(jù)集。圖4-3數(shù)據(jù)集的提取示意圖因?yàn)樵跈C(jī)器學(xué)習(xí)當(dāng)中每個(gè)特征不是一個(gè)連續(xù)的值,當(dāng)然也有例外,最大多數(shù)的分類值,所以我們可以采用獨(dú)熱編碼這樣解決方法,更好的解決分類器當(dāng)中一些屬性數(shù)據(jù)的問題,同時(shí)也更好的提高特征的作用。圖4-4獨(dú)熱編碼示意圖由于不同數(shù)據(jù)集當(dāng)中的特征數(shù)據(jù)變化范圍非常大,這說明我們也可以進(jìn)行歸一化數(shù)據(jù)集,這樣可以將每個(gè)特征控制在很小的范圍之內(nèi)。因?yàn)橹白x入數(shù)據(jù)的是全部訓(xùn)練數(shù)據(jù),所以將全部的訓(xùn)練數(shù)據(jù)集劃分為訓(xùn)練數(shù)據(jù)集和測試數(shù)據(jù)集,并且打亂全部數(shù)據(jù)集。80%為訓(xùn)練數(shù)據(jù)集,20%為測試數(shù)據(jù)集。圖4-5劃分?jǐn)?shù)據(jù)集示意圖如圖4-6所示,通過讀取文件夾數(shù)據(jù)后經(jīng)過預(yù)處理階段,展示部分?jǐn)?shù)據(jù)的圖像顯示:圖4-6預(yù)處理之后所得部分?jǐn)?shù)據(jù)集示意圖4.2卷積神經(jīng)網(wǎng)絡(luò)處理好數(shù)據(jù)集之后就可以得到你所想要的訓(xùn)練數(shù)據(jù)集與測試數(shù)據(jù)集,接下來就是搭建卷積神經(jīng)網(wǎng)絡(luò)進(jìn)行訓(xùn)練的了。這次實(shí)驗(yàn)我的神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)很明顯是通過我所搭建的二層卷積層,并且max_pooling是接著卷積層的,然后是兩層全連接層放在后面,當(dāng)然在卷積核當(dāng)中我加入的relu激活函數(shù),這樣可以增加網(wǎng)絡(luò)參數(shù)的非線性的作用,這樣或多或少可以減少過擬合的幾率。首先是先定義好一些神經(jīng)網(wǎng)絡(luò)的一些參數(shù),如圖4-7所示:圖4-7網(wǎng)絡(luò)參數(shù)示意圖通過定義好學(xué)習(xí)率的大小,隱含層通道數(shù)、濾波器大小等等這些參數(shù),然后是輸出特征值為5,初始化x_和y_變量。接著就是初始化Weight值和bias值,如圖4-8所示:圖4-8Weight和Bias示意圖然后是定義好卷積層與池化層,卷積層的步長為[1,1,1,1],因?yàn)閜adding為SAME,這樣就對圖片像素點(diǎn)進(jìn)行邊緣的補(bǔ)充操作,所以卷積操作之后不會(huì)導(dǎo)致圖像尺寸的大幅度縮??;ksize是指池化層的窗口大小,我所用到的是最大池化層操作,也就是在滑動(dòng)窗口內(nèi)選出一個(gè)最大值作為像素值,而我這個(gè)窗口為[1,2,2,1],池化層的步長為[1,2,2,1],如圖4-9所示:圖4-9卷積層與池化層的定義示意圖我所定義好的卷積層為通過有Weight值和Bias值所組成線性關(guān)系的,然后是得到的一個(gè)數(shù)值在進(jìn)行relu激活函數(shù)進(jìn)行一些非線性影響。同時(shí)卷積層與池化層的padding值都為“SAME”,這樣就不會(huì)降低圖片的尺寸?,F(xiàn)在就是卷積操作階段,構(gòu)建卷積神經(jīng)網(wǎng)絡(luò)+全連接層操作,如圖4-10所示:圖4-10卷積操作示意圖神經(jīng)網(wǎng)絡(luò)是建立2層卷積層和全連接層,通過調(diào)用Weight權(quán)重值與Bias偏置常量值,通過字典的搜索方式得到你所定義好的Weight值和Bias值,然后調(diào)用卷積層方法和池化層方法,進(jìn)而對圖像數(shù)據(jù)的特征值進(jìn)行卷積操作,取出所需要的特征值。模型訓(xùn)練與結(jié)果顯示卷積神經(jīng)網(wǎng)絡(luò)大概搭建好了之后,為了可以不斷更新卷積神經(jīng)網(wǎng)絡(luò)當(dāng)中所重要的參數(shù),并且提高訓(xùn)練模型的準(zhǔn)確率,我們需要一個(gè)優(yōu)化器來幫我們解決問題。當(dāng)然為了能夠看清模型的好壞,我們還需要一個(gè)損失函數(shù)loss值。優(yōu)化器(optimizer):這次實(shí)驗(yàn)所用到的優(yōu)化器是AdamOptimizer算法,這個(gè)算法是可以尋找一個(gè)全局最優(yōu)的優(yōu)化算法,在這個(gè)時(shí)候還需講一個(gè)參數(shù),這是優(yōu)化器中一個(gè)重要的參數(shù):學(xué)習(xí)率(Learningrate),它的大小會(huì)改變優(yōu)化器中目標(biāo)函數(shù)是否準(zhǔn)確,當(dāng)然還會(huì)影響到訓(xùn)練數(shù)據(jù)的時(shí)候時(shí)間的長短,所以在初次訓(xùn)練模型的時(shí)候可以盡量設(shè)置變高些。損失函數(shù)(loss):loss在Tensorflow在訓(xùn)練模型當(dāng)中需要提及的一個(gè)參數(shù),我們可以根據(jù)loss的數(shù)值進(jìn)而分析網(wǎng)絡(luò)的好壞。首先是調(diào)用卷積操作的方法conv_net(),得到網(wǎng)絡(luò)預(yù)測值,然后是定義loss函數(shù),利用Tensorflow中reduce_mean()方法,它是計(jì)算張量tensor的平均值,而softmax_cross_entropy_with_logits_v2()方法是計(jì)算softmax(logits)和labels之間的交叉熵,然后就是優(yōu)化器的選擇,優(yōu)化器有著GradientDescentOptimizer()、AdadeltaOptimizer()、AdagradOptimizer()、MomentumOptimizer()、AdamOptimizer()等等幾種優(yōu)化方法,它可以加速神經(jīng)網(wǎng)絡(luò)的訓(xùn)練時(shí)長,我的實(shí)驗(yàn)所用到的是AdamOptimizer(),它利用了反向傳播算法不斷的修正權(quán)重和偏置項(xiàng),也在運(yùn)行中不斷更新學(xué)習(xí)率,實(shí)驗(yàn)所用的learning_rate為0.01。如圖5-1所示:圖5-1定義loss函數(shù)與優(yōu)化器示意圖然后就是進(jìn)行初始化CNN中的參數(shù)變量sess.run(init),如圖5-2所示:圖5-2初始化CNN變量示意圖通過迭代循環(huán),然后不斷的更新Weight權(quán)重和bias偏置值,訓(xùn)練網(wǎng)絡(luò)特征圖,得到所需要的特征值,如圖5-3所示:圖5-3迭代CNN的示意圖訓(xùn)練好模型之后,要對模型進(jìn)行儲(chǔ)存,如圖5-4所示:圖5-4保存模型示意圖這次實(shí)驗(yàn)經(jīng)過卷積神經(jīng)網(wǎng)絡(luò)的訓(xùn)練結(jié)果,隨著訓(xùn)練時(shí)間的不斷改變,準(zhǔn)確率也不斷改變。圖5-5訓(xùn)練數(shù)據(jù)模型部分準(zhǔn)確率示意圖一段時(shí)間的訓(xùn)練之后,我得到的模型準(zhǔn)確率穩(wěn)定在70%中,如圖5-6所示:圖5-6準(zhǔn)確率示意圖圖5-6中很明顯的可以看出,隨著時(shí)間的不斷過去,實(shí)驗(yàn)所用到的模型準(zhǔn)確率不斷的增加,而且一開始訓(xùn)練模型的時(shí)候變化比較大,接著就是趨于平緩的狀態(tài),最后在70%~80%之間,訓(xùn)練的準(zhǔn)確率與測試的準(zhǔn)確率基本相同。手勢識(shí)別經(jīng)過基于Tensorflow的卷積神經(jīng)網(wǎng)絡(luò)訓(xùn)練的模型之后,得到了所需要的測試模型,然后進(jìn)行保存,如圖6-1所示:圖6-1保存的訓(xùn)練模型示意圖然后進(jìn)行對模型進(jìn)行提取,可以提取模型中的Weight值和Bian值,我們需要加載.meta文件構(gòu)建圖,我們在保存圖片的時(shí)候就已經(jīng)將圖結(jié)構(gòu)也同樣保存下載了,所以不需要重新進(jìn)行搭建了,只要導(dǎo)入進(jìn)去就行了。圖6-2提取模型示意圖接著是我們通過攝像頭的功能,得到了手勢圖像的時(shí)候,進(jìn)行對圖像的一些處理完成之后,然后進(jìn)行模型的測試,得到的結(jié)果如圖6-3所示:圖6-3模型測試結(jié)果示意圖最后是模型的實(shí)時(shí)檢測,我們通過一個(gè)貪吃蛇游戲,用手勢識(shí)別對貪吃蛇移動(dòng)的方向進(jìn)行控制。我使用了python當(dāng)中Pygame庫,構(gòu)建了一個(gè)簡單的貪吃蛇游戲,Pygame庫是一個(gè)跨平臺(tái)的Python庫,它是一個(gè)免費(fèi)的并且開源的python編程庫,專門為電子游戲而設(shè)計(jì)的,其中還包含聲音、輸入輸出函數(shù)、圖像、圖形化界面等等。它簡化了游戲設(shè)計(jì)本身的邏輯代碼和高強(qiáng)度編程。首先定義好游戲角色的樣子,如圖6-4所示:圖6-4貪吃蛇游戲圖片示意圖設(shè)置好游戲的一些障礙,如圖6-5所示:圖6-5障礙示意圖利用pygame庫中的函數(shù)用來檢測按鍵等的事件,得到貪吃蛇上下左右或者停止是命令,或者通過CNN所訓(xùn)練出來的模型,然后通過攝像頭的捕捉,得到的圖

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論