王榮達(dá),劉寧鐘,李強(qiáng)懿,沈家全
(南京航空航天大學(xué) 計算機(jī)科學(xué)與技術(shù)學(xué)院,江蘇 南京 211106)
在深度學(xué)習(xí)發(fā)展迅速的今天,研究員們已經(jīng)設(shè)計出了大量優(yōu)秀的大型神經(jīng)網(wǎng)絡(luò)算法模型,這些模型在很多任務(wù)上都表現(xiàn)非常出色,例如目標(biāo)檢測、圖像分類、細(xì)粒度識別、圖像生成、圖像到圖像翻譯等任務(wù)。但是它們都有一個共同的缺點,就是所需要的計算量和模型大小都非常大,通常需要配置大顯存的GPU進(jìn)行運算。而在移動互聯(lián)網(wǎng)高速發(fā)展的今天,日常的應(yīng)用更多地會放到移動端,而很多大型網(wǎng)絡(luò)需要的運算量手機(jī)是無法進(jìn)行處理或者運行時速度過慢。這時候就需要對神經(jīng)網(wǎng)絡(luò)模型進(jìn)行優(yōu)化壓縮和加速。常見的做法有設(shè)計輕量級卷積神經(jīng)網(wǎng)絡(luò),從而降低模型所需要的參數(shù)量,或者對一個訓(xùn)練完成的大型卷積神經(jīng)網(wǎng)絡(luò)進(jìn)行模型剪枝。
輕量級神經(jīng)網(wǎng)絡(luò)經(jīng)過了多年的發(fā)展,取得了一定的成果。例如在ICLR-2017上提出的SqueezeNet[1],它在只用到Alexnet[2]模型五十分之一的參數(shù)量的情況下,在圖像分類數(shù)據(jù)集ImageNet[3]上實現(xiàn)了和Alexnet相同的正確率。文章中還利用了模型壓縮的思想,可以將模型的大小進(jìn)一步壓縮到0.5 MB。隨后MobileNet[4]、ShuffleNet[5]等新型輕量級網(wǎng)絡(luò)的提出,更是進(jìn)一步探討了在非常深的卷積神經(jīng)網(wǎng)絡(luò)中該如何設(shè)計輕量級網(wǎng)絡(luò)結(jié)構(gòu)的問題。
為了從預(yù)訓(xùn)練的模型中學(xué)習(xí)緊湊而有效的網(wǎng)絡(luò),Denton等人[6]利用奇異值分解(SVD)實現(xiàn)了全連接層中參數(shù)的低秩近似,從而降低了模型的參數(shù)量。Chen等人[7]使用了哈希函數(shù),利用哈希表提供參數(shù)映射來節(jié)省權(quán)重參數(shù)量。Han等人[8]通過刪除預(yù)訓(xùn)練神經(jīng)網(wǎng)絡(luò)模型中不重要的參數(shù),減少了模型參數(shù)量,并進(jìn)一步在文獻(xiàn)[9]中利用量化、霍夫曼編碼和權(quán)重稀疏等方式來獲得極其緊湊的卷積神經(jīng)網(wǎng)絡(luò)模型。Luo等人[10]通過刪除了多余的權(quán)重,并用全局平均池(GAP)層代替了全連接層,大大降低了模型的參數(shù)量。Vanhouche等人[11]探索了利用8位整數(shù)值的深度神經(jīng)網(wǎng)絡(luò)用來替換原始模型中的32位浮點值,從而實現(xiàn)模型的壓縮和加速。Courbariaux和Bengio等人[12]探索了具有二進(jìn)制權(quán)重和激活的小型神經(jīng)網(wǎng)絡(luò)。Restgari等人[13]更進(jìn)一步地在最新的神經(jīng)體系結(jié)構(gòu)中應(yīng)用具有二進(jìn)制權(quán)重的卷積層從而實現(xiàn)更高的性能。Anwar等人[14]描述了一種在特征圖和卷積核層次的卷積層進(jìn)行結(jié)構(gòu)化修剪的方法。其中權(quán)重的修剪是通過粒子過濾來完成的,具體做法是根據(jù)誤分類率對所有的參數(shù)進(jìn)行加權(quán)排序,最后決定需要裁減掉的卷積單元。該方法在小型卷積神經(jīng)網(wǎng)絡(luò)剪枝上展示了很好的效果,但在大型卷積神經(jīng)網(wǎng)絡(luò)上的表現(xiàn)差強(qiáng)人意。谷歌的學(xué)者在2017年提出一種用于嵌入式設(shè)備和移動端的輕量級卷積神經(jīng)網(wǎng)絡(luò)MobileNet。這個網(wǎng)絡(luò)結(jié)構(gòu)推出后受到了廣大研究人員的跟蹤研究,其最主要的貢獻(xiàn)是提出了一種深度可分離卷積(depthwise separable convolution)的新型卷積結(jié)構(gòu)。深度可分離卷積核與傳統(tǒng)的卷積不同,傳統(tǒng)卷積是用卷積核對特征圖中的每個像素點相乘后進(jìn)行累加,也就是使用N個DK*DK*M大小的卷積核進(jìn)行特征圖的卷積,最后輸出結(jié)果。ShuffleNet采用的網(wǎng)絡(luò)設(shè)計思想與前面提到的SqueezeNet和MobileNet不同,ShuffleNet是采用了一種稀疏組卷積(group convolution)的思想,組卷積是將輸入層的不同特征圖進(jìn)行分組,然后采用不同的卷積核對各個組進(jìn)行卷積,從而降低卷積過程中所需的計算量。使用組卷積設(shè)計的網(wǎng)絡(luò)結(jié)構(gòu)有很多,比如ResNeXt[15]、Xception[16]、MobileNetV2[17]等。但是這些網(wǎng)絡(luò)當(dāng)中存在一定的問題,其中的1×1卷積層需要耗費很多的計算量。為了解決這個問題,ShuffleNet采取的是對1×1卷積層進(jìn)行分組卷積操作,但是這樣也帶來了一個問題,之前采用1×1卷積層是為了解決卷積層組間特征通訊的問題,而采用分組卷積的話就會又出現(xiàn)同樣的問題。而ShuffleNet的作者為了解決這個問題,提出了channel shuffle的策略。這個策略簡而言之就是把不同組的特征進(jìn)行重新排列,不同組之間的特征進(jìn)行隨機(jī)調(diào)換位置,從而達(dá)到加強(qiáng)組間特征通訊的目的。而SqueezeNet的模型壓縮思路主要使用了3個策略:(1)將3×3卷積替換成1×1卷積;(2)減少3×3卷積的通道數(shù);(3)將降采樣后置。此外,SqueezeNet還引入了大量的Fire模塊,SqueezeNet是由若干個Fire模塊結(jié)合卷積網(wǎng)絡(luò)中卷積層,降采樣層,全連接層等組成的。一個Fire模塊由Squeeze部分和Expand部分組成。Squeeze部分是由一組連續(xù)的1×1卷積組成,Expand部分則是由一組連續(xù)的1×1卷積和一組連續(xù)的3×3卷積進(jìn)行通道連接組成,因此3×3卷積需要使用same卷積。在Fire模塊中,Squeeze模塊中1×1卷積層的通道數(shù)記做s1x1,Expand模塊1×1卷積和3×3卷積的通道數(shù)分別記做e1x1和e3x3。在Fire模塊中,作者建議s1x1 盡管這些方法在幾種基準(zhǔn)模型上都實現(xiàn)了相當(dāng)大的加速比和壓縮率,但它們中的大多數(shù)是為識別任務(wù)而開發(fā)的,例如圖像分類和目標(biāo)檢測,所以這些剪枝方法不能直接應(yīng)用在生成對抗網(wǎng)絡(luò)上。因為生成對抗網(wǎng)絡(luò)的結(jié)構(gòu)和傳統(tǒng)的卷積神經(jīng)網(wǎng)絡(luò)不同,是由生成器和判別器兩個網(wǎng)絡(luò)模型成對組成,其輸出是高維和具有復(fù)雜結(jié)構(gòu)的圖像。 近年來圖像到圖像翻譯任務(wù)也是深度學(xué)習(xí)領(lǐng)域的一個研究熱點,特別是在生成對抗網(wǎng)絡(luò)結(jié)構(gòu)[18]和條件生成對抗網(wǎng)絡(luò)[19]提出后,更是受到了廣泛的關(guān)注。圖像到圖像翻譯是一類視覺和圖形問題,其目標(biāo)是使用一組對齊的圖像對來學(xué)習(xí)輸入圖像和輸出圖像之間的映射。Phillip Isola等人[20]提出了一種pix2pix的cGAN模型pix2pix,能夠?qū)崿F(xiàn)圖像到圖像的端到端映射,作者在文章中研究的重點是如何將條件生成對抗網(wǎng)絡(luò)應(yīng)用在通用圖像到圖像翻譯任務(wù)。作者設(shè)計出的生成對抗網(wǎng)絡(luò)可以學(xué)習(xí)從輸入圖像到輸出圖像的映射,同時通過優(yōu)化內(nèi)容損失函數(shù)來學(xué)習(xí)圖像到圖像之間的映射。作者提出的方法解決了以前方法中每次訓(xùn)練不同的圖像到圖像翻譯任務(wù)都需要進(jìn)行改進(jìn)損失函數(shù)的問題,并且在多種數(shù)據(jù)集上進(jìn)行了驗證,例如通過標(biāo)簽生成圖片、通過航拍圖生成地圖、通過邊緣畫稿重建對象、對圖像進(jìn)行著色和白天到夜晚的轉(zhuǎn)變等等。自從作者在GitHub中發(fā)布pix2pix以來,很多研究人員甚至藝術(shù)家已經(jīng)基于pix2pix創(chuàng)造出了屬于自己的作品,進(jìn)一步證明了其廣泛的適用性。此后CycleGAN[21]更是解決了不成對數(shù)據(jù)集的圖像到圖像翻譯任務(wù)的訓(xùn)練問題,降低了對圖像到圖像翻譯數(shù)據(jù)集的采集難度。這也和pix2pix的訓(xùn)練方式不同,CycleGAN只需要兩種不同風(fēng)格的圖像數(shù)據(jù)集進(jìn)行訓(xùn)練即可,并不需要每個圖像都進(jìn)行對應(yīng)。 文中提出了一種基于生成對抗網(wǎng)絡(luò)的圖像到圖像翻譯新型網(wǎng)絡(luò)結(jié)構(gòu),用于對自然圖像進(jìn)行風(fēng)格轉(zhuǎn)換,例如將圖像中的馬轉(zhuǎn)換為斑馬。實驗結(jié)果表明,通過使用輕量級的網(wǎng)絡(luò)結(jié)構(gòu),該方法可以在速度和準(zhǔn)確性上表現(xiàn)良好。 文中的主要貢獻(xiàn)如下: (1)提出了一種應(yīng)用在圖像到圖像翻譯任務(wù)的基于生成對抗網(wǎng)絡(luò)的輕量級網(wǎng)絡(luò)結(jié)構(gòu)。 (2)通過在CycleGAN的骨干網(wǎng)絡(luò)中引入輕量級的網(wǎng)絡(luò)結(jié)構(gòu),降低了基于CycleGAN的圖像到圖像翻譯模型的參數(shù)量和運行時間。 目標(biāo)是通過端到端的方法轉(zhuǎn)換不同風(fēng)格的圖片。為了確??梢詫W(xué)習(xí)從風(fēng)格X圖像到風(fēng)格Y圖像的映射,設(shè)計了類似于CycleGAN的網(wǎng)絡(luò)架構(gòu)。此外,將線性瓶頸結(jié)構(gòu)引入到該骨干網(wǎng)絡(luò)中,從實驗結(jié)果得出,該網(wǎng)絡(luò)結(jié)構(gòu)顯著提高了圖像到圖像翻譯模型的準(zhǔn)確性和速度。類似于CycleGAN,該模型架構(gòu)也包含兩個生成器和兩個判別器。兩個生成器代表兩個不同的映射,分別標(biāo)記為G和F,而兩個判別器記為Dx和Dy。其中G代表從風(fēng)格X圖像到風(fēng)格Y的映射,而F代表從風(fēng)格X圖像到風(fēng)格Y圖像的映射。判別器Dx的作用是區(qū)分圖像是否是風(fēng)格X圖像,而判別器Dy則旨在區(qū)分圖像是否是風(fēng)格Y圖像。這兩對生成器和判別器構(gòu)建出了一個用于訓(xùn)練圖像到圖像翻譯任務(wù)的網(wǎng)絡(luò)框架。 網(wǎng)絡(luò)架構(gòu)如圖1所示。它包含兩個重要部分:生成器和判別器。就G和F這兩個生成器而言,它們擁有相同的網(wǎng)絡(luò)結(jié)構(gòu),如圖2所示,其中包含一個7*7卷積層、兩個的3*3卷積層、兩個轉(zhuǎn)置卷積層,幾個線性瓶頸塊[17]、若干個實例歸一化的規(guī)范化層(Instance norm layer[22])、ReLU[2]函數(shù)和Tanh函數(shù)。 圖1 網(wǎng)絡(luò)模型整體結(jié)構(gòu) 圖2 生成器結(jié)構(gòu) 線性瓶頸塊是在MobileNetV2當(dāng)中提出的新型輕量級結(jié)構(gòu),其中含有3個卷積層,它的結(jié)構(gòu)類似于ResNet結(jié)構(gòu)[23]。不同的是,線性瓶頸塊包含一個3*3卷積塊和兩個1*1卷積塊,而不是ResNet中使用的兩個3*3卷積塊,通過組卷積和深度可分離卷積技術(shù)進(jìn)行參數(shù)壓縮[17]。文中使用的線性瓶頸塊和MobileNetV2不同,其中第二層采用的是一個5*5的depthwise卷積層。模型在經(jīng)過兩個線性瓶頸塊后,采用一個1*1的卷積層對上面兩個線性瓶頸層中的5*5卷積層輸出的特征層進(jìn)行處理,最后輸入轉(zhuǎn)置卷積層。采用的特征圖融合方式是concat,也就是特征圖通道維度的合并。 文中提出這種結(jié)構(gòu)的意圖在于能夠?qū)蓚€線性瓶頸塊中輸出的特征圖進(jìn)行融合處理,從而提高模型對圖像細(xì)節(jié)的處理能力。此外,文中提出的算法模型中的兩個判別器Dx和Dy都擁有相同的PatchGAN架構(gòu)[20]。同時,使用LSGAN[24]作為生成對抗網(wǎng)絡(luò)的損失函數(shù)。 將對抗損失和循環(huán)一致性損失引入損失函數(shù)當(dāng)中。映射G:X=>Y的損失函數(shù)及判別器Dy的對抗損失可以寫成如下形式: LGAN(G,Dy,X,Y)=Ey~p(data(y))[logDY(y)]+ Ex~pdata(x)[1-logDY(G(x))] (1) 其中,G定義為生成器,作用是生成風(fēng)格Y圖像。而Dy作為判別器用來區(qū)分給定風(fēng)格Y圖像x是來自假樣本分布G(x)還是真實樣本分布Y。換句話說,判別器Dy通過使損失函數(shù)LGAN(G,DY,X,Y)值最大化來提升區(qū)分生成的圖像和真實圖像之間的能力。與此同時,生成器G通過最小化損失函數(shù)LGAN(G,DY,X,Y)來提升生成接近Y真實分布圖像的能力。與此同時,映射F:Y=>X與它對應(yīng)的判別器Dx之間的優(yōu)化損失函數(shù)可以寫為: LGAN(G,Dx,X,Y)=Ex~p(data(x))[logDx(x)]+ Ey~pdata(y)[1-logDx(G(y))] (2) 與CycleGAN相似,將循環(huán)一致性損失引入損失函數(shù),從而確保模型能夠?qū)W習(xí)從風(fēng)格X圖像到風(fēng)格Y圖像之間的正確映射。循環(huán)一致性損失函數(shù)寫為: Lcycle(G,Y)=Ex~p(data(x))[‖F(xiàn)(G(x))-x‖1]+ Ey~pdata(y)[‖G(F(y))-y‖1] (3) 其中,G為將風(fēng)格X圖像x轉(zhuǎn)換為風(fēng)格Y圖像G(x)的映射函數(shù)。F類似于將風(fēng)格X圖像轉(zhuǎn)換為風(fēng)格Y圖像的生成器G。F最有意義的作用是確??梢詫⑸傻娘L(fēng)格Y圖像還原為原始風(fēng)格X圖像。假如通過之前的單向生成對抗網(wǎng)絡(luò)模型pix2pix學(xué)習(xí)了從風(fēng)格X圖像到風(fēng)格Y圖像的映射函數(shù)G,即使生成器G在實驗中出良好的結(jié)果,也仍然不知道生成模型是不是學(xué)到了正確的映射。為了解決該問題,將能夠?qū)W習(xí)從風(fēng)格Y圖像到風(fēng)格X圖像的映射的生成器F添加到網(wǎng)絡(luò)體系結(jié)構(gòu)中。此外,將循環(huán)一致性損失引入到生成對抗網(wǎng)絡(luò)的損失函數(shù)中用來比較原始圖像和還原后圖像之間的差異。 文中模型是通過Pytorch框架進(jìn)行設(shè)計和訓(xùn)練的,該框架是當(dāng)前比較可靠和高效的深度學(xué)習(xí)框架。使用的CPU為 Intel(R) Core(TM) i7-7700 @ 3.50 GHz,在單個NVIDIA TITAN Xp GPU上進(jìn)行了模型訓(xùn)練,使用的操作系統(tǒng)是Ubuntu16.04。 在訓(xùn)練過程中,使用了下一節(jié)中提到的兩個數(shù)據(jù)集,通過Pytorch框架實現(xiàn)了文中算法模型,并且復(fù)現(xiàn)了CycleGAN進(jìn)行對比實驗。輸入和輸出的圖像尺寸均為372×372。根據(jù)上一節(jié)介紹的網(wǎng)絡(luò)體系結(jié)構(gòu),初始化了兩個生成器G和F以及兩個判別器Dx和Dy。更具體的訓(xùn)練細(xì)節(jié)是,在訓(xùn)練模型的過程中使用Adam[25]優(yōu)化器更新網(wǎng)絡(luò)權(quán)重,初始學(xué)習(xí)率設(shè)置為0.000 2,并且按照每100個epoch都會衰減一次的規(guī)則進(jìn)行迭代。同時,還設(shè)置了兩個GAN損失函數(shù)用來優(yōu)化生成器和判別器的參數(shù)。最終,訓(xùn)練過程在200個epoch后停止,每個epoch中的batch大小設(shè)置為1。 這部分將介紹本章用到的訓(xùn)練和測試數(shù)據(jù)集: horse2zebra[21]: 該數(shù)據(jù)集作為訓(xùn)練樣本的有1 067張普通馬圖像和1 334張斑馬圖像;作為測試樣本的有120張普通馬圖像和140張斑馬圖像。 summer2winter[21]: 該數(shù)據(jù)集作為訓(xùn)練樣本的有1 231張夏天風(fēng)景圖和962張秋天圖像;該數(shù)據(jù)集作為訓(xùn)練樣本的有309張夏天風(fēng)景圖和238張秋天圖像。 測試了文中提出的剪枝算法在通用圖像到圖像翻譯任務(wù)上的表現(xiàn),選取了常見的兩個圖像到圖像翻譯任務(wù)數(shù)據(jù)集進(jìn)行訓(xùn)練和測試。在衡量測試結(jié)果的時候用的是Frechet Inception Distance (FID),這個指標(biāo)通過比較生成的圖像特征和原有數(shù)據(jù)集之間的差異性,來衡量生成對抗網(wǎng)絡(luò)生成的圖像質(zhì)量,是目前研究生成對抗網(wǎng)絡(luò)模型性能最常用的一個圖像評價指標(biāo)。測試結(jié)果如表1所示,可以看出,文中方法在summer2winter數(shù)據(jù)集上表現(xiàn)良好,甚至超過原CycleGAN的表現(xiàn),領(lǐng)先ThiNet[10]和coEGAN[26]。在horse2zebra數(shù)據(jù)集上表現(xiàn)則略遜一籌,和coEAN的表現(xiàn)相仿,同時大幅度領(lǐng)先ThiNet,但是相比原CycleGAN而言要遜色不小。整體來說,文中提出的輕量級網(wǎng)絡(luò)結(jié)構(gòu)在圖像到圖像翻譯任務(wù)上表現(xiàn)良好。 表1 各模型FID分?jǐn)?shù)對比 表2 CycleGAN和文中方法的性能對比 結(jié)合一下原CyleGAN模型和文中提出的輕量級生成對抗網(wǎng)絡(luò)模型結(jié)構(gòu)進(jìn)行進(jìn)一步的討論,如表2所示。從表2中可以看出,文中提出的輕量級生成對抗網(wǎng)絡(luò)的模型大小僅僅為原來CycleGAN模型的四分之一左右。文中提出的網(wǎng)絡(luò)結(jié)構(gòu)在只用到原CycleGAN模型大約四分之一左右的參數(shù)量的情況下,在horse2zebra和summer2winter數(shù)據(jù)集上實現(xiàn)了接近和超過原CycleGAN的性能,并且運行速度比原來降低了10%左右,證明了文中提出的輕量級生成對抗網(wǎng)絡(luò)結(jié)構(gòu)的有效性。 圖3 文中算法和CycleGAN測試結(jié)果對比 圖3展示了CycleGAN和文中算法分別在horse2zebra和summer2winter測試集上的幾個測試結(jié)果。從圖中可以看出,文中算法接近原CycleGAN的表現(xiàn),具體表現(xiàn)為在背景和細(xì)節(jié)紋路等方面文中算法和CycleGAN較為一致。這也證明了文中提出的網(wǎng)絡(luò)結(jié)構(gòu)的有效性,不僅能夠節(jié)省大量模型參數(shù),還能加快模型的運行速度。 提出了一種輕量級的新型生成對抗網(wǎng)絡(luò)結(jié)構(gòu),用于圖像到圖像翻譯任務(wù)。該模型比起CycleGAN擁有更少的計算成本和更小的模型尺寸,同時圖像到圖像翻譯任務(wù)中達(dá)到了最好的性能。實驗證明,提出的基于生成對抗網(wǎng)絡(luò)的輕量級在圖像到圖像翻譯任務(wù)上表現(xiàn)良好,在只用到原CycleGAN模型大約四分之一左右的參數(shù)量的情況下,在horse2zebra和summer2winter數(shù)據(jù)集上實現(xiàn)了接近和超過原CycleGAN的性能,并且運行速度比原來降低了10%左右。證明了該輕量級網(wǎng)絡(luò)結(jié)構(gòu)的有效性。2 輕量級神經(jīng)網(wǎng)絡(luò)模型結(jié)構(gòu)
2.1 模型網(wǎng)絡(luò)結(jié)構(gòu)
2.2 損失函數(shù)
3 實驗和結(jié)果
3.1 實驗細(xì)節(jié)
3.2 數(shù)據(jù)集
3.3 實驗結(jié)果
4 結(jié)束語