基於內容自適應的視頻超分辨率算法-SRVC


1. 介紹

論文全名是《Efficient Video Compression via Content-Adaptive Super-Resolution》,作者全部來自麻省理工計算機科學與人工智能實驗室(MIT CSAIL),這篇論文主要是使用視頻超分辨率(video super-resolution)技術來完成視頻壓縮任務,從而應用於視頻的傳輸(節省帶寬)。

2. 算法詳解

2.1 傳統視頻編碼管線

眾所周知,將圖像序列轉成一個視頻可以大大減少數據存儲量(絕大部分情況)。但是,生成的視頻如果要在網絡上傳播的話會嚴格收到網絡帶寬的限制。在固定帶寬(固定傳輸速率)的情況下,使用更高的視頻壓縮算法(同時保證視頻質量不損失,或者損失在一定范圍內),可以傳輸更高分辨率的視頻。比如,1M的帶寬,使用某個視頻壓縮算法只能傳輸480P的視頻,在使用了更加高效的另外一個視頻壓縮算法,可以傳輸720P了。

目前常用的視頻壓縮算法有H.264、H.265等。這里以H.265為例,其工作原理大致如下:
在這里插入圖片描述
在上面加入超分的思想,就是先把1080P的視頻下采樣至480P,壓縮傳過去解碼后,再用超分變回1080P的視頻,大致流程如下
在這里插入圖片描述
這樣的好處是視頻壓縮算法真正要壓縮的其實是480P的視頻,所以傳輸的數據量會大大減少。壞處則是傳輸者在下采樣視頻的時候其實已經丟掉了一部分信息,而接收者最后獲得的1080P視頻的質量很大程度上依賴於超分算法的選擇。超分算法可以使用最簡單的Bicubic(雙三次插值)。

Bicubic網上的資料很多,簡單來說它跟bilinear(雙線性插值)一樣,插值的結果依賴鄰域的像素,也就是可以用圖像中的卷積來完成。但是Bicubic的卷積kernel是固定的,這就很不科學。“科學”來講,kernel應該根據圖像中的不同區域產生不同的變化。

此外,視頻經過H.265編碼、解碼后,已經不是原來的視頻了(因為H.265是有損壓縮),所以超分的過程還需要盡量恢復這里丟失的信息。

於是,輕量級的超分網絡SRVC來了!

2.2 本算法管線

下圖是論文里的pipeline。
在這里插入圖片描述
在傳輸視頻之前要先做個准備。首先用超分的數據集(啥都可以)訓練SRVC(網絡結構后面講),然后參數給傳輸者和接收者各一份。

視頻傳輸開始,首先看左邊的傳輸者。1080P的原始視頻經過“Downsampler”下采樣(具體算法來自一篇專利[1])變成480P(編號①),然后經過“Content Encoder”編碼(壓縮)視頻。編碼的視頻一邊傳送給接收者(即“Content Stream”);另一邊,編碼的視頻再經過“Content Decoder”變回480P視頻(編號②,不等於①號視頻,∵有損壓縮),將②號視頻和原始的1080P視頻輸入“Model Encoder”,把它們分別作為input和GT來繼續訓練SRVC網絡(所以網絡學習了編解碼過程損失的信息),只對訓練過程中網絡梯度最大(代表影響最大)的1%的參數進行更新,並把這些參數的變化Δ,傳輸給接收者(即“Model Stream”)。

Model Encoder中只選取了梯度最大的1%的參數,是為了減小傳輸模型參數的帶寬。此外,Model Encoder將輸入的視頻分割成了5s的視頻,因此Model Stream每5s傳輸一次更新的參數,進一步減小了帶寬。假設網絡參數存儲類型為Float16(16bit),網絡參數量為 $M=2.210^6$ ,選取參數的比例$\eta=1%$,視頻分割后時長$\tau=5s$,則傳輸網絡參數的帶寬為$(16+log(M))\eta M/ \tau \approx 1.6*10^5bit/s \approx 20KB/s$,其中, $log(M)$ 底為2,表示用二進制來表示網絡中某個參數的idx

再來看接收者這邊。接收者把傳輸者發送過來的經過編碼的視頻(即“Content Stream”),通過“Content Decoder”變回480P視頻(編號③,等於②號視頻)。此外,接收者還把傳輸者發過來的網絡參數的變化Δ(即“Model Stream”)加到自己的SRVC上,這樣傳輸者和接收者手里的SRVC網絡的參數就都一樣了。最后,接收者將③號視頻(480P)用更新過的SRVC網絡超分到1080P即可(即“Super-Resolution Upsampler”)。

2.3 SRVC網絡結構

前面2.1節說了,SRVC的一部分原因是為了解決bicubic中kernel固定的問題。所以SRVC的步驟如下:
在這里插入圖片描述

  • 首先將輸入的低分辨率(LR)圖片,分割成了5*5像素大小的patch(“Space-to-Batch”);
  • 然后對於每一個patch(即圖片的local信息),通過“Adaptive Conv”學習其專有的weight(kernel和bias),再用這個weight卷積這個patch,得到這個patch的ouput feature;
  • 接着,將每個patch的ouput feature按照patch分割的方法逆向拼接回去(“Batch-to-Space”)
  • 最后,通過普通的卷積(“Regular Conv”)和“PixelShuffler x4”,輸出高分辨率(HR)的圖片

3. 最后


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM