編者按:本文來自微信公眾號「新智元」(DI:AI_era),來源:Github; Arxiv ,編輯:文強、金磊;36氪經授權轉載。
總有那麼一些細節,你瞪大雙眼拼了命想看清卻依然奈不了何,比如下面這個:
跟得上球嗎?要看清男子羽毛球比賽的細節實在不容易
有時候想盯住飛來飛去的羽毛球,非常吃力,這就是人類肉眼的極限。
你或許會說,好解決啊,用慢速回放功能就行了。
確實可以回放,但慢速回放的前提,是攝像機一開始就捕捉到了這些細節。如今,一些大型體育賽事已經用上了工業高速攝像頭,為的就是在裁判的裁決引發爭議時,可以用慢鏡頭回放來判定結果。
但是,沒有專業的高速攝像頭怎麼辦?
像我們用智慧型手機拍的視頻,記錄下生活中很多美好,隨風飄逝的晚霞,又或者池塘濺起的漣漪,還有孩子們在泳池裡潑水嬉戲,如果都能夠放慢了觀看,必將帶來全新的感受。
正因如此,當今年計算機視覺頂會CVPR舉行時,英偉達團隊的一篇能讓手機拍攝的視頻也「高清慢速播放」的論文,在業界引發了很大的反響。
這項被稱為Super SloMo的工作,使用深度神經網絡,對視頻中缺失的幀進行預測並補全,從而生成連續慢速回放的效果。
更贊的是,他們提出的方法,能夠排除原視頻幀當中被遮擋的像素,從而避免在生成的內插中間幀裡產生模糊的偽像(artifact)。
值得一提,這篇論文的第一作者,是本碩畢業於西安交通大學、現在麻薩諸塞大學阿默斯特分校讀博四的 Huaizu Jiang。第二作者 Deqing Sun 是英偉達學習與感知研究小組的高級研究員,本科畢業於哈工大,碩士讀的港中文,在布朗大學取得博士學位後,在哈佛 Hanspeter Pfister 教授的視覺研究小組做過博士後。
感受一下Super-SloMo生成的「慢速回放」效果:
注意,左右兩邊都是Super SloMo生成的視頻。左邊是原始慢速視頻,右邊是將這個結果再放慢4倍的效果,如果不告訴你中間的細節(幀)是神經網絡生成的,你會不會把它們當做真的慢速回放?來源:Huaizu Jiang個人主頁
實際用手機拍攝的畫面是這樣的,對比後,意識到Super SloMo補充多少細節了嗎?
論文作者稱,他們能將30FPS(畫面每秒幀數)的視頻變為480FPS,也即每秒幀數增加了16倍。
根據Super SloMo項目主頁,作者表示,使用他們未經優化的PyTorch代碼,在單個NVIDIA GTX 1080Ti 和 Tesla V100 GPU上,生成7個解析度為1280*720的中間幀,分別只需要0.97秒和0.79秒。(補充說明:從標準序列30-fps生成240-fps視頻,一般需要在兩個連續幀內插入7個中間幀。)
Super SloMo效果展示。來源:NVIDIA
效果當然稱得上驚豔。然而,令很多人失望的是,論文發布時並沒有將代碼和數據集公開,儘管作者表示可以聯繫 Huaizu Jiang 獲取部分原始資料。
僅在論文中提到的數據和示例。來源:Super SloMo論文
今天,有人在 Github 上開源了他對 Super-SloMo 的 PyTorch 實現。這位ID為atplwl的Reddit用戶,在作者提供的adobe24fps數據集上預訓練的模型(下圖中pretrained mine),實現了與論文描述相差無幾的結果。
現在,這個預訓練模型,還有相關的代碼、數據集,以及實現條件,都能在GitHub上查到。
自稱新手的atplwl表示,他目前在努力完善這個GitHub庫,接下來預計添加一個PyThon腳本,將視頻轉換為更高的fps視頻,歡迎大家提供建議。
Super SloMo PyTorch實現地址(點擊閱讀原文訪問):https://github.com/avinashpaliwal/Super-SloMo
代碼在手,再看論文——前文已經說過,從已有視頻中生成高清慢速視頻是一件非常有意義的事情。
除了專業的高速攝像機尚未普及到每個人手裡,人們用手機拍攝的視頻 (一般為240FPS) 想要放慢的時刻是不可預測的,要實現這一點就不得不用標準幀速率來記錄所有視頻,但這樣做需要的內存過大,對行動裝置來說耗電量也花不起。
現在,計算機視覺領域,除了將標準視頻轉換為更高的幀速率之外,還可以使用視頻插值來生成平滑的視圖轉換。在自監督學習中,這也可以作為監控信號來學習未標記視頻的光流。
不過,生成多個中間視頻幀 (intermediate video frame) 是具有挑戰性的,因為幀必須在空間和時間上是連貫的。例如,從30-fps標準序列生成240-fps視頻,需要在兩個連續幀內插入7個中間幀。
成功的解決方案不僅要正確解釋兩個輸入圖像之間的運動(隱式或顯式),還要理解遮擋 (occlusion)。 否則,就可能導致插值幀中產生嚴重的偽像,尤其是在運動邊界附近。
現有方法主要集中於單幀視頻插值,而且已經取得了不錯的進展。然而,這些方法不能直接用於生成任意高幀率視頻。
雖然遞歸地應用單幀視頻插值方法生成多個中間幀是一個很不錯的想法,但這種方法至少有兩個限制:
首先,遞歸單幀插值不能完全並行化,速度較慢,因為有些幀是在其他幀完成後才進行計算的(例如,在七幀插值中,幀2取決於0和4,而幀4取決於0和8)。
其次,它只能生成2i-1個中間幀。因此,不能使用這種方法有效生地生成1008 - fps 24幀的視頻,這需要生成41中間幀。
論文 Super SloMo: High Quality Estimation of Multiple Intermediate Frames for Video Interpolation 提出了一種高質量的變長多幀插值方法,該方法可以在兩幀之間的任意時間步長進行插值。
其主要思想是,將輸入的兩幅圖像扭曲到特定的時間步長,然後自適應地融合這兩幅扭曲圖像,生成中間圖像,其中的運動解釋和遮擋推理在單個端到端可訓練網絡中建模。
Super SloMo效果展示:注意在放慢過渡區域對偽像的處理。
具體來說,首先使用流量計算CNN來估計兩幅輸入圖像之間的雙向光流,然後線性融合來近似所需的中間光流,從而使輸入圖像發生扭曲。這種近似方法適用於光滑區域,但不適用於運動邊界。
因此,Super SloMo 論文作者使用另一個流量插值CNN來細化流近似並預測軟可見性圖。
通過在融合之前將可見性圖應用於變形圖像,排除了被遮擋像素對內插中間幀的貢獻,從而減少了偽像。
Super SloMo網絡架構
「我們的流計算和插值網絡的參數都獨立於被插值的具體時間步長,是流插值網絡的輸入。因此,我們的方法可以並行生成任意多的中間幀。」作者在論文中寫道。
為了訓練該網絡,團隊從YouTube和手持攝像機收集了240-fps的視頻。總量有1.1K視頻剪輯,由300K個獨立視頻幀組成,典型解析度為1080×720。
然後,團隊在其他幾個需要不同插值數量的獨立數據集上評估了訓練模型,包括Middlebury 、 UCF101 、慢流(slowflow)數據集和高幀率(high-frame-rate) MPI Sintel。
實驗結果表明,該方法明顯優於所有數據集上的現有方法。 團隊還在KITTI 2012光流基準上評估了無監督(自監督)光流結果,並獲得了比現有最近方法更好的結果。