基於學習的編碼(五):MCNN
本文介紹的算法來自JVET-P0489,是對基於學習的編碼(三):ACNNLF的改進。ACNNLF是在線(online)訓練,而MCNN是離線(offline)訓練。
網絡結構
MCNN(Multiple CNN)是離線(offline)訓練,可以使用更深的網絡結構。
上圖是亮度分量的網絡結構,可以看出該網絡很深,有9個卷積層。
-
Inception layer都是3x3和5x5的32通道卷積。
-
Convolutional layer都是3x3的64通道卷積,且帶ReLU。
-
最後一個Convolutional layer是3x3的64通道卷積,且不帶ReLU。
其packing和unpacking操作和基於學習的編碼(一):使用CNN進行環路濾波一樣。輸入輸出以CTU爲單位(亮度爲128x128,色度爲64x64)。
上圖是色度分量的網絡結構,和亮度分量一樣,只不過輸出變爲2通道。
實現模式
在VTM6.0中有兩種實現MCNN的模式,一種是將其作爲環路濾波的一個階段,另一種是作爲後處理。
作爲環路濾波的一個階段的流程圖如下:
作爲後處理,MCNN作用於環外,如下圖。
對於亮度和色度塊需要在SEI中傳輸2比特表示當前塊的狀態:
-
0:當前塊不使用CNN。
-
1:當前塊使用第一個CNN。
-
2:當前塊使用第二個CNN。
-
3:當前塊使用第三個CNN。
訓練
使用DIV2K (800 images)數據集訓練,使用VTM6.0在QP爲{22,27,32,37}下生成重建圖像。
MCNN(以N=3爲例)訓練過程如上圖,和基於學習的編碼(三):ACNNLF訓練過程類似。
MCNN還有簡化的訓練過程如下圖。
-
首先訓練一個CNN,可以從訓練集中隨機選擇部分圖像參與訓練以加快訓練速度。
-
然後在整個訓練集上應用上面訓練好的CNN,根據PSNR排序將訓練集N等分。
-
在每個子集上訓練CNN。
簡化的訓練過程訓練N(默認N=3)個CNNs速度更快,但會有一定損失。
實驗
上面是將MCNN作爲環路濾波的一個階段的實驗結果。
上面是將MCNN作爲後處理的實驗結果。
感興趣的請關注微信公衆號Video Coding