深度学习为图片压缩算法赋能:节省55%带宽
本文來自圖鴨科技團(tuán)隊(duì)的投稿,他們用深度學(xué)習(xí)技術(shù)設(shè)計(jì)、優(yōu)化圖片壓縮算法,在保證圖像畫質(zhì)的情況下能節(jié)省55%帶寬。本文將介紹實(shí)現(xiàn)方法及測試對比。
隨著互聯(lián)網(wǎng)的發(fā)展,人們對高清圖片的需求也在不斷增加,在保證圖像畫質(zhì)的情況下最大程度降低圖像體積已成為行業(yè)發(fā)展趨勢。
目前比較出名的圖像壓縮格式是:WebP與HEIF。
WebP:谷歌旗下的一款可以同時提供有損壓縮和無損壓縮的圖片文件格式,其以VP8編碼為內(nèi)核,在2011年11月開始可以支持無損和透明色功能。目前facebook等網(wǎng)站都已采用這種圖片格式。
BPG:知名程序員、ffmpeg和QEMU等項(xiàng)目作者Fabrice Bellard推出的圖像格式,它以HEVC編碼為內(nèi)核,在相同體積下,BPG文件大小只有JPEG的一半。另外BPG還支持8位和16位通道等等。盡管BPG有很好的壓縮效果,但是HEVC的專利費(fèi)很高,所以目前的市場使用比較少。
這兩大技術(shù)都各有優(yōu)劣,為了最大程度的應(yīng)對市場需求采用深度學(xué)習(xí)技術(shù)做圖片壓縮算法已受到業(yè)界越來越多的關(guān)注。
深度學(xué)習(xí)技術(shù)設(shè)計(jì)圖片壓縮算法
通過深度學(xué)習(xí)技術(shù)設(shè)計(jì)壓縮算法不僅能在不借助HEVC的情況下設(shè)計(jì)出更適合商用的更高壓縮比的圖片壓縮算法,還可以在保持圖片畫質(zhì)同時,盡可能降低圖片體積。
在圖片壓縮領(lǐng)域主要用到的深度學(xué)習(xí)技術(shù)是卷積神經(jīng)網(wǎng)絡(luò)(CNN)。卷積神經(jīng)網(wǎng)絡(luò)就像搭積木一樣,一個卷積神經(jīng)網(wǎng)絡(luò)由卷積、池化、非線性函數(shù)、歸一化層等模塊組成,最終的輸出根據(jù)應(yīng)用而定;如在人臉識別領(lǐng)域,我們可以用它來提取一串特征表示一幅人臉圖片,然后通過比較特征的異同進(jìn)行人臉識別。
圖1:卷積神經(jīng)網(wǎng)絡(luò)示意圖(來源http://blog.csdn.net/hjimce/article/details/47323463)
如何利用卷積神經(jīng)網(wǎng)絡(luò)做壓縮?
如圖2所示,完整的框架包括CNN編碼器、量化、反量化、CNN解碼器、熵編碼、碼字估計(jì)和碼率-失真優(yōu)化等幾個模塊。編碼器的作用是將圖片轉(zhuǎn)換為壓縮特征,解碼器就是從壓縮特征恢復(fù)出原始圖片。其中編碼網(wǎng)絡(luò)和解碼器,可以用卷積、池化、非線性等模塊進(jìn)行設(shè)計(jì)和搭建。
圖2:用深度學(xué)習(xí)進(jìn)行圖片壓縮示意圖
如何評判壓縮算法?
目前評判一個壓縮算法的重要指標(biāo)有三個:PSNR(Peak Signal to Noise Ratio)、BPP(bit per pixel)和MS-SSIM(multi-scaleSSIM index)。我們知道,任何數(shù)據(jù)在計(jì)算機(jī)內(nèi)都是以比特形式存儲,所需比特?cái)?shù)越多則占據(jù)的存儲空間越大。PSNR用來評估解碼后圖像恢復(fù)質(zhì)量,BPP用于表示圖像中每個像素所占據(jù)的比特?cái)?shù),MS-SSIM值用來衡量圖片的主觀質(zhì)量,簡單來說在同等的Rate/BPP下PSNR更高,壓縮效果更好,MSSIM更高,主觀感受更好。
下圖為圖鴨圖片格式Tiny Network Graphics (TNG) 與其他圖片格式在同一壓縮比下的PSNR值與MS-SSIM值對比:
?
圖3:圖鴨TNG圖片格式與其他圖片格式在同一壓縮比下的PSNR值與MS-SSIM值對比
從上圖對比中可以看到,圖鴨的TNG在MS-SSIM值上一直處于領(lǐng)先狀態(tài),其PSNR值也已超過WebP、JPEG2000等商用算法。
如何用深度學(xué)習(xí)做壓縮?
談到如何用深度學(xué)習(xí)做壓縮,我們以圖片來舉例。將一張大小 768 * 512 的三通道圖片送入編碼網(wǎng)絡(luò),進(jìn)行前向處理后,會得到占據(jù) 96 * 64 * 192 個數(shù)據(jù)單元的壓縮特征。有計(jì)算機(jī)基礎(chǔ)的讀者可能會想到,這個數(shù)據(jù)單元中可放一個浮點(diǎn)數(shù),整形數(shù),或者是二進(jìn)制數(shù)。那到底應(yīng)該放入什么類型的數(shù)據(jù)呢?
從圖像恢復(fù)角度和神經(jīng)網(wǎng)絡(luò)原理來講,如果壓縮特征數(shù)據(jù)都是浮點(diǎn)數(shù),恢復(fù)圖像質(zhì)量是最高的。但一個浮點(diǎn)數(shù)占據(jù)32個比特位,圖片的計(jì)算公式為( 96 * 64 * 192 * 32)/(768*512)=96,壓縮后反而每個像素占據(jù)比特從24變到96!圖片大小非但沒有壓縮,反而增加了,這是一個糟糕的結(jié)果,很顯然浮點(diǎn)數(shù)不是好的選擇。
所以為了設(shè)計(jì)靠譜的算法,可以使用一種稱為量化的技術(shù),它的目的是將浮點(diǎn)數(shù)轉(zhuǎn)換為整數(shù)或二進(jìn)制數(shù),最簡單的操作是去掉浮點(diǎn)數(shù)后面的小數(shù),浮點(diǎn)數(shù)變成整數(shù)后只占據(jù)8比特,則表示每個像素要占據(jù)24個比特位。與之對應(yīng),在解碼端,可以使用反量化技術(shù)將變換后的特征數(shù)據(jù)恢復(fù)成浮點(diǎn)數(shù),如給整數(shù)加上一個隨機(jī)小數(shù),這樣可以一定程度上降低量化對神經(jīng)網(wǎng)絡(luò)精度的影響,從而提高恢復(fù)圖像的質(zhì)量。
即使壓縮特征中每個數(shù)據(jù)占據(jù)1個比特位,可是壓縮還是有可進(jìn)步的空間。那如何進(jìn)一步優(yōu)化算法?再看下BPP的計(jì)算公式。
假設(shè)每個壓縮特征數(shù)據(jù)單元占據(jù)1個比特,則公式可寫成:(96*64*192*1)/(768*512)=3,計(jì)算結(jié)果是3 bit/pixel,從壓縮的目的來看,BPP越小越好。在這個公式中,分母由圖像決定,我們進(jìn)行調(diào)整的只有分子:96、64、192,這三個數(shù)字與網(wǎng)絡(luò)結(jié)構(gòu)相關(guān)。所以,如果我們設(shè)計(jì)出更優(yōu)的網(wǎng)絡(luò)結(jié)構(gòu),這三個數(shù)字也會變小。
那1與哪些模塊相關(guān)?1表示每個壓縮特征數(shù)據(jù)單元平均占據(jù)1個比特位,量化會影響這個數(shù)字,但它不是唯一的影響因素,它還與碼率控制和熵編碼有關(guān)。碼率控制的目的是在保證圖像恢復(fù)質(zhì)量的前提下,讓壓縮特征數(shù)據(jù)單元中的數(shù)據(jù)分布盡可能集中、出現(xiàn)數(shù)值范圍盡可能小,這樣我們就可以通過熵編碼技術(shù)來進(jìn)一步降低1這個數(shù)值,圖像壓縮率會進(jìn)一步提升。
總結(jié)
總體而言,借助于深度學(xué)習(xí)設(shè)計(jì)視頻和圖像壓縮算法是一項(xiàng)非常具有前景,但同時也非常有挑戰(zhàn)性的技術(shù)。
最后,大家可以點(diǎn)擊閱讀原文獲取TNG測試鏈接(建議在PC端測試)。
總結(jié)
以上是生活随笔為你收集整理的深度学习为图片压缩算法赋能:节省55%带宽的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: P2P技术如何拯救一家直播网站
- 下一篇: 高孟平:深度学习是视频技术与人眼视觉连结