錢聞卓
(杭州電子科技大學,杭州 310018)
自從進入了自媒體時代以后,越來越多的用戶在抖音、快手這樣的平臺來分享自己的生活視頻并且觀看別人的視頻。在抖音公布的2020年數據報告中,日活躍用戶已經突破了6億大關,這已經接近全國人口數量的一半。伴隨著視頻量的爆炸式增長,視頻的商業用途也在逐漸地擴大,在過去十幾年中,隨著計算機視覺技術的不斷發展,與視頻數據處理有關的人體動作識別[1]、目標檢測[2-3]等方法都在生活中被大規模推廣和應用,這大大提高了人們的生活效率和質量。其中人體動作識別技術是計算機視覺應用的一大代表,它在辦公交互、虛擬競技、虛擬游戲、醫療診斷、視頻監控等領域都有很廣泛的應用。近年來,人體動作識別技術取得了較快的發展,比較常用的傳統的動作識別方法有基于模板匹配的方法、基于概率統計的方法,以及基于語法的方法[4]。由于傳統的識別方法大部分需要人工提取特征,所以較為耗時耗力[5]。而隨著深度學習技術的發展,人們開始利用神經網絡技術完成一些分類任務,其中在2012年ImageNet大型視覺識別挑戰賽(ILSVRC)上,由于AlexNet的橫空出世,使像ImageNet這樣的大型數據集的圖像分類錯誤率大大下降[6],使人們更加注意到利用深度學習技術進行分類的優勢。此后,不少研究人員將目光轉向了深度學習研究中去。伴隨著深度學習技術的發展,行為動作識別的技術也得到了快速發展,其中,有基于無監督學習的方法構造網絡[7],也有基于循環神經網絡的識別方法[8],還有基于卷積神經網絡的識別方法,其中一種方法是基于雙流法來處理視頻數據[9],對其動作進行分類,該方法的缺點在于訓練速度較為緩慢,難以處理規模較大的實時視頻,另一種方法則是在2015年,由Facebook提出的C3D神經網絡[10],C3D神經網絡是直接將視頻數據作為輸入,來提取其特征,進行數據信息的傳遞,由于此過程的數據預處理過程很少,因此其運行時間得到大大縮短。該模型在UCF101數據集上進行訓練,識別的準確率是85.2%,速度達到313.9 fps,由于它的高速率,使此網絡應用前景會更加廣闊。
雖然C3D神經網絡的速率較快,但是其速率大小仍不適合在商業領域進行應用,而對于準確率,C3D神經網絡在UCF101數據上的準確率為85.2%,還有較大的提升空間。因此,在這些問題上,本文將進一步優化C3D神經網絡,來對其進行準確率的提升,訓練收斂速度的加快。
最原始的C3D神經網絡具有8個卷積層,8個通道數分別為 64、128、256、256、512、512、512、512,5個最大池化層、2個全連接層,以及1個softmax輸出層。其中視頻輸入是C×L×H×W,C為圖像通道,L為視頻序列的長度。Tran經過大量的實驗證明3×3×3的卷積核是3D卷積網絡的最佳選擇[10]。因此,在本網絡中,所有3D卷積濾波器均為3×3×3,步長為1×1×1。為了保持早期的時間信息,設置pool1核大小為1×2×2、步長1×2×2,其余所有3D池化層均為2×2×2,步長為2×2×2。每個全連接層有4096個輸出單元。整個網絡的結構以及各層的尺寸大小如圖1所示。

圖1 C3D網絡結構
該網絡的輸入尺寸大小是(3×16×112×112),對于這類尺寸,可以寫成(c×l×h×w)的形式。在這其中,c代表著通道的數量,l代表著輸入視頻幀的數量,h代表輸入高度,w代表輸入寬度。其中3D卷積濾波器內核尺寸可以寫為(d×k×k),其中d代表著3D卷積濾波器內核的深度,k代表著3D卷積濾波器內核的大小。此輸入通過1個數量為n、內核尺寸為(3×3×3)、步長以及padding均為(1×1×1)的3D卷積核,則輸出的特征圖尺寸為(n×l×h×w),并且在該原始網絡中使用的優化算法為SGD(隨機梯度下降),而激活函數為ReLU,并為防止過擬合現象而采用了Dropout正則化方法[5]。
原始的C3D神經網絡在層與層之間采用了ReLU激活函數,并且優化器采用了SGD優化算法,本文針對這兩個方面,將ReLU激活函數優化為Mish激活函數,用Adam優化算法替換了SGD優化算法,形成了MA-C3D神經網絡(Mish-Adam C3D network,后文統一簡寫為MA-C3D),以此來提高模型的識別準確率。
在以往的卷積神經網絡訓練當中,多數網絡通常都會使用的激活函數為修正線性單元(recti?fied linear unit,ReLU)[11],該激活函數的計算表達式較為簡單,沒有一些過多的復雜運算。并且,由于此激活函數沒有飽和區,梯度消失的現象就不會再次發生。因此,它被廣泛地應用在各個網絡結構中。但是,ReLU在訓練過程中并不適應較大的梯度輸入,會造成部分神經元“壞死”的情況,導致相應的參數無法更新,并且它在原點并不可導、不平滑,因此會導致在梯度優化過程中會出現一些意想不到的問題。上述的問題會導致輸入數據的信息難以深入地向網絡層傳遞,進而影響網絡層之間的參數的優化更新,最后導致應用的模型的識別準確率出現下降。因此,在這樣的情況下,本文采用了一種新的激活函數,即Mish激活函數,該函數相比ReLU激活函數,有以下幾方面的優點:
(1)該函數沒有上界。因此不會出現因為飽和而導致梯度為零的情況,從而可以使參數更好地進行更新,進而使模型的識別準確率得到上升。
(2)該函數存在下界。在負半軸有較小的權重,因此可以防止ReLU函數出現的神經元壞死的現象,此模型也可以產生更強的正則化效果,并且如果出現輸入為負數的情況,同樣能夠進行參數更新和信息的傳遞,進而使最后訓練的參數更加準確,使模型識別更加準確。
(3)Mish激活函數的每個點基本都是平滑的。因此會更加容易優化并且更加容易泛化,而且隨著網絡更深,輸入信息也可以更深入的流動。此外,在x<0的部分中,該函數保留了少量的負信息,這樣也有利于輸入信息更好的流動。進而使參數的更新更加準確,使得最后的模型識別更加準確。
Mish的函數圖像如圖2所示。其中該激活函數的輸入x為輸入信息的加權和,y為x經過Mish激活函數的函數值,并且該激活函數已經在文獻[12]中已經證明在多個任務實驗里Mish的激活效果要優于ReLU的激活效果。

圖2 Mish激活函數
對于優化器,本文采用Adam優化算法[13]來進行優化,選用Adam優化算法而不是以往的隨機梯度下降(stochastic gradient descent,SGD)[14]算法的原因是隨機梯度下降算法是在每一次僅僅取一個樣本進行優化,這樣會比較容易引入隨機噪聲,導致準確率下降。并且,隨機梯度下降的學習率一般是固定的,因此如果學習率的選擇不當,會導致難以得出理想中的最優解。因此,基于上述的問題,本文采取了另一種優化算法,即Adam算法,Adam算法相比于SGD算法它結合了動量和RMSprop算法的優點,它利用梯度的一階矩估計和二階矩估計來動態調整每個參數的學習率,這樣使得學習率不再是一個定值,并且學習率的調整也有一個確定的范圍,這會使得參數的變化比較平穩,且能夠很好地處理噪音數據帶來的問題。因此,損失值能達到全局最優解的概率也就越大,最后可以更容易得到神經網絡最優參數,進而使模型的識別準確率達到更高。
本文實驗所采用的實驗設備是Intel(R)Xeon(R)Platinum 8260C CPU,主頻為2.30 GHz,內存為16 GB,硬盤為1 T,GPU為NVIDIA GeForce RTX 3090,GPU顯存為24 GB。操作系統為Ubuntu 18.04,編程語言選擇Python 3.7,深度學習框架采用PyTorch1.7.1,主要依賴庫為Cuda 11.0、Cudnn 8.0、OpenCV 4.4、Pillow 7.2、NumPy 1.19.5、Matplotlib 3.3.3。
本文實驗采用了UCF101數據集對其進行實驗,它是收集自YouTube的UCF101數據集[15],它是一個現實動作視頻的動作識別數據集,它提供了來自101個動作類別的13320個視頻,總共時長約27 h。UCF101在動作方面提供了最大的多樣性,它也包含了像攝像機的大量移動、雜亂的背景、亮度不一的照明條件等干擾因素,這些問題都對模型的泛化能力提出了很高的要求,增大了模型訓練的難度。
對于自身的數據視頻,首先將視頻轉化為連續的幀,之后本文按照每相隔3幀取1幀的原則,得到能覆蓋此動作信息的連續幀,如果最后的幀數沒有到16幀,則可以降低采樣的步長,使得每個動作得幀數達到16幀及以上。利用這樣的方式,可以獲取整個動作較為完整的信息。轉化為幀圖像之后,我們按照16∶5∶4的比例劃分訓練集、測試集和驗證集。并且在訓練時,將每幀大小統一為171×128,以進入本文的網絡進行訓練。同時,為了進一步增強模型的魯棒性,我們利用了對圖像的隨機像素丟棄、圖像添加噪聲以及對圖像進行幾何變化等手段來對原始數據進行增廣。
本實驗通過UCF101數據集進行訓練,總共進行了50次迭代,訓練時長約為18.7h,準確率變化曲線以及損失函數曲線如圖3、圖4所示,最終可達到的行為動作識別準確率可達到85.3%,原始C3D網絡在本實驗中達到的準確率為79.4%,由此可見,本方法能夠有效地提高準確率。

圖3 UCF101準確率變化曲線

圖4 UCF101函數損失值變化曲線
在此基礎上,本文也和一些經典模型,比如Two-stream雙流卷積神經網絡[16]、LTSM Compos?ite Model[17]、R-C3D[18]進行了比較,經過模型之間準確率的比較,證實了本文提出的模型的準確率要好于上述三種模型,如表1所示。

表1 UCF101各數據集對比
本文采用對C3D神經網絡進行了結構上的一些改進,形成了MA-C3D神經網絡,基于以上的改進方法,可以得到以下的結論:
(1)改進后的MA-C3D神經網絡,在UCF101數據集上驗證,經過測試之后,可以得到改進后的MA-C3D網絡的準確率要高于原始的C3D網絡及其他的一些卷積神經網絡模型算法。
(2)Mish函數雖然可以讓網絡的信息能夠更加深入的流動,進而提高模型的準確率,但是會因此降低模型訓練的速度,增大一定的計算量。
(3)本文主要對模型準確率的提高進行了實驗與研究。但是,在模型參數量的大小優化方式上,并沒有進行更深的研究,后續將考慮對最后的全連接層進行替換,換為以全局平均池化[19]加上全連接層的方式手段來減少參數量的計算,進而對模型就行更深的優化。
(4)本文主要對激活函數和優化器進行了優化,網絡結構優化較小。因此,后續將考慮采用逐層卷積[20]以及將特征金字塔方法應用于3D卷積神經網絡[21-22]等方法來對網絡進行優化。
(5)本文通過對激活函數和優化器的變化來提高C3D網絡訓練的準確度,這是一種非常簡單有效的改變結構的方式,未來可以從這些角度進一步對各個神經網絡模型進行優化,讓其更好應用到生產生活中。