王曉鋒 張猷 夏嚴(yán)峰 王森 王輝
摘要:利用機器學(xué)習(xí)技術(shù)可以自動化地識別地表覆蓋物,減輕人力成本和減少人為誤差,加快測繪、國防、農(nóng)業(yè)和防災(zāi)減災(zāi)等各個領(lǐng)域的數(shù)字化轉(zhuǎn)型。遙感影像地表覆蓋物的分類算法已經(jīng)得到了一定的發(fā)展,但具體到應(yīng)用場景中,受制于模型效率,自動化水平仍不高。為了保證訓(xùn)練產(chǎn)生的機器學(xué)習(xí)模型可以穩(wěn)定、快速地服務(wù)于上述的領(lǐng)域,本文針對機器學(xué)習(xí)模型在訓(xùn)練、測試階段的優(yōu)化進(jìn)行了探索,從而保證模型可更高效穩(wěn)定地在有限的硬件資源上運行。通過本文介紹的優(yōu)化方法,模型的訓(xùn)練速度得到了提升,模型占用的空間得到了減小,模型的推理速度得到了提高,并且保證了模型的精度幾乎不受影響。
關(guān)鍵詞:神經(jīng)網(wǎng)絡(luò)壓縮;神經(jīng)網(wǎng)絡(luò)優(yōu)化;深度神經(jīng)網(wǎng)絡(luò);圖像語義分割;遙感影像
中圖分類號:TP391? ? ? 文獻(xiàn)標(biāo)識碼:A
文章編號:1009-3044(2022)17-0070-03
1 概述
航拍圖像和遙感圖像識別長期以來得到了測繪、國防、農(nóng)業(yè)等領(lǐng)域的廣泛應(yīng)用,隨著深度學(xué)習(xí)和卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Networks,CNN)的高速發(fā)展,地表覆蓋物分類等基于遙感影像的自動化分析技術(shù)也得到了一定程度的發(fā)展。
在過去的10年內(nèi),視覺模型的發(fā)展主要有兩個主流方向,分別是增加模型對于圖像的理解能力和降低模型理解圖像的算力消耗。通過增加模型復(fù)雜度提高精度已經(jīng)得到了充分研究,但如何在不損失太大精度的前提下,降低模型的大小和算力消耗仍有待探索。為了使深度學(xué)習(xí)模型得到更廣泛的應(yīng)用,尤其是在移動端設(shè)備上應(yīng)用,這樣的探索是必須的。
目前,學(xué)術(shù)界已有一些模型優(yōu)化的成果,比如MobileNetV2[1]和ShuffleNetV2[2]。從優(yōu)化的不同時間階段,模型優(yōu)化可以分為訓(xùn)練階段和推理階段。在模型訓(xùn)練階段,可以更改模型權(quán)重更新的過程,從而提高訓(xùn)練效率;在模型推理階段,可以將訓(xùn)練好的模型進(jìn)行編譯優(yōu)化,得到一個體積更小、運行更快的部署模型。
(1)訓(xùn)練階段的優(yōu)化
l空間可分離卷積:在不考慮通道維度的情況下,通過將卷積核分解降低運算量,但并不是任何卷積核都可以分解為兩個向量,因此不具備通用性。而且,計算矩陣分解還需要消耗一定的算力。
l深度可分離卷積:在考慮通道維度的情況下,將矩陣連乘的過程優(yōu)化為乘法的加法。需要注意的是,深度可分離卷積是減少卷積的參數(shù)量的近似算法,和樸素的卷積并不是嚴(yán)格等價的。
l量化:在不過分影響模型效果的前提下,將部分32位浮點數(shù)精度的數(shù)值降低為16位浮點數(shù)和8位整數(shù),這樣可以減少模型體積、加快訓(xùn)練的速度。
l剪枝:在不過分影響模型效果的前提下,將模型的部分結(jié)構(gòu)刪除,從而減少模型體積、加快推理速度。
l聚類:通過共享權(quán)重的方式來減少權(quán)重的數(shù)量,這樣可以減少模型體積、加快模型收斂速度。在樣本稀疏或者樣本分布不均衡的部分場景下,可以提升模型的效果。聚類對于模型效果和收斂速度的提升都是鑒于當(dāng)前的深度學(xué)習(xí)模型的參數(shù)數(shù)量很大、擬合能力很強這一事實。
(2)推理階段的優(yōu)化
l常量折疊:在編譯階段將一些常量表達(dá)式的值計算出來,然后寫入二進(jìn)制文件中(在模型編譯優(yōu)化的場景下,就是優(yōu)化后的模型),同時也是許多現(xiàn)代編譯器使用的編譯優(yōu)化技巧。這樣可以通過編譯時的單次計算換取運算時的若干次重復(fù)運算。并且,由于把常量表達(dá)式替換為常量,也減少了不少空間的存儲,因此也可以減少模型的體積。
l減少死區(qū)代碼:經(jīng)過模型的優(yōu)化之后,可能有許多的計算步驟被跳過了,因此會出現(xiàn)大量的不會被觸達(dá)的指令區(qū)域。減少死區(qū)代碼的方法是,通過遍歷所有指令來將這些代碼移除掉,達(dá)到減少模型體積的效果。
l算子融合:由于現(xiàn)代的機器學(xué)習(xí)建??蚣芏际且晕⑿退阕优c圖的形式來表示一個模型。適當(dāng)?shù)貙⒁恍┏R姷乃阕油負(fù)涞男蛄腥诤铣梢粋€算子可以極大地減少算子的內(nèi)存占用和算子之間的數(shù)據(jù)傳輸壓力,這樣就會達(dá)到減少模型大小和加快模型計算速度的目的。
訓(xùn)練階段廣泛被使用的框架有TensorFlow[3]和PyTorch[4]等,推理階段有ARM NN和TensorRT等。雖然這些框架都具有一定的跨平臺特性,但要想做到對所有的目標(biāo)設(shè)備(CPU、GPU、NPU、TPU)都能實現(xiàn)很好的推理性能是很難的。這是因為,各種硬件設(shè)備的計算特性有所差異,所以框架之間并不存在強通用性。
本文介紹了一些重要的深度學(xué)習(xí)模型優(yōu)化方法,并基于遙感影像語義分割問題進(jìn)行了實驗。實驗結(jié)果顯示,本文介紹的方法在不損失太多精度的前提下,對于縮小模型大小、提高訓(xùn)練和推理效率有著很好的效果,有利于遙感影像語義分割算法在移動端的部署與應(yīng)用。
2 方法
本文介紹神經(jīng)網(wǎng)絡(luò)訓(xùn)練和推理階段的若干優(yōu)化方法,具體的流程如圖1所示。在訓(xùn)練階段,引入混合精度、權(quán)重剪枝、權(quán)重聚類獲得模型1;在推理階段,通過編譯優(yōu)化獲得模型2,即最終模型。
2.1 混合精度
如今,大多數(shù)深度學(xué)習(xí)模型使用的數(shù)據(jù)精度是32位浮點數(shù),占用4字節(jié)內(nèi)存。但是,使用16位浮點數(shù)可以達(dá)到更快的運算速度和更小的內(nèi)存占用,因此產(chǎn)生了混合精度技術(shù)。混合精度是訓(xùn)練時在模型中同時使用16位和32位浮點類型,從而加快運行速度、減少內(nèi)存使用的一種訓(xùn)練方法。讓模型的某些部分保持使用32位類型的目的是,既能保持?jǐn)?shù)值穩(wěn)定性,又能縮短模型的單步用時,在提高訓(xùn)練效率的同時仍可以獲得同等的模型精度。
在混合精度訓(xùn)練時,由于權(quán)重、激活值、梯度等都使用16位存儲,會更容易產(chǎn)生舍入誤差和數(shù)據(jù)溢出的問題。為了使模型的準(zhǔn)確性不損失過多,可以使用權(quán)重備份和損失縮放的方法[5]。權(quán)重備份是指,在優(yōu)化步驟中,維護(hù)、更新一份32位的權(quán)重。在每次迭代中,32位權(quán)重被轉(zhuǎn)為16位,用于前向傳播和反向傳播。權(quán)重備份主要防范的問題是,當(dāng)產(chǎn)生過小的梯度,乘學(xué)習(xí)率后很容易下溢為0,對模型準(zhǔn)確性產(chǎn)生不利的影響。使用權(quán)重備份后,可以通過備份的32位權(quán)重恢復(fù)準(zhǔn)確性。損失縮放的方法啟發(fā)于網(wǎng)絡(luò)訓(xùn)練期間對數(shù)值范圍的觀察,大部分16位可表示范圍未被使用,而許多低于可表示最小值的值變成了0。如果將這些數(shù)值增大到2的冪次倍,可以避免下溢產(chǎn)生的誤差。最有效的方法是,將前向傳播后得到的損失值縮放,再進(jìn)行反向傳播,根據(jù)鏈?zhǔn)椒▌t,后續(xù)的梯度也會被縮放同樣的倍數(shù)。在選取縮放倍數(shù)的時候,只要不導(dǎo)致溢出,縮放因子越大越好。如果產(chǎn)生溢出,將使權(quán)重或梯度產(chǎn)生無窮大或NaN,而這是無法恢復(fù)的。
2.2 權(quán)重剪枝
權(quán)重剪枝通過刪除神經(jīng)網(wǎng)絡(luò)層之間的連接,從而減少參數(shù),進(jìn)而減少計算中涉及的參數(shù)和運算量,有利于模型壓縮,對于模型的存儲與傳輸來說都有好處。權(quán)重剪枝方法可以消除權(quán)重張量中作用不大的值,這一步通常會用到某些啟發(fā)式方法,比如計算權(quán)重張量的平均激活值來對權(quán)重張量中的值進(jìn)行優(yōu)先級排序,找到一定范圍內(nèi)的低優(yōu)先級的權(quán)重,再通過將神經(jīng)網(wǎng)絡(luò)中這些參數(shù)的值設(shè)置為0,以消除神經(jīng)網(wǎng)絡(luò)各層之間不必要的連接。由于在權(quán)重剪枝過程中,如果一次性剪枝掉太多張量中的值,可能會對神經(jīng)網(wǎng)絡(luò)造成不可逆的損傷,因此,權(quán)重剪枝方法常常是迭代式進(jìn)行的,即訓(xùn)練與剪枝過程的交替重復(fù)。稀疏張量可以實現(xiàn)很好的壓縮效果,因此很適合進(jìn)行壓縮。權(quán)重剪枝過程之后,由于張量中存在大量為0的參數(shù),所以可以很好地進(jìn)行模型壓縮,以達(dá)到降低模型大小的目的。
下面敘述一個具體的剪枝方法。對于選擇修剪的每一層,添加一個二進(jìn)制掩碼變量,與每層的權(quán)重形狀相同,用于確定哪些權(quán)重參與運算。前向傳播時,對權(quán)重按絕對值進(jìn)行排序,絕對值最小的權(quán)重對應(yīng)的掩碼被設(shè)為0,直到達(dá)到所需的稀疏度。反向傳播過程中,在前向傳播中被屏蔽的權(quán)重不會得到更新。需要注意的是,為了避免對模型的準(zhǔn)確性產(chǎn)生太大影響,設(shè)定的稀疏度需要經(jīng)過多次調(diào)整。學(xué)習(xí)率大小與其調(diào)整方式是另一個對模型精度影響很大的地方。如果學(xué)習(xí)率會下調(diào)很多,在學(xué)習(xí)率大幅下降、網(wǎng)絡(luò)已經(jīng)被剪枝后,網(wǎng)絡(luò)將難以從剪枝帶來的準(zhǔn)確率下降中恢復(fù)。如果初始學(xué)習(xí)率過高,可能意味著當(dāng)權(quán)重尚未收斂到一個好的解時修剪權(quán)重。這里描述的剪枝方法不依賴于任何特定網(wǎng)絡(luò)的屬性,具有高度的泛化性。
2.3 權(quán)重聚類
權(quán)重聚類通過用相同的值替換權(quán)重中的相似權(quán)重來減小模型的大小。通過在模型的訓(xùn)練權(quán)重上運行聚類算法,可以找到這些相似的權(quán)重,并把這些相似的權(quán)重用同樣的值進(jìn)行代替。權(quán)重聚類在減少模型存儲空間和傳輸大小方面具有直接優(yōu)勢,因為具有共享參數(shù)模型的壓縮率要比不具有共享參數(shù)的模型高得多。這樣的模型壓縮方法類似于權(quán)重剪枝,不同之處在于,權(quán)重聚類是通過增加共享權(quán)重的參數(shù)個數(shù)來實現(xiàn)的,而剪枝是通過將低于某個閾值的權(quán)重設(shè)置為0來實現(xiàn)的。由于權(quán)重聚類會將模型中所有參數(shù)替換為給定個數(shù)的共享權(quán)重值,所以在應(yīng)用權(quán)重聚類方法之前,通常需要對模型進(jìn)行一些預(yù)訓(xùn)練,使得模型的參數(shù)更新到一個可接受的水平之后,再使用權(quán)重聚類對參數(shù)進(jìn)行微調(diào)。將模型進(jìn)行權(quán)重聚類后,可以應(yīng)用常用的壓縮算法進(jìn)行壓縮。由于權(quán)重聚類后的模型中存在大量的共享參數(shù),可以實現(xiàn)更高的壓縮率。
在具體實現(xiàn)過程中,由于聚類中心對于聚類效果有影響,需要選擇合適的權(quán)重初始化方法,根據(jù)文獻(xiàn)[6],線性初始化是最優(yōu)的方法。計算相似權(quán)重的常用方法是K-means,并用歐氏距離度量權(quán)重和聚類中心的距離。聚類完成后的聚類中心就是共享權(quán)重。
2.4 編譯優(yōu)化
編譯優(yōu)化是將編譯前端生成的模型在編譯器中端通過計算圖的優(yōu)化方法對模型進(jìn)行優(yōu)化。需要注意的是,針對不同的目標(biāo)設(shè)備,使用的優(yōu)化方法以及優(yōu)化策略是有所不同的,以確保生成優(yōu)化后的計算圖能夠在目標(biāo)設(shè)備上表現(xiàn)出最佳性能。
編譯優(yōu)化的方法主要有:運算符合并,將多個小運算(加、和)合并為一個運算;常量折疊,可以預(yù)計算能夠確定的部分計算圖;靜態(tài)內(nèi)存規(guī)劃,可以預(yù)分配臨時變量占用的空間,避免多次內(nèi)存申請和釋放;數(shù)據(jù)分布變換,可以將數(shù)據(jù)分布變換為有利于進(jìn)行高效后端運算的分布,比如將行主序或列主序的矩陣變換為更適合目標(biāo)硬件的存儲形式。
3 實驗與分析
3.1 實現(xiàn)細(xì)節(jié)
本文以遙感影像地表覆蓋物分類為例對所介紹的方法進(jìn)行驗證。遙感影像數(shù)據(jù)的來源為上海市某地區(qū)的航拍圖,并按照建筑、水系、植逐像素地進(jìn)行了人工標(biāo)注。完成語義分割任務(wù)的基準(zhǔn)深度學(xué)習(xí)網(wǎng)絡(luò)是深度為4的U-Net[7],并融合了MobileNetV2[1],使用TensorFlow實現(xiàn)。輸入網(wǎng)絡(luò)的圖片大小均為1024*1024。訓(xùn)練批次大小設(shè)為4,迭代20代,損失函數(shù)使用Lovasz Loss[8]。
混合精度使用TensorFlow的Keras API實現(xiàn),權(quán)重剪枝和權(quán)重聚類使用TensorFlow提供的工具包Pruning API和Weight Clustering API實現(xiàn),編譯優(yōu)化使用TVM[9]實現(xiàn)。在模型進(jìn)行儲存時,權(quán)重仍然按照與權(quán)重剪枝或權(quán)重聚類前的模型一樣的Tensor格式進(jìn)行存儲,而并非會因為權(quán)重矩陣變得更為稀疏而采用稀疏矩陣的方式進(jìn)行存儲。所以,為了減少模型權(quán)重矩陣中的冗余數(shù)據(jù)的存儲,在存儲模型時采用gzip算法進(jìn)行壓縮。
3.2 實驗結(jié)果
混合精度實驗的結(jié)果如表1,有預(yù)訓(xùn)練時混合精度會縮短訓(xùn)練時長并降低Loss,無預(yù)訓(xùn)練時則相反。使用混合精度后,縮短訓(xùn)練時長的表現(xiàn)并不穩(wěn)定,并且會在一定程度上影響訓(xùn)練結(jié)果,但內(nèi)存占用被大幅減少了。
權(quán)重剪枝與權(quán)重聚類的實驗結(jié)果如表2,其中耗時表示一張圖片的推理耗時??梢钥闯觯瑱?quán)重剪枝與權(quán)重聚類對于推理耗時的影響非常有限,但是能大大縮減模型大小,而且對輸出準(zhǔn)確度沒有負(fù)面影響。之所以對推理耗時幾乎沒有影響,是因為盡管這兩種策略會提高矩陣的稀疏度,但是由于TensorFlow默認(rèn)存儲的方式仍然是Dense Tensor,所以在進(jìn)行計算時,沒有對稀疏張量提供計算加速的支持,仍然采用默認(rèn)的計算方法。
權(quán)重剪枝與權(quán)重聚類后對一張圖的預(yù)測結(jié)果如圖2所示,從左向右分別為:原圖、原預(yù)測圖、應(yīng)用權(quán)重剪枝的預(yù)測圖、應(yīng)用權(quán)重聚類的預(yù)測圖??梢钥闯?,權(quán)重剪枝與權(quán)重聚類對于預(yù)測結(jié)果沒有太大的影響,但權(quán)重剪枝會造成比權(quán)重聚類更多的誤分類。
使用TVM進(jìn)行編譯優(yōu)化實驗的結(jié)果如表3,對Conv2D算子進(jìn)行圖優(yōu)化??梢钥闯?,經(jīng)過多輪優(yōu)化,推理時間逐步減少。
4 結(jié)論與展望
本文針對遙感圖像語義分割在移動平臺應(yīng)用的問題,研究了神經(jīng)網(wǎng)絡(luò)優(yōu)化算法。本文探索了混合精度、權(quán)重剪枝、權(quán)重聚類、編譯優(yōu)化的方法,在開源平臺上進(jìn)行了實驗,分析了各種方法的優(yōu)勢與不足。混合精度能夠大幅降低內(nèi)存使用,但對于訓(xùn)練時間和訓(xùn)練效果的影響不可預(yù)料;權(quán)重剪枝和權(quán)重聚類能大幅度減小存儲模型的大小,對推理時間的影響幾乎可以忽略不計;編譯優(yōu)化和平臺具有很高的相關(guān)性,難以部署。為了進(jìn)一步探索優(yōu)化算法的適用性,可以在不同的網(wǎng)絡(luò)模型上進(jìn)行實驗,在不同平臺上測試性能表現(xiàn)。
參考文獻(xiàn):
[1] Sandler M,Howard A,Zhu M L,et al.MobileNetV2:inverted residuals and linear bottlenecks[C]//2018 IEEE/CVF Conference on Computer Vision and Pattern Recognition.Salt Lake City,UT.IEEE,2018: 4510-4520.
[2] Ma N N,Zhang X Y,Zheng H T,et al.ShuffleNet V2:practical guidelines for efficient CNN architecture design[C]//Computer Vision – ECCV 2018,2018: 116-131.
[3] Abadi M, Agarwal A, Barham P, et al. Tensorflow: Large-scale machine learning on heterogeneous distributed systems[J]. arXiv preprint arXiv:1603.04467, 2016.
[4] Paszke A, Gross S, Massa F, et al. Pytorch: An imperative style, high-performance deep learning library[J]. Advances in neural information processing systems, 2019(32): 8026-8037.
[5] Micikevicius P, Narang S, Alben J, et al. Mixed precision training[J]. arXiv preprint arXiv:1710.03740, 2017.
[6] Han S, Mao H, Dally W J. Deep compression: Compressing deep neural networks with pruning, trained quantization and huffman coding[J]. arXiv preprint arXiv:1510.00149, 2015.
[7] Ronneberger O,F(xiàn)ischer P,Brox T.U-net:convolutional networks for biomedical image segmentation[C]//Medical Image Computing and Computer-Assisted Intervention-MICCAI 2015,2015:234-241.
[8] Berman M,Triki A R,Blaschko M B.The lovasz-softmax loss:a tractable surrogate for the optimization of the intersection-over-union measure in neural networks[C]//2018 IEEE/CVF Conference on Computer Vision and Pattern Recognition.Salt Lake City,UT,USA.IEEE,2018:4413-4421.
[9] Chen T,Moreau T,Jiang Z,et al.TVM:An automated end-to-end optimizing compiler for deep learning[C]//Proceedings of the 13th USENIX Symposium on Operating Systems Design and Implementation(OSDI 8).Carlsbad,USA,2018:578-594.
收稿日期:2022-02-10
作者簡介:王曉鋒(1982—),男,上海人,高級工程師,碩士,主要研究方向為土木工程;張猷(1982—),男,上海人,高級工程師,本科,主要研究方向為輸變電工程建設(shè)管理;夏嚴(yán)峰(1990—)男,上海人,工程師,碩士,主要研究方向為輸變電項目管理;王森(1999—),男,黑龍江慶安人,本科,主研方向為圖像分割;王輝(1997—),男,安徽廬江人,碩士在讀,主要研究方向為圖像分割。