Facebook 新算法:如何讓 360 度視頻體驗不再眩暈和抖動
引用本文由 ARinChina(www.arinchina.com)原創,轉載請聯繫 ARinChina(微信 ID:arinchinaservice)
從專業相機到消費者手持攝像機,目前市面上已有數十款可以拍攝 360 度視頻的機器,規格和質量也各有千秋。隨着這些相機的普及,360 度視頻內容的範圍和容量也在不斷擴大,人們開始在各種場合和環境中拍攝 360 度視頻。
然而,拍攝時卻很難避免晃動、保持相機穩定,特別是用手持相機拍攝運動對象(如騎山地自行車和徒步旅行)的時候。到目前為止,大多數視頻穩定技術都是為窄視場視頻設計的,如用手機拍攝的傳統視頻,但這些技術在拍攝 360 度視頻時卻不怎麼好用。
因此,Facebook 決定為 360 度視頻的拍攝,開發一項新的視頻穩定技術。目前,這項技術已在測試中,預計將支持 Facebook 和 Oculus 平台。
Facebook 將這項新技術命名為“變形旋轉”運動模型,混合 3D-2D 技術用於優化模型參數,讓 360 度視頻更流暢。在視頻質量相同的情況下,它能有效減少 10%~20% 的比特率,提高效率。在通信和計算機術語中,比特率表示在單位時間內可以傳輸多少數據。
在標準機器上,這項新技術能以每幀小於 22 毫秒的速度穩定 360 度視頻。事實上,這個穩定速度比正常播放視頻的速度更快。
除此之外,Facebook 的新技術還讓 360 度視頻也能快進,把一段宂長的視頻(如長時間騎車)用更快、更好玩的方式播放。
為了達成這一功能,Facebook 在主體穩定算法之外,又開發了一個 360 度延時攝影算法。隨着時間的推移,它改變了視頻幀時間戳的定時,以平衡攝像機的速率。
下面,就讓我們深挖一下 Facebook 新算法吧!
(騰訊視頻)
創建一個新的算法結構:混合 3D-2D + 變形旋轉模型
目前的視頻穩定算法大多使用相同的結構:跟蹤視頻中的運動,尋找適配的運動模型,使運動變得更平穩,產生穩定的輸出幀。算法之間主要的區別在於——如何為視頻中運動建模。
大多數算法都是為窄視場視頻設計的,用的是單一參數化二維運動模型,如全畫幅視角(單應)扭曲。全畫幅指的是相機裏的感光元件的尺寸,跟原來的一張膠片大小一樣,為 36*24mm。
雖然這些方法簡單有效,但過於簡單的模型無法描述複雜的運動,例如前景和背景的視差和抖動。
更先進的算法則採用更靈活的運動模式,但還只存在於學術出版物中。而這些先進算法,雖然能處理更復雜的運動,但又限制了視頻拍攝的靈活性,以避免產生可見的幾何變形。
另一類算法在三維環境下操作。通過重建攝像軌跡和場景的幾何模型,並在三維環境中推理出穩定視頻。因為採用了更準確的模型,這些算法具有更高的平穩能力。但三維重建方法操作起來比較慢,而且不穩定。
因此,Facebook 這次的混合 3D-2D 穩定架構,正式結合以上兩類算法的優點。該架構只在關鍵幀的幾秒間隔之內使用三維分析,並不是完全重建,只估算相對運動,因而更容易解決操作穩定性問題。
三維算法的用處體現在,它能夠分辨出被拍攝的物體,究竟是在做旋轉運動,還是平移運動。
對於內部幀(關鍵幀之間的剩餘幀),Facebook 採用二維方法優化,採用了一種新的“變形旋轉”模式,讓視頻運動儘可能的平穩。
“變形旋轉”模式類似於一個全局循環,但允許輕微局部變形。Facebook 優化了模型參數,使其可以處理並撤消一定程度的平移抖動(如拿着相機走動時帶來的上下襬動)、滾動快門偽影(rolling shutter artifacts)、快門變形(lens deformations)和拼接贋像(stitching artifacts)。
因此,來認識下混合 3D-2D 結構的優勢:
- 精度:比純粹的二維方法更準確,因為使用了更強大的三維分析以穩定關鍵幀。
- 魯棒性(Robust):比純三維方法更穩定,因為 Facebook 採用三維分析估算相對旋轉,而無需完全重建。所謂“魯棒性”,是指控制系統在一定(結構,大小)的參數攝動下,維持某些其它性能的特性。
- 正則化:固定關鍵幀為內幀二維優化提供了一個正則參數,可以限制變形旋轉運動模型,避免擺動偽影。
- 速度:混合架構的性能比單純進行三維分析或二維優化速度更快。
如何工作?
與現有的穩定算法類似,Facebook 也從視頻中的運動特徵點開始追蹤。特徵點既是一個點的位置辨識,同時也説明它的局部鄰域具有一定的模式特徵。
由於 Facebook 輸入的視頻採用的是等量矩形投影,因而畫面兩端高度扭曲,於是把幀數轉換成不那麼扭曲的立方體貼圖(採用 256×256 分辨率),讓運動跟蹤能夠順利進行。
由於追蹤產生的灰度圖像質量很高,Facebook 得以在視頻亮度平面上直接執行,避免因 YUV 到 RGB 的轉換而浪費時間(YUV 和 RGB 為色彩編碼方法)。
Facebook 採用 KLT 跟蹤算法追蹤關鍵點,並採用了一個重要概念——關鍵幀。關鍵幀非常重要,可以用來估計被拍攝物體的相對旋轉,為二維優化提供正則參數。關鍵幀散佈在視頻的不同位置,有些地方更密集,有些則較少一些。
然後,Facebook 採用五點算法估計連續關鍵幀之間的相對轉動,來估算兩個攝像機之間的相對旋轉和平移。五點算法是指,當攝像機在兩幅圖像之間的運動為純平移運動時,給定 5 對圖像對應點,則可以線性確定本質矩陣。
用 3D 感知算法來估計旋轉的優勢在於,它能夠區分平移運動和旋轉運動。完成對所有關鍵幀旋轉的預估後,把它進行逆變換,與視頻的第一幀對齊。
現在,所有的關鍵幀已經穩定下來,就把它們鎖定,而後把注意力放到中間幀的旋轉上。
正如前文所述,對中間幀採用的是二維優化的方法,而不是三維分析法。優化的目的是讓非關鍵幀的軌跡儘可能的平穩。由於中間幀的旋轉已經固定了,提供的正則參數可以用來收斂非關鍵幀的軌跡。
在解決相機抖動問題的時候,往往會殘餘一定量的抖動,如前文提及的少量平移、滾動快門、次優鏡頭校正和拼接贋像。Facebook 的目的是增加一些靈活的運動模型,用來適應和撤銷輕微的圖像變形。
在“變形旋轉”模型中,Facebook 用 6 個散落在不同位置的局部旋轉代替全局單旋轉,讓局部低頻偏差從純旋轉變成數據。
這一點至關重要,因為可以防止因運動模型太靈活而造成的漂移。Facebook 希望解決問題用的是引入更多數據,而非單純的刪除偽影。
優化速度、性能和效率
Facebook 開發這一新算法的目的,是讓用户可以觀看流暢穩定的 360 度視頻,畢竟用户也不想把時間浪費在等待視頻上傳。因此,即便這一算法適用於 GPU,Facebook 也希望能在 CPU 上運行。
所以,Facebook 的做法是:選取一個 8*8 像素區域,用傳統的包圍盒算法計算其座標,其他區域用雙線性差值運算。
這種新算法比包圍盒算法運算速度更快,與單純用包圍算法進行計算相比,顯示效果差不多,但大大提高的運算效率。包圍盒算法是用一個簡單的圖形代替複雜形狀的算法。
下圖總結了各算法階段的性能,測量的是單個幀輸入 / 輸出 1080p 分辨率和時間。
事實上,Facebook 新算法的穩定速度,是比正常播放一段視頻要快的:
播放視頻的時候,顯示每一幀大約需要 30 毫秒,而穩定一幀只需 20 毫秒。通過改進算法,Facebook 可以讓直播的 360 度視頻每一幀都不發生抖動。
除了速度之外,Facebook 還對效率進行了優化。
因為 360 度視頻並不裁剪任何拍攝到的畫面,所以可以被還原到最初的版本,因此穩定算法可以提高 360 度視頻的比特率(比特率越高,傳送數據速度越快)。但對於視頻播放不會有任何影響,因為體驗過 360 度視頻的人大多已經習慣了旋轉的視圖。
穩定算法能夠有效節省比特率,下圖分析了通 x264 庫(一個免費的軟件庫)把視頻編碼為 H.264/MPEG-4 AVC 格式時比特率的消耗,橙色代表滑雪,藍色代表停下來休息。
如圖所示,比特率的節省概率在 10%~20% 之間,取決於編碼器的設置。
延時攝影算法
由於 Facebook 的新算法讓 360 度視頻看起來非常平滑,所以可以用來創建加速延時視頻。創建一個延時攝影 360 度視頻只需刪掉一些內容,但每幀序列都應該能連接起來。
然而,延時攝影拍攝的一個共同點是平穩的平衡相機速率。例如,在拍攝一個滑雪視頻時,滑雪者時而加快速度,時而停下休息,相機速率也在不斷變化。
為了模擬一個不斷移動的延時攝影鏡頭,需要暫時地平衡速度,並跳過休息的部分。
要做到這一點,首先用二維近似和平均運動矢量,估計每一幀的相機速率。然後,用時間中位數和低通濾波器把視頻二次處理一下。低通濾波器是容許低於截止頻率的信號通過、但高於截止頻率的信號就不能通過的電子濾波裝置。
通過相機預估速率,就可以改變原視頻的時間戳。這樣一來,就可以創建加速視頻,把宂長的視頻縮短。
下一步
Facebook 表示,這項新算法還在測試當中,希望能夠得到用户的反饋。用户現在可以試着上傳 360 度視頻,把高質量,且觀感更舒適的視頻與朋友們分享。
接下來,Facebook 將致力於改進延時攝影算法,希望在不久的將來,能用到實時 360 度視頻中。
引用本文編譯自 Facebook Code,原文標題為 360 video stabilization: A new algorithm for smoother 360 video viewing 。
題圖來源:qz
資料來源:愛範兒(ifanr)