本發(fā)明涉及一種立體視頻生成方法,尤其涉及一種基于3D卷積神經(jīng)網(wǎng)絡(luò)的單目轉(zhuǎn)雙目立體視頻生成方法。
背景技術(shù):
3D電影因其較強(qiáng)的真實(shí)感和沉浸感非常受觀眾們喜愛,近年來在電影市場中占了比較大的份額,在2010年至2014年間占據(jù)了北美票房總收入的14%~21%,此外,隨著虛擬現(xiàn)實(shí)(VR)市場的出現(xiàn),頭戴顯示設(shè)備也對3D內(nèi)容產(chǎn)生了進(jìn)一步的需求。
直接攝制成3D電影格式設(shè)備和制作成本都較高,從2D轉(zhuǎn)制3D電影便成為一種更理想的選擇。典型的專業(yè)轉(zhuǎn)制過程通常先通過手動創(chuàng)建每一幀的深度圖,然后用基于深度圖的渲染算法來將原始的2D視頻幀與深度圖結(jié)合生成立體圖像對。然而這樣的過程依然昂貴且需要耗費(fèi)高強(qiáng)度的人力操作。高昂的制作成本成為3D電影業(yè)大規(guī)模發(fā)展的主要絆腳石。
最近幾年來,許多研究人員尋求通過已有的3D模型庫、深度估計(jì)技術(shù)從單視頻序列來制作生成3D視頻的方法,目前深度信息的獲取可通過硬件和軟件兩種途徑。硬件獲取深度信息的設(shè)備有激光測距儀和微軟推出的3D體感攝像儀Kinect等。軟件方法常見的主要有多視圖立體法(multi-view stereo)、光度立體視覺法(photometric stereo)、色度成形法(shape from shading)、散焦推斷法(depth from defocus)以及基于機(jī)器學(xué)習(xí)的方法等。適用于2D轉(zhuǎn)制3D電影的主要是機(jī)器學(xué)習(xí)的方法,特別是近年來隨著深度學(xué)習(xí)框架的廣泛應(yīng)用,該框架也被應(yīng)用到深度估計(jì)中,如Eigen等首先用多尺度卷積神經(jīng)網(wǎng)絡(luò)(CNN)實(shí)現(xiàn)了一種端到端的單目圖像深度估計(jì),然而因?yàn)檩敵龅慕Y(jié)果尺寸受限,預(yù)測得到深度圖比輸入的原圖像要小很多,長和寬都只有原圖的1/16;后來,Eigen和Fergus對網(wǎng)絡(luò)結(jié)構(gòu)進(jìn)行了改進(jìn),先對原來實(shí)現(xiàn)的CNN的輸出進(jìn)行上采樣,再與原輸入圖像的卷積的結(jié)果連接后,進(jìn)一步用多個(gè)卷積層處理,使得神經(jīng)網(wǎng)絡(luò)更深,而最后的輸出深度圖的分辨率更高。
然而上述方法得到的深度圖仍存在輪廓不夠清晰,分辨率低等問題,此外,因視角變化而產(chǎn)生的遮擋等不可見部分補(bǔ)全問題仍難以解決。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明的目的在于針對現(xiàn)有技術(shù)的不足,提供一種單目轉(zhuǎn)雙目的立體視頻生成方法,通過訓(xùn)練3D深度全卷積神經(jīng)網(wǎng)絡(luò),達(dá)到將現(xiàn)有的2D視頻源自動轉(zhuǎn)換成能在3D設(shè)備上播放的立體視頻。
本發(fā)明的目的是通過以下技術(shù)方案來實(shí)現(xiàn)的:一種基于3D卷積神經(jīng)網(wǎng)絡(luò)的立體視頻生成方法,包括以下步驟:
準(zhǔn)備訓(xùn)練數(shù)據(jù),訓(xùn)練3D全卷積神經(jīng)網(wǎng)絡(luò),將2D視頻作為左眼視頻輸入訓(xùn)練得到的神經(jīng)網(wǎng)絡(luò)模型生成右眼視頻,最后將左右眼視頻合成3D視頻輸出。
訓(xùn)練數(shù)據(jù)通過網(wǎng)絡(luò)下載,使用足夠數(shù)量(至少20多部)非動畫3D電影,所有視頻首先分解為左眼視圖和右眼視圖兩部分,并將片頭、片尾、鏡頭過渡時(shí)可能出現(xiàn)的空白幀刪去,這樣可得到5000000幀左右的訓(xùn)練樣本,豐富的訓(xùn)練樣本將使訓(xùn)練得到的CNN有較強(qiáng)的泛化能力。
所構(gòu)造的3D全卷積網(wǎng)絡(luò)如圖1所示,全網(wǎng)絡(luò)由6個(gè)卷積層構(gòu)成,前兩個(gè)是3D卷積層,目的是充分利用時(shí)域相鄰幀的信息,對左右眼視差引起的遮擋或局部位移造成右視圖中出現(xiàn)部分不可見的空洞進(jìn)行自動補(bǔ)全,這些不可見的空洞中內(nèi)容很可能在鄰近的幀中出現(xiàn);3D卷積的示意圖如圖2所示,3D卷積層輸出的每一個(gè)像素值由相鄰3幀對應(yīng)位置3×3區(qū)域內(nèi)像素值與卷積濾波器卷積得到,時(shí)間窗寬度為3即對應(yīng)3個(gè)3×3的卷積核,這3個(gè)卷積核的權(quán)值各不相同,但在時(shí)空窗口滑動過程中保持不變;后面4個(gè)卷積層為2D卷積層,通過若干步的非線性變換將輸入的左眼視圖變換成右眼視圖。每一個(gè)卷積層的輸出都經(jīng)過ReLu函數(shù)激活后輸入到下一層。3D卷積核的大小均為3×3×3,邊緣未進(jìn)行填零擴(kuò)充(pad=0),步長為1(stride=1),由式(1)-式(3)知,經(jīng)過一次3D卷積,時(shí)域和空間域的窗口寬度均將收縮2個(gè)單位;2D卷積核的大小均為3×3,每個(gè)邊緣都擴(kuò)充了一個(gè)單位(pad=1),步長為1(stride=1),由式(1)-式(3)知,經(jīng)過每一個(gè)2D卷積層特征維度大小保持不變。
t1=(t0+2*pad-kernel_size)/stride+1 (1)
w1=(w0+2*pad-kernel_size)/stride+1 (2)
h1=(h0+2*pad-kernel_size)/stride+1 (3)
這個(gè)3D卷積神經(jīng)網(wǎng)絡(luò)的最終輸出為RGB三通道的彩色圖像,在附圖1和附圖2中,每一幀實(shí)際都包含三個(gè)通道,不同通道對應(yīng)不同的濾波器組,因此在圖1中每個(gè)3D卷積層有3組3×3×3的卷積核,每個(gè)2D卷積層有3組3×3的卷積核。5幀3通道的RGB圖像輸入3D卷積神經(jīng)網(wǎng)絡(luò)最終輸出1幀3通道的RGB圖像。
總體而言,一個(gè)鏡頭的連續(xù)5幀左眼視圖輸入到網(wǎng)絡(luò)將輸出1幀右眼視圖,且右眼視圖長寬均比左眼視圖收縮了4個(gè)單位,因此在訓(xùn)練網(wǎng)絡(luò)時(shí),僅將5幀輸入的中間幀的實(shí)際右眼視圖的中間區(qū)域與輸出進(jìn)行對齊求損失并反向傳播調(diào)整網(wǎng)絡(luò)參數(shù)。
由于時(shí)域相鄰幀之間的相關(guān)性僅在同一鏡頭內(nèi)存在,因此在訓(xùn)練網(wǎng)絡(luò)階段,輸入給網(wǎng)絡(luò)的左眼視頻首先要進(jìn)行鏡頭分割,以鏡頭為單位組織訓(xùn)練文件。本發(fā)明采用的鏡頭分割算法是基于模糊C均值聚類算法的。具體步驟如下:
首先將視頻的每一幀圖像從RGB(Red–Green–Blue)空間轉(zhuǎn)換到Y(jié)UV(亮度色度)空間,其轉(zhuǎn)換公式如下:
計(jì)算每一幀YUV通道的顏色直方圖,并按如下方法計(jì)算相鄰幀的幀間差:
其中,m為UV通道的直方圖區(qū)間數(shù),n為Y通道的直方圖區(qū)間數(shù),m<n,H(f,k)表示幀f中落在第k區(qū)間的像素個(gè)數(shù)。
對視頻的所有幀間差用模糊C均值聚類算法聚為三類:鏡頭變化類SC、疑似鏡頭變化類SSC、鏡頭不變類NSC。疑似鏡頭變化類是指難以判別鏡頭是否產(chǎn)生變化的那些幀。
模糊C均值聚類算法如下(該算法輸入為視頻相鄰幀間差序列,輸出為相鄰幀類別):
①初始化類別數(shù)c=3和指數(shù)權(quán)重w=1.5,將所有隸屬度值μik(i=1,…,c,k=1,…,n,此處n為幀間差序列的總數(shù))賦為1/c;
②用(6)式計(jì)算c個(gè)聚類中心ci,i=1,…,c;
③用(7)式計(jì)算價(jià)值函數(shù)J,如果它小于某個(gè)確定的閥值,或它相對上次價(jià)值函數(shù)值的改變量小于某個(gè)閥值,則算法停止;
④用(8)式計(jì)算新的隸屬度值μik并返回步驟②。
對于疑似鏡頭變化類SSC的處理如下:如果兩個(gè)連續(xù)的鏡頭變化幀SC(i)和SC(i+1)之間存在若干SSC幀SSC(k),k=j(luò),…,j+n-1,如果滿足條件
H_SSC(k)≥0.25*[H_SC(i)+H_SC(i+1)] (9)
則認(rèn)為幀SSC(k)為鏡頭變化產(chǎn)生處,其中H_SSC(k)表示SSC(k)的直方圖幀間差,H_SC(i)+H_SC(i+1)表示SC(i)和SC(i+1)的直方圖幀間差;當(dāng)然,鏡頭是不會在兩個(gè)相鄰的幀連續(xù)產(chǎn)生變化的,因此,一部分滿足式(9)條件的幀從中被剔除了。
計(jì)算訓(xùn)練樣本中所有左眼視圖的平均值,在訓(xùn)練時(shí),輸入到網(wǎng)絡(luò)的左眼視圖的每一幀需要減去該均值,同樣,在用訓(xùn)練好的網(wǎng)絡(luò)模型生成右眼視圖時(shí),輸入的左眼視圖也要減去該均值。
在圖1中,用隨機(jī)梯度下降法反向傳播調(diào)整網(wǎng)絡(luò)參數(shù)時(shí),用均方差計(jì)算損失函數(shù),即:
其中為3D卷積神經(jīng)網(wǎng)絡(luò)最后一層的輸出,Y為最初參與3D卷積5個(gè)連續(xù)幀的中間幀對應(yīng)的真實(shí)右眼視圖,n為輸出的像素點(diǎn)數(shù)量。訓(xùn)練網(wǎng)絡(luò)通過最小化該損失函數(shù)實(shí)現(xiàn),當(dāng)訓(xùn)練過程中該損失函數(shù)收斂,則訓(xùn)練結(jié)束。
在圖1中,在利用訓(xùn)練好的3D卷積神經(jīng)網(wǎng)絡(luò)模型通過輸入左眼視圖生成右眼視圖時(shí),需要對網(wǎng)絡(luò)的最后一層輸出在[0,255]區(qū)間內(nèi)就近取整,取整的結(jié)果為3通道RGB圖像,每一通道的灰階為落在[0,255]區(qū)間內(nèi)的整數(shù)值。
本發(fā)明的有益效果是:基于大數(shù)據(jù)集訓(xùn)練得到的深度卷積神經(jīng)網(wǎng)絡(luò)模型,由左眼視頻自動生成右眼視頻,最大可能減少立體視頻制作過程中的人力參與,從而提高立體視頻制作的效率,降低制作成本。
附圖說明
圖1:3D全卷積神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu);
圖2:3D卷積示意圖,圖中編號相同的卷積核共享權(quán)值。
具體實(shí)施方式
下面結(jié)合附圖和具體實(shí)施例對本發(fā)明的技術(shù)方案作進(jìn)一步說明。
立體視頻生成是在現(xiàn)有3D信號比較少的情況下出現(xiàn)的一種技術(shù),它能將日常觀看的2D電影或電視節(jié)目,通過運(yùn)算自動產(chǎn)生出3D的顯示效果。
如圖1所示,本發(fā)明實(shí)施例所述一種基于3D卷積神經(jīng)網(wǎng)絡(luò)的立體視頻生成方法,能夠?qū)F(xiàn)有的2D視頻源作為左眼視頻,通過3D卷積神經(jīng)網(wǎng)絡(luò)自動生成相應(yīng)的右眼視頻,然后將兩者結(jié)合轉(zhuǎn)換成可以在3D立體顯示設(shè)備上播放的視頻。
該方法包括以下步驟:
1)訓(xùn)練3D卷積神經(jīng)網(wǎng)絡(luò)。
為了防止在訓(xùn)練深度卷積神經(jīng)網(wǎng)絡(luò)時(shí)出現(xiàn)過擬合現(xiàn)象,需要準(zhǔn)備足夠數(shù)據(jù)的訓(xùn)練數(shù)據(jù),本發(fā)明使用從網(wǎng)絡(luò)上下載的20多部非動畫3D電影作為訓(xùn)練數(shù)據(jù),然后用FFmpeg命令將3D視頻分離成左眼和右眼JPEG圖像序列,在這些序列中刪去片頭片尾以及鏡頭切換中可能出現(xiàn)的空白幀。
所有的訓(xùn)練樣本通過裁剪或縮放統(tǒng)一至同樣的長寬,并計(jì)算出所有訓(xùn)練圖像的均值。
用發(fā)明內(nèi)容中所述的模糊C均值聚類方法對每一部電影分離的左眼JPEG圖像序列進(jìn)行鏡頭分割,然后將每個(gè)鏡頭的左眼圖像減去均值作為訓(xùn)練時(shí)的輸入數(shù)據(jù),對應(yīng)鏡頭右眼圖像去掉頭尾各兩幀,切除上下左右每邊各兩像素作為訓(xùn)練目標(biāo),保存為HDF5格式文件。
用[0,0.01]區(qū)間內(nèi)符合標(biāo)準(zhǔn)差為0.01的高斯分布的隨機(jī)數(shù)初始化3D卷積神經(jīng)網(wǎng)絡(luò)的各層卷積核參數(shù),各層初始學(xué)習(xí)率設(shè)置為0.01,每訓(xùn)練100000輪訓(xùn)練學(xué)習(xí)率減小為原來的1/10,動量設(shè)置為0.9。
用上述訓(xùn)練數(shù)據(jù)和參數(shù)設(shè)置訓(xùn)練如圖1所示的3D卷積神經(jīng)網(wǎng)絡(luò),當(dāng)式(10)所計(jì)算的損失趨于收斂(即該損失與上一輪損失的相對變化量小于閾值,如0.01)或訓(xùn)練趟數(shù)超過1000000趟,則訓(xùn)練結(jié)束。
2)用訓(xùn)練獲得的3D卷積神經(jīng)網(wǎng)絡(luò)模型由2D左眼視頻生成右眼視頻
將待轉(zhuǎn)換的2D視頻作為左眼視頻,用與訓(xùn)練時(shí)相同的方法轉(zhuǎn)換成圖像序列、用模糊C均值聚類算法進(jìn)行鏡頭分割、通過縮放或裁剪把圖像轉(zhuǎn)換成與訓(xùn)練圖像一樣大小,然后對每一幀減去訓(xùn)練圖像的均值,以鏡頭為單位輸入到3D卷積神經(jīng)網(wǎng)絡(luò)模型,因?yàn)樽詈笠粚泳矸e層的輸出結(jié)果是浮點(diǎn)值類型,而我們需要得到的是灰階為[0,255]的整數(shù)的三通道RGB圖像,所以網(wǎng)絡(luò)最后的輸出通過[0,255]區(qū)間就近取整后才是預(yù)期的右眼視圖,所謂就近取整,是指當(dāng)該值v∈[0,255]時(shí),則進(jìn)行四舍五入,當(dāng)v<0,則取0,當(dāng)v>255時(shí),則取255。每輸入5幀左眼視圖將生成中間的1幀右眼視圖,生成過程在時(shí)域以步長為1滑動向前,這樣,每個(gè)鏡頭除了前面2個(gè)初始幀和后面2個(gè)結(jié)束幀,其他幀都將得到其對應(yīng)的右眼視圖,每個(gè)鏡頭在視頻編輯過程中損失4幀是可以接受的。
3)將左右眼視頻合成為3D視頻
用圖1所示的網(wǎng)絡(luò)從左眼視頻生成右眼視頻時(shí),由于3D卷積層空間窗口的收縮,最后右眼視圖的長寬都比左眼視圖小4個(gè)像素,因此在合成之前先把左眼視圖上下左右的邊緣分別裁切去2個(gè)像素。這樣就得到了2個(gè)視點(diǎn)生成的2路虛擬像點(diǎn),合成2幅輸入顯示屏的視頻源,最后根據(jù)顯示屏的類型,從2幅視頻源中按照相應(yīng)的格式合成一輸入視頻源在顯示屏上顯示。
以上,僅為本發(fā)明的較佳實(shí)施例,但本發(fā)明的保護(hù)范圍并不局限于此,任何熟悉本技術(shù)領(lǐng)域的技術(shù)人員在本發(fā)明揭露的技術(shù)范圍內(nèi),可輕易想到的變化或替換,都應(yīng)涵蓋在本發(fā)明的保護(hù)范圍之內(nèi),因此,本發(fā)明的保護(hù)范圍應(yīng)該以要得要求所界定的保護(hù)范圍為準(zhǔn)。