摘 要:設計使用高層次綜合語言HLS(High Level Synthesize)來實現(xiàn)圖像預測幀內編碼模塊的功能。幀內預測編碼是指利用視頻空間域的相關性,使用當前圖像已編碼的像素預測當前像素,然后將預測殘差(當前像素真實值與預測值之間的差值)作為后續(xù)編碼模塊的輸入,進行下一步編碼處理。HLS實現(xiàn)相比與直接使用verilog和其他的語言來實現(xiàn),HLS具有開發(fā)周期短,可以極大地節(jié)省人力成本和時間成本、平臺可移植性強以及更便捷的代碼迭代等的優(yōu)勢。設計使用HLS實現(xiàn)的對HEIF編碼IP中圖像預測編碼模塊,主要用于FPGA中,優(yōu)化后的IP總占用10795個FIFO和30705個LUT,并且設計在后續(xù)優(yōu)化代碼之后縮短了1/3原有編碼所需時間,大大提升了編碼速率。
關鍵詞:圖像幀內預測編碼;預測殘差;HEIF編碼;HLS
中圖分類號:TN46 文獻標識碼:A
Design of HEIF Image Prediction Coding Module Based on HLS
HU Jin1,HUANG Mingshuai1,BI Xiaomeng2
(1.School of Physics amp; Electronics, Hunan University,Changsha,Hunan 410082,China;
2. Zhongda Intelligent Technology Co., Ltd., Changsha,Hunan 410082,China)
Abstract:The design uses high level synthesize(HLS) language to realize the function of image prediction in frame coding module. Intra frame predictive coding refers to using the correlation of the video spatial domain to predict the current pixel using the encoded pixel of the current image, and then using the predicted residual (the difference between the real value of the current pixel and the predicted value) as the input of the subsequent coding module for the next encoding process. Compared with the implementation of verilog and other languages directly, HLS has the advantages of short development cycle, great savings in labor cost and time cost, strong platform portability and more convenient code iteration. The image prediction coding module of HEIF encoded IP implemented by HLS is designed, which is mainly used in FPGA. The optimized IP occupies 10795 FIFO, 30705 and LUT, and the design reduces the time required for original coding by 1/3 after the subsequent optimization of the code, greatly improving the coding rate.
Key words:image intra frame prediction coding;prediction residual;HEIF encoding;HLS
HEIF圖像編碼方法包括:獲取HEIF圖像數(shù)據(jù);對圖像數(shù)據(jù)進行計算,獲得圖像數(shù)據(jù)分量;對所述圖像數(shù)據(jù)分量進行編程處理,獲得所述HEIF圖像數(shù)據(jù)的編碼數(shù)據(jù)[1]。視頻序列中的第一幀圖像以及其他I幀的圖像,在編碼時沒有可供參考的圖像,只能利用自身的局部像素信息來降低空間冗余,該過程即為幀內編碼。幀內預測技術是消除視頻空間冗余的主要技術之一[2],因此幀內編碼是HEVC編碼中不可或缺的技術[3]。HLS具備很多其他高級語言所不具備的特點,比如任意精度數(shù)據(jù)庫、HLS串流庫以及HLS預處理指示等?;?C/C++語言的原生數(shù)據(jù)類型都位于 8 位邊界(8 位、16 位、32 位和 64 位)上。RTL總線(對應于硬件)支持任意數(shù)據(jù)長度。使用標準 C/C++ 語言數(shù)據(jù)類型可能導致硬件實現(xiàn)效率低下。任意精度 (AP) 數(shù)據(jù)類型允許代碼使用位寬更小的變量,并且可供 C/C++語言仿真用于確認功能保持不變或者可接受。較小的位寬所生成的硬件運算符也更小且運行更快;HLS串流庫,串流是一種數(shù)據(jù)傳輸形式,其中數(shù)據(jù)樣本從第一個樣本開始按順序發(fā)送,串流不需要地址管理。Vitis_HLS 提供了 C++ 模板類 “hls::streamlt;gt;”用于對串流數(shù)據(jù)結構進行建模,其相當于無限深度的FIFO并且按照順序對數(shù)據(jù)進行讀寫;HLS預處理指令則是可以將硬件電路的思維實現(xiàn)在高級語言上,比如預處理指令“#pragma HLS dataflow”中dataflow編譯指示可啟用任務級流水打拍,允許函數(shù)和循環(huán)在其操作過程中重疊,增加 RTL實現(xiàn)的并發(fā)度,并增加設計的整體吞吐量。與文獻[4]、文獻[5]以及文獻[6]中的傳統(tǒng)設計研究方法不同,本次設計綜合闡述了如何基于HLS實現(xiàn)HEIF編碼IP中8×8圖像預測模塊的功能。
1 編碼預測算法原理
1.1 算法實現(xiàn)簡述
圖像的幀內預測分為兩大部分,一部分是幀內預測模式,另一部分是幀內預測過程。其中幀內預測模式又分為亮度預測模式、亮度預測模式編碼以及色度預測模式編碼;幀內預測過程主要涉及相鄰參考像素的獲取、參考像素的濾波以及預測值的計算。在本文提到的設計中對進入IP的圖像首先進行塊的劃分,當塊劃分成8×8的大小的時候進入codeLumaQT8_pred模塊,也就是設計的預測模塊。codeLumaQT8_pred主要分為外循環(huán)和內循環(huán),其中外循環(huán)是為了滿足HEIF IP的WPP功能,內循環(huán)則是循環(huán)了(WPP_NUM+3)×64次,其中的“WPP_NUM”是指對圖像進行參考像素濾波、預測、計算殘差、輸出等四個步驟,“+3”是對這四個步驟進行了流水線的設計,有助于大大提升圖像處理速率,“×64”則是因為每個8×8的像素塊有64個像素點需要進行處理,主要的功能實現(xiàn)部分均在內循環(huán)。
1.2 codeLumaQT8_pred內循環(huán)詳細流程
內循環(huán)的處理步驟主要分為參考像素濾波、35種模式預測、計算殘差和輸出四個步驟,所以在代碼編寫的時候使用變量read_data、read_data1、read_data2、read_data3是否為1來判斷數(shù)據(jù)處理進行到了哪一步。其中初始化的時候read_data=true;read_data1=read_data2=read_data3=1,因為一開始就需要進行濾波;然后在第一個像素處理循環(huán)結束之后再給變量賦值。如上所述內循環(huán)總共循環(huán)了(WPP_NUM+3)×64次,預測模塊的關鍵步驟循環(huán)圖示如圖1。
下面對內循環(huán)的關鍵步驟進行詳細的拆分講解。
(1)35個預測模式
根據(jù)不同的功能,HEVC中定義了不同的名稱,其中預測單元(Predicion Unit,PU) [7]。H.265/HEVC亮度分量的幀內預測支持5種大小的預測單元PU:4×4、8×8、16×16、32×32、64×64[8]。每種PU都對應了35種預測模式,包括Planar模式、DC模式以及角度模式。所有預測模式使用相同的預測方式。模式0為Planar模式,模式1為DC模式,模式2~34為角度模式。其中8×8亮度塊的幀內預測也是如此,第一種是模式0(Planar模式),Planar模式適用于在水平方向和垂直方向都呈線性變化的圖像內容。其計算式如下:
PHx,y=(N-x)·R0,y+x·RN+1,0(1)
PVx,y=(N-x)·Rx,0+y·R0,N+1(2)
Px,y=(PHx,y+PVx,y+N)》(log2N+1)(3)
模式1是DC模式,DC模式適用于大面積平坦區(qū)域,是使用當前塊的預測值由預測模板左側和上側(注意不包含左上角、左下方和右上方)參考像素的平均值計算得到。其第一步就是求出該預測單元左側及上方的像素平均值,如式(4)所示:
dcValue=∑Nx=1Rx,0+∑Ny=1R0,y+N》(log 2N+1) (4)
模式2~34為角度模式,是使用預測模板上側和左側的33種角度上的參考像素來計算當前塊的預測值模式,其中角度模式中的模式27~34最為關鍵,因為它涉及后續(xù)參考像素平滑濾波的處理。所有預測模式采用的是相同的預測模板,HEVC中以逐行掃描的順序訪問編碼樹單元,在編碼樹單元內又以深度優(yōu)先、逐行掃描的順序訪問各個編碼單元。因此,除了當前塊的左邊一列和上邊一行像素,HEVC中當前塊的左下角和右上方的像素也可以作為參考像素[9]。如圖2所示,Px,y表示當前塊的預測像素,Rx,y表示當前塊的參考像素。
(2) 參考像素的平滑濾波
預測值的計算公式是按照模式27~34這種方向推導的,在計算其他方向的預測值的時候需要做一些調整。詳細的推導過程可以參考HEVC的標準文檔或者教材。參考像素的強平滑濾波用在32×32的亮度塊,設計中實現(xiàn)的是8×8的亮度塊,所以只有3-tap的常規(guī)平滑濾波。所有尺寸的預測塊,DC預測模式不需要進行平滑濾波。對于8×8的塊,對2、18、34方向進行濾波。
(3) MPM(Most Probable Model)的選擇
HEVC幀內CU塊劃分采用四叉樹遍歷遞歸的塊劃分算法,即從大到小依次劃分遍歷所有可能的CU塊類型[10],所以在一張大圖中的每個8×8相鄰塊之間往往存在較強的相關性,因此相鄰PU的幀內預測模式相同或相似的概率較大。為了去除這部分冗余信息,H.265建立了預測模式候選列表candModelList,表中有3個候選預測模式。利用candModelList可以降低編碼當前PU最優(yōu)模式的碼率。同樣,設計中根據(jù)cuAboveLumaDir的模式(Mode1)和cuLeftLumaDir的模式(Mode2)設置MPM:如果Mode1和Mode2不同,那么前兩個MPM是Mode1和Mode2,第三個模式從Planar、DC和垂直方向中,順序選擇一個和前兩個MPM不一樣的模式;如果Mode1和Mode2相同:如果Mode1和Mode2是非角度模式,那么第一個MPM是Mode1,第二和第三個MPM按照Planar、DC和垂直預測的順序依次選擇;如果Mode1和Mode2是角度預測模式,那么第一個MPM是Mode1,第二和第三個MPM是與Mode1相鄰的兩個角度預測模式。
1.3 算法功能優(yōu)化
算法優(yōu)化思路:將16個8×8塊pipeline起來同時進行處理,方便外部塊的處理,可以大大提升編碼的速率。主要代碼的優(yōu)化位置在于(1)預測數(shù)組空間的大小調整;(2)讀寫數(shù)據(jù)標志信號的初始值調整;(3)預測模塊內外循環(huán)判斷條件的調整;(4)參考像素濾波、預測、計算殘差、輸出等四個步驟的執(zhí)行判斷條件的調整。預測模塊優(yōu)化后關鍵步驟循環(huán)圖如圖3所示。
1.4 優(yōu)化時候的問題分析
(1)遇到的問題
在優(yōu)化的過程中遇到了幾個關鍵的問題:(1)沒有修改代碼輸出部分代碼時,初次優(yōu)化pred只輸入了一個8×8就不輸入數(shù)據(jù)了,原因是第一組8×8的輸出沒有結束與下一組的read_data輸入時序相沖突。只能通過縮短輸出時間/延長下一組read_data輸入的時間來解決。如圖,可以看到,read_data只輸入了一輪數(shù)據(jù)(1000),outputY8只輸出了14次,本應該輸出16次,即沒有完整地進行輸出。修改之后pred模塊的Latency變成了之前的2倍,預測是因為VCT_GET16引起的。
(2)解決思路
主要問題在于如何讓codeLumaQT8_pred模塊outputY8、pred輸出與read_data輸入時序不沖突,使得圖片完整數(shù)據(jù)能夠完整輸入。
(3)解決方法
在原始代碼的基礎之上進行了多次嘗試之后最終找到了優(yōu)化方案。也就是前文中提到的優(yōu)化思路;(1)預測數(shù)組空間的大小調整;(2)讀寫數(shù)據(jù)標志信號的初始值調整;(3)預測模塊內外循環(huán)判斷條件的調整;(4)參考像素濾波、預測、計算殘差、輸出等四個步驟的執(zhí)行判斷條件的調整,具體的代碼調整參見代碼。
2 驗證結果
最終修改完成之后,在賽靈思的開發(fā)板xc7vx485t-ffg1157-1上進行綜合測試,選擇的時鐘頻率為100 MHz,codeLumaQT8_pred模塊計算一組16×8×8塊需要的時間(1227個時鐘周期)相比于優(yōu)化之前(1840個時鐘周期)減少了33%的時間,如表1所示。表2是優(yōu)化之前該模塊處理一組8×8數(shù)據(jù)塊需要的時間。表3是優(yōu)化后該模塊能達到的時鐘頻率。表4是整個IP的資源占用情況。
3 結 論
介紹了圖像預測模塊對8×8大小的像素塊進行處理的幀內算法功能實現(xiàn),與傳統(tǒng)的幀內算法不一樣的地方在于該模塊采用的是HLS,即高層次綜合語言實現(xiàn)的,并且對其進行了功能上的優(yōu)化處理。HLS相比于其他語言的優(yōu)勢在前文也進行了描述,其很短的開發(fā)周期以及較強的代碼移植性等的優(yōu)點使得其可以快速地實現(xiàn)圖像編解碼IP的設計和仿真驗證工作。
參考文獻
[1] 耿嘉,樊平.一種HEIF圖像編碼方法及相關設備[P].北京:CN112150567B,2023-07-18.
[2] 吳永科.HEVC快速幀內預測編碼器的設計與實現(xiàn)[D].廣州:華南理工大學,2018.
[3] 姬瑞旭. HEVC幀內模式決策和CU劃分快速算法[D].西安:西安電子科技大學,2014.
[4] 周敬利,金毅,余勝生等.基于H.264視頻編碼技術的研究[J].華中科技大學學報(自然科學版),2003,31(8): 32-34.
[5] 裴世保,李厚強,俞能海.H.264/AVC幀內預測模式選擇算法研究[J].計算機應用,2005,(8): 1808-1810.
[6] 沈曉琳.HEVC低復雜度編碼優(yōu)化算法研究[D].杭州:浙江大學,2013.
[7] 黃晗. HEVC幀間/幀內預測及優(yōu)化技術研究[D].北京:北京交通大學,2014.
[8] 李恒忠,崔建明,郭勇等.基于HEVC視頻標準的熵編碼過程[J].電腦知識與技術,2013,9(14):3356-3359+3365.
[9] 趙耀,黃晗,林春雨等.新一代視頻編碼標準HEVC的關鍵技術[J].數(shù)據(jù)采集與處理,2014,29(1):1-10.
[10]LAINEMA J ,BOSSEN F,HAN W J, et al. Intra coding of the HEVC standard[J].IEEE Transactions on Circuits and Systems for Video Technology,2012,22(12):1792-1801.