H.266/VVC相關技術學習筆記17:VTM6.0中的DMVR(解碼端運動矢量細化)技術前言:DMVR在JEM中的實現

今天先大致講一下關於DMVR技術在VVC早期版本JEM中的具體實現方式,DMVR(Decoder-side motion vector refinement)技術就是解碼端運動矢量細化,意思就是在解碼端纔對運動矢量進行細化,而且編碼端也不用傳任何附加語法元素或者信息。

DMVR具體的過程如下圖所示:
第一步生成雙邊模板:在解碼端得到初始的Merge雙向MV後,在運動補償階段,對該塊的兩個初始MV形成的預測塊進行加權,得到一個新的預測塊,作爲一個初始預測值(即模板),記爲P_Ori;
第二步計算初始SAD:然後用該模板和初始的兩個MV生成的預測塊(圖中的藍色線所指示的塊)計算SAD(sum of absolute differences)(前向列表和後向列表分別計算),作爲初始的SAD最小值用於後續的SAD的比較,選出最優的候選塊及其相應的候選MV。
第三步比較SAD選最優:在初始預測塊的周圍幾個像素的範圍內搜索對應的候選塊(圖中的紅色線所指示的塊),總共是9個像素點位置,一個初始點以及周邊8個點。然後計算P_Ori與各個候選塊之間的差值並計算對應的SAD,與初始的SAD最小值相比較,選出SAD最小的那個候選塊,得到該候選塊的新的MV最爲當前編碼塊的最優MV,也就是對MV進行了細化。
在這裏插入圖片描述
這裏需要解釋幾個問題:
①爲什麼要選用SAD作爲代價比較的基準,而不是用RDcost?
因爲該技術只是用於解碼端的MV的修正,因此這時候解碼端已經接收到了傳過來的碼流信息,此時的碼率是確知的不變的,因此碼率已經無法作爲率失真的衡量基準,只有失真可以衡量,所以只需要SAD計算Cost就足夠了。

②該技術的背後的原理在哪?
答:我的個人理解就是,在編碼端已經得到了可能最優的MV,但在解碼端認爲這或許不是最優,因此要將其修正,而修正的方式就是利用原始MV預測得到的預測值(輸出)反過來作爲一個輸入,再對MV左適當的細化,這就是一個正反饋的過程,也類似於深度神經網絡中的反向傳播過程,利用神經末端的輸出反過來影響權重和神經元偏置。

③目前VTM6.0中由於覺得細化的MV並不一定比原始的MV更好,因此在DMVR的過程中優先考慮使用原始的MV,來減少DMVR細化過程中的不確定性帶來的性能上的損失。
關於該問題的詳細解析詳見DMVR的後續:VTM中的DMVR

未完待續~~~~~~
VTM6.0中的DMVR技術參考後續博客:H.266/VVC相關技術學習筆記26:VTM6.0版本中的DMVR(解碼端運動矢量細化)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章