一、背景:
是一家集產(chǎn)品數(shù)據(jù)、專業(yè)資訊、科技視頻、互動行銷為一體的復(fù)合型媒體網(wǎng)站。公司內(nèi)部每天都要對網(wǎng)站大量的文字,圖片,視頻進行處理。給視頻貼標簽,給文章配圖,分類等等。公司主要是依賴人工來處理這些信息的,但是人工處理存在著工作量大,成本高,效率低的問題。于是公司組建了大數(shù)據(jù)部門,希望通過科技的手段來緩解人工處理信息的壓力。
機器學(xué)習(xí)與神經(jīng)網(wǎng)絡(luò)(machinelearning):
那么什么樣的科技才能幫到我們呢?首先把目光投向了機器學(xué)習(xí),也就是所謂的machinelearning。機器學(xué)習(xí)簡單的說就是要讓電腦自己學(xué)習(xí),就像老師教學(xué)生數(shù)學(xué)題一樣,先給計算機展示一些例子,然后讓計算機自己去做題。希望通過這個理念來訓(xùn)練計算機思考,代替人力。能夠?qū)崿F(xiàn)機器學(xué)習(xí)的算法多種多樣,每種算法都有自己的特點和優(yōu)劣勢。而我想要重點介紹的一個比較先進的算法,人工神經(jīng)網(wǎng)絡(luò)(ArtificialNeuralNetworks,簡寫為ANNs)。它是一種應(yīng)用類似于大腦神經(jīng)突觸聯(lián)接的結(jié)構(gòu)進行信息處理的數(shù)學(xué)模型。神經(jīng)網(wǎng)絡(luò)的是一個較為新的算法概念。其出現(xiàn)使得機器學(xué)習(xí)有了突飛猛進的進展。人工神經(jīng)網(wǎng)絡(luò)在模式識別、智能機器人、自動控制、預(yù)測估計、生物、醫(yī)學(xué)、經(jīng)濟等領(lǐng)域已成功地解決了許多現(xiàn)代計算機難以解決的實際問題,表現(xiàn)出了良好的智能特性。而卷積神經(jīng)網(wǎng)絡(luò)(cnn)更是用途最廣的神經(jīng)網(wǎng)絡(luò)之一。它具有一定的抽象能力,可以提取數(shù)據(jù)的特征,魯棒性較強。也就是說如果同一組數(shù)據(jù)發(fā)生了變化,卷積神經(jīng)網(wǎng)絡(luò)也一樣可以適應(yīng)這些變化。例如時下流行的人臉識別,新款的iPhone8和iPhoneX應(yīng)用的正是卷積神經(jīng)網(wǎng)絡(luò)來做到的人臉解鎖。百度搜索引擎也利用了卷積神經(jīng)網(wǎng)絡(luò)實現(xiàn)了精準的黃色,垃圾,恐怖等非法圖片,非法網(wǎng)址的識別。
二、問題的提出:
由于目前谷歌等大型網(wǎng)絡(luò)公司對神經(jīng)網(wǎng)絡(luò)的深入研究?,F(xiàn)在卷積神經(jīng)網(wǎng)絡(luò)已經(jīng)能對文字和圖片的進行識別高效而準確的識別。但是對于視頻內(nèi)容的識別還處于開始階段。于是我想在卷積神經(jīng)網(wǎng)絡(luò)在視頻信息處理的可行性方面做出一點探究。而這次我把目光投向了游戲視頻。
游戲直播一直都是網(wǎng)絡(luò)直播行業(yè)的主力軍。而為了保留下精彩瞬間吸引更多觀眾,各大直播平臺也紛紛推出了自己的錄播平臺,上傳自己游戲主播的精彩視頻。但是,將整段整段的錄播內(nèi)容上傳十分耗費時間,保留這些視頻也十分耗費內(nèi)存。如果能對視頻進行切割,只保留有游戲的部分,除掉其它與游戲無關(guān)部分,將會大大緩解這些問題,并且還能方便看錄像的觀眾跳過等待時間。但是,對視頻進行分段十分耗費人力。中國目前知名的直播平臺douyuTV,僅游戲類主播每天就能產(chǎn)生上千個小時的錄播視頻。人力將無法有效地處理如此龐大的數(shù)據(jù)量,因此我想嘗試卷積神經(jīng)網(wǎng)絡(luò)是否能對這些游戲視頻做出高效的處理。本文將通過機器學(xué)習(xí)來建立“絕地大逃殺”這款游戲視頻的卷積神經(jīng)網(wǎng)絡(luò)模型,使其對這款游戲開始,游戲中,和結(jié)束3各階段進行識別。
三、問題的研究分析:
實驗對象分析:
絕地大逃殺是一款第一人稱視角射擊類游戲。游戲本身采用了當下比較流行MOBA類游戲模式。既游戲分為一場又一場的比賽,比賽之間相互獨立,且每局比賽有鮮明的開始和結(jié)束畫面,便于識別。在這方面與之相類似的還有很多人氣很高的游戲:LeagueofLegend,dota2,Overwatch,等等。如果我能通過機器學(xué)習(xí)對這款游戲的視頻進行分段,那么說明對其他游戲這類游戲也同樣可行。
算法分析:
現(xiàn)在存在著很多種卷積神經(jīng)網(wǎng)絡(luò),而我下面想要重點介紹2D卷積神經(jīng)網(wǎng)絡(luò),和3d卷積神經(jīng)網(wǎng)絡(luò)。這兩類卷積神經(jīng)網(wǎng)絡(luò)擅長于捕捉數(shù)據(jù)的特點并對其進行分類,正是我需要的算法。
2D卷積神經(jīng)網(wǎng)絡(luò):
2D卷積神經(jīng)網(wǎng)絡(luò)比傳統(tǒng)神經(jīng)網(wǎng)絡(luò)多出的部分就是卷積層和采樣層。比如我們想識別所有帶有狗的圖片,而現(xiàn)在輸入層是就是一張帶有狗的圖片。想要讓神經(jīng)網(wǎng)絡(luò)理解什么是狗,我們先要大致預(yù)測這張照片展現(xiàn)了多少狗的特征,這就是卷積的含義了。如上圖所示,如果我預(yù)測狗有40個特征,那么這一張照片將被分成40份(c1層),分別做檢測,每一份檢測一個特征。但是由于機器的限制,第一次卷積每一個特征的大小都是相同的,也就是說第一次卷積可能只檢測到5x5像素大小的狗的特征。而還有一些狗的更大的特征無法被檢測。于是我們要降采樣。保留c1層檢測到的特征的位置,把沒有特征的像素去掉。我們得到了一張更模糊的圖片(s1層),然后對這張更模糊的圖片再次卷積,然后再降采樣,如此往復(fù),直到圖片的像素少到難以判斷這是什么的時候。最后一步,把所有最后一層的小圖片們中的像素展開,形成一列,這一過程就是上圖的全連接。把它們輸入傳統(tǒng)人工神經(jīng)網(wǎng)絡(luò)分析,得到輸出,這到底是不是狗。
3D卷積神經(jīng)網(wǎng)絡(luò):
3D卷積神經(jīng)網(wǎng)絡(luò)和2D卷積神經(jīng)網(wǎng)絡(luò)的思路相似,都是通過不斷卷積,再降采樣來識別輸入數(shù)據(jù)的特征。但是與2D-cnn不同的是,3D-cnn側(cè)重于識別連續(xù)樣本中特征連續(xù)變化的特征。也就是說3D-cnn比較擅長處理連續(xù)變化的數(shù)據(jù)。所以3D-cnn多用于視頻識別。如上圖所示的是3D-cnn的卷積過程。首先把視頻按照幀數(shù)輸入到一個3維矩陣中。由于輸入層是一個3維矩陣,那么卷積所要捕捉的特征也會是3維的。假設(shè)我想捕捉在連續(xù)五幀里5x5像素大小的特征,那么卷積核就的大小就是一個5x5x5的三維矩陣。最后的輸出是上圖的“輸出特征圖”,對應(yīng)2D-cnn的C1層中的某一層。
四、問題的解決及驗證:
目前看來比較主流的處理視頻的算法是3d卷積神經(jīng)網(wǎng)絡(luò),這次我采用的是傳統(tǒng)的2d卷積神經(jīng)網(wǎng)絡(luò),以下是我的分析。
雖然說3d卷積神經(jīng)網(wǎng)絡(luò)在能更好的識別視頻中連續(xù)幀所包含的信息。然而,游戲視頻有自己的一些特性。在游戲開始,進行,和結(jié)束階段,視頻畫面往往會有很大的差異,例如“絕地大逃殺”這款游戲,游戲開始時玩家屏幕中會有一架飛機:
而游戲結(jié)束時顯示的是計分板:
大部分游戲都會有這種鮮明的畫面對比來告知玩家游戲開始,或結(jié)束了。所以用2d神經(jīng)網(wǎng)絡(luò)倆對這些幀做識別較為合適。3d卷積神逐幀會對視頻逐幀分析,捕捉到視頻的動態(tài)特點,但這些特點對視頻截取沒有額外的幫助。權(quán)衡之下我采用了傳統(tǒng)2d卷積神經(jīng)網(wǎng)絡(luò)。通過對游戲中這些關(guān)鍵幀的識別來達到對游戲內(nèi)容分段的效果。
然而2d神經(jīng)網(wǎng)絡(luò)也存在自己的問題。我第一次訓(xùn)練的時候從兩個游戲視頻中截取了532張圖片做訓(xùn)練,結(jié)果損失函數(shù)很快地就收斂了,準確率也一直高地驚人,僅僅10次訓(xùn)練就達到了100%。但是當我用該模型測試一段全新的視頻時,準確率確只有65%左右。經(jīng)過反復(fù)思考,我發(fā)現(xiàn)問題產(chǎn)生在我用于做訓(xùn)練的視頻太少,而我截取的樣本容量卻太多。雖然通過密集地截取視頻幀數(shù)可以獲得大量的訓(xùn)練樣本,但是這些樣本存在很大問題。鄰近幀數(shù)的圖片往往差異比較小,將這些差異極小的圖片大量地輸入神經(jīng)網(wǎng)絡(luò)會導(dǎo)致訓(xùn)練的準確率虛高,且模型容易訓(xùn)練過度。因此,這次我在訓(xùn)練時特別注意了這個細節(jié),找到了12段不一樣的視頻,只截取了1000張左右的圖片。
搭建神經(jīng)網(wǎng)絡(luò):
所有激活函數(shù)均采用了ReLU函數(shù)來作為激活函數(shù),以便加速收斂。卷積神經(jīng)模型,分3層卷積網(wǎng)絡(luò)。每層提取8x8大小的特征40個,每次卷積完后用2x2大小的filter進行maxpool。最后展開層有5400個神經(jīng)元,算上輸入層一共有7層。
Input:(3,68,120)float32
layer0:cnn1/Relu:0(68,120,40)float32
layer1:pool1:0(34,60,40)float32
layer2:cnn2/Relu:0(34,60,40)float32
layer3:pool2:0(17,30,40)float32
layer4:cnn3/Relu:0(17,30,40)float32
layer5:pool3:0(9,15,40)float32
layer6:flatten:0(5400,)float32
接下來對有5400個神經(jīng)元的展開層后面加一個50%dropout率的Dropout層。接下來第8,10,12層為全連接層,9,11層又是Dropout層,Dropout率均為50%。12層為輸出層,輸出3個值為某一幀是游戲開始,游戲中,游戲結(jié)束可能性的參數(shù)。
layer7:drop1/mul:0(5400,)float32
layer8:relu1/Relu:0(5000,)float32
layer9:drop2/mul:0(5000,)float32
layer10:relu2/Relu:0(1024,)float32
layer11:drop3/mul:0(1024,)float32
layer12:output/Identity:0(3,)float32
增加dropout層可以大大減少模型對樣本容量的需求,而且也可以防止過度訓(xùn)練。
最后,訓(xùn)練將采用minibatch來提高訓(xùn)練的速度。每十組數(shù)據(jù)分為一個batch。所以真正訓(xùn)練時的神經(jīng)網(wǎng)絡(luò)比上述的神經(jīng)網(wǎng)絡(luò)每一層都多一維度,且該維度一直為10,例如輸入層大小為(10,3,68,120)。
訓(xùn)練:
本次實驗在本人自己的工作電腦本上進行。Intel(R)Core(TM)i7-6700HQCPU@2.6Hz,英偉達GTX970顯卡。12個游戲視頻作為訓(xùn)練樣本,這些視頻全部來自于www.bilibili.com,從視頻中以游戲開始,游戲進行,游戲結(jié)束這3個階段較為平均地抽取了1013張截圖作為訓(xùn)練樣本。這些圖片又被以7:3的比例分為訓(xùn)練組和驗證組。取幀軟件為Windows自帶的ffmpeg,截取下的圖片大小為1280*720,為了減少內(nèi)存的壓力,用numpy把圖片轉(zhuǎn)換成120*68的大小。搭建神經(jīng)網(wǎng)絡(luò)時使用python作為編程語言,主要應(yīng)用tensorflow和tensorlayer來進行神經(jīng)網(wǎng)絡(luò)的搭建。
由于鄰近幀數(shù)的畫面可能會彼此之間十分相似,當這相似的兩張圖片分別被分進了訓(xùn)練組和驗證組便會導(dǎo)致驗證組的準確率虛高。所以為了減少這種情況干擾模型的準確率,驗證組中的畫面全部來自于與訓(xùn)練組不同的游戲視頻。訓(xùn)練時將對這1013張圖片反復(fù)訓(xùn)練200次,每過10次,輸出一次訓(xùn)練組和驗證組的損失參數(shù)和準確率。
結(jié)果:
訓(xùn)練結(jié)果由下圖看可見。橫軸坐標中從2到21,每個數(shù)據(jù)代表著10次運算后的平均值。只有橫坐標為1時,代表了訓(xùn)練了一次之后所得的結(jié)果。
損失函數(shù):
準確率:
除去第一組數(shù)據(jù)后的損失函數(shù):
除去第一組數(shù)據(jù)后的準確率函數(shù):
在200次循環(huán)計算過程中平均每次循環(huán)花費3.292319秒,整個程序大約耗時12分鐘。
五、總結(jié):
對比驗證組數(shù)據(jù)和訓(xùn)練組數(shù)據(jù),可以發(fā)現(xiàn)兩者之間存在的差異較小,說明搭建的模型比較真實的捕捉到了游戲中3個階段的特點,說明該2D-cnn模型克服了鄰近幀相似的問題。
從200次循環(huán)得到的數(shù)據(jù)來看,損失函數(shù)和準確率函數(shù)均有收斂的趨勢。但是在訓(xùn)練樣本只有12個視頻的情況下再進行更多的重復(fù)訓(xùn)練也不會更加提高模型的準確率,反而有可能過度訓(xùn)練。由于一個人力量有限,無法提供更多的訓(xùn)練樣本。如若能有更多的訓(xùn)練樣本和更好的硬件設(shè)備,相信可以訓(xùn)練出更加準確的模型來模仿這款游戲的進程從而對其進行分段。由此可見,通過2d卷積神經(jīng)網(wǎng)絡(luò)來對游戲視頻進行分段是完全可行的。
如果以后這個算法被改良后用于視頻分段和視頻截取,將大大節(jié)省人工處理視頻的時間。目前我的程序處理1000左右?guī)膱D片需要話費約3.2秒,1000/3.2也就是312.5幀每秒。而一般人眼可有效識別的幀數(shù)的頻率大概是24幀每秒。由此可見神經(jīng)網(wǎng)絡(luò)的運算速度遠遠高于人工的速度,約為人工的13倍。如果這種視頻分段方法被加以利用,可以大大減少人工時間。
此外除了對視頻進行簡單的分類,截取。對于特定游戲視頻加入對某些特點畫面的識別,例如許多游戲都有計分板,記錄玩家得分,對它們進行識別可以大致判斷玩家在這段視頻中的表現(xiàn)。又或者一些低概率發(fā)生的事件,發(fā)生時游戲畫面也會發(fā)生特定的變化。神經(jīng)網(wǎng)絡(luò)完全可以識別這些細節(jié),然后再對整個視頻的精彩程度加以判斷,把精彩的游戲視頻推送給感興趣的人。我們甚至還可以加入聲音的識別,對截取的視頻配上字幕,方便聽力不好的觀眾觀看。
-
神經(jīng)網(wǎng)絡(luò)
+關(guān)注
關(guān)注
42文章
4814瀏覽量
103646 -
函數(shù)
+關(guān)注
關(guān)注
3文章
4381瀏覽量
64897 -
機器學(xué)習(xí)
+關(guān)注
關(guān)注
66文章
8503瀏覽量
134635
發(fā)布評論請先 登錄
詳解深度學(xué)習(xí)、神經(jīng)網(wǎng)絡(luò)與卷積神經(jīng)網(wǎng)絡(luò)的應(yīng)用

評論