李亞文,何建強(qiáng)
(商洛學(xué)院電子信息與電氣工程學(xué)院,陜西商洛 726000)
為了降低傳輸成本和提高傳輸速度,在圖像進(jìn)行傳輸之前,都要經(jīng)過(guò)圖像壓縮去除冗余信息,圖像壓縮技術(shù)的關(guān)鍵就是盡量用少的數(shù)據(jù)量表示圖像本身的信息。圖像壓縮算法較多,主要包括兩類(lèi)[1-2]:一類(lèi)是冗余度壓縮法,另一種是熵壓縮,如:預(yù)測(cè)編碼、變換編碼等。哈夫曼提出構(gòu)造編碼的壓縮方式,JPEG是一種基于差分預(yù)測(cè)編碼的無(wú)損編碼,DCT(離散余弦變換)和多種基于小波變換的圖像壓縮算法是有損編碼,后來(lái)還有學(xué)者提出一種基于Haar小波變換的快速圖像壓縮算法[3]和基于字典模型壓縮方法[4]等。人工神經(jīng)網(wǎng)絡(luò)模擬了人腦結(jié)構(gòu)思維,其特色在于信息的分布式存儲(chǔ)和并行協(xié)同處理,BP(Back Propagation)神經(jīng)網(wǎng)絡(luò)是人工神經(jīng)網(wǎng)絡(luò)中應(yīng)用最廣泛的一種,是1986年由RUMELHART和MCCELLAND為首的科學(xué)家小組提出,是一種按誤差逆?zhèn)鞑ニ惴ㄓ?xùn)練的多層前饋網(wǎng)絡(luò),它的學(xué)習(xí)規(guī)則是使用最速下降法,通過(guò)反向傳播不斷調(diào)整網(wǎng)絡(luò)的權(quán)值和閾值,使網(wǎng)絡(luò)的誤差平方和最小。本文將BP神經(jīng)網(wǎng)絡(luò)算法應(yīng)用于圖像壓縮中,控制網(wǎng)絡(luò)模型結(jié)構(gòu),進(jìn)行分塊運(yùn)算,并進(jìn)行了算法的實(shí)驗(yàn)仿真實(shí)現(xiàn)。
BP網(wǎng)絡(luò)可以解決那些無(wú)法用直觀編程實(shí)現(xiàn)的事情,無(wú)法思考到其中的每一個(gè)步驟是怎樣的機(jī)制,但是最終的數(shù)據(jù)可以直觀得到,BP網(wǎng)絡(luò)把學(xué)習(xí)和存貯的過(guò)程,大量地輸入輸出關(guān)系模式一一映射出來(lái),不需要把映射關(guān)系提前揭曉。信號(hào)在傳播的過(guò)程中,包括一個(gè)正向?qū)W習(xí)過(guò)程和一個(gè)誤差反向?qū)W習(xí)過(guò)程,這個(gè)過(guò)程是反復(fù)進(jìn)行的,不斷循環(huán)形成一個(gè)網(wǎng)絡(luò)訓(xùn)練學(xué)習(xí)過(guò)程,這就是BP神經(jīng)網(wǎng)絡(luò)算法的基本原理,正向傳播是由輸入層到隱層的一個(gè)過(guò)程,反向傳播是輸出層到隱層的一個(gè)誤差反傳過(guò)程[5]。
BP算法的多層前饋網(wǎng)絡(luò)可以看作是目前最廣泛的神經(jīng)網(wǎng)絡(luò),以較大的比率應(yīng)用于生活中,當(dāng)然單隱層網(wǎng)絡(luò)更為普遍地應(yīng)用于語(yǔ)言神經(jīng)網(wǎng)絡(luò)中。BP神經(jīng)網(wǎng)絡(luò)模型如圖1所示,主要由輸入層、隱層和輸出層三部分組成[6]。
圖1 三層BP網(wǎng)絡(luò)模型
三層的網(wǎng)絡(luò)中,輸入向量X=(x1,x2,…,xi,…,xn)T,比如加入x0=-1,此時(shí),可以為隱層引入閾值;隱層輸出向量為Y=(y1,y2,…,yi,…,ym)T,如加入y0=-1可為輸出層引入閾值;輸出層輸出向量為O=(o1,o2,…,ok,…,ol)T;期望輸出向量為D=(d1,d2,…,dk,…,dl)T。輸入層到隱層間的權(quán)值矩陣用V表示,V=(v1,v2,…,vj,…,vm)T,其中vj為隱層第J個(gè)神經(jīng)元對(duì)應(yīng)的權(quán)向量;隱層到輸出層間,權(quán)值矩陣用W表示,W=(w1,w2,…,wk,…,wn)T,其中Wk為輸出層第k個(gè)神經(jīng)元對(duì)應(yīng)的權(quán)向量[7]。
對(duì)于輸出層有:
式(1)~式(6)共同構(gòu)成了BP網(wǎng)絡(luò)模型。
構(gòu)建BP網(wǎng)絡(luò)模型后,實(shí)際的輸出與期望輸出的是完全一致,必定會(huì)存在一個(gè)網(wǎng)絡(luò)誤差E,改變誤差可以通過(guò)調(diào)整權(quán)值實(shí)現(xiàn),要使得權(quán)值調(diào)整與誤差負(fù)梯度成正比例關(guān)系,那么有:
負(fù)號(hào)表示梯度下降,常數(shù)η∈(0,1)表示比例系數(shù)[9],是學(xué)習(xí)速率的體現(xiàn)。
式(7)和式(8)是對(duì)數(shù)學(xué)表達(dá)權(quán)值思路做出的調(diào)整,并非是計(jì)算式的表達(dá),在整個(gè)三層算法的推導(dǎo)過(guò)程中,對(duì)于輸出層有j=1,2,…,m;k=1,2,…,l;對(duì)隱層有i=0,1,2,…,n;j=1,2,…,m。就輸出層式(7)可以寫(xiě)成:
隱層,式(8)可寫(xiě)為:
輸出層與隱層各定義一個(gè)誤差信號(hào),令:
因此,可改寫(xiě)權(quán)值調(diào)整式(9)為:
權(quán)值調(diào)整式(10)改寫(xiě)為[10]:
對(duì)于隱層,δyj可展開(kāi)為:
對(duì)于輸出層,可得:
對(duì)于隱層,可得:
因此,三層前饋網(wǎng)絡(luò)的計(jì)算公式:
同時(shí)可以得出,BP算法學(xué)習(xí)過(guò)程中,各層權(quán)值調(diào)整公式大致一樣。
BP神經(jīng)網(wǎng)絡(luò)中,輸入層到隱層的映射關(guān)系通過(guò)編碼器反應(yīng)出,隱層直到輸出層之間的映射關(guān)系,壓縮比率(S)=輸入層神經(jīng)元個(gè)數(shù)/隱層神經(jīng)元節(jié)點(diǎn)數(shù)。
BP神經(jīng)網(wǎng)絡(luò)應(yīng)用圖像編碼的壓縮比與輸入層和隱層的節(jié)點(diǎn)數(shù)有關(guān):
壓縮比=輸入層節(jié)點(diǎn)數(shù)(n)/隱層節(jié)點(diǎn)數(shù)(m)
網(wǎng)絡(luò)設(shè)計(jì)主要包括:輸入節(jié)點(diǎn)、層數(shù)、輸出節(jié)點(diǎn)、每層激活函數(shù)、激活函數(shù)的確定、隱層節(jié)點(diǎn)數(shù)的確定。
1)輸入/輸出節(jié)點(diǎn)輸入/輸出節(jié)點(diǎn)是與樣本直接相關(guān)的。本文用于壓縮的原始圖像均選為256×256的標(biāo)準(zhǔn)圖像。
層數(shù):為了獲得好的壓縮圖像,使用不同的隱層層數(shù)來(lái)實(shí)現(xiàn)。
每層激活函數(shù):隱層中一般采取S型的激活函數(shù)過(guò)程。
隱層節(jié)點(diǎn)數(shù):網(wǎng)絡(luò)訓(xùn)練精度的提高可以通過(guò)采用一個(gè)隱層。
2)初始參數(shù)的取值
輸入輸出數(shù)據(jù)的預(yù)處理:預(yù)處理采用的方法是歸一化,把網(wǎng)絡(luò)的輸入輸出數(shù)據(jù)限制在[0,1]或[-1,1],BP網(wǎng)絡(luò)其隱層使用Sigmoid函數(shù)。
BP網(wǎng)絡(luò)是把誤差反向傳播算法對(duì)網(wǎng)絡(luò)權(quán)值進(jìn)行一定訓(xùn)練多層前饋網(wǎng)絡(luò)的過(guò)程。其設(shè)計(jì)便是通過(guò)使網(wǎng)絡(luò)輸出和樣本輸出之間的網(wǎng)絡(luò)權(quán)值誤差之前平方和,具體算法實(shí)現(xiàn)流程如圖2所示。
圖2 BP算法實(shí)現(xiàn)流程圖
選取原始圖像為L(zhǎng)ena灰度圖像如圖3所示。為簡(jiǎn)單起見(jiàn),設(shè)定網(wǎng)絡(luò)的最大訓(xùn)練步數(shù)為500,目標(biāo)誤差0.001,選取的原始圖像大小為256×256,圖像壓縮重建的質(zhì)量將主要由隱層神經(jīng)元個(gè)數(shù)N和子塊大小K的不同來(lái)決定。
1)設(shè)定隱層神經(jīng)元個(gè)數(shù)N為2,選取不同的K(子塊大?。┻M(jìn)行圖像壓縮。
以圖3(a)原圖為測(cè)試對(duì)象,分析當(dāng)N=2時(shí),不同子塊K分別取2、4、8進(jìn)行圖像壓縮,圖像重建的變化情況如圖3所示。當(dāng)N=2時(shí),不同子塊大小K分別取2、4、8值時(shí)的檢查功能圖如圖4所示。當(dāng)N=2時(shí),不同子塊大小K分別取2、4、8值時(shí)的回歸線圖如圖5所示。
圖3 當(dāng)N=2時(shí),不同子塊K壓縮重建的圖像
圖4 當(dāng)N=2時(shí),不同子塊的檢查功能圖
圖5 當(dāng)N=2時(shí),不同子塊的回歸線
2)固定子塊大小K=2作為標(biāo)準(zhǔn),選取不同的隱含層神經(jīng)元個(gè)數(shù)N值對(duì)比壓縮重建圖像效果。以圖 3(a)原圖為壓縮對(duì)象,分別選N=1、2、4,壓縮重建結(jié)果如圖6所示。
圖6 當(dāng)子塊K=2,不同隱層神經(jīng)元個(gè)數(shù)N的壓縮圖像
圖7是當(dāng)子塊K=2時(shí),不同隱層神經(jīng)元個(gè)數(shù)N=1、2、4時(shí)的檢查功能圖,在檢查功能圖中validation checks是防止網(wǎng)絡(luò)訓(xùn)練過(guò)適。通常設(shè)置的檢查默認(rèn)值,隨著網(wǎng)絡(luò)的訓(xùn)練次數(shù)的增加,確認(rèn)樣本的誤差曲線連續(xù)幾次不再下降,這是訓(xùn)練終止的條件之一。圖8是當(dāng)子塊K=2,不同隱層神經(jīng)元個(gè)數(shù)N分別取1、2和4的回歸線圖,圖9是當(dāng)子塊K=2,不同隱層神經(jīng)元個(gè)數(shù)N的不同的指標(biāo)參數(shù)指標(biāo)圖,圖10是當(dāng)子塊K=2,不同隱層神經(jīng)元個(gè)數(shù)N=1、2和4時(shí)PSNR(信噪比)參數(shù)表圖。
圖7 當(dāng)子塊K=2,不同隱層神經(jīng)元個(gè)數(shù)N的檢查功能
圖8 當(dāng)子塊K=2,不同隱層神經(jīng)元個(gè)數(shù)N的回歸線
圖9 當(dāng)子塊K=2,不同隱層神經(jīng)元個(gè)數(shù)N的參數(shù)指標(biāo)
圖10 當(dāng)子塊K=2,不同隱層神經(jīng)元個(gè)數(shù)N的PSNR參數(shù)
實(shí)驗(yàn)仿真中固定N=2,在不斷增加k值,圖像變得越來(lái)越模糊,圖像所占的空間越來(lái)越少。T表示壓縮所需時(shí)間長(zhǎng)短,MSE表示圖像之間的均方誤差,PSNR體現(xiàn)峰值信噪比,Epochs體現(xiàn)訓(xùn)練步長(zhǎng)。由圖5可知,當(dāng)N=2時(shí),不同子塊大小K分別取2,4,8值,可以明顯觀察到在K減小時(shí),回歸線越接近1,MSE表現(xiàn)出很好的訓(xùn)練效果。validation checks是防止網(wǎng)絡(luò)訓(xùn)練過(guò)適。
由此得出,通過(guò)BP神經(jīng)網(wǎng)絡(luò),圖像壓縮在K越小時(shí),結(jié)果越好,均方誤差使得它減少了,不過(guò)神經(jīng)網(wǎng)絡(luò)經(jīng)過(guò)了很長(zhǎng)的訓(xùn)練時(shí)間過(guò)程,只通過(guò)軟件進(jìn)行仿真,真實(shí)化很難實(shí)現(xiàn)。對(duì)網(wǎng)絡(luò)訓(xùn)練時(shí),限定目標(biāo)誤差為0.001。
分析圖10可知,固定K=2,N不斷增加時(shí),峰值信噪比(snr)先增大后減小,壓縮率(rate)逐步增,但是N不斷增加時(shí),訓(xùn)練時(shí)間變化與N沒(méi)有直接的線性關(guān)系??梢钥偨Y(jié)出:本文算法中分塊大小k越大,壓縮質(zhì)量越差,分塊效應(yīng)越明顯。隱層規(guī)模增大時(shí),圖像不一定越清晰。神經(jīng)網(wǎng)絡(luò)的規(guī)模與圖像壓縮質(zhì)量沒(méi)有簡(jiǎn)單的線性關(guān)系。
本文分析了BP神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)算法的原理,在網(wǎng)絡(luò)控制誤差范圍內(nèi)進(jìn)行網(wǎng)絡(luò)分層訓(xùn)練,分別討論了不同隱層神經(jīng)網(wǎng)絡(luò)層數(shù)N和分塊數(shù)目K對(duì)圖像壓縮質(zhì)量的影響等,為提高圖像壓縮質(zhì)量與重建算法提供了重要的理論依據(jù)。下一步研究還可以將神經(jīng)網(wǎng)絡(luò)與其他壓縮過(guò)程相聯(lián)系,比如:神經(jīng)網(wǎng)絡(luò)實(shí)現(xiàn)預(yù)測(cè)編碼過(guò)程、圖像塊的壓縮編碼等都可以通過(guò)BP神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)算法實(shí)現(xiàn)。