利用JPEG制作更快,更准确的神经网络
Uber AI Labs介紹了一種制作神經網絡的方法,該方法通過破解libjpeg并利用JPEG表示來更快,更準確的完成圖像處理的任務。本文來自Uber Engineering博客,LiveVideoStack進行了翻譯。
文 / Lionel Gueguen, Alex Sergeev, Rosanne Liu, & Jason Yosinski
譯 / 元寶
原文 https://eng.uber.com/neural-networks-jpeg/
神經網絡是處理各種行業數據的重要工具,在過去幾年里從一個學術研究領域發展成為行業的基石。卷積神經網絡(CNN)對于從圖像中提取信息特別有用,無論是對圖像進行分類,識別人臉還是評估圍棋棋局的位置。
在Uber,我們將CNNs用于各種用途,從檢測物體和預測其運動到處理街道級別和衛星圖像的千兆字節,以改善我們的地圖。在使用CNN時,我們關心它完成任務的準確程度,在很多情況下,我們也關心它的速度。在這兩個示例中,一個是網速是原來的兩倍的網絡可以實現實時檢測而不是離線檢測,或者能夠在一周的數據中心時間而不是兩周內處理龐大的數據集。
在本文中,我們描述了在NeurIPS 2018上提出的一種方法,通過破解libjpeg并利用JPEG(流行的圖像格式)已經使用的內部圖像表示,同時使CNNs更小、更快、更準確。這項工作的早期版本于2018年6月作為ICLR研討會海報提出。本文還將討論與網絡架構設計相關的頻率空間和顏色信息的驚人見解。
為了理解這種方法,首先讓我們看一下JPEG編解碼器的工作原理。一旦我們理解了JPEG,我們就可以很自然地應用CNN。
?
JPEG的工作原理
JPEG是一種舊格式,在2017年慶祝了它誕生25周年,并且它仍然是最廣泛使用的圖像格式之一。在其常見配置中,JPEG編碼器執行圖1中的步驟,如下所示,從右到左:
圖1. JPEG編碼過程包含幾個階段,此處從右到左顯示。
從圖像的RGB表示開始(如右圖所示),圖像被轉換為表示亮度(亮度)的YCbCr顏色空間-Y,以及表示色度(色調)的Cb和Cr通道。然后,通過預定因子(通常是兩個或三個)對Cb和Cr通道進行下采樣(在我們的工作中,我們使用兩個因子)。這種下采樣是壓縮的第一階段:信息丟失的第一階段。然后,將該表示中的每個信道分成8×8塊并通過離散余弦變換(DCT),變換到類似于傅立葉變換的頻率空間。DCT本身是無損且可逆的,將8×8空間塊轉換為64個通道。
然后量化系數,這是一個有損的過程,包含第二壓縮階段。量化由JPEG質量參數控制,質量設置越低,壓縮越嚴重,文件越小。量化閾值是特定于每個空間頻率,并且經過精心設計的:對低頻的壓縮比高頻率更少,因為人眼對寬頻區域上的細微誤差比對高頻信號幅度的變化更敏感。然后,通過霍夫曼編碼的變體無損地壓縮量化的DCT系數(整數)并將其存儲在JPEG文件中,如上面圖1中所示的image.jpg。
JPEG解碼過程與JPEG編碼過程完全相反。所有可逆步驟都被精確地反轉,兩個有損步驟——量化和下采樣——近似反轉以產生RGB圖像。對于上下文,此過程可能已運行十次,只是為了解碼和顯示此網頁上顯示的圖像!
假設我們想在JPEG圖像上訓練一個神經網絡。我們可以將JPEG圖像解壓為RGB,并將其輸入神經網絡的第一層,如下圖2所示:
?圖2.在典型的訓練過程中,JPEG圖像被解壓為RGB,然后被送入神經網絡。
現在我們了解了JPEG算法,難道我們不能輕易做得更好嗎?神經網絡必須處理由RGB像素陣列表示的圖像。許多神經網絡似乎學習了第一層中從像素空間到頻率空間的轉換。因此,如下圖3所示,為什么不直接將DCT表示輸入網絡,跳過過程中的一些早期層呢?
圖3.我們提出的過程:僅將JPEG圖像解壓到DCT表示階段,然后將此表示直接提供給神經網絡。正如我們所看到的,頻率表示允許我們跳過網絡的第一部分,節省計算,并且與使用原始像素相比,可以使網絡具有更高的精度!
這正是我們在下面和在論文中詳細介紹的方法:我們修改libjpeg直接將DCT系數輸出到TensorFlow(如果您想自己嘗試,可以使用我們的代碼),并根據此表示直接訓練網絡。結果證明,只要有幾個細節是正確的,它就會非常有效!
?
基線
在我們的研究中,我們從JPEG表示中來訓練網絡,希望生成的網絡既準確又快速。我們考慮了幾個圖像處理任務,但是現在我們選擇嘗試從ImageNet數據集中分類圖像。我們使用的所有網絡都基于殘余網絡ResNet-50,并且所有網絡都經過了90個epoch的訓練,這可以通過使用Horovod在128個NVIDIA Pascal gpu上進行分布式訓練,只需兩到三個小時就可以在我們的設置中完成。
首先,我們以最標準的方式——從RGB像素——訓練了一個普通的ResNet-50,并發現它達到了大約7.4%的前五個誤差,并且可以在NVIDIA Pascal GPU上每秒超過200個圖像進行推斷。在下面的圖4中,我們將該網絡描述為一個小的黑色方塊,它位于一個跟蹤錯誤率和速度之間關系的圖中:
圖4.在此圖中,我們繪制了從像素訓練的兩個網絡中每秒圖像的前五個誤差和速度之間的關系。
灰色虛線顯示了這個基線的準確度。相對于速度較慢且具有較少誤差的網絡,我們更喜歡速度更快的網絡,因此我們希望找到在圖中出現在右下方的網絡。根據具體應用,我們可能愿意在準確性和速度方面進行權衡。除了RGB像素網絡之外,我們還從YCbCr像素(正方形下方的灰色菱形)訓練了一個網絡,發現它的表現幾乎相同,表明色彩空間本身并沒有顯著影響性能。
由于我們的目標是快速準確的網絡,我們首先嘗試使ResNet-50更短(從底部刪除塊)或更薄(每層使用更少的通道)。雖然這會使網絡更快,但我們會失去多少精確度?在下面的圖5中,一些較短和較薄的網絡顯示了仍然利用RGB像素輸入的ResNet-50的簡單突變可用于我們的權衡曲線:
圖5.使ResNet-50更短或更薄但仍使用RGB輸入時,可以使用不同的權衡曲線。
在圖5中,我們可以看到具有全寬度的較短網絡比保持全深度的薄網絡表現更好。淺灰色的“刪除N個ID塊”行形成了Pareto前端,顯示了一組“非主導”網絡,或那些提供最佳速度與準確性權衡的網絡。例如,簡單地刪除三個ID塊可以使我們的圖像每秒近300張圖像,但錯誤也會增加,在這種情況下會增加近8%。“刪除3個ID塊”網絡位于Pareto前端,因為沒有其他網絡具有比它更低的錯誤和更高的速度。(有關這些網絡的更多詳細信息,請參閱我們的完整研究論文。)
現在讓我們嘗試直接在JPEG解碼器中提供的DCT系數上訓練網絡,看看是否可以將整個帕累托向前推進。
?
訓練DCT輸入網絡
要從DCT輸入進行訓練,我們必須首先考慮不同輸入大小的問題。
香草ResNet-50設計用于具有形狀(224,224,3)的輸入——寬度和高度為224像素和3個顏色通道(RGB)。我們的DCT系數具有非常不同的形狀:Y通道沿每個空間維度小8倍但具有64個頻率通道,從而產生輸入形狀(28,28,64)。Cb和Cr通道小16倍(由于額外的2倍下采樣),因此它們各自具有形狀(14,14,64)。我們該如何處理這些不尋常形狀的表示?
假設我們沒有完全忽略任何一個輸入,那么任何提出的架構的基本要求是在它最終做出分類決策之前,組合Y和Cb/Cr。我們將考慮的所有體系結構都具有以下形式:將變換或子網絡T1應用于Y,將另一個變換或子網絡T2應用于Cb和Cr,將通道順序連接到結果,并將連接后的表示提供給一個ResNet-50頂部的ResNet鏡像,無論是否進行一些修改。總體架構如圖6所示:
圖6.在用于進行DCT輸入的網絡的一般形式中,T 1和T 2可以是任意學習或非學習變換。
在T2是子網絡(學習變換)的情況下,權重在Cb和Cr路徑之間是不共享的。注意,為了按通道連接表示,它們必須共享相同的空間大小,因此,例如,T1和T2不可能同時是標識轉換。
我們考慮的兩個系列T1和T2的轉換:一個是通過最多使用單層轉換來盡早合并路徑,另一個是先進行更重要的處理、然后合并路徑。
DCT早期合并架構
使得Y和Cb/Cr的不同空間大小匹配的最簡單方法是對大表示(Y)進行下采樣,或對小表示(Cb/Cr)進行上采樣。我們嘗試兩者并將結果添加到我們的圖中,如藍色“DownSampling”和“UpSampling”圓圈,如下圖7所示:
圖7.使用DCT表示并盡可能早地合并數據流 - 使用單個層 - 導致Pareto前移,同時具有更快和更準確的網絡。
由于DownSampling模型減小了第一層輸入數據的空間大小,因此最終速度非常快——每秒約450幅圖像,或者是ResNet-50速度的兩倍以上——但其誤差也要高得多。UpSampling模型更慢、更準確,因為它丟棄的信息更少。
我們最初對UpSampling模型中的錯誤高于基線ResNet-50感到有些失望。我們假設這個問題的根源是一個微妙的問題:DownSampling和UpSampling模型中早期層的單元接收域太大。CNN中一個單元的感受域是它可以看到的輸入像素的數量,或者可能影響其激活的輸入像素的數量。事實上,在研究了網絡中每一層的步幅和接受域后,我們發現在普通ResNet-50的中途,單位的接受域約為70。就像通過我們幼稚地組裝起來的UpSampling模型一樣,接受域已經是110px ,因為我們的DCT輸入層的[步幅,接受域]是[8,8],而不是典型的典型[1,1]像素輸入層。直觀上,我們要求網絡了解110px寬的視覺概念,但沒有給它足夠的層數或計算能力來做到這一點。(更多討論請看論文的第3節和圖4。)
我們通過在網絡早期添加額外的stride-1塊創建了一個新的感知域感知(RFA)模型UpSampling-RFA。通過這種新模型,接受域逐層增長更加平滑,與ResNet-50大致匹配,并且性能得到提高(見圖7)。如果通過學習的反卷積而不是像素復制來完成上采樣,則誤差會進一步降低,從而產生最佳模型:解卷積-RFA。
通過對接受域的小心處理,我們現在發現了一種模型,它不僅更準確(6.98%的誤差與7.35%的誤差相比),而且比基線快1.29倍!沿著相同的DCT Early Merge系列的其他車型現在形成了新的Pareto前端,在他們提供的錯誤和速度權衡方面占據了先前車型的主導地位。
接下來,我們嘗試更深入的學習T1和T2變換,看看我們是否可以進一步推動前沿。
DCT Late Merge架構
早期合并Y和Cb / Cr通道遵循典型的、概念上簡單的深度學習范例:以某種方式將所有數據集合在一起,將其提供給模型,并讓模型學習如何處理它。這種方法簡單易用,但我們可以通過消除不必要的計算來生成更快的模型嗎?
經過一些實驗,我們發現,為了獲得較高的精度,需要允許亮度分支進行多層計算,但色度路徑可以提供較少的計算層,而不會造成損害。換句話說,將Y通道放入網絡的底部,然后在中間注入Cb/Cr信息,就像從底部的三個通道開始一樣,但是,當然,前者節省了計算量。
如下圖8所示,我們用紅色顯示了這個Late-Concat模型的結果速度和錯誤率,以及兩個相關網絡:感知字段感知版本,Late-Concat-RFA以及針對速度調整的版本使用較少的過濾器,Late-Concat-RFA-Thinner。我們可以看到,帕累托前沿再次向前移動!特別是,我們現在發現一個模型比香草ResNet快1.77倍,并且具有幾乎相同的誤差率。
圖8. Late-Concat模型再次推動帕累托前沿。與Cb/Cr路徑相比,通過允許沿Y路徑顯著更深的T1比T2更多的計算,我們獲得了最佳的速度/精度權衡。Late-Concat-RFA-Thinner比香草ResNet-50快約1.77倍,精度大致相同。
有趣的是,顏色信息直到后來才需要在網絡中與從亮度中學到的更高層次的概念相結合。在這一點上,我們只能推測,但可能是學習中等層次的概念(例如:草或狗毛)需要多層處理精細亮度邊緣到紋理之前與空間上不太精確的顏色信息組合(例如:綠色或棕色)。也許我們可以從ResNet-50從RGB像素學到的更高頻率的黑白邊緣和更低頻率(或恒定)的顏色檢測器一直預期這個結果(圖9)。
圖9. ResNet-50使用RGB像素輸入學習的第一層功能。許多邊緣檢測器主要是黑色和白色,在亮度空間中操作。許多顏色特征在空間或較低頻率上是恒定的,并且可以僅用于將粗糙的顏色信息傳遞到需要它的更高層。自2012年以來,我們已經看過這樣的過濾器;我們是否應該一直期待在網絡后期才能獲得顏色呢?
精確定位收益和未來方向
到目前為止,我們所展示的結果對于從業者來說是令人鼓舞和有用的——我們已經展示了什么能夠產生快速準確的網絡。為了使這一領域的科學貢獻有意義,我們還需要確定這些成果,并說明它們為什么被實現。在我們的論文中,我們進行消融研究以確定收益來源。
綜上所述,我們發現速度的提高僅僅是由于輸入層和后續層上的數據量更小,這是可以預料的。精度的提高主要是由于DCT表示的具體使用,它在圖像分類中工作得非常好。令人驚訝的是,簡單地用步幅8 DCT變換替換ResNet-50的第一個卷積層會產生更好的性能。它比完全相同形狀的學習變換更有效。換句話說,與傳統觀點相反,我們發現使用較大的接受域和步幅(每8個)比小的更好,并且第一層的硬編碼比學習它更好。2015年,當殘余網絡在ImageNet上的成為最新技術水平時,簡單地用凍結的DCT替換第一層將進一步改善現有技術水平。
上述結果表明的未來方向包括評估不同的頻率空間表示,不同大小的DCT,以及檢測、分割和其他圖像處理任務的性能。
如果您使用神經網絡處理任何圖像處理,我們希望聽到切換到DCT表示是否能像這里一樣對您的任務有利。如果您想要對這些結果的更詳細的描述,請參閱我們的論文(包括“補充信息”部分中的架構細節),并使用我們的代碼庫輕松地將DCT表示讀取到TensorFlow或PyTorch中。
精品文章推薦
技術干貨:
使用級聯SFU改善媒體質量和規模
機器學習幫助WebRTC視頻質量評價
FFmpeg 硬件加速方案概覽 (上)
Netflix:如何通過機器學習提高流媒體質量?
YouTube高效傳輸策略:節省14%帶寬 用戶體驗提升
Facebook:AV1比x264和libvpx-VP9提升至少30%
人物專訪:
一切從用戶的需求與體驗出發
雷輝:讓視頻會議conferencing like TV
技術人憑什么那么驕傲?謝然:給自己開發工具
總結
以上是生活随笔為你收集整理的利用JPEG制作更快,更准确的神经网络的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: LiveVideoStack线上交流分享
- 下一篇: 编码压缩新思路:面向QoE的感知视频编码