周仁爽,陳堯森,郭 兵,沈 艷,李 杰,王 煒,4
(1. 四川大學(xué)計(jì)算機(jī)學(xué)院 成都 610065;2. 成都索貝數(shù)碼科技股份有限公司 成都 610041;3. 成都信息工程大學(xué)計(jì)算機(jī)學(xué)院 成都 610225;4. 鵬城實(shí)驗(yàn)室 廣東 深圳 518055)
單圖像超分(single image super resolution, SISR)是一種經(jīng)典的機(jī)器視覺(jué)任務(wù),其目的是從低分辨率圖像中重構(gòu)出高分辨率圖像。圖像超分被廣泛應(yīng)用于許多機(jī)器視覺(jué)的任務(wù)中,如醫(yī)學(xué)影像[1]、監(jiān)控影像[2]、目標(biāo)識(shí)別[3]等,其巨大的應(yīng)用前景,成為了機(jī)器視覺(jué)領(lǐng)域的研究熱點(diǎn)。
隨著卷積神經(jīng)網(wǎng)絡(luò)(convolution neural network,CNN)[4]的出現(xiàn),基于深度學(xué)習(xí)的超分網(wǎng)絡(luò)因其強(qiáng)大的特征表達(dá)能力在圖像超分領(lǐng)域取得了優(yōu)異的表現(xiàn),并逐漸在圖像超分領(lǐng)域中占據(jù)了主導(dǎo)地位。文獻(xiàn)[5]最早提出了基于CNN 的圖像超分網(wǎng)絡(luò)(superresolution convolutional neural network, SRCNN),其從稀疏編碼[6-7]中汲取靈感,使用了一個(gè)3 層的CNN 結(jié)構(gòu)實(shí)現(xiàn)了低分辨率到高分辨率的圖像重建。此后基于CNN 的超分網(wǎng)絡(luò)被不斷提出,并一直刷新著超分網(wǎng)絡(luò)的最佳性能表現(xiàn)。其中SRResNet[8]、EDSR[9]等網(wǎng)絡(luò)采用了類似文獻(xiàn)[10]提出的殘差網(wǎng)絡(luò)結(jié)構(gòu),構(gòu)建出了由殘差模塊堆砌出的具有相當(dāng)深度的網(wǎng)絡(luò)結(jié)構(gòu)。文獻(xiàn)[11]更是提出了RIR(residual in residual)的結(jié)構(gòu),將網(wǎng)絡(luò)深度提高到了400 多層,取得了驚人的性能表現(xiàn)。然而在超分網(wǎng)絡(luò)深度不斷加深的同時(shí),基于CNN 的超分網(wǎng)絡(luò)也面臨著資源消耗越來(lái)越大的難題。在實(shí)際應(yīng)用中,更深的超分網(wǎng)絡(luò)帶來(lái)了出色的性能表現(xiàn),但同時(shí)也帶來(lái)了龐大的參數(shù)量和浮點(diǎn)操作計(jì)算量(FLOPs),如RCAN(residual channel attention networks)便擁有著30 ×109的FLOPs 以及13 ×106的參數(shù)量(Params)。如此龐大的計(jì)算量和內(nèi)存消耗對(duì)于一些性能和存儲(chǔ)有限的平臺(tái),特別是對(duì)移動(dòng)平臺(tái)和嵌入式平臺(tái)的移植工作提出了巨大的挑戰(zhàn)。因此對(duì)復(fù)雜的超分模型進(jìn)行壓縮優(yōu)化,是非常有必要的。
網(wǎng)絡(luò)模型壓縮的目的在于盡可能地降低模型參數(shù)量和計(jì)算量,同時(shí)又不能出現(xiàn)明顯的精度下降。目前常見(jiàn)的網(wǎng)絡(luò)壓縮方法有量化(quantization)[12-14]、知識(shí)蒸餾(konwledge distillation, KD)[15-17]和網(wǎng)絡(luò)剪枝(network pruning)[18-22]。量化是一種像素級(jí)別的壓縮方法,通過(guò)將全精度(32 bit)的權(quán)重(weights)、激活值(activations)以及梯度值(gradients)量化到低精度(如8 bit),從而達(dá)到壓縮和加速網(wǎng)絡(luò)的目的。然而量化的方法需要軟硬件都支持低精度運(yùn)算,在使用范圍上大幅受限,并且容易帶來(lái)模型精度的明顯下降,并不適合所有網(wǎng)絡(luò)。而知識(shí)蒸餾則是使用一個(gè)復(fù)雜強(qiáng)大的教師網(wǎng)絡(luò)來(lái)監(jiān)督簡(jiǎn)單小巧的學(xué)生網(wǎng)絡(luò)訓(xùn)練,并將教師網(wǎng)絡(luò)學(xué)到的知識(shí)提煉給學(xué)生網(wǎng)絡(luò),在模型壓縮上有較好的效果。但知識(shí)蒸餾的方法需要合理地設(shè)計(jì)教師網(wǎng)絡(luò)和學(xué)生網(wǎng)絡(luò),在實(shí)際使用中缺乏靈活性。相反,網(wǎng)絡(luò)剪枝在模型壓縮的方法中具備較高的靈活性,對(duì)大部分網(wǎng)絡(luò)都能適用,且能直接有效地減少模型參數(shù),降低模型的存儲(chǔ)消耗,并加速模型推理,在模型壓縮領(lǐng)域有著廣泛應(yīng)用。
網(wǎng)絡(luò)剪枝作為一種常見(jiàn)的模型壓縮方法,在一些高級(jí)別的機(jī)器視覺(jué)任務(wù)中已經(jīng)得到了廣泛應(yīng)用,并證明了其有效性。但是在基于CNN 的超分網(wǎng)絡(luò)中卻鮮有使用,因?yàn)槿鏓DSR、RCAN 等超分網(wǎng)絡(luò)都具有獨(dú)特的網(wǎng)絡(luò)結(jié)構(gòu),如果采用常見(jiàn)的通道剪枝或權(quán)重稀疏等網(wǎng)絡(luò)剪枝方法,可能會(huì)破壞原有的網(wǎng)絡(luò)結(jié)構(gòu),造成較大的精度損失。
為了解決這個(gè)問(wèn)題,本文提出了一種模塊重要性的評(píng)估方法,用于評(píng)估EDSR 等網(wǎng)絡(luò)中每個(gè)殘差模塊對(duì)于網(wǎng)絡(luò)的貢獻(xiàn)程度,并移除對(duì)網(wǎng)絡(luò)貢獻(xiàn)度較小的模塊。由于是對(duì)模塊整體進(jìn)行刪減,因此并沒(méi)有破壞網(wǎng)絡(luò)的特殊結(jié)構(gòu),在剪去大量參數(shù)的同時(shí)也最大限度地保留了模型原有的精度。
本文的主要貢獻(xiàn)有兩點(diǎn):1)提出了一種評(píng)估超分殘差模塊重要性的方法,該方法具有通用性,可以用于大部分超分網(wǎng)絡(luò)。2)提出了一種超分網(wǎng)絡(luò)剪枝的方法,通過(guò)網(wǎng)絡(luò)剪枝降低超分網(wǎng)絡(luò)的參數(shù)量以及運(yùn)算量,降低網(wǎng)絡(luò)的部署難度。
自SRCNN[5]首先將深度學(xué)習(xí)的方法用到圖像超分任務(wù)上,大量基于深度學(xué)習(xí)的超分網(wǎng)絡(luò)被相繼提出。VDSR[23]通過(guò)一個(gè)殘差結(jié)構(gòu)解決了網(wǎng)絡(luò)加深所產(chǎn)生的梯度爆炸問(wèn)題,同時(shí)通過(guò)堆積卷積核的方式獲得一個(gè)較大的感受野,解決了SRCNN 受限于小感受野的問(wèn)題。VDSR 使用了一個(gè)深的神經(jīng)網(wǎng)絡(luò)模型對(duì)低分辨率圖像進(jìn)行重構(gòu),并將殘差結(jié)構(gòu)引入超分網(wǎng)絡(luò),對(duì)此后很多超分網(wǎng)絡(luò)的設(shè)計(jì)產(chǎn)生了影響。文獻(xiàn)[23]認(rèn)為更深的網(wǎng)絡(luò)能夠提供更大的感受野,幫助超分網(wǎng)絡(luò)更好的重構(gòu)畫面細(xì)節(jié)。在這種思想的指導(dǎo)下,誕生了不少深度頗深的網(wǎng)絡(luò)結(jié)構(gòu),以EDSR[9]、RCAN[11]、RDN[24]為代表的網(wǎng)絡(luò)通過(guò)堆疊殘差模塊(resblock)的方式解決了網(wǎng)絡(luò)加深時(shí)帶來(lái)的訓(xùn)練困難問(wèn)題,并取得了state-of-the-art 的成績(jī)。
然而因?yàn)榫W(wǎng)絡(luò)深度的加深,計(jì)算開(kāi)銷也隨之而來(lái),這使得將網(wǎng)絡(luò)移植到一些硬件資源有限的設(shè)備上非常困難。為了降低網(wǎng)絡(luò)的復(fù)雜度,使之可以部署到低性能平臺(tái),網(wǎng)絡(luò)剪枝是一種值得考慮的方式。
文獻(xiàn)[25-27]通過(guò)重新設(shè)計(jì)高效網(wǎng)絡(luò)來(lái)實(shí)現(xiàn)降低模型參數(shù)量的目的。而網(wǎng)絡(luò)剪枝則是從一個(gè)大網(wǎng)絡(luò)通過(guò)壓縮的方式來(lái)獲得一個(gè)更加高效的小網(wǎng)絡(luò),泛用性更高,避免了設(shè)計(jì)網(wǎng)絡(luò)的高門檻。神經(jīng)網(wǎng)絡(luò)模型通常是過(guò)參數(shù)的[28],包括了很多冗余參數(shù),而網(wǎng)絡(luò)剪枝的目的就是移除這部分對(duì)網(wǎng)絡(luò)來(lái)說(shuō)不重要的參數(shù)。從網(wǎng)絡(luò)剪枝作用的層級(jí)上來(lái)說(shuō),剪枝分為非結(jié)構(gòu)化剪枝和結(jié)構(gòu)化剪枝。
早期的剪枝工作大都集中在非結(jié)構(gòu)化剪枝,非結(jié)構(gòu)化剪枝也即權(quán)重剪枝,這種剪枝方法直接作用于單個(gè)神經(jīng)元的權(quán)重,可以最大化地移除冗余連接,實(shí)現(xiàn)最佳剪枝率。文獻(xiàn)[29-30]通過(guò)移除網(wǎng)絡(luò)中的絕對(duì)值較小的權(quán)重,將AlexNet[31]的參數(shù)量降低了9 倍,而VGGNet[32]更是將參數(shù)量降低了13 倍,從138 M 降低至10.3 M,取得了優(yōu)秀的壓縮效果。然而雖然非結(jié)構(gòu)化剪枝的效果十分強(qiáng)大,但是由于對(duì)每個(gè)神經(jīng)元都剪去了不同數(shù)目的連接,導(dǎo)致每個(gè)節(jié)點(diǎn)輸入和輸出數(shù)目不規(guī)則。這種稀疏的結(jié)構(gòu)無(wú)法利用現(xiàn)有的BLAS 庫(kù)加速矩陣運(yùn)算,因此即便模型的參數(shù)降低了,模型的推理速度卻沒(méi)有實(shí)質(zhì)性的提升。
結(jié)構(gòu)化剪枝通常裁剪的是網(wǎng)絡(luò)結(jié)構(gòu)的某部分,如通道剪枝、層剪枝,而不是單獨(dú)的某個(gè)權(quán)重。剪枝后的網(wǎng)絡(luò)結(jié)構(gòu)不會(huì)變得稀疏,因此結(jié)構(gòu)化剪枝并不需要依賴特殊的軟件庫(kù)(如稀疏矩陣運(yùn)算)支持,便可以直接實(shí)現(xiàn)模型的推理加速,相比于非結(jié)構(gòu)化剪枝更加具有優(yōu)勢(shì)。文獻(xiàn)[33]將網(wǎng)絡(luò)中每個(gè)卷積核矩陣按絕對(duì)值進(jìn)行求和,將得到較小值的通道從網(wǎng)絡(luò)中移除,實(shí)現(xiàn)了VGGNet 推理成本下降34%,ResNet110 推理成本下降38%的加速效果。文獻(xiàn)[34]則是利用Batch Normalization 中的縮放因子的大小來(lái)定義對(duì)應(yīng)通道的重要性,并且為了約束BN 層中縮放因子的大小,在目標(biāo)方程中添加了一個(gè)稀疏正則項(xiàng),使得更多縮放因子在訓(xùn)練中接近于0,以此提高剪枝率。以上的通道剪枝方法在圖像分類等高級(jí)機(jī)器視覺(jué)任務(wù)中取得了不錯(cuò)的壓縮效果,然而在圖像超分等低級(jí)任務(wù)中卻實(shí)踐較少。原因是目前基于CNN 的圖像超分網(wǎng)絡(luò)平等地看待每個(gè)通道的特征,如果移除了部分通道可能會(huì)帶來(lái)無(wú)法接受的精度損失。為了避免通道剪枝影響超分網(wǎng)絡(luò)的特殊結(jié)構(gòu),造成較大的精度損失,本文將剪枝的范圍落到了超分網(wǎng)絡(luò)的模塊(block)上。由于大部分超分網(wǎng)絡(luò)都是由相同的模塊堆砌而成,只減少模塊數(shù)量并不會(huì)破壞網(wǎng)絡(luò)的原本結(jié)構(gòu),因此模塊剪枝或者說(shuō)層剪枝是更適合超分網(wǎng)絡(luò)的剪枝方法。
層剪枝也是結(jié)構(gòu)化剪枝的一類,相比于通道剪枝,層剪枝將剪枝的范圍擴(kuò)大到層級(jí)別,剪枝范圍更大,能減少的參數(shù)數(shù)量也更多。文獻(xiàn)[35]利用了文獻(xiàn)[36]中提出的線性探針技術(shù),計(jì)算出CNN網(wǎng)絡(luò)中的每一層對(duì)于網(wǎng)絡(luò)整體的貢獻(xiàn)程度,并通過(guò)移除對(duì)網(wǎng)絡(luò)貢獻(xiàn)度較低的層來(lái)達(dá)到網(wǎng)絡(luò)剪枝的目的。結(jié)合知識(shí)蒸餾后,能做到在精度幾乎無(wú)損失甚至是略好于原模型的情況下大幅削減模型參數(shù)量。文獻(xiàn)[37]中裁剪了圖像超分網(wǎng)絡(luò)RCAN 和SAN[38]的模塊數(shù)量,并利用知識(shí)蒸餾(KD)的方法來(lái)恢復(fù)模型精度,最終在精度下降不多的情況下取得了較好的模型壓縮效果。此方法有效地壓縮了超分網(wǎng)絡(luò)的大小,實(shí)現(xiàn)了性能提升,但是在選擇要剪枝的模塊時(shí)并沒(méi)有任何指導(dǎo)性,僅僅是減少模塊數(shù)量再借由知識(shí)蒸餾恢復(fù)網(wǎng)絡(luò)精度。
為了解決這個(gè)問(wèn)題,本文提出了一種評(píng)估模塊重要性的方法,針對(duì)性地移除重要性較低的模塊。由于被剪模塊的選擇更具有指導(dǎo)性,剪枝后的網(wǎng)絡(luò)僅需要簡(jiǎn)單的微調(diào)(fine-tune)即可恢復(fù)到比較理想的精度,避免了知識(shí)蒸餾的高額時(shí)間成本,實(shí)現(xiàn)超分網(wǎng)絡(luò)壓縮的目的。
本文方法是一種針對(duì)于超分網(wǎng)絡(luò)模塊的網(wǎng)絡(luò)剪枝方法,其主要目的是移除對(duì)網(wǎng)絡(luò)貢獻(xiàn)不大或不重要的模塊,以達(dá)到網(wǎng)絡(luò)輕量化的目的。因此也屬于層剪枝的范疇,為了避免混淆,以下統(tǒng)稱為模塊剪枝。
常見(jiàn)的CNN 超分網(wǎng)絡(luò)通常可分為特征提取和圖像重構(gòu)兩部分。VDSR 提出更深的網(wǎng)絡(luò)結(jié)構(gòu)能夠獲得更大的感受野,從而在圖像重構(gòu)時(shí)得到的超分圖像獲得更高的質(zhì)量。隨著殘差網(wǎng)絡(luò)結(jié)構(gòu)的引入,增加了超分網(wǎng)絡(luò)的深度,提高了網(wǎng)絡(luò)的超分性能。由殘差模塊(Resblock)堆砌而成的超分網(wǎng)絡(luò)結(jié)構(gòu),如圖1 所示,成為了一種比較主流的超分網(wǎng)絡(luò)結(jié)構(gòu)。
圖1 超分網(wǎng)絡(luò)常見(jiàn)結(jié)構(gòu)
基于殘差模塊堆砌的超分網(wǎng)絡(luò)并不是直接預(yù)測(cè)超分圖像,而是預(yù)測(cè)插值算法得到的插值圖像相比于超分圖像的殘差。因此只要能夠保證網(wǎng)絡(luò)預(yù)測(cè)得到的殘差是正確的,就能最大程度保證網(wǎng)絡(luò)的精度。因?yàn)樽詈笠粋€(gè)殘差模塊的輸出即為網(wǎng)絡(luò)預(yù)測(cè)的殘差,在此前提下,本文以網(wǎng)絡(luò)中最后一個(gè)殘差模塊的輸出作為標(biāo)準(zhǔn)輸出,并以余弦相似度作為相似度指標(biāo),計(jì)算網(wǎng)絡(luò)中其他模塊的輸出和這個(gè)標(biāo)準(zhǔn)輸出的相似度。如圖2 所示,以EDSR 為例,計(jì)算的各殘差模塊相對(duì)于最后一個(gè)殘差模塊輸出的相似度,圖中橫坐標(biāo)代表每個(gè)殘差模塊的標(biāo)號(hào),縱坐標(biāo)代表該模塊相對(duì)于最后一個(gè)模塊的余弦相似度??梢钥吹皆娇亢蟮哪K,輸出相對(duì)于標(biāo)準(zhǔn)輸出就越接近,并且每個(gè)模塊相較于上一個(gè)模塊相似度的上升幅度不是相同的,最后一個(gè)模塊相對(duì)于上一個(gè)模塊相似度的提升最大。
圖2 EDSR 模塊相似性
前面提到超分網(wǎng)絡(luò)學(xué)習(xí)到的是預(yù)測(cè)超分圖像的殘差,因此最后一個(gè)殘差模塊的輸出可以認(rèn)為是網(wǎng)絡(luò)的最終學(xué)到的輸出結(jié)果,那么每一個(gè)殘差模塊對(duì)于網(wǎng)絡(luò)整體的貢獻(xiàn)程度就可量化為相似度上升的幅度,即每個(gè)模塊的相似度減去上一個(gè)模塊的相似度就是該模塊對(duì)于網(wǎng)絡(luò)的貢獻(xiàn)程度。圖3 為EDSR 基于上述規(guī)則得到的模塊貢獻(xiàn)分布情況,橫坐標(biāo)代表每個(gè)殘差模塊的標(biāo)號(hào),縱坐標(biāo)代表該模塊對(duì)網(wǎng)絡(luò)的貢獻(xiàn)程度,圖中已將模塊貢獻(xiàn)度映射到0.0~1.0。
圖3 EDSR 模塊貢獻(xiàn)分布
得到每個(gè)模塊對(duì)網(wǎng)絡(luò)的貢獻(xiàn)以后,按照貢獻(xiàn)的高低對(duì)模塊的重要性進(jìn)行劃分,低貢獻(xiàn)度的模塊重要性低,可以在模塊剪枝中優(yōu)先移除;而高貢獻(xiàn)的模塊重要性高,為了保證剪枝后的網(wǎng)絡(luò)精度應(yīng)予以保留。
2.2.1 數(shù)學(xué)標(biāo)號(hào)
假設(shè)一個(gè)預(yù)訓(xùn)練的超分網(wǎng)絡(luò)擁有n個(gè)殘差模塊,第i個(gè)殘差模塊表示為 RBi,它所占參數(shù)量為。因?yàn)槊總€(gè)殘差模塊是完全相同的,因此每個(gè)模塊的參數(shù)量也相同,即W=。模型的總參數(shù)量則為Wtotal=nW+Wother,其中Wother為除去殘差模塊外其他模塊的參數(shù)量。通常Wother在超分網(wǎng)絡(luò)總參數(shù)量中僅占到很小一部分,因此Wtotal≈nW。另外 RBi的輸出用Oi來(lái)表示,實(shí)驗(yàn)中輸入N張圖像,則代表了 RBi在輸入第j張圖像時(shí)輸出的圖像。當(dāng)輸入圖像的高寬分別為hj、wj時(shí),可用一個(gè)一維的向量表示,即,其中ci表 示輸出Oi的通道數(shù),代表Oi一維向量的第k個(gè)元素。
2.2.2 超分模塊剪枝步驟
基于相似度的超分網(wǎng)絡(luò)剪枝步驟如圖4 所示。其中圖4a 為原始的超分網(wǎng)絡(luò),以EDSR 為例,其超分網(wǎng)絡(luò)由淺層特征提取模塊、多個(gè)殘差模塊以及一個(gè)上采樣模塊組成。超分模塊剪枝作用的主體是紅色虛線框出來(lái)的殘差模塊部分。
圖4 超分模塊剪枝的步驟
在圖4b 中,單獨(dú)拿出總數(shù)為n的殘差模塊,首先輸入一張圖像,得到每個(gè)模塊的輸出O={O1,O2,···,Oi,···,On},并以最后一個(gè)殘差模塊RBn的 輸出On作為標(biāo)準(zhǔn),計(jì)算其他每個(gè)模塊的輸出Oi與On的余弦相似度(cosine similarity) :
那么對(duì)于每個(gè)Oi,相對(duì)于On的 相似度Si便可表示為:
為了消除單張圖像輸入帶來(lái)的誤差,本文在實(shí)際剪枝中使用了N張圖像輸入計(jì)算相似度,再取平均的方式來(lái)得到平均相似度,因此式(2)變成:
如2.1 節(jié)所述,每個(gè)模塊的貢獻(xiàn)度可以量化為相似度的上升幅度,相似度上升的幅度越大,代表該模塊對(duì)網(wǎng)絡(luò)整體的貢獻(xiàn)度越大,用貢獻(xiàn)度等同于模塊的重要性,可將模塊重要性I MPi表示為:
在得到每個(gè)模塊的重要性后,再根據(jù)設(shè)定的剪枝率,篩選不重要的模塊進(jìn)行模塊剪枝,得到如圖4b 中所示的結(jié)構(gòu),其中灰色的部分即為被剪掉的不重要的模塊。在剪掉不重要的模塊后,網(wǎng)絡(luò)的參數(shù)量以及FLOPs 都得到了降低,降低的參數(shù)量可用mW來(lái)表示,m為被剪掉的殘差模塊數(shù)量。剪枝后的模型可以更加輕松地向下部署到低性能平臺(tái)。但由于網(wǎng)絡(luò)的結(jié)構(gòu)已經(jīng)發(fā)生改變,需要對(duì)模型進(jìn)行微調(diào)恢復(fù)損失的精度。
綜上,基于模塊相似性的超分網(wǎng)絡(luò)剪枝的算法如下。
算法1 基于模塊相似性的超分網(wǎng)絡(luò)剪枝算法
輸入:預(yù)訓(xùn)練完成的超分網(wǎng)絡(luò),包含n個(gè)殘差模塊RB={rb1,rb2,···,rbn},參數(shù)量為nW+Wother;N張用于預(yù)測(cè)的低分辨率圖像,每張圖像的高寬分別為hj、wj;剪枝率 thr。
輸出:剪枝后的超分網(wǎng)絡(luò),包含n?m個(gè)殘差模塊,參數(shù)量為(n?m)W+Wother。
關(guān)于剪枝率 thr的取值,應(yīng)依據(jù)希望移除的模塊數(shù)量來(lái)決定。thr越大,移除的模塊數(shù)量越多,同時(shí)可能造成的精度損失也越大。然而 thr的大小與剪枝后精度損失的大小并沒(méi)有絕對(duì)關(guān)系,應(yīng)依據(jù)待剪枝模型的冗余程度而定。
為了驗(yàn)證剪枝方法,本文選擇了代表性的超分網(wǎng)絡(luò)EDSR 進(jìn)行實(shí)驗(yàn),同時(shí)為了證明方法的通用性,也在RCAN 進(jìn)行了剪枝實(shí)驗(yàn)。預(yù)訓(xùn)練和Finetune 階段以DIV2K[39]作為數(shù)據(jù)集。DIV2K 是一個(gè)有900 張2 k 分辨率圖像的數(shù)據(jù)集,實(shí)驗(yàn)中取1~800張作為訓(xùn)練集,801~900 張的圖像作為驗(yàn)證集。測(cè)試部分則是選擇了Set5[40],Set14[41],BSD100[42],Urban100[43]這4 個(gè)benchmarks 數(shù)據(jù)集。通過(guò)計(jì)算YCbCr 中Y 通道的峰值信噪比(PSNR)來(lái)量化超分實(shí)驗(yàn)結(jié)果。Fine-tune 階段使用了Adam 作為優(yōu)化器,學(xué)習(xí)率設(shè)置為1×10?4,每200 個(gè)epoch 學(xué)習(xí)率衰減為原來(lái)的一半,使用L1作為損失函數(shù),訓(xùn)練300 個(gè)epoch。硬件方面則使用了NVIDIA RTX 2070作為訓(xùn)練GPU。
3.2.1 超分模塊剪枝效果
EDSR 原模型擁有32 個(gè)殘差模塊,參數(shù)量共為37.76 M,占到整個(gè)模型的92.7%,因此直接減少殘差模塊的數(shù)量是一種行之有效的壓縮模型的方法。實(shí)驗(yàn)中分別將殘差模塊剪到16 個(gè)和8 個(gè)。而RCAN 則擁有10 個(gè)殘差模塊組,每組又擁有20 個(gè)殘差模塊,總模塊數(shù)達(dá)到了200 個(gè),因此也非常適合模塊剪枝。在對(duì)RCAN 剪枝的過(guò)程中,對(duì)每個(gè)殘差模塊組的模塊都進(jìn)行了剪枝,每組剪去等量數(shù)目的模塊。最終得到的剪枝結(jié)果如表1 所示。
表1 超分模塊剪枝的定量結(jié)果
EDSR_×2_16/8 分別代表剪枝后擁有16 個(gè)殘差模塊和8 個(gè)殘差模塊的EDSR,而RCAN_×2_6則代表每個(gè)殘差模塊組擁有6 個(gè)殘差模塊,因此RCAN總模塊數(shù)由10×20個(gè)減少到了10×6個(gè)。Flops 使用1 ×3×256×256的輸入測(cè)得。PSNR 代表超分圖像與原圖之間的峰值信噪比,是一種評(píng)價(jià)圖像失真水平的客觀標(biāo)準(zhǔn),PSNR 的值越高代表圖像質(zhì)量越高。SSIM 代表結(jié)構(gòu)相似性,也是一種評(píng)判圖像相似度的指標(biāo),SSIM 越高代表圖像越相似,完全一致時(shí)SSIM 為1.0。從表格中可以看到EDSR模型參數(shù)量分別下降了46%和69%,然而在測(cè)試數(shù)據(jù)集上的平均PSNR 卻只有輕微下降,在RCAN的實(shí)驗(yàn)中也是如此。由此可見(jiàn),超分重建圖像的質(zhì)量不會(huì)造成太大損失。
為了更直觀地展現(xiàn)超分模塊剪枝對(duì)模型精度的影響,本文提供了可視化的測(cè)試結(jié)果,如圖5 所示。
圖5 可視化測(cè)試結(jié)果
圖中EDSR_×2 代表原模型,EDSR_×2_16/8 代表剪枝后的模型,Bicubic 代表雙三次插值算法得到的插值圖像。本文分別從BSD100 和Urban100兩個(gè)測(cè)試集中挑選一張圖片作為可視化測(cè)試結(jié)果,可以看到剪枝后的模型不僅從PSNR 上非常接近原模型,從可視化的結(jié)果來(lái)看也十分接近原模型的超分結(jié)果,即便是將模型剪枝到了8 個(gè)模塊,超分的效果也遠(yuǎn)好于插值圖像。
3.2.2 超分模型剪枝的性能提升
超分模塊剪枝對(duì)模型的壓縮能力不僅體現(xiàn)在參數(shù)量和運(yùn)算量的減少,同時(shí)提升了模型的預(yù)測(cè)速度。為了測(cè)試剪枝后模型的預(yù)測(cè)速度,本文使用一個(gè)1×3×256×256的輸入,測(cè)試在GPU 上預(yù)測(cè)10 次所需要的時(shí)間,測(cè)試時(shí)使用的GPU 為NVIDIA RTX 2070 顯卡。測(cè)試結(jié)果如表2 所示。
表2 超分模塊剪枝對(duì)EDSR 預(yù)測(cè)速度的提升
表中GPU 顯存占用為Pytorch 提供的顯存占用查看方法torch.cuda.max_memory_allocated()測(cè)得??梢?jiàn)超分模塊剪枝可以有效提升模型的預(yù)測(cè)速度,其中8 模塊的剪枝模型預(yù)測(cè)速度達(dá)到了3 倍以上的提升。不僅如此,模型的顯存占用同樣得到了一定程度的節(jié)約,這對(duì)于實(shí)際部署到低性能平臺(tái)很有意義。
為了進(jìn)一步說(shuō)明基于模塊相似的超分模塊剪枝的有效性和合理性,本文首先驗(yàn)證超分模塊剪枝的有效性,其次證明超分模塊之間的相對(duì)獨(dú)立性,并比較了不同的相似性度量方法,同時(shí)和知識(shí)蒸餾方法進(jìn)行了對(duì)比。
3.3.1 超分模型剪枝的有效性驗(yàn)證
為了驗(yàn)證基于模塊相似性的超分模塊剪枝的有效性,本文設(shè)計(jì)了以下實(shí)驗(yàn):1) 使用超分模塊剪枝的方法計(jì)算模塊重要性,并依據(jù)模塊重要性進(jìn)行網(wǎng)絡(luò)剪枝;2) 不計(jì)算模塊重要性,隨機(jī)選擇殘差模塊進(jìn)行剪枝;3) 使用超分模塊剪枝,在剪枝后對(duì)模型參數(shù)重新初始化,不使用預(yù)訓(xùn)練模型的參數(shù)。以上3 種實(shí)驗(yàn)均使用同樣的剪枝率,保留8 個(gè)殘差模塊,F(xiàn)ine-tune 的所有步驟保持一致。分別用Pruned、Random、Scratch 表示這3 種方法,得到表3 的實(shí)驗(yàn)結(jié)果。
表3 超分模塊剪枝有效性實(shí)驗(yàn)結(jié)果
從驗(yàn)證集上的PSNR 表現(xiàn)來(lái)看,Pruned 方法優(yōu)于Random 方法,這說(shuō)明模塊重要性的評(píng)估方法是有效的,通過(guò)本文方法可以有效分辨出對(duì)網(wǎng)絡(luò)整體貢獻(xiàn)更高、更重要的殘差模塊,從而做到精準(zhǔn)的網(wǎng)絡(luò)剪枝。同時(shí),Pruned 方法和Random 方法都優(yōu)于Scratch 方法,這說(shuō)明使用了網(wǎng)絡(luò)剪枝得到的網(wǎng)絡(luò)相比于從頭開(kāi)始訓(xùn)練的網(wǎng)絡(luò)能取得更高的精度表現(xiàn),證明了網(wǎng)絡(luò)剪枝本身的有效性。
3.3.2 模塊間的相對(duì)獨(dú)立性驗(yàn)證
為了驗(yàn)證模塊的相對(duì)獨(dú)立性,本文設(shè)計(jì)了以下實(shí)驗(yàn)。本實(shí)驗(yàn)同樣采用了EDSR 網(wǎng)絡(luò)作為樣本,首先使用模塊重要性評(píng)估方法選出模型中最重要以及最不重要的兩個(gè)模塊,使用兩個(gè)相同的EDSR 模型,移除最重要的模塊,再則移除最不重要的模塊。兩個(gè)模型在相同的條件下進(jìn)行Fine-tune 恢復(fù)精度,并記錄下前10 個(gè)epoch 在驗(yàn)證集上的PNSR變化情況,得到的結(jié)果如圖6 所示。
圖6 模塊的相對(duì)獨(dú)立性驗(yàn)證
在超分網(wǎng)絡(luò)中的不同模塊是相互聯(lián)系而不是完全獨(dú)立的。盡管如此,每個(gè)網(wǎng)絡(luò)模塊也不是完全平等的,而是具有相對(duì)的獨(dú)立性。這表現(xiàn)在去掉不同的模塊對(duì)模型輸出的影響并不相同,有的模塊會(huì)劇烈地影響模型的輸出,有的只是輕微影響。對(duì)于本文剪枝方法而言,就是要找出對(duì)于整個(gè)網(wǎng)絡(luò)而言相對(duì)不重要,影響輕微的模塊,并移除該模塊,以達(dá)到快速恢復(fù)模型精度的目的。
正如實(shí)驗(yàn)中所示,移除重要性相對(duì)低的模塊在Fine-tune 過(guò)程中模型精度上升的速度遠(yuǎn)大于另一個(gè),證實(shí)了不重要模塊對(duì)模型整體的影響更小,也證明了本文重要性評(píng)估的合理性。
3.3.3 不同相似性計(jì)算方法對(duì)比
在評(píng)估模塊重要性的算法中,本文使用了余弦相似度作為計(jì)算相似度的方法。使用均方誤差(MSE)作為相似度的指標(biāo)進(jìn)行了表4 中的實(shí)驗(yàn)。
表4 不同的相似度計(jì)算方法對(duì)比
和前面的實(shí)驗(yàn)相同,除了相似度計(jì)算的方法,其他條件均保持一致的情況下。在剪到8 個(gè)殘差模塊后,使用余弦相似度的方法相較于均方誤差能夠取得更好的精度表現(xiàn),因此最終選擇了余弦相似度作為相似度的指標(biāo)。
3.3.4 與知識(shí)蒸餾的方法對(duì)比
對(duì)比文獻(xiàn)[37]中知識(shí)蒸餾的方法,本文的模塊剪枝更具有導(dǎo)向性,在RCAN 上進(jìn)行相同數(shù)量模塊的剪枝,對(duì)比結(jié)果如表5 所示。可知在同等模塊數(shù)量的情況下,本文方法在不同的數(shù)據(jù)集上都取得了更佳的精度。
表5 RCAN 上不同數(shù)據(jù)集PSNR 對(duì)比 dB
本文提出了一種適用于常見(jiàn)超分網(wǎng)絡(luò)的模塊剪枝方法,通過(guò)計(jì)算模塊的相似性換算得到網(wǎng)絡(luò)中每個(gè)模塊對(duì)整體網(wǎng)絡(luò)的貢獻(xiàn)程度,并且通過(guò)移除貢獻(xiàn)度低的模塊達(dá)到網(wǎng)絡(luò)剪枝的目的。
相比于粒度更低的權(quán)重剪枝以及通道剪枝,本文的模塊剪枝屬于層剪枝范疇,操作更加靈活方便,并且在不同的網(wǎng)絡(luò)上都取得了良好的剪枝效果,為超分網(wǎng)絡(luò)在低性能平臺(tái)上的部署提供了可能。