本發(fā)明屬于視頻編碼及碼率控制領(lǐng)域,更具體地涉及一種幀內(nèi)預(yù)測(cè)的碼率控制方法。
背景技術(shù):
在視頻編碼中,碼率控制的目的是在給定編碼速率的限制下,使得編碼后重建視頻的質(zhì)量達(dá)到最優(yōu)。對(duì)于視頻序列來說,采用幀內(nèi)預(yù)測(cè)編碼的幀(intra幀)比采用幀間預(yù)測(cè)編碼的幀(inter幀)的碼率控制更重要,主要體現(xiàn)在兩個(gè)方面。一是與inter幀相比,intra幀通常消耗的比特更多;二是因?yàn)樵趲g預(yù)測(cè)時(shí)會(huì)將intra幀作為參考,因此intra幀編碼的質(zhì)量會(huì)影響后續(xù)幀的編碼。
在當(dāng)前新一代的視頻編碼標(biāo)準(zhǔn)highefficiencyvideocoding(hevc)中,針對(duì)intra幀的碼率控制引入一個(gè)表征內(nèi)容復(fù)雜度的量complexity(c)。復(fù)雜度的量是通過計(jì)算原始像素值的哈達(dá)瑪變換,取變換系數(shù)的絕對(duì)值進(jìn)行累加得到的。c的引入在一定程度上提高了intra幀的碼率控制性能。但是由于復(fù)雜度不能代表所有內(nèi)容的編碼特性,因此這種方法依然有不完善之處。
技術(shù)實(shí)現(xiàn)要素:
基于以上問題,本發(fā)明的主要目的在于提出一種幀內(nèi)預(yù)測(cè)的碼率控制方法,用于解決以上技術(shù)問題的至少之一。
為了實(shí)現(xiàn)上述目的,本發(fā)明提出了一種幀內(nèi)預(yù)測(cè)的碼率控制方法,采用r-λ模型,包括以下步驟:
步驟1、將視頻中用于幀內(nèi)編碼的幀分成多個(gè)編碼樹單元;
步驟2、將多個(gè)編碼樹單元輸入至預(yù)訓(xùn)練的卷積神經(jīng)網(wǎng)絡(luò)中,經(jīng)運(yùn)算得到多個(gè)編碼樹單元中每一個(gè)的模型參數(shù);
步驟3、根據(jù)模型參數(shù)對(duì)多個(gè)編碼樹單元進(jìn)行比特分配;得到多個(gè)編碼樹單元中每一個(gè)的目標(biāo)比特?cái)?shù),完成幀內(nèi)預(yù)測(cè)的碼率控制。
在本發(fā)明的一些實(shí)施例中,上述r-λ模型為:
λ=α·rβ;
其中,λ為拉格朗日乘子,r為編碼比特值;α及β為上述的模型參數(shù)。
在本發(fā)明的一些實(shí)施例中,上述步驟3具體包括以下步驟:
步驟31、根據(jù)模型參數(shù),采用二分法得到幀級(jí)別的拉格朗日乘子;
步驟32、根據(jù)幀級(jí)別的拉格朗日乘子計(jì)算得到多個(gè)編碼樹單元中每一個(gè)的初始比特分配數(shù);
步驟33、根據(jù)每一個(gè)編碼樹單元的初始比特分配數(shù),及編碼多個(gè)編碼樹單元中的每一個(gè)之前實(shí)際剩余的比特?cái)?shù),得到多個(gè)編碼樹單元中每一個(gè)的目標(biāo)比特?cái)?shù),完成幀內(nèi)預(yù)測(cè)的碼率控制。
在本發(fā)明的一些實(shí)施例中,上述步驟33具體包括以下步驟:
設(shè)定多個(gè)編碼樹單元中第一個(gè)的目標(biāo)比特?cái)?shù)為其初始比特分配數(shù);
后續(xù)的每一個(gè)編碼樹單元的目標(biāo)比特?cái)?shù)表示為:
其中,i表示第i個(gè)編碼樹單元,
在本發(fā)明的一些實(shí)施例中,上述步驟31具體包括以下步驟:
采用二分法迭代求解如下方程,得到幀級(jí)別的拉格朗日乘子;
其中,nf為用于幀內(nèi)編碼的幀中當(dāng)前幀分成的多個(gè)編碼樹單元的總數(shù)目;rf表示當(dāng)前幀的目標(biāo)比特?cái)?shù);
在本發(fā)明的一些實(shí)施例中,上述多個(gè)編碼樹單元中每一個(gè)的初始比特分配數(shù)
在本發(fā)明的一些實(shí)施例中,對(duì)于邊緣非標(biāo)準(zhǔn)大小的編碼樹單元,在步驟2之前,填充到標(biāo)準(zhǔn)大小后再輸入到預(yù)訓(xùn)練的神經(jīng)網(wǎng)絡(luò)中,經(jīng)運(yùn)算得到的模型參數(shù)為填充后編碼樹單元的模型參數(shù),根據(jù)填充后編碼樹單元的模型參數(shù)及一校正因子得到邊緣非標(biāo)準(zhǔn)大小的編碼樹單元的模型參數(shù)。
在本發(fā)明的一些實(shí)施例中,根據(jù)上述填充后編碼樹單元的模型參數(shù)及一校正因子得到邊緣非標(biāo)準(zhǔn)大小的編碼樹單元的模型參數(shù)時(shí),采用以下公式:
α(a)=α(b)·sab;
β(a)=β(b);
其中,α(a)、β(a)為邊緣非標(biāo)準(zhǔn)大小的編碼樹單元的模型參數(shù);α(b)、β(b)為填充后編碼樹單元的模型參數(shù),sab為校正因子。
在本發(fā)明的一些實(shí)施例中,上述校正因子為:
其中,
在本發(fā)明的一些實(shí)施例中,在訓(xùn)練所述卷積神經(jīng)網(wǎng)絡(luò)時(shí),預(yù)先得到每個(gè)樣本的r-λ模型的擬合曲線,并以該擬合曲線表征的α及β值作為每個(gè)樣本的標(biāo)簽。
在本發(fā)明的一些實(shí)施例中,上述卷積神經(jīng)網(wǎng)絡(luò)運(yùn)算包括四個(gè)卷積層、兩個(gè)池化層和三個(gè)全連接層。
在本發(fā)明的一些實(shí)施例中,上述預(yù)訓(xùn)練的卷積神經(jīng)網(wǎng)絡(luò)采用模型參數(shù)的預(yù)測(cè)值和實(shí)際值的歐氏距離作為損失函數(shù)。
在本發(fā)明的一些實(shí)施例中,采用隨機(jī)梯度下降方法優(yōu)化卷積神經(jīng)網(wǎng)絡(luò)的網(wǎng)絡(luò)參數(shù)。
在本發(fā)明的一些實(shí)施例中,步驟2中,輸入的多個(gè)編碼樹單元,經(jīng)所述卷積神經(jīng)網(wǎng)絡(luò)運(yùn)算時(shí),采用的數(shù)據(jù)為多個(gè)編碼樹單元中每一個(gè)的亮度分量。
本發(fā)明提出的幀內(nèi)預(yù)測(cè)的碼率控制方法,具有以下有益效果:
1、由于通過卷積神經(jīng)網(wǎng)絡(luò)來預(yù)測(cè)r-λ模型的參數(shù),因此實(shí)現(xiàn)了對(duì)視頻內(nèi)容編碼特性的精確刻畫,從而提高了幀內(nèi)預(yù)測(cè)編碼的碼率控制性能;
2、根據(jù)幀級(jí)別的拉格朗日乘子計(jì)算得到多個(gè)編碼樹單元中每一個(gè)的初始比特分配數(shù),再根據(jù)初始比特分配數(shù),且采用幀間幀碼率的控制方法為參考,得到多個(gè)編碼樹單元中每一個(gè)的目標(biāo)比特?cái)?shù),在每個(gè)序列編碼一幀的情況下,可使幀內(nèi)碼率控制誤差平均減小0.46%,同時(shí)y分量bd-rate平均降低0.7%,u、v分量bd-rate平均降低約2%。
附圖說明
圖1是本發(fā)明一實(shí)施例提出的幀內(nèi)預(yù)測(cè)的碼率控制方法的框架示意圖;
圖2是本發(fā)明一實(shí)施例中運(yùn)算得到模型參數(shù)的卷積神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)示意圖;
圖3(a)是本發(fā)明一實(shí)施例中邊緣非標(biāo)準(zhǔn)大小的編碼樹單元的示意圖;
圖3(b)是本發(fā)明一實(shí)施例中邊緣非標(biāo)準(zhǔn)大小的編碼樹單元填充后的示意圖。
具體實(shí)施方式
為使本發(fā)明的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚明白,以下結(jié)合具體實(shí)施例,并參照附圖,對(duì)本發(fā)明作進(jìn)一步的詳細(xì)說明。
r-λ模型刻畫了編碼比特(r)和拉格朗日乘子(λ)之間的關(guān)系:
λ=α·rβ;(1)
其中α和β是模型參數(shù),與視頻內(nèi)容有關(guān)。該模型把λ作為決定r的首要因素。通過實(shí)驗(yàn)驗(yàn)證了在幀內(nèi)預(yù)測(cè)編碼的幀(intra幀)編碼的編碼樹單元(ctu)級(jí)別上,以上模型也同樣適用,問題就在于如何獲得與內(nèi)容相關(guān)的參數(shù)α和β。
基于此,本發(fā)明提出了一種幀內(nèi)預(yù)測(cè)的碼率控制方法,采用r-λ模型,包括以下步驟:
步驟1、將視頻中用于幀內(nèi)編碼的幀分成多個(gè)編碼樹單元;
步驟2、將多個(gè)編碼樹單元輸入至預(yù)訓(xùn)練的卷積神經(jīng)網(wǎng)絡(luò)中,經(jīng)運(yùn)算得到多個(gè)編碼樹單元中每一個(gè)的模型參數(shù);
步驟3、根據(jù)模型參數(shù)對(duì)多個(gè)編碼樹單元進(jìn)行比特分配;得到多個(gè)編碼樹單元中每一個(gè)的目標(biāo)比特?cái)?shù),完成幀內(nèi)預(yù)測(cè)的碼率控制。
因此,本發(fā)明由于通過卷積神經(jīng)網(wǎng)絡(luò)來預(yù)測(cè)r-λ模型的參數(shù),因此實(shí)現(xiàn)了對(duì)視頻內(nèi)容編碼特性的精確刻畫,從而提高了intra幀的碼率控制性能。
在本發(fā)明的一些實(shí)施例中,上述步驟3具體包括以下步驟:
步驟31、根據(jù)模型參數(shù),采用二分法得到幀級(jí)別的拉格朗日乘子;
步驟32、根據(jù)幀級(jí)別的拉格朗日乘子計(jì)算得到多個(gè)編碼樹單元中每一個(gè)的初始比特分配數(shù);
步驟33、根據(jù)每一個(gè)編碼樹單元的初始比特分配數(shù),及編碼多個(gè)編碼樹單元中的每一個(gè)之前實(shí)際剩余的比特?cái)?shù),得到多個(gè)編碼樹單元中每一個(gè)的目標(biāo)比特?cái)?shù),完成幀內(nèi)預(yù)測(cè)的碼率控制。
在本發(fā)明的一些實(shí)施例中,上述步驟33具體為:
設(shè)定多個(gè)編碼樹單元中第一個(gè)的目標(biāo)比特?cái)?shù)為其初始比特分配數(shù);
后續(xù)的每一個(gè)編碼樹單元的目標(biāo)比特?cái)?shù)表示為:
其中,i表示第i個(gè)編碼樹單元,
在本發(fā)明的一些實(shí)施例中,上述步驟31具體為:
采用二分法迭代求解如下方程,得到幀級(jí)別的拉格朗日乘子;
其中,nf為用于幀內(nèi)編碼的幀中當(dāng)前幀分成的多個(gè)編碼樹單元的總數(shù)目;rf表示當(dāng)前幀的目標(biāo)比特?cái)?shù);
根據(jù)公式(1)可推算得到:
因此,
在本發(fā)明的一些實(shí)施例中,上述多個(gè)編碼樹單元中每一個(gè)的初始比特分配數(shù)表示為:
在本發(fā)明的一些實(shí)施例中,對(duì)于邊緣非標(biāo)準(zhǔn)大小的編碼樹單元,在步驟2之前,填充到標(biāo)準(zhǔn)大小后再輸入到預(yù)訓(xùn)練的神經(jīng)網(wǎng)絡(luò)中,經(jīng)進(jìn)行運(yùn)算得到的模型參數(shù)為填充后編碼樹單元的模型參數(shù),根據(jù)填充后編碼樹單元的模型參數(shù)及一校正因子得到邊緣非標(biāo)準(zhǔn)大小的編碼樹單元的模型參數(shù)。
在本發(fā)明的一些實(shí)施例中,根據(jù)上述填充后編碼樹單元的模型參數(shù)及一校正因子得到邊緣非標(biāo)準(zhǔn)大小的編碼樹單元的模型參數(shù)時(shí),采用以下公式(7)及公式(8):
α(a)=α(b)·sab;(7)
β(a)=β(b);(8)
其中,α(a)、β(a)為邊緣非標(biāo)準(zhǔn)大小的編碼樹單元的模型參數(shù);α(b)、β(b)為填充后編碼樹單元的模型參數(shù),sab為校正因子。
在本發(fā)明的一些實(shí)施例中,上述校正因子為:
其中,
在本發(fā)明的一些實(shí)施例中,上述卷積神經(jīng)網(wǎng)絡(luò)預(yù)先得到r-λ模型的擬合曲線,并以該擬合曲線表征的α及β值作為標(biāo)簽。例如,使用自然圖片來訓(xùn)練網(wǎng)絡(luò),首先將圖像轉(zhuǎn)化成yuv420格式,然后利用hevc參考軟件在allintra模式下以11個(gè)不同的量化參數(shù)(qp)值(從20到40,取值間隔為2)進(jìn)行壓縮,得到每個(gè)編碼樹單元(ctu)的r和λ數(shù)值對(duì)。然后根據(jù)上述r-λ模型的關(guān)系式擬合曲線(我們以平均比特?cái)?shù),bitsperpixel,bpp)作為r的度量,得到擬合結(jié)果的α和β值,作為標(biāo)簽。
在本發(fā)明的一些實(shí)施例中,步驟2中,卷積神經(jīng)網(wǎng)絡(luò)運(yùn)算時(shí),采用的數(shù)據(jù)為多個(gè)編碼樹單元中每一個(gè)的亮度分量,即提取每個(gè)64×64塊(編碼樹單元)的亮度分量(y)作為數(shù)據(jù)。
在本發(fā)明的一些實(shí)施例中,采用參數(shù)的預(yù)測(cè)值和實(shí)際值的歐氏距離作為損失函數(shù),并且采用隨機(jī)梯度下降方法優(yōu)化網(wǎng)絡(luò)參數(shù)。
訓(xùn)練完成后,在實(shí)際模型運(yùn)用中,編碼每一幀之前,提取每個(gè)ctu的y分量,輸入到兩個(gè)訓(xùn)練好的網(wǎng)絡(luò),分別預(yù)測(cè)模型參數(shù)α和β。對(duì)于尺寸小于64×64的邊緣ctu,首先采用填充的方法,用固定值128填充到正常大小,然后送入網(wǎng)絡(luò)。之后通過把填充效應(yīng)考慮在內(nèi),再對(duì)網(wǎng)絡(luò)輸出參數(shù)進(jìn)行校正。
在本發(fā)明的一些實(shí)施例中,卷積神經(jīng)網(wǎng)絡(luò)包括4個(gè)卷積層、3個(gè)全連接層和2個(gè)池化層,該卷積神經(jīng)網(wǎng)絡(luò)以64×64的塊作為輸入,在最后一個(gè)全連接層輸出模型參數(shù)的預(yù)測(cè)值。
以下通過具體實(shí)施例,對(duì)本發(fā)明提出的幀內(nèi)預(yù)測(cè)的碼率控制方法進(jìn)行詳細(xì)描述。
實(shí)施例
本實(shí)施例提出了一種基于卷積神經(jīng)網(wǎng)絡(luò)intra幀的碼率控制方法,該方法采用的系統(tǒng)架構(gòu)如圖1所示。其中有兩個(gè)網(wǎng)絡(luò)分別用于學(xué)習(xí)輸入ctu的α和β參數(shù)。對(duì)于輸入的整幀圖像,首先劃分為若干個(gè)ctu,再將每個(gè)ctu分別作為兩個(gè)網(wǎng)絡(luò)的輸入,經(jīng)預(yù)測(cè)得到參數(shù)α和β。最后進(jìn)行ctu級(jí)別的比特分配,得到每個(gè)ctu各自的λ參數(shù)。
該方法采用r-λ模型,包括以下步驟:
步驟1、將視頻中用于幀內(nèi)編碼的幀分成多個(gè)編碼樹單元;
步驟2、將多個(gè)編碼樹單元輸入至預(yù)訓(xùn)練的卷積神經(jīng)網(wǎng)絡(luò)中,經(jīng)運(yùn)算得到多個(gè)編碼樹單元中每一個(gè)的模型參數(shù);
步驟3、根據(jù)模型參數(shù)對(duì)多個(gè)編碼樹單元進(jìn)行比特分配;得到多個(gè)編碼樹單元中每一個(gè)的目標(biāo)比特?cái)?shù),完成幀內(nèi)預(yù)測(cè)的碼率控制。
如圖2所示,為用于計(jì)算得到模型參數(shù)的卷積神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu),可以看出該網(wǎng)絡(luò)結(jié)構(gòu)包括4個(gè)卷積層(每層后面都接有非線性激活層relu),2個(gè)池化(maxpooling)層和3個(gè)全連接層。其中最后一個(gè)全連接層輸出模型參數(shù)的預(yù)測(cè)值α或β。
對(duì)于邊緣非標(biāo)準(zhǔn)大小的ctu,則需要先進(jìn)行填充,再通過上述步驟二中的卷積神經(jīng)網(wǎng)絡(luò)運(yùn)算。如圖3(a)表示邊緣非標(biāo)準(zhǔn)大小的ctu的原始結(jié)構(gòu),圖3(b)表示圖3(a)中ctu填充后的結(jié)構(gòu)。卷積神經(jīng)網(wǎng)絡(luò)預(yù)測(cè)輸出是圖3(b)的參數(shù),假定兩個(gè)ctu的β值近似相等(通過對(duì)訓(xùn)練數(shù)據(jù)集的經(jīng)驗(yàn)觀察,發(fā)現(xiàn)不同ctu之間的β值相差不大,可看做近似相等),然后使用公式(8)和公式(9),從圖3(b)的α參數(shù)得到圖3(a)的α參數(shù),其中校正因子sab的值限制在區(qū)間[1,4]上。
具體地,上述步驟3為:得到每個(gè)ctu的模型參數(shù)后,按照以下步驟實(shí)施ctu級(jí)別的比特?cái)?shù)分配:
1)采用二分法解出下面方程,得到幀級(jí)別的λ值(λf):
其中nf為一幀中包含的ctu總數(shù)目,αbi,βbi為模型參數(shù)的變形值,其表達(dá)式如公式(4)和公式(5)所示,rf表示當(dāng)前幀的目標(biāo)比特?cái)?shù)。
2)根據(jù)公式(6)計(jì)算得到每個(gè)ctu的初始比特分配數(shù);
3)將每幀內(nèi)的第一個(gè)ctu的目標(biāo)比特?cái)?shù)設(shè)為初始分配數(shù),對(duì)于后續(xù)的ctu,第i個(gè)ctu的目標(biāo)比特?cái)?shù)按照公式(2)計(jì)算得到。
其中
remfi表示編碼第i個(gè)ctu前,當(dāng)前幀的剩余目標(biāo)比特?cái)?shù)。
綜上所述,本實(shí)施例中的碼率控制方法,可整體概括為:將訓(xùn)練好的兩個(gè)卷積神經(jīng)網(wǎng)絡(luò)植入hevcintra碼率控制中。實(shí)際碼率控制中,如果當(dāng)前幀為intra幀,則通過上述方法依次求解幀級(jí)別的λ值,并計(jì)算得到每個(gè)ctu的目標(biāo)比特?cái)?shù),最后根據(jù)每個(gè)ctu的目標(biāo)比特?cái)?shù),計(jì)算每個(gè)ctu的編碼參數(shù)λ,即所述的拉格朗日乘子,以用于視頻壓縮編碼。
以上所述的具體實(shí)施例,對(duì)本發(fā)明的目的、技術(shù)方案和有益效果進(jìn)行了進(jìn)一步詳細(xì)說明,應(yīng)理解的是,以上所述僅為本發(fā)明的具體實(shí)施例而已,并不用于限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi),所做的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。