天天看點

端到端視訊編碼:DVC

官方開源代碼位址:https://github.com/GuoLusjtu/DVC

DVC是一個端到端的視訊編碼模型,之前也有過一些基于DNN的視訊編碼方法,但是通常是使用DNN模型替換視訊編碼的某個子產品,整體的訓練流程不是端到端的。

DVC将傳統的基于塊的編碼架構的所有子產品都使用神經網絡替換,圖1(a)是傳統的視訊編碼架構,圖1(b)是DVC架構。

端到端視訊編碼:DVC

圖1

符号定義

端到端視訊編碼:DVC

 表示視訊序列,  是第t幀,

端到端視訊編碼:DVC

  是對應的預測幀,

端到端視訊編碼:DVC

  是重建/解碼幀。 

端到端視訊編碼:DVC

 表示殘差,

端到端視訊編碼:DVC

  是殘差的重建/解碼值。 

端到端視訊編碼:DVC

 是運動向量, 

端到端視訊編碼:DVC

 是對應的重建值。由于編碼過程中還會進行變換量化,

端到端視訊編碼:DVC

  變換的結果為 

端到端視訊編碼:DVC

 , 

端到端視訊編碼:DVC

 變換結果是

端到端視訊編碼:DVC

  。

DVC架構

運動估計和壓縮

使用CNN進行光流估計,得到的結果作為運動資訊

端到端視訊編碼:DVC

  。其中運動資訊還會經過MV編解碼網絡進行壓縮。如圖1(b)中Optical Flow Net、MV Encoder Net、MV Decoder Net。

運動補償

運動補償網絡motion compensation network主要根據前面獲得的光流計算預測幀  

端到端視訊編碼:DVC

變換、量化和反變換

和傳統的DCT、DST變換不同,這裡使用殘差編解碼網絡進行非線性變換。殘差  

端到端視訊編碼:DVC

非線性變換的為  

端到端視訊編碼:DVC

, 

端到端視訊編碼:DVC

 量化為 

端到端視訊編碼:DVC

 。

端到端視訊編碼:DVC

  通過殘差解碼網絡可以得到重建的殘內插補點  

端到端視訊編碼:DVC

熵編碼

量化的運動資訊  

端到端視訊編碼:DVC

 和殘差

端到端視訊編碼:DVC

  要編碼為比特流,為了估計比特數,使用Bit rate estimation net擷取  

端到端視訊編碼:DVC

 和 

端到端視訊編碼:DVC

 的分布。 

幀重建

幀重建過程和傳統編碼架構一樣。

MV編解碼網絡

端到端視訊編碼:DVC

圖2 MV編解碼網絡

圖2是MV的編解碼網絡,Conv(3,128,2)表示卷積操作,卷積核為3x3,輸出128通道,步長2。GDN/IGDN是非線性變換函數。

如果輸入光流  

端到端視訊編碼:DVC

的尺寸是MxNx2,MV編碼網絡的輸出 

端到端視訊編碼:DVC

 的尺寸則為M/16 x N/16 x 128, 

端到端視訊編碼:DVC

 量化為 

端到端視訊編碼:DVC

 。MV解碼網絡将 

端到端視訊編碼:DVC

 解碼為

端到端視訊編碼:DVC

  。此外, 

端到端視訊編碼:DVC

 還要用于熵編碼過程。

運動補償網絡

給定前一幀的重建幀 

端到端視訊編碼:DVC

 和

端到端視訊編碼:DVC

  ,運動補償網絡可以生成目前幀的重建幀

端到端視訊編碼:DVC

  ,如圖3。

端到端視訊編碼:DVC

圖3 運動補償網絡

這裡的運動補償是像素級的,是以可以提供更精準的時域資訊,避免了傳統的基于塊的運動補償的塊效應等,是以不需要環路濾波。網絡詳細情況請參考論文。

殘差編解碼網絡

殘差資訊通過圖1中的殘差編解碼網絡進行編碼,這個網絡是高度非線性的,和傳統的DCT等相比可以更充分的挖掘非線性變換的能力。

訓練政策

損失函數

端到端視訊編碼:DVC

訓練的目标是減小失真的同時降低碼率。其他d(.)計算失真的函數,用MSE計算失真,H(.)表示估計碼率。如圖1所示,重建幀、原始幀和估計的碼率都會輸入損失函數。

量化

殘差和運動向量都需要量化後才能進行熵編碼,但是量化本身是不可微的,是以論文在訓練階段通過加一個均勻噪聲來代替量化。

端到端視訊編碼:DVC

其中alpha是均勻噪聲。

在推理階段直接使用取整操作,

端到端視訊編碼:DVC

碼率估計

為了平衡碼率和失真,需要在編碼過程中估計殘差和運動向量的碼率,估計碼率需要求得資料的熵,即要擷取資料的分布,論文通過一個CNN實作。

緩存曆史幀

由于在運動估計和運動補償中需要用到參考幀,參考幀是網絡輸出的前一幀的重建幀,即第t幀需要第t-1幀的重建幀,第t-1幀需要第t-2幀的重建幀,以此類推需要在GPU中儲存所有幀,當t非常大時這是不可能的。論文提出線上更新政策,每個疊代更新一幀。

實驗設定

資料集:

論文使用Vimeo-90K資料集進行訓練,它包含89800個視訊序列。使用UVG資料集和HEVC标準序列進行驗證。

評價名額:

使用PSNR和MS-SSIM評價失真,使用bpp衡量碼率。

實作細節:

使用4個lambda(256、512、1024、2048)分别訓練了4個模型,每個模型使用Adam優化器訓練,初始學習率設為0.0001,beta1設為0.9,β2設為0.999。當loss穩定後學習率除以10,mini-batch設為4。訓練圖像分辨率是256x256。使用tensorflow架構訓練,在兩張Titan X GPU上耗時7天完成訓練。

實驗結果

端到端視訊編碼:DVC

圖4 部分實驗結果

圖4是部分實驗結果,可以看見在大部分資料集上論文方法比H264在PSNR和MS-SSIM上都更優。和H265相比,中MS-SSIM名額上性能相近。論文使用MSE計算失真,如果MS-SSIM則品質會進一步提高。

總結

論文使用DNN模型将傳統視訊編碼架構的每個部分都進行了替換實作了端到端的編碼,進而可以整體進行訓練。關于各個模型的具體資訊可以參考論文和開源實作https://github.com/GuoLusjtu/DVC

繼續閱讀