一文讀懂影象壓縮演算法
來源:頂級程式設計師
作者:圖鴨科技
網際網路時代,社交媒體分享、自動駕駛、增強顯示、衛星通訊、高清電視或視訊監控等應用場景對圖片和視訊有很強的需求,壓縮演算法也因此備受關注,但是不同的應用場景對壓縮演算法的效能要求也不一樣,有的需求是保持高清的畫質是第一位,有的需求是體積小是第一位,可以損害一些畫質。
那麼如何用深度學習技術來設計壓縮演算法呢?這篇文章將簡單的來和大家說一說。
01 深度學習圖片壓縮框架和基本概念介紹
圖1. 基於自編碼網路的影象壓縮
如圖1 所示,一個典型的自編碼圖片壓縮框架包括編碼器、量化、反量化、解碼器、碼字估計、熵編碼和率-失真優化等幾個模組。
以圖1的例子來解釋自編碼影象壓縮網路中各個模組的作用:假定輸入圖片大小為,通過編碼器和量化處理後得到的編碼特徵的維度為,假定熵編碼後平均每個編碼特徵單元所佔據的位元數為R,則編碼位元速率的計算公式為:
(1)
對公式(1)進行分析,其中與輸入圖片有關,由網路結構來決定,而R是由量化、編碼特徵分佈和熵編碼決定。
壓縮特徵經過反熵編碼、反量化和解碼器後就能得到解碼圖片。在解碼圖片質量不變的條件下,如果R越低則表示壓縮效率越高。
編碼和解碼結構是自編碼網路的基礎,目的是對非線性變換進行學習。量化的作用是將浮點數轉換為整數或二進位制,反量化作用與之相反。
量化是降低碼字的重要途徑,但也是導致資訊損失的首要原因。理論上講量化越精細資訊損失越小,但可能導致碼字增加和增加訓練的難度,因此設計高效的量化演算法非常重要。
為了達到提升壓縮效率的目的,需要用碼字估計模組在訓練中對R進行約束。
碼字估計首先要利用先驗概率模型對編碼特徵分佈進行準確估計,保證估計的編碼特徵分佈與實際分佈儘可能接近,然後通過計算熵對熵編碼後碼字進行估算。
一般可以用帶引數概率模型對先驗進行建模,如用高斯混合模型對資料分佈進行擬合:
(2)
以特徵分佈估計為基礎,熵編碼模組首先計算特徵的上下文概率,並對編碼特徵進行進一步的壓縮,這樣可進一步降低R值。碼字估計是估算經過算術編碼後,消耗位元數是多少在算術編碼高效執行前提下,碼字大小的下限,可表示為熵:
(3)
碼字估計主要用於訓練,在實際使用中先驗模型可用於自適應的算術編碼,生成碼流。從資訊理論的角度來說,當編碼特徵越集中時熵會進一步降低,從而熵編碼後碼字會降低,但網路的表示能力會受影響,並會降低重建影象的質量而導致失真。
所以在熵編碼碼字與影象重建質量之間需要做權衡,這種權衡稱率-失真優化。率對應編碼位元速率,失真對應重建質量。
一般通過率-失真優化構建的損失函式對自編碼壓縮網路進行訓練。
02 為什麼選擇深度學習
現階段壓縮演算法在諸如社交媒體分享、擴增實境、自動駕駛、醫學影像、高清電視等應用場景下均有很強的需求。
現有的演算法如要根據不同的應用需求對現有壓縮演算法進行優化並不容易,並且現在影象和視訊壓縮演算法效能的提升已遇到瓶頸。
從圖片壓縮角度來講,基於深度學習的技術最大的優點是可以根據不同的應用進行鍼對性的設計和訓練,可針對性的對主觀或客觀指標進行訓練。
從視訊壓縮角度來講,深度學習壓縮採用與H.264、H.265和H.266不同的架構,使用卷積神經網路為主題進行設計,可更靈活地將現階段機器視覺領域中的光流估計等演算法應用幀間關係建模中,設計高效視訊壓縮演算法。
此外,我們會結合超分辨等技術,對傳統演算法進行進一步優化,降低通訊頻寬。
圖2 TNG 主觀和客觀訓練模型與其他演算法對比示意圖
自編碼的壓縮演算法,現階段最大的優勢能針對特定的指標進行優化,可對重建圖的主觀效果有顯著提升。
GAN(對抗生成)網路對主觀效能、視覺效果提升有好處,但客觀質量並不好,一般用GAN網路設計的演算法,會生成些與原始資料不一致的細節。現階段我們將客觀質量(PSNR)的提升放在首位,同時主觀質量也取得不錯的效果。
壓縮演算法目前的市場需求量很大,加速了新一代壓縮演算法的研究步伐;但是因為市場需求各不相同,導致新一代的壓縮演算法推行難度大!
目前TNG採用的是變分自編碼網路的方法,且並沒有將GAN網路加進來。
03 最後
這是因為,我們的首要需求是客觀質量。前文提到了我們在這種設計下達到的效果是:TNG壓縮效果是BPG的壓縮效果的2倍,是JPEG的壓縮效果的3.5—4倍。大家在日常的實踐中,可以根據自己具體的壓縮需求,進行設計合適的影象壓縮演算法。
相關文章
- 深度學習助力資料壓縮,一文讀懂相關理論深度學習
- 深度學習影象視訊壓縮演算法——TNG深度學習演算法
- 圖鴨科技獲CVPR 2018影象壓縮挑戰賽單項冠軍,技術解讀端到端影象壓縮框架框架
- 一文讀懂SuperEdge拓撲演算法演算法
- 淺析Android平臺影象壓縮方案Android
- 一文讀懂mavenMaven
- 一文讀懂ServletServlet
- 第二屆學習影象壓縮挑戰賽
- 一文讀懂特徵工程特徵工程
- 一文讀懂 NPM 版本NPM
- 一文讀懂 Apache PulsarApache
- 一文讀懂Ka/Ks
- 一文讀懂 Data Mesh
- 一文讀懂微核心
- 一文讀懂eBPF/XDPeBPF
- 壓縮演算法一覽演算法
- 壓縮字串《演算法很美》字串演算法
- 一文讀懂Spring整合RedisSpringRedis
- 一文讀懂擁塞控制
- 一文讀懂支付系統
- 一文讀懂:GBDT梯度提升梯度
- 一文讀懂前端快取前端快取
- 一文讀懂“負載均衡”負載
- 一文讀懂web組態Web
- 一文讀懂「雲託管」
- 一文讀懂野指標指標
- 一文讀懂Lua元表
- 一文讀懂 Kubernetes APIServer 原理APIServer
- 演算法金 | 一文讀懂K均值(K-Means)聚類演算法演算法聚類
- Ceph Reef(18.2.X)之壓縮演算法和壓縮模式演算法模式
- 影象壓縮哪家強?請看這份超詳細對比
- [work] 影象縮放——雙線性插值演算法演算法
- Nginx網路壓縮 CSS壓縮 圖片壓縮 JSON壓縮NginxCSSJSON
- 一文讀懂Apache Flink技術Apache
- JVM(2)--一文讀懂垃圾回收JVM
- 一文讀懂系列-JVM垃圾收集JVM
- 【Flutter】一文讀懂混入類MixinFlutter
- 一文讀懂git核心工作原理Git