• 沒有找到結果。

第三章 熵編碼模式切換演算法的設計

3.3 熵編碼的碼率預估演算法

3.3.2 CABAC碼率預估演算法

3.3.2.5 各種方法的優劣比較

CABAC 部分使用 全部使用 R (bits) 97023 107664 93703 Error rate(%) 0 10.97 -3.42 表 3.10 level 的平均預估編碼量

3.3.2.5 各種方法的優劣比較

在這一小節中,將比較 CABAC 各種碼率預測演算法的預測時間和預測 QP 值誤差。

和 3.3.1 小節模擬的方式類似,我們將以實際 CABAC 的壓縮結果和計算的 QP 值當做 計算標準。我們將 3.3.2.1 和 3.3.2.2 提出的基本碼率預估方法稱為 CABAC_pre,而將位 元平行化碼率預估演算法稱為 CABAC_pp。下表 3.11 為提出的兩種 CABAC 位元率估 測法和[22]、[23]的模擬比較。測試圖片和條件和 CAVLC 相同。

CABAC CABAC_pre CABAC_pp [22] [23]

R

(bits/frame) 363818 363816 334554 320781 411472

QP SAD 0 0 20.8 21.2 38.5

QP

Error rate(%) 0 0 63 62.5 81

Time/frame(s) 37.04 11.5 6.95 4.29 6.66(2.06) 表 3.11 CABAC 碼率預估演算法模擬比較

[23]的測試時間有兩個值,因為演算法所要用的 level 平均壓縮量需要在前一張畫面 先算好,所以在模擬時,前一張畫面是採用 CABAC_pre 的方式去猜測,而這一張畫面 才能直接用查表的方式去預估。所以括號值為 level 表格已經存在之下,猜測單張畫面 編碼量所需的時間。另一個值則是括號值和前一張預估時間的平均,代表實際猜測這張 畫面的時間。

從測試結果來看,可以發現到雖然平均單張預估編碼量(R)在各種方法下的變動量 不大,但是卻會對 QP 的 SAD 值和錯誤率造成很大的影響。所以[22]和[23]的方法雖然 估計的時間很快,但是造成的誤差卻很大。而我們所發展的位元平行化碼率預估演算法 雖然可以再減少猜測時間約達基本碼率預估演算法時間的一半,但是在 20 個單張壓縮 預算值模擬下的平均 QP 估計誤差卻高達 63%,和[22]的誤差值很接近。從數據結果來 看,後三種方法的皆會造成預估 QP 的誤差太高,誤差率都超過 50%,這代表在一半的 壓縮預算值下,都會造成誤差,而基本碼率預估演算法猜測的結果卻能和直接壓縮極為 接近,且同時節省約三分之二的時間。所以基本碼率預估演算法是最好的選擇。

圖 3.18 同樣為一張畫面以各種 CABAC 預估演算法模擬的 R-QP 關係圖,上半部顯 示 QP 值 4 到 27,而下半部則顯示 QP 值 28 以後的結果。從圖中可以看出不論在任何 QP 值,[23]的方法和其他方法都有相當的誤差,所以造成高達 81%的 QP 值猜測誤差。

而 CABAC 和 CABAC_pre 兩條線近乎重合。而 CABAC_pp 在 QP 值 12 到 25 的範圍,

預估的編碼量的差距比[22]還要大,其他的部份,尤其在高 QP 值,差距才會比較小。

圖 3.18 CABAC 編碼率預測的 R-QP 關係圖 3.12 為模擬結果。從結果來看 CABAC_pre 搭配 level table 後會造成微量的編碼預估誤 差,但是時間上的改變也很微量,比沒使用時平均快了約 1 秒而已,這代表預估主要的

時 間 消 耗 並 不 在 level 部 分 , 而 是 在 編 碼 符 號 significant_coeff_flag 和 last_significant_coeff_flag 上面。

而 CABAC_pp 的部份則是編碼預估誤差減少了約 10K bits,但是平均預估時間卻反而增 加約 1 秒,而誤差率依然大於 50%,表示除了 level 外的統計量仍然貢獻很大的誤差。

CABAC_pre 搭配 level table 後產生了約 5k bits,但是 QP 預估錯誤率則升高至 13.5%。

但是實現上,除了前一張畫面只能使用 CABAC_pre 進行預估,另外要付出的代價為儲 存空間和至少 14 次的除法的運算。

CABAC CABAC_pre CABAC_pre (level table)

CABAC_pp (level table) R

(bits/frame) 363818 363816 358682 342404

QP SAD 0 0 2.1 15.3

QP

error rate(%) 0 0 13.5 52.5

Time/frame

(s) 37.04 11.5 10.07(8.42) 8.5(5.04) 表 3.12 使用 level table 的模擬結果

圖 3.19 為 CABAC_pre 使用 level table 所造成的誤差模擬,下面的圖是把上面的圖 中 low QP 的部份放大來看,綜合兩者的趨勢,可以發現 level table 在 low QP 的誤差會 比較大,而誤差則隨 QP 上升而遞減,因為畫面以 low QP 壓縮會導致區塊中的非零係 數具有比較高的絕對值,這也會讓畫面間的係數絕對值分布發生較大的改變,所以當 QP 上升時,前一張畫面產生的 level table 才會較為準確。在 low QP 所產生的預估編碼 量誤差則是導致表 3.11 模擬結果的原因。所以當使用的畫面頻寬較小時,才比較適合

搭配 level table 使用,因為較小的畫面頻寬代表使用較大的 QP 值量化。

圖 3.19 CABAC_pre 使用 level table 所造成的誤差

0 100000 200000 300000 400000 500000 600000 700000 800000

4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26

QP

R(bits)

CABAC_pre

CABCA_pre+level table

(a) QP from 4 to 26

500000 600000 700000 800000

4 5 6 7 8 9 10

QP

R(bits)

CABAC_pre

CABCA_pre+level table

(b) QP from 4 to 10

相關文件