【論文閱讀】Frame-Recurrent Video Super-Resolution (FRVSR)
今天要整理一篇最近閱讀的文章,這篇文章是2018年Mehdi S.M. Sajjadi發表在CVPR的一篇有關視頻超分辨率的文章。目前作者並沒有公開源碼,但是我在GitHub上看到有其他大牛復現了論文源碼,我暫時還沒跑這篇文章的代碼,不過後面會整理我所跑過的論文代碼。
Abstract
摘要中,作者首先說明了目前比較前沿的視頻超分辨率方法是使用CNN和運動補償結合的。一些優秀的方法都是採用處理一個batch的LR來生成一個HR,這樣做的缺點有兩個:1)每個低分辨率幀會被處理多次,增加了計算量;2)每個輸出幀僅根據輸入幀獨立估計,限制了系統生成時間連貫性的結果的能力。故,作者提出了一個端到端訓練的視頻超分辨率幀循環網絡框架(FRVSR) ,它是使用前面生成的HR結果來估計下一幀的輸出,這有助於促進輸出結果的時間連貫性,同時也減少了計算量。
Introduction
主要講述了超分辨率問題及其應用,歸類了幾種方法,此處略過…(太懶了,不想全部翻譯一遍)下面直接說重點!!!在本文提出的FRVSR網絡,有以下兩點好處:1)每個輸入幀只被處理一次;2)前一幀的信息通過生成的HR估計來促進下一幀的輸出。
文章的貢獻:
- 提出了一個循環框架,使用前一幀估計的HR生成下一幀的輸出,有利於促進時間上一致;
- 提出的框架可以在更大的時間範圍內傳播信息,並不增加計算;
- 文章進行了大量的實驗,分析了不同網絡設計的性能。
FRVSR Framework
FRVSR網絡結構如下圖,一共有五部分構成:光流估計FNet、上採樣光流Upscaling、warp前幀、映射到低維空間Map和超分辨率重建SR。
1.FNet光流估計網絡
整個網絡的第一步是光流估計,主要是估計低分辨率輸入和之間的光流特徵圖,輸出經過正則化處理的,第一部分用公式表達如下:
FNet網絡,輸入的是和concate之後的6通道圖像(假設圖像是三通道的情況下),然後經過6個組件,通道數從32增加到256,再減回64,最後還有三層,卷積數爲32的層,leaky relu激活層和卷積數爲2的層,最終得到輸入圖像的光流,這裏的每一層卷積核大小都是,步長爲1,leaky ReLU的參數爲0.2。具體結構如下圖,(頂部是SRNet,底部是FNet):
2.Upscaling flow上採樣光流:
第二部分是將上一部分在低維空間得到的光流使用雙線性插值上採樣到高維空間中,其公式表達如下:
從直接上採樣光流開始,接着後面處理的方法都跟其他論文的方法有較大的不同。這個上採樣工作,博主認爲帶有些粗糙,但具體實現效果如何還有待探究。
3.Warping previous output:
第三部分是將上採樣得到的光流,根據前一幀的結果warp,得到當前對齊的幀。一般大衆的方法都是將當前的輸入和光流進行warp的,這也是這篇文章創新的點之一,改進了以前的多幀輸入,輸入幀被重複處理多次的不足。該部分用公式表示如下:
4.Mapping to LR space 映射到低維空間:
第四部分的工作是將warp後得到高維空間的輸出估計再映射回低維空間,這步的意義是儘量將大計算量的工作都丟在LR空間上完成,而HR空間儘量減少計算。該步使用的方法是tensorflow的space_to_depth,這個方法跟亞像素卷積層有點類似,亞像素卷積層是將變成,是屬於上採樣操作,而這個space_to_depth是與其相反,可以認爲是下采樣操作,將變成,具體公式表達如下:
這個操作是從圖像中提取已移動的低分辨率網格並將其放入通道尺寸(這句話是直譯的, 有點難翻譯,所以特意把原文附上:“which extracts shifted low resolution grids from the image and places them into the channel dimension”),如果上面的描述不太懂,那上圖應該比較好理解。
5.Super Resolution超分辨率重建:
第五部分是超分辨率重建了!!!這也是最後一部分,先將前面得到的內容(主要是兩部分內容:經過mapping的和當前輸入幀)都連接起來,然後饋送進SRNet網絡,該網絡結構圖在上面第2部分的圖,然後得到最終的輸出。所有的部分整合成一條公式表達,如下:
到這裏,FRVSR的網絡結構就介紹完畢,然後接下來就到了損失函數部分了。
Loss Function
整個網絡的損失函數其實由兩部分組成,分別是 和 ,它們分別應用在兩個主要網絡中FNet和SRNet。可以看FRVSR Framework部分的右圖。左圖是網絡結構,右圖是損失函數部分。應用在SRNet,公式表達如下:
而 應用在FNet中,因爲沒有實際的光流數據集,所以增加了一個輔助的loss來幫助FNet生成更真實的光流,公式如下:
故,整個網絡總的損失爲
實驗參數說明
文章使用的數據集來自於vimeo.com的,由40個高分辨率視頻(720p, 1080p和4k)組成。將視頻下采樣2倍,裁剪成256*256大小的視頻作爲HR;再對HR使用高斯模糊,下采樣4倍得到的LR。輸入是10個連續的幀,這些連續的幀沒有場景突變的情況,也不包含關鍵幀 (爲什麼不包含關鍵幀?這個操作是我看過的視頻超分辨率都會採用的手段,我還不知道這是爲什麼,如果你知道,記得評論告訴我!謝謝啦) ,初始化是第一幀是一張黑色的圖。學習率固定是,batch size爲4。具體參數等我嘗試跑一遍再來補充。。今天的整理先到這裏啦!
總結
看完整篇文章,最大的收穫來源於Warping previous output 部分,這確實能達到作者所說的保持輸出幀在時間上達到一致的效果,還有作者把所有需要計算的工作都轉移到了低維空間上進行,這大大地減少了計算量。針對這文章,我提出個人一點點小小的見解或者說疑惑點,本篇文章主要改進點在Warping previous output 這裏,作者遵循着每一幀只使用一次的原則,前面的光流估計部分以及上採樣光流,都稍稍有些粗糙,因爲它們都是在低維空間上進行的,那麼提取到的特徵並沒有那麼地準確,還是有些不足。涉及這個領域並不深,所以見解也不深,還是要多閱讀文章!!!快過年啦,在這裏也提前祝大家新年快樂,心想事成~~
如果文章對你有幫助,那你點個贊,鼓勵一下我這個程序媛!附上文章的地址:
https://arxiv.org/abs/1801.04590v3
本文是原創作品,轉載需要註明出處!