3D-CNN各层计算
3D CNN框架結(jié)構(gòu)各層詳細(xì)計(jì)算過程
這篇博客主要詳細(xì)介紹3D CNN框架結(jié)構(gòu)的計(jì)算過程,我們都知道3D CNN 在視頻分類,動(dòng)作識(shí)別等領(lǐng)域發(fā)揮著巨大的優(yōu)勢,前兩個(gè)星期看了這篇文章:3D Convolutional Neural Networks for Human Action Recognition,打算用這個(gè)框架應(yīng)用于動(dòng)態(tài)表情識(shí)別,當(dāng)時(shí)對這篇文章的3 D CNN各層maps的計(jì)算不怎么清楚,所以自己另外對3D CNN結(jié)構(gòu)層數(shù)maps等等重新計(jì)算了一下,下面是主要的計(jì)算過程。在介紹計(jì)算過程之前,先介紹一下 2D CNN和3D CNN的區(qū)別
?
采用2D CNN對視頻進(jìn)行操作的方式,一般都是對視頻的每一幀圖像分別利用CNN來進(jìn)行識(shí)別,這種方式的識(shí)別沒有考慮到時(shí)間維度的幀間運(yùn)動(dòng)信息。下面是傳統(tǒng)的2DCNN對圖像進(jìn)行采用2D卷積核進(jìn)行卷積操作:
?
使用3D CNN能更好的捕獲視頻中的時(shí)間和空間的特征信息,以下是3D CNN對圖像序列(視頻)采用3D卷積核進(jìn)行卷積操作:
?
上面進(jìn)行卷積操作的時(shí)間維度為3,即對連續(xù)的三幀圖像進(jìn)行卷積操作,上面的? 3D卷積是通過堆疊多個(gè)連續(xù)的幀組成一個(gè)立方體,然后在立方體中運(yùn)用3D卷積核。在這個(gè)結(jié)構(gòu)中,卷積層中每一個(gè)特征map都會(huì)與上一層中多個(gè)鄰近的連續(xù)幀相連,因此捕捉運(yùn)動(dòng)信息。例如上面左圖,一個(gè)卷積map的某一位置的值是通過卷積上一層的三個(gè)連續(xù)的幀的同一個(gè)位置的局部感受野得到的。
需要注意的是:3D卷積核只能從cube中提取一種類型的特征,因?yàn)樵谡麄€(gè)cube中卷積核的權(quán)值都是一樣的,也就是共享權(quán)值,都是同一個(gè)卷積核(圖中同一個(gè)顏色的連接線表示相同的權(quán)值)。我們可以采用多種卷積核,以提取多種特征。
3D CNN架構(gòu)
輸入層(input):連續(xù)的大小為60*40的視頻幀圖像作為輸入。.
硬線層(hardwired,H1):每幀提取5個(gè)通道信息(灰度gray,橫坐標(biāo)梯度(gradient-x),縱坐標(biāo)梯度(gradient-y),x光流(optflow-x),y光流(optflow-y))。前面三個(gè)通道的信息可以直接對每幀分別操作獲取,后面的光流(x,y)則需要利用兩幀的信息才能提取,因此
H1層的特征maps數(shù)量:(7+7+7+6+6=33),特征maps的大小依然是60* 40;
卷積層(convolution C2):以硬線層的輸出作為該層的輸入,對輸入5個(gè)通道信息分別使用大小為7* 7 *?3的3D卷積核進(jìn)行卷積操作(7*? 7表示空間維度,3表示時(shí)間維度,也就是每次操作3幀圖像),同時(shí),為了增加特征maps的個(gè)數(shù),在這一層采用了兩種不同的3D卷積核,因此C2層的特征maps數(shù)量為:
(((7-3)+1)*? 3+((6-3)+1)*? 2)*? 2=23*? 2
這里右乘的2表示兩種卷積核。
特征maps的大小為:((60-7)+1)*? ((40-7)+1)=54 *?34
降采樣層(sub-sampling S3):在該層采用max pooling操作,降采樣之后的特征maps數(shù)量保持不變,因此S3層的特征maps數(shù)量為:23 *2
特征maps的大小為:((54 / 2) *??(34 /2)=27 ?*17
卷積層(convolution C4):對兩組特征maps分別采用7 6 3的卷積核進(jìn)行操作,同樣為了增加特征maps的數(shù)量,文中采用了三種不同的卷積核分別對兩組特征map進(jìn)行卷積操作。這里的特征maps的數(shù)量計(jì)算有點(diǎn)復(fù)雜,請仔細(xì)看清楚了
我們知道,從輸入的7幀圖像獲得了5個(gè)通道的信息,因此結(jié)合總圖S3的上面一組特征maps的數(shù)量為((7-3)+1)?* 3+((6-3)+1)?* 2=23,可以獲得各個(gè)通道在S3層的數(shù)量分布:
前面的乘3表示gray通道m(xù)aps數(shù)量= gradient-x通道m(xù)aps數(shù)量= gradient-y通道m(xù)aps數(shù)量=(7-3)+1)=5;
后面的乘2表示optflow-x通道m(xù)aps數(shù)量=optflow-y通道m(xù)aps數(shù)量=(6-3)+1=4;
假設(shè)對總圖S3的上面一組特征maps采用一種7 6 3的3D卷積核進(jìn)行卷積就可以獲得:
((5-3)+1)* 3+((4-3)+1)* 2=9+4=13;
三種不同的3D卷積核就可獲得13* 3個(gè)特征maps,同理對總圖S3的下面一組特征maps采用三種不同的卷積核進(jìn)行卷積操作也可以獲得13*3個(gè)特征maps,
因此C4層的特征maps數(shù)量:13* 3* 2=13* 6
C4層的特征maps的大小為:((27-7)+1)* ((17-6)+1)=21*12
降采樣層(sub-sampling S5):對每個(gè)特征maps采用3 3的核進(jìn)行降采樣操作,此時(shí)每個(gè)maps的大小:7* 4
在這個(gè)階段,每個(gè)通道的特征maps已經(jīng)很小,通道m(xù)aps數(shù)量分布情況如下:
gray通道m(xù)aps數(shù)量=?gradient-x通道m(xù)aps數(shù)量=?gradient-y通道m(xù)aps數(shù)量=3
optflow-x通道m(xù)aps數(shù)量=optflow-y通道m(xù)aps數(shù)量=2;
卷積層(convolution C6):此時(shí)對每個(gè)特征maps采用7* 4的2D卷積核進(jìn)行卷積操作,此時(shí)每個(gè)特征maps的大小為:1*1,至于數(shù)量為128是咋來的,就不咋清楚了,估計(jì)是經(jīng)驗(yàn)值。
?
對于CNNs,有一個(gè)通用的設(shè)計(jì)規(guī)則就是:在后面的層(離輸出層近的)特征map的個(gè)數(shù)應(yīng)該增加,這樣就可以從低級的特征maps組合產(chǎn)生更多類型的特征。
通過多層的卷積和降采樣,每連續(xù)7幀圖像就可以獲得128維的特征向量。輸出層的單元數(shù)與視頻動(dòng)作數(shù)是相同的,輸出層的每個(gè)單元與這128維的特征向量采用全連接。在后面一般采用線性分類器對128維的特征向量進(jìn)行分類,實(shí)現(xiàn)行為識(shí)別,3DCNN模型中所有可訓(xùn)練的參數(shù)都是隨機(jī)初始化的,然后通過在線BP算法進(jìn)行訓(xùn)練。
下面是3DCNN各通道數(shù)量變化情況以及特征maps大小變化情況
?
總結(jié)
以上是生活随笔為你收集整理的3D-CNN各层计算的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 网络性能测试工具Iperf上手指南
- 下一篇: Windows Phone 7知识锦分享