(江蘇自動(dòng)化研究所 連云港 222061)
HEVC[1~2]熵編碼器的二值化是將頭信息和量化殘差系數(shù)轉(zhuǎn)化為一系列語法元素,實(shí)現(xiàn)對(duì)輸入數(shù)據(jù)的預(yù)處理和預(yù)壓縮過程。相比于上下文建模和二進(jìn)制算術(shù)編碼[3]來說,二值化的復(fù)雜度較低,但仍然存在數(shù)據(jù)依賴性[4],會(huì)影響編碼效率以及硬件編碼器的實(shí)際性能。本文針對(duì)二值化在硬件設(shè)計(jì)過程中存在的問題,提出一種面向硬件實(shí)現(xiàn)的二值化模塊方案,并驗(yàn)證該方案的可行性,為相應(yīng)的硬件設(shè)計(jì)提供參考。
HEVC規(guī)定的一系列語法元素多以4×4子塊為單位,按照頭信息、量化殘差系數(shù)的位置信息、符號(hào)信息和幅值信息的順序依次產(chǎn)生。二值化過程有截?cái)嗳R斯方法(TR),k階指數(shù)哥倫布方法(EGk)和定長方法(Fixed Length)幾種,個(gè)別語法元素還采用查表或組合的方式。其中k階指數(shù)哥倫布編碼是變長碼的一種,具有很好的結(jié)構(gòu)性,由前綴和后綴兩部分構(gòu)成,都依賴于指數(shù)哥倫布編碼的階數(shù)k。表1列出了幀內(nèi)編碼過程中相關(guān)的語法元素及其對(duì)應(yīng)的二值化方式,其中coeff_abs_level_remaining[5]作為最后一個(gè)相關(guān)語法元素,采用了TR和EGk組合的方式,是二值化過程中的研究重點(diǎn)。
二值化的預(yù)處理作用體現(xiàn)在,通過掃描[6]的方式能將二維量化殘差系數(shù)轉(zhuǎn)化為一維數(shù)據(jù),有對(duì)角、垂直和水平三種掃描方式[7],并將非零系數(shù)盡量靠近排列,為后續(xù)處理做準(zhǔn)備。這種基于4×4子塊的掃描技術(shù)適應(yīng)于所有大小的TU,有利于編碼器的模塊化[8]。二值化的預(yù)壓縮作用體現(xiàn)在,硬件設(shè)計(jì)中一個(gè)4×4子塊的原始數(shù)據(jù)可能需要256(16×16)bit的存儲(chǔ)空間,二值化后,這個(gè)數(shù)值將大大減小。經(jīng)統(tǒng)計(jì),一個(gè)4×4子塊轉(zhuǎn)化為二元符號(hào)bin后,其平均長度遠(yuǎn)小于輸入數(shù)據(jù)的數(shù)據(jù)量。
表1 幀內(nèi)編碼的相關(guān)語法元素
二值化的數(shù)據(jù)依賴性主要體現(xiàn)在語法元素coeff_abs_level_remaining的后綴部分的二值化過程中:參數(shù)param隨著非零量化殘差系數(shù)的幅值進(jìn)行自適應(yīng)更新,幅值越大,param值越大,具體計(jì)算公式如下,其中coeff_abs為非零量化殘差系數(shù)的絕對(duì)值:
HEVC熵編碼器的硬件設(shè)計(jì)由于其復(fù)雜性和數(shù)據(jù)依賴性等原因,一直是研究的熱點(diǎn),二值化過程也同樣如此。以16并行度的硬件系統(tǒng)為例,雖然param的自適應(yīng)更新能夠提高壓縮效率,但是硬件系統(tǒng)在一個(gè)cycle內(nèi)要處理16個(gè)量化殘差系數(shù),需要多次進(jìn)行式(1)的計(jì)算和判斷,如果設(shè)計(jì)不合理,就會(huì)造成關(guān)鍵路徑過長,影響硬件處理速度,不僅如此,當(dāng)二值化過程隨熵編碼過程不斷重復(fù)計(jì)算執(zhí)行時(shí),會(huì)進(jìn)一步加劇延時(shí)的問題。
針對(duì)上述問題,本文的目標(biāo)就是簡化二值化的硬件設(shè)計(jì),提高硬件效率,基于對(duì)二值化的研究分析,提出將參數(shù)param由自適應(yīng)改為固定值,以期待在不過多影響壓縮性能的前提下,降低數(shù)據(jù)依賴性,同時(shí)又利于硬件實(shí)現(xiàn),提高硬件處理效率。
本文針對(duì)二值化硬件設(shè)計(jì)過程中遇到的問題提出了一種簡化方案,為驗(yàn)證該方案是否可行,對(duì)系統(tǒng)的性能影響如何,本文基于HEVC軟件參考平臺(tái) HM[9]開展了驗(yàn)證工作。
HM采用C++語言實(shí)現(xiàn)HEVC的完整編解碼過程,本文重點(diǎn)關(guān)注其中的熵編碼部分。經(jīng)分析,HEVC熵編碼器主要有兩個(gè)作用:一是計(jì)算率失真優(yōu)化選出最優(yōu)劃分和最佳預(yù)測模式,二是對(duì)選出的最佳組合再進(jìn)行一次編碼。前者需要遍歷多種CU、PU、TU大小以及多種預(yù)測模式[10~11],針對(duì)每一個(gè)組合都要進(jìn)行一次熵編碼計(jì)算,計(jì)算重復(fù)率高,如果熵編碼模塊設(shè)計(jì)不合理,將大大影響遍歷過程的速率,限制硬件編碼效率;后者通過編碼得到實(shí)際的二進(jìn)制碼流,用于后續(xù)傳輸、存儲(chǔ)和解碼[12],該過程只需要執(zhí)行一次,但是必須遵循HEVC標(biāo)準(zhǔn),否則碼流不能被正常解碼。
通過上述分析,熵編碼算法改進(jìn)需要在遍歷選擇和最終編碼上有所區(qū)分,這也為硬件設(shè)計(jì)提供一種思路:為了加快遍歷選擇過程,同時(shí)又不影響最終的碼流結(jié)構(gòu),在硬件設(shè)計(jì)時(shí),可以犧牲一定的邏輯開銷,設(shè)計(jì)兩套熵編碼器,一套用于遍歷選擇計(jì)算率失真優(yōu)化,包括本文提出的簡化方案等優(yōu)化或者是算法改進(jìn)都可以在此基礎(chǔ)上進(jìn)行;一套遵循標(biāo)準(zhǔn)算法,位于整個(gè)硬件系統(tǒng)的最末端,用于編碼生成二進(jìn)制bit流,其性能對(duì)前期過程影響較小。
本文的主要工作在于分析HM中熵編碼器的實(shí)際調(diào)用關(guān)系,構(gòu)造新函數(shù)以及修改遍歷選擇過程中的二值化實(shí)現(xiàn)部分。我們采用HM16.0版本來進(jìn)行算法的修改和性能驗(yàn)證,如果方案可行,該平臺(tái)還將作為硬件設(shè)計(jì)的參考,指導(dǎo)硬件模塊的實(shí)現(xiàn)。
圖1(a)為HM中熵編碼的相關(guān)函數(shù)調(diào)用關(guān)系示意圖,HM的遍歷選擇與最終編碼分別位于函數(shù)compressSlice和encodeSlice中。compressSlice主要完成遍歷選擇過程,選出最優(yōu)劃分和最佳預(yù)測模式,encodeSlice對(duì)最優(yōu)劃分和最佳預(yù)測模式執(zhí)行最終的編碼。兩者均調(diào)用底層函數(shù)codeCoeffNxN,二值化就位于該函數(shù)中。但是如果僅簡單修改函數(shù)codeCoeffNxN的二值化部分,會(huì)導(dǎo)致最終生成的二進(jìn)制碼流不能被正常解碼。為了避免該問題,本文將遍歷選擇和最終編碼時(shí)的熵編碼處理區(qū)分開來,為函數(shù)encodeSlice重新構(gòu)造了一系列新的子函數(shù),具體調(diào)用關(guān)系如圖1(b)所示。
圖1 熵編碼函數(shù)調(diào)用示意圖
新構(gòu)造的函數(shù)用于執(zhí)行最終的實(shí)際編碼,其中底層函數(shù)codeCoeffNxN_2在二值化過程中保持采用自適應(yīng)更新param參數(shù)。此外,encodeSlice過程中涉及的大量的函數(shù)遞歸調(diào)用,也可以參考原始算法實(shí)現(xiàn)。函數(shù)compressSlice的子函數(shù)基本不變,但是需要修改函數(shù)codeCoeffNxN的二值化部分,采用固定param值即可。函數(shù)codeCoeffNxN和codeCoeffNxN_2雖然都是底層的實(shí)際編碼函數(shù),但是兩者算法不同,輸出結(jié)果也不同。
在對(duì)HM16.0進(jìn)行配置時(shí),采用全幀內(nèi)(All Intra,AI)配置文件,其余配置參數(shù)采用默認(rèn)值,QP采用標(biāo)準(zhǔn)測試組(22、27、32、37)。我們選取了幾種分辨率、紋理和運(yùn)動(dòng)特征不同的全灰度視頻序列進(jìn)行測試,具體如表2所示。
表2 仿真測試視頻序列表
量化殘差系數(shù)是熵編碼過程的輸入數(shù)據(jù)的主要部分,而語法元素remaining_value在量化殘差系數(shù)相關(guān)的語法元素中所占的比例也較大,所以對(duì)remaining_value二值化的修改勢(shì)必會(huì)影響到二值化結(jié)果,最終將會(huì)影響到二進(jìn)制bit流的長度。本文分別統(tǒng)計(jì)了算法修改前后不同測試序列在不同QP情況下編碼輸出的二進(jìn)制bit流的總長度,具體如表3所示。
表3 仿真測試視頻序列表
由表3可以發(fā)現(xiàn),采用固定參數(shù)值會(huì)增加最終的二進(jìn)制bit流長度,也因此反映出了采用自適應(yīng)param參數(shù)進(jìn)行二值化的優(yōu)勢(shì),這種對(duì)最終的碼流長度的影響是有限的。但是僅憑二進(jìn)制bit流的總量變化不足以說明系統(tǒng)性能影響,為了比較算法修改前后的編碼性能變化,本文通過BD-rate(Bjontegaard delta bitrate)[13]來評(píng)價(jià)該方案的整體性能。當(dāng)BD-rate為正值時(shí),表明在相同PSNR條件下,碼率增加,系統(tǒng)性能有所下降,負(fù)值則表示碼率減少,系統(tǒng)性能有所提高。統(tǒng)計(jì)結(jié)果如表4所示。
通過表4可以看出,相比于原始自適應(yīng)更新參數(shù),修改后的算法雖然會(huì)導(dǎo)致系統(tǒng)的性能有所下降,但是這種影響很小,在可以接受的范圍內(nèi),但是該方案卻能大大簡化硬件的實(shí)現(xiàn),所以該方案具備可行性。
基于上述結(jié)論,HM平臺(tái)還將用于硬件系統(tǒng)的功能驗(yàn)證。硬件系統(tǒng)的輸入數(shù)據(jù)由軟件平臺(tái)打印得到,硬件設(shè)計(jì)中熵編碼的輸出結(jié)果也將與軟件平臺(tái)進(jìn)行比較,從而驗(yàn)證功能的正確性。此外,參數(shù)param的修改還可能會(huì)影響到CTU的最佳劃分方式,可以通過專門的碼流分析工具來協(xié)助驗(yàn)證軟硬件的劃分方式是否一致。
表4 原始算法與快速算法性能比較表
經(jīng)驗(yàn)證,該方案具備可行性,能夠?yàn)橛布O(shè)計(jì)提供新的設(shè)計(jì)思路。結(jié)合軟件參考平臺(tái)HM,可以從以下幾個(gè)方面為硬件設(shè)計(jì)提供參考。
硬件熵編碼器的整體架構(gòu)可以參考軟件算法的修改,采用兩套熵編碼器,分別用于遍歷選擇和實(shí)際編碼。整體架構(gòu)如圖2所示。
圖2 整體硬件架構(gòu)圖
這種架構(gòu)相比于一般設(shè)計(jì)來說額外增加了一套熵編碼器。雖然增加了邏輯資源開銷,但是能夠?qū)⒈闅v選擇過程與最終編碼過程區(qū)分開,兩者可以根據(jù)各自的優(yōu)化目標(biāo)進(jìn)行相應(yīng)改進(jìn),如簡化遍歷選擇過程的二值化部分,提高編碼效率,或者是上下文建模、二進(jìn)制算數(shù)編碼的優(yōu)化和架構(gòu)的改進(jìn)等。此外,兩套熵編碼器可以共用的模塊有很多,所以在硬件整體架構(gòu)的修改上,邏輯資源開銷的增加是可控的。
本文針對(duì)二值化的數(shù)據(jù)依賴性問題展開研究,提出了一種硬件友好的二值化方案,經(jīng)驗(yàn)證,該方案是可行的。具體到硬件實(shí)現(xiàn)時(shí),基于硬件整體架構(gòu)的改變,在遍歷選擇過程中,語法元素remaining value的二值化采用固定參數(shù)param,量化殘差系數(shù)之間消除了數(shù)據(jù)依賴性,只需要判斷系數(shù)是否為非零,無需考慮自適應(yīng)更新的問題。以16并行度為例,一個(gè)cycle就可以快速處理16個(gè)系數(shù)的二值化,大大加快了遍歷進(jìn)程。
而對(duì)于實(shí)際編碼部分,雖然保持?jǐn)?shù)據(jù)依賴性,但是可以通過合理的流水線設(shè)計(jì)來降低數(shù)據(jù)依賴性帶來的影響,如采用四級(jí)流水線結(jié)構(gòu),每一級(jí)處理4個(gè)量化殘差系數(shù),其編碼效率不會(huì)影響到前期的遍歷選擇過程,從而避免影響系統(tǒng)的編碼效率。
前面均以16并行度為例進(jìn)行說明,實(shí)際上,在硬件設(shè)計(jì)時(shí)可以靈活滿足不同并行度的設(shè)計(jì)需求。但是由于二維量化殘差系數(shù)以4×4子塊為單位,在硬件設(shè)計(jì)時(shí)多采用8或16并行度,即一個(gè)cycle處理8或16個(gè)量化殘差系數(shù)。針對(duì)遍歷選擇過程來說,熵編碼器的并行度設(shè)計(jì)需要考慮前后模塊的實(shí)際處理速度,不同大小的TU塊的編碼往往需要的時(shí)鐘數(shù)不同,可以通過打拍的方式保持同步。
本文針對(duì)二值化的硬件設(shè)計(jì)過程中遇到的問題提出了一種簡化方案,不論是在算法修改還是在硬件設(shè)計(jì)中,都采用兩套熵編碼器,并改進(jìn)遍歷選擇過程的二值化部分,同時(shí)保證實(shí)際編碼過程遵循編碼標(biāo)準(zhǔn)不能改變。隨后本文基于HEVC軟件測試平臺(tái)HM進(jìn)行算法修改和性能驗(yàn)證,為硬件設(shè)計(jì)提供參考。該方案的優(yōu)勢(shì)在于能夠簡化硬件設(shè)計(jì),提高編碼效率,同時(shí)對(duì)系統(tǒng)性能的影響基本可以忽略不計(jì)。后續(xù)還可以在本文的基礎(chǔ)上進(jìn)一步研究:
1)param的不同取值對(duì)編碼性能的影響是否存在最佳;能否通過某種方式模擬參數(shù)param的自適應(yīng)更新,如分段取值、設(shè)定動(dòng)態(tài)閾值等方式。
2)在算法改進(jìn)與硬件設(shè)計(jì)過程中,對(duì)遍歷選擇和最終編碼兩者的熵編碼有不同的研究目標(biāo)。前者在于如何能夠更快更好地完成最佳組合的選擇,后者在于如何在遵循HEVC標(biāo)準(zhǔn)的前提下優(yōu)化架構(gòu)設(shè)計(jì)。上下文建模和二進(jìn)制算術(shù)編碼兩部分也是研究的重點(diǎn),可以基于本文開展進(jìn)一步的優(yōu)化研究。