亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        深度神經(jīng)網(wǎng)絡(luò)模型壓縮方法綜述

        2021-04-26 07:57:04唐武海
        智能物聯(lián)技術(shù) 2021年6期
        關(guān)鍵詞:深度特征方法

        唐武海,董 博,陳 華,龔 勇

        (1.中國電子科技南湖研究院,浙江 嘉興 314002;2.中國科學(xué)技術(shù)大學(xué)先進技術(shù)研究院,安徽 合肥 230000)

        0 引言

        目前來看,深度學(xué)習(xí)[1]已經(jīng)成為機器學(xué)習(xí)領(lǐng)域中不可或缺的一部分,在人工智能很多領(lǐng)域都取得了巨大的發(fā)展,尤其是在圖像識別、語音識別等任務(wù)的處理上更是取得了非凡的突破,基本已經(jīng)取代了先前的技術(shù)。隨著AlexNet[2]在2012年圖像視覺識別挑戰(zhàn)賽中以絕對優(yōu)勢一舉奪冠之后,深度學(xué)習(xí)的研究浪潮席卷而來,后面又陸續(xù)出現(xiàn)了VGG[3]、GoogLeNet[4]、ResNet[5]、DenseNet[6]等神經(jīng)網(wǎng)絡(luò)。它們在ImageNet數(shù)據(jù)集分類任務(wù)上都取得了很高的準(zhǔn)確率,其中ResNet的準(zhǔn)確率更是高達75%以上。雖然神經(jīng)網(wǎng)絡(luò)模型的精度和準(zhǔn)確度得到了提高,但是長期以來由于研究者過分追求模型性能的提高使得計算越來越復(fù)雜,內(nèi)存需求和計算開銷逐漸增加。這樣一來必然會導(dǎo)致模型訓(xùn)練十分困難,但目前很多的實際應(yīng)用場景并不具備較大的內(nèi)存存儲和強大的計算能力,比如手機等移動設(shè)備。從實際情況來看,DNN(Deep Neural Networks)模型依然很難部署到這些存儲和功耗相對較低的小型設(shè)備上。因此,如何在保證現(xiàn)有神經(jīng)網(wǎng)絡(luò)模型性能不變的前提下,對模型進行有效地壓縮,減少網(wǎng)絡(luò)模型的計算量和存儲空間成為了近年來的熱點。我們將從模型剪枝、量化、輕量化網(wǎng)絡(luò)設(shè)計、知識蒸餾四個方面探討神經(jīng)網(wǎng)絡(luò)模型壓縮的解決方案,詳細(xì)介紹這些方面的研究成果。

        1 模型剪枝

        模型剪枝是目前一項非常主流的神經(jīng)網(wǎng)絡(luò)模型壓縮技術(shù),它對已訓(xùn)練好的DNN模型進行剪枝,通過剪除網(wǎng)絡(luò)中冗余的部分來壓縮網(wǎng)絡(luò),并且提升了模型的泛化能力。模型剪枝一般有非結(jié)構(gòu)化剪枝、結(jié)構(gòu)化剪枝和自動化剪枝三種。其中,非結(jié)化剪枝和結(jié)構(gòu)化剪枝為人工剪枝方法。非結(jié)構(gòu)化剪枝使用隨機方式進行網(wǎng)絡(luò)修剪,裁剪對象常為單個神經(jīng)元;而結(jié)構(gòu)化剪枝往往根據(jù)已經(jīng)給定的裁剪條件剪除相應(yīng)的卷積核或通道??偨Y(jié)出非結(jié)構(gòu)化剪枝和結(jié)構(gòu)化剪枝的特點,如表1所示。

        表1 非結(jié)構(gòu)剪枝與結(jié)構(gòu)化剪枝對比Table 1 Comparison of unstructured pruning and structured pruning

        1.1 非結(jié)構(gòu)化剪枝

        早期的剪枝方法大多基于非結(jié)構(gòu)化剪枝,Hanson等人[7]提出基于連接重要性裁剪(Magnitude-based Pruning,簡稱MP)的方法,通過對網(wǎng)絡(luò)中每個隱藏層單元施加與其絕對值相關(guān)的權(quán)重衰減來簡化網(wǎng)絡(luò)。隨后,又出現(xiàn)了OBD(Optimal Brain Damage)算法和OBS(Optimal Brain Surgeon)算法,它們基于損失函數(shù)的Hessian矩陣來衡量網(wǎng)絡(luò)中權(quán)重的重要程度,然后對其進行裁剪。

        2015年,Han等人[10]為了克服傳統(tǒng)網(wǎng)絡(luò)在訓(xùn)練過程中無法改善架構(gòu)的不足,提出了一種在保持原有網(wǎng)絡(luò)準(zhǔn)確度的情況下只修剪網(wǎng)絡(luò)中連接的方法,這個方法規(guī)定了三階段剪枝流程,如圖1所示。

        圖1 三階段剪枝流程Figure 1 Three-stage pruning process

        這種剪枝方法計算極為簡便,首先通過正常的網(wǎng)絡(luò)訓(xùn)練學(xué)習(xí)到網(wǎng)絡(luò)聯(lián)系比較重要的連接,然后在剪枝訓(xùn)練過程中加入正則化來提升剪枝速度,將權(quán)值低于給定閾值的連接全部從網(wǎng)絡(luò)中剪除,再重新訓(xùn)練修剪后的網(wǎng)絡(luò)和微調(diào)保留下來的參數(shù),提升網(wǎng)絡(luò)剪枝后的模型性能。在此基礎(chǔ)上,Han等人[11]為了加快網(wǎng)絡(luò)運行推理速度并將其部署到移動設(shè)備上,進一步提出了三級流水線的深度壓縮方法,包括模型剪枝、權(quán)重量化、霍夫曼編碼(利用有效權(quán)重的有偏分布)。Srinivas等人[12]通過稀疏計算來訓(xùn)練和構(gòu)建神經(jīng)網(wǎng)絡(luò),引入了額外的門限變量來執(zhí)行參數(shù)選擇,為稀疏神經(jīng)網(wǎng)絡(luò)模型實現(xiàn)了當(dāng)時最先進的壓縮結(jié)果。Zhang等人[13]提出了一種深度神經(jīng)網(wǎng)絡(luò)(DNN)的系統(tǒng)權(quán)重修剪框架,將DNN的權(quán)重剪枝問題轉(zhuǎn)化為一個有約束的非凸優(yōu)化問題,然后利用約束優(yōu)化中的經(jīng)典算法ADMM(Alternating Direction Method of Multipliers)進行系統(tǒng)的權(quán)重剪枝。與之前的工作相比,在保持相同的測試精度條件下,該方法實現(xiàn)了更高的壓縮率和更快的收斂速度。

        盡管非結(jié)構(gòu)化剪枝能夠使模型得到壓縮,但是在實際應(yīng)用中往往起不到很好的效果。主要是因為非結(jié)構(gòu)化剪枝通常會構(gòu)成非結(jié)構(gòu)化的稀疏矩陣,造成額外的內(nèi)存開銷,加上目前對稀疏操作加速支持的庫非常有限,影響硬件工作的效率,降低計算速度。所以,近年來研究者們更多偏向基于結(jié)構(gòu)化剪枝的壓縮方法。

        1.2 結(jié)構(gòu)化剪枝

        結(jié)構(gòu)化剪枝可以按照粒度大小從粗到細(xì)分為[14]:如圖2a)所示的層剪枝(Layer)、圖2b)的通道(Channel/filter)剪枝、圖2c)的核(Kernel)剪枝和圖2d)的核內(nèi)(Intra-kernel)剪枝。因為層剪枝會剪除網(wǎng)絡(luò)中的整個層,這樣對網(wǎng)絡(luò)的結(jié)構(gòu)往往會造成嚴(yán)重破壞且無法恢復(fù),因此主要研究后面三種結(jié)構(gòu)化剪枝方法。這三種剪枝方法雖然思想類似,但是剪枝達到的效果卻有很大不同,下面將對這三種剪枝方法進行詳細(xì)介紹。

        圖2 剪枝粒度從粗到細(xì)分類a)層剪枝;b)通道剪枝;c)核剪枝;d)核內(nèi)剪枝Figure 2 Classification of pruning granularity from coarse to fine a)Layer pruning;b)Channel/filter pruning;c)Kernel pruning;d)Intra-kernel pruning

        1.2.1 核內(nèi)剪枝

        Anwar等人[15]提出了結(jié)構(gòu)化剪枝的概念,引入了各種尺度的結(jié)構(gòu)化稀疏性,并且提出了粒子濾波的方法,修剪后的網(wǎng)絡(luò)被重新訓(xùn)練以補償由于修剪造成的損失,使用此方法提高了網(wǎng)絡(luò)的精確度。Guo等人[16]提出了“動態(tài)網(wǎng)絡(luò)手術(shù)”的剪枝方法,該方法通過對動態(tài)連接進行剪枝來顯著降低網(wǎng)絡(luò)復(fù)雜度,適當(dāng)?shù)睾喜⒘诉B接拼接,在整個過程中避免了錯誤的修剪,使其成為一個持續(xù)的網(wǎng)絡(luò)維護。Wen等[17]使用Group LASSO(Least Absolute Shrinkage and Selection Operator)對模型中不同粒度的結(jié)構(gòu),包括濾波、通道、濾波形狀、層深度,進行正則化,并將此正則化項加入目標(biāo)函數(shù),使得學(xué)習(xí)出來的參數(shù)達到結(jié)構(gòu)稀疏化,加速網(wǎng)絡(luò)推理的速度。Jin等人[18]試圖通過在損失函數(shù)中增加權(quán)重的L0范數(shù)約束來降低權(quán)重的稀疏度,但發(fā)現(xiàn)這是一個難優(yōu)化求解問題,因此提出了一種階段迭代算法:首先只更新權(quán)重較大的參數(shù),然后重新激活所有網(wǎng)絡(luò)的連接并訓(xùn)練網(wǎng)絡(luò)。這樣一來,實現(xiàn)了對模型邊訓(xùn)練邊裁剪。

        1.2.2 核剪枝

        Li等[19]提出了一種卷積神經(jīng)網(wǎng)絡(luò)的壓縮方法,主要思想是裁剪卷積核及其連接的特征映射,極大降低了計算帶來的成本。與權(quán)重剪枝相比,卷積核剪枝不會引入稀疏連接,所以不需要使用專有的計算庫來支持。如圖3所示,第i個卷積層輸入特征大小為hi×wi×ni,經(jīng)過卷積層之后得到輸出特征大小為hi+1×wi+1×ni+1。由于卷積核大小為k×k,則第i個卷積層的卷積核矩陣為Fi∈Rni×ni+1×k2,卷積運算的計算量為ni+1nik2hi+1wi+1。當(dāng)一個卷積核Fi,j被剪掉,相應(yīng)的特征圖Xi+1,j也被剪除,計算量減少了nik2hi+1wi+1。不僅如此,被剪掉的特征圖對應(yīng)下一層中的卷積核也將被剪除,計算量又減少了k2hi+2wi+2。另外,通過計算每一層卷積核權(quán)重絕對值之和,移除求和值較小的卷積核及其對應(yīng)的特征圖,并且在進行剪枝時使用獨立剪枝和貪婪剪枝兩種方式進行多層同時剪枝。

        圖3 修剪卷積核及其下一層中刪除相應(yīng)的特征映射和相關(guān)卷積核Figure 3 Pruning the convolution kernel and removing the corresponding feature maps and related convolution kernels in the next layer

        Molchanov等人[20]提出了一種對神經(jīng)網(wǎng)絡(luò)中卷積核進行剪枝的算法以實現(xiàn)高效推理,交錯進行基于貪婪標(biāo)準(zhǔn)的剪枝和通過反向傳播的微調(diào),實現(xiàn)了高效的剪枝,并且剪枝后的模型泛化能力良好。該方法還提出了基于泰勒展開的評價標(biāo)準(zhǔn),該標(biāo)準(zhǔn)類似于通過修剪網(wǎng)絡(luò)參數(shù)使損失函數(shù)的變化最小,在細(xì)粒度分類任務(wù)中模型的性能顯著。

        1.2.3 通道剪枝

        通道剪枝屬于粗粒度裁剪,與非結(jié)構(gòu)化剪枝相比,它能不產(chǎn)生稀疏矩陣,不需要專門的硬件來針對所得到的模型進行計算。與核剪枝和核內(nèi)剪枝相比較而言,通道剪枝去掉的參數(shù)量較大,剪枝的效果更好。

        Liu等人[21]提出了基于“網(wǎng)絡(luò)瘦身算法(Network Slimming)”的剪枝方法,如圖4所示。對每個通道引入卷積神經(jīng)網(wǎng)絡(luò)自帶的批歸一化層[22](Batch Normalization,BN)中的縮放因子γ進行L1稀疏化,與網(wǎng)絡(luò)權(quán)重參數(shù)一起訓(xùn)練,并且使用稀疏正則化對γ進行選擇。其中較小的γ值對應(yīng)著對全局貢獻度較低的通道,對其進行剪枝,最后對剪枝后的模型進行微調(diào),進而達到模型壓縮的目的。

        圖4 基于網(wǎng)絡(luò)瘦身算法的通道剪枝Figure 4 Channel Pruning based on Network Slimming

        He Yang等人[23]發(fā)現(xiàn)在通道剪枝過程中,一般剪枝往往是按照定義的標(biāo)準(zhǔn)對卷積核排序,或者直接剪除不符合標(biāo)準(zhǔn)的卷積核,然后繼續(xù)訓(xùn)練。這樣一來,如果重要的卷積核被剪掉而不能恢復(fù),那么網(wǎng)絡(luò)的性能會下降很多。因此,他們提出了通道軟剪枝(Soft Filter Pruning)的觀點,在不采用再訓(xùn)練的情況下依然能夠達到良好的效果。另外,在作者的另一篇文章[24]中,提出利用幾何中值進行卷積核剪枝(Filter Pruning via Geomotric Median,F(xiàn)PGM)的方法,用其他的卷積核替代相似度高的卷積核。

        He等人[25]在Wen工作的基礎(chǔ)上,對已訓(xùn)練好的模型進行通道剪枝。首先使用LASSO回歸對通道進行選擇,剪除網(wǎng)絡(luò)中稀疏的通道,接著通過線性最小二乘法(Linear Least Squares)重構(gòu)網(wǎng)絡(luò)輸出特征。該方法在只產(chǎn)生0.3%的誤差的條件下,在VGG-16上取得了5倍的加速。Hu等人[26]認(rèn)為利用重構(gòu)特征圖來進行通道選擇的剪枝方法忽略了特征映射中的特征、語義分布以及通道對整體網(wǎng)絡(luò)的實際貢獻,提出了利用基礎(chǔ)模型的中間輸出和分類損失來監(jiān)督分層通道選擇,引入額外的損失來編碼基礎(chǔ)模型和修剪模型之間的特征和語義分布在特征映射中的差異,極大提高了被剪枝后的模型精度。作者在之前的一篇文章中[27],提出了一種基于遺傳算法的通道裁剪方法,將通道描述成一個搜索問題,根據(jù)每一層通道的靈敏度,逐層裁剪網(wǎng)絡(luò)模型。另外,Lin等人[28]基于特征圖的秩對通道進行剪枝,也取得了不錯的效果。

        1.3 自動化剪枝

        非結(jié)構(gòu)化剪枝和結(jié)構(gòu)化剪枝都屬于人工設(shè)計的剪枝方案,需要考慮模型的復(fù)雜度、大小等因素,這樣的設(shè)計往往會耗費很長的時間,因此近年來出現(xiàn)了自動化剪枝的方案。

        在MobileNet模型的基礎(chǔ)上,He等人[29]提出利用強化學(xué)習(xí)技術(shù)來實現(xiàn)自動壓縮模型,使得模型進一步輕量化。Liu等人[30]提出了一種用元學(xué)習(xí)(Meta Learning)進行自動通道剪枝的方法。首先訓(xùn)練出一個修剪網(wǎng)絡(luò),可預(yù)測任意剪枝網(wǎng)絡(luò)的網(wǎng)絡(luò)權(quán)重,接著使用進化算法進行最優(yōu)網(wǎng)絡(luò)結(jié)構(gòu)搜索,從而得到最優(yōu)的剪枝方案。滴滴實驗室[31]提出了一種自動化剪枝的框架AutoCompress,采用混合型結(jié)構(gòu)化剪枝維度,能自動找到DNN模型剪枝中的參數(shù),然后剪除模型中冗余的參數(shù),壓縮性能得到了極大的提高。

        不同于基于AutoML壓縮的思想,Lin等人[32]提出一種“人工蜂群(Artificial Bee Colony,ABC)算法”的通道剪枝方法,首先減少剪枝結(jié)構(gòu)之間的組合,然后將最優(yōu)剪枝結(jié)構(gòu)的搜索問題轉(zhuǎn)化為優(yōu)化問題,并結(jié)合ABC算法進行自動求解,從而找到最優(yōu)的剪枝結(jié)構(gòu)。Zeng等人[33]提出了一種用于細(xì)粒度和結(jié)構(gòu)化修剪的統(tǒng)一自動化修剪框架—NAP(Network Automatic Pruning),使用簡單,并且?guī)缀醪恍枰瑓?shù)調(diào)整,相較于以前的修剪方法有很大優(yōu)勢。另外,Chang等人[34]提出了自動通道修剪方法ACP(Automatic Channel Pruning),首先通過特征映射的相似性進行分層通道聚類,然后引入種群初始化方法,將剪枝后的結(jié)構(gòu)轉(zhuǎn)化為候選種群,最后基于粒子群優(yōu)化算法(Particle Swarm Optimization,PSO)進行迭代搜索和優(yōu)化,以找到最優(yōu)的壓縮結(jié)構(gòu)。

        神經(jīng)網(wǎng)絡(luò)模型剪枝的出發(fā)點實質(zhì)上就是給模型尋找一種高效的剪枝方法,降低模型冗余的參數(shù)信息,提升模型的性能。而剪枝的策略有很多,有人工設(shè)計剪枝的方法,也有自動剪枝的方法。相較于非結(jié)構(gòu)化剪枝的策略,現(xiàn)在的研究者更加青睞于結(jié)構(gòu)化剪枝和自動剪枝的策略。主要由于非結(jié)構(gòu)化剪枝往往使得模型的參數(shù)過于稀疏化,沒有專門的硬件計算庫支持。但是模型剪枝優(yōu)化的核心問題還是設(shè)計優(yōu)秀的剪枝方法。通常而言,剪枝和量化是放在一起使用的。

        2 模型量化

        模型量化主要通過減少表示網(wǎng)絡(luò)參數(shù)所需的數(shù)值位數(shù)來壓縮神經(jīng)網(wǎng)絡(luò),網(wǎng)絡(luò)參數(shù)包括權(quán)重、激活值、梯度和誤差等。通常而言,神經(jīng)網(wǎng)絡(luò)采用32位浮點數(shù)來存儲網(wǎng)絡(luò)所有參數(shù)和計算出來的結(jié)果,在允許犧牲少量網(wǎng)絡(luò)性能的條件下,合理地將數(shù)據(jù)量化到較低的數(shù)值位,可以很大程度上減少存儲參數(shù)和計算結(jié)果所占用的內(nèi)存空間。我們總結(jié)了近年來神經(jīng)網(wǎng)絡(luò)壓縮中的量化方法,主要分為INT8量化、極低精度量化、混合精度量化和其他量化方法。

        2.1 INT8量化

        實際中對較為復(fù)雜模型進行部署時,往往采用的是16位浮點數(shù)量化和8位定點數(shù)量化。但是由于16位浮點數(shù)占用的內(nèi)存遠(yuǎn)遠(yuǎn)大于8位定點數(shù),對于硬件的要求以及消耗大得多,所以在模型優(yōu)化時優(yōu)先考慮8位定點數(shù)量化。

        2011年,文獻[35]中提出了用8位定點計算在x86CPU上加速預(yù)測,證明了在沒有額外訓(xùn)練的情況下,在當(dāng)時最先進的拓?fù)渖戏诸惥葥p失最小。2016年,Tim等人[36]提出了8-bit浮點數(shù)的近似算法,將32-bit的梯度和激活值量化到8-bit,在保證模型精度的同時,提出的方法實現(xiàn)了當(dāng)時最先進的模型并行加速。2017年,Jacob等人[37]嘗試將浮點數(shù)運算量化成整數(shù)運算,最終成功將權(quán)重和激活值量化為8-bit,此外還提出了一種新的量化框架,通過在網(wǎng)絡(luò)訓(xùn)練過程中引入了偽量化來模擬量化過程中的誤差。2020年,Zhu等人[38]提出了8位模擬量化方法的一個重要的代表性研究工作??紤]到學(xué)習(xí)率對誤差敏感,通過對學(xué)習(xí)率進行調(diào)節(jié),并且利用方向自適應(yīng)的梯度階段算法,解決了模擬量化中的不穩(wěn)定因素影響和精度損失問題。其應(yīng)用的8位量化網(wǎng)絡(luò)在圖像分類和目標(biāo)檢測等任務(wù)上取得了重大的突破,可以在現(xiàn)成的硬件上運行,并且跟32位浮點數(shù)訓(xùn)練相比,在GPU上減少22%的訓(xùn)練時間。

        2.2 極低精度量化

        極低精度量化的目的是使網(wǎng)絡(luò)的參數(shù)存儲和計算結(jié)果得到極限壓縮,以便網(wǎng)絡(luò)模型可以在硬件資源較為有限的設(shè)備上進行部署。本文中將低于8-bit以下的方法稱之為極低精度量化,主要包括二值化、三值化。

        二值化方法使用1bit對數(shù)據(jù)進行量化,這種方式降低了模型對存儲容量以及計算能力的需求,提高了運算速度。然而,簡單的二值化方法會導(dǎo)致精度顯著降低。

        Courbariaux等[39]人首先提出了一個重要的工作BinaryConnect,將權(quán)重量化到1或者-1。網(wǎng)絡(luò)訓(xùn)練時,在梯度計算過程中使用全精度的權(quán)重,但僅在反向傳播和前向傳播過程中進行二值化。二值化網(wǎng)絡(luò)[40](Binarized Neural Networks,BNN)對激活值和權(quán)重進行二值化擴展了這一思想,浮點矩陣乘法可以用輕量級XNOR操作代替,極大減少了計算帶來的延遲。Rastegari等人[41]在BWN(Binary Weight Network)和XNOR-Net[42]的基礎(chǔ)上,使用scaling factor來縮小二值化的權(quán)值以及激活值,重新開始訓(xùn)練一個二值化網(wǎng)絡(luò)。

        此外,受到學(xué)習(xí)權(quán)重接近于0的結(jié)果啟發(fā),有研究者開始試圖通過使用三元值(例如+1,0和-1)約束權(quán)重和激活值,并且允許量化值為0,從而實現(xiàn)三值化網(wǎng)絡(luò)[43,44]。與二值化相同的是,三值化網(wǎng)絡(luò)也通過消除代價高昂的矩陣乘法來加快推理。Wan[45]提出的TBN(Ternary-Binary Network)表明,將二元網(wǎng)絡(luò)權(quán)重和三元激活值相結(jié)合,可以在精度和計算效率之間實現(xiàn)最佳折衷。

        由于原始的二值化和三值化方法通常會導(dǎo)致嚴(yán)重的精度下降,特別是對于復(fù)雜的任務(wù),如ImageNet數(shù)據(jù)集分類,因此研究人員提出了許多解決方案來減少極端量化中的精度下降。Li等人[46]對XNOR-Net進行改進,提出了High-Order Residual Quantization(HORQ)方法,將卷積神經(jīng)網(wǎng)絡(luò)的網(wǎng)絡(luò)層的權(quán)值和輸入特征進行二值化。Zhu等人[47]提出了Trained Ternary Quantization(TTQ),只量化權(quán)重。Zhou等人提出了增量化網(wǎng)絡(luò)(Incremental Network Quantization,INQ)[48],通過將權(quán)值參數(shù)量化成2或0的冪次轉(zhuǎn)為低精度類型,然后減少每一次量化過程中的誤差,降低量化過程帶來的網(wǎng)絡(luò)權(quán)重精度損失。

        2.3 混合精度量化

        可以看出,當(dāng)我們使用較低精度的量化時,硬件性能確實會有所提高。但是,將網(wǎng)絡(luò)模型量化到極低精度往往并不能達到預(yù)測的效果,反而會導(dǎo)致精度顯著降低。可以通過混合精度量化來解決這個問題,如圖5所示,對于深度學(xué)習(xí)神經(jīng)網(wǎng)絡(luò)來說,由于不同的層對量化的敏感度是不一樣的,所以需要對網(wǎng)絡(luò)的每一層進行不同的比特精度量化。

        圖5 混合精度Figure 5 Mixed precision

        Elthakeb等人[49]提出了一種深度強化學(xué)習(xí)框架ReLeQ,量化位寬的不同看作是不同的決策,ReLeQ可以學(xué)習(xí)到每個層對于權(quán)重量化級別的敏感度,從而確定每個層的位寬。Wang等人[50]提出了HAQ(Hardware-Aware Automated Quantization with Mixed Precision)方法,利用強化學(xué)習(xí)的思想,自動找出網(wǎng)絡(luò)中每一層最合理的量化方法,為了得到強化學(xué)習(xí)訓(xùn)練過程中需要的反饋信號,將量化模型在硬件上運行來獲取延遲和能耗等信息,通過這個方法可以自動找到每個硬件平臺上的最優(yōu)配置。

        不同于自動學(xué)習(xí)的方法,另一種思路是從測量定義的量化敏感度的角度出發(fā),其中越敏感的層需要使用越多的位。Zhu等人[51]認(rèn)為熵可以表示信息量,熵越大表示的信息量就越大,因此通過權(quán)重和激活值的熵來確定每層權(quán)重的位數(shù)。Berkeley等人[52]基于Hessian矩陣提出了全自動確定混合精度的HAWQ(Hessian AWare Quantization of Neural Networks with Mixed-Precision)方法,網(wǎng)絡(luò)各層的量化精度由Block塊的Hessian矩陣的最大特征值來選擇。同年,他們提出了HAWQ-V2[53],在HAWQ上面做了三點改進:一是將Hessian矩陣的最大特征值換成特征值均值來選擇網(wǎng)絡(luò)各層量化精度;二是取消手工提取,提出Pareto frontier的方法來進行量化位數(shù)的選?。蝗菍⒃摲椒ㄓ糜诩せ钪档幕旌暇攘炕?。在此基礎(chǔ)上,北京大學(xué)和Berkeley聯(lián)合基于Pareto frontier方法提出了一種后量化方案[54],在目標(biāo)量化模型大小的限制下,選擇每一層量化需要的位數(shù)。Yao等人[55]提出了一種新的混合精度純整數(shù)量化框架,從四個方面對神經(jīng)網(wǎng)絡(luò)模型量化的延遲進行改善:一是僅整數(shù)推理,整個計算圖僅使用整數(shù)乘法、加法和移位運算,不進行任何浮點運算甚至整數(shù)除法;二是通過解決整數(shù)線性規(guī)劃問題來計算機位精度,平衡了模型擾動和其他約束(例如內(nèi)存占用和延遲)之間的權(quán)衡;三是使用4位均勻/混合精度量化實現(xiàn)在硬件上的部署;四是對不同的模型壓縮級別(有/沒有混合精度)在ResNet18/50和InceptionV3上提出的方法進行廣泛評估。

        2.4 其他量化

        當(dāng)模型參數(shù)數(shù)量過于龐大時,可以使用聚類量化的方法來解決,即將權(quán)重分為不同的組,然后在推斷期間使用每組的質(zhì)心作為量化值。Gong等人[56]提出了使用K-means聚類量化的策略,在不降低精度的情況下,通過量化全連接層中的參數(shù)大大減小了模型大小。除此之外,Han等人[11]基于Kmeans量化使用剪枝和哈弗曼編碼的方法,進一步減小了模型大小。與權(quán)重量化和激活值量化不同的是,Zhou等人[57]在梯度反向傳播時使用了設(shè)計的梯度量化公式,并且在公式中引入了噪聲函數(shù),模擬潛在量化可能帶來的誤差。

        模型量化是目前工業(yè)界最有效的模型優(yōu)化方法之一,對于圖像處理任務(wù)(如ImageNet數(shù)據(jù)集分類)來說,目前很多的量化技術(shù)壓縮效果非常顯著。但是對于圖像分割、目標(biāo)追蹤等問題,使用量化往往會降低模型的精度。尤其是進行極端的二值量化時,雖然理論上甚至可以實現(xiàn)32倍的壓縮,但是過度的壓縮會導(dǎo)致模型的精度快速下降。

        3 輕量化網(wǎng)絡(luò)設(shè)計

        考慮到卷積神經(jīng)網(wǎng)絡(luò) (Convolutional Neural Network,CNN)模型過于龐大,研究人員設(shè)計出了輕量化網(wǎng)絡(luò)。目的是為了能更好地將神經(jīng)網(wǎng)絡(luò)普及應(yīng)用到移動終端,可以說是專為嵌入式移動設(shè)備視覺終端設(shè)計的模型。與原有網(wǎng)絡(luò)模型相比,輕量化模型具有結(jié)構(gòu)輕便、計算簡單、可移植性強的優(yōu)點。

        輕量化網(wǎng)絡(luò)的設(shè)計主要圍繞卷積核和卷積方式來改變網(wǎng)絡(luò)需求的計算量和參數(shù)大小,從調(diào)整卷積核大小、分解卷積運算這兩個方面進行輕量化。

        3.1 調(diào)整卷積核大小

        我們之前的認(rèn)知都是卷積核越大,感受野越大,能夠獲取的信息也就越多。但是卷積核過大往往會造成計算量的暴增和存儲空間的極大消耗,不利于模型深度的增加,模型的性能也會隨之降低,所以現(xiàn)在的神經(jīng)網(wǎng)絡(luò)中很少使用較大尺寸的卷積核。

        卷積核替換的思想最早出現(xiàn)在InceptionV3[58],圖6 a)所示為初始的Inception模塊;圖6 b)所示為使用卷積核替換后的模塊,其中使用了2個3×3卷積核替換了原有的1個5×5的卷積核,參數(shù)的數(shù)量相較于之前有了明顯的下降,并且在具有相同感知野的條件下,提升了網(wǎng)絡(luò)深度和神經(jīng)網(wǎng)絡(luò)的效果。借助于InceptionV3的思想,PeleeNet[59]將1個5×5的卷積核拆分為2個3×3的卷積核后,與一個3×3的卷積核并行,進一步降低了參數(shù)的數(shù)量。

        圖6 卷積核替換a)初始Inception模塊;b)3×3的卷積核替換5×5的卷積核Figure 6 Convolution kernel replacement a)Initial Inception module;b)3×3 convolution kernel replaces 5×5 convolution kernel

        除了使用3×3卷積核降低網(wǎng)絡(luò)的參數(shù)量外,目前還有使用比較多的1×1的卷積核。如經(jīng)典的SqueezeNet[60]網(wǎng)絡(luò),使用1×1的卷積核來代替3×3的卷積核,使得卷積核的參數(shù)減少到了之前的1/9。使用1×1卷積可改變網(wǎng)絡(luò)中通道的個數(shù),對不同的通道上的像素點進行組合并進行非線性化操作,完成降維和升維的功能。如圖7 a)所示,如果選擇2個1×1卷積,那么特征圖的深度就從原本的3降到2;如圖7 b)所示,如果使用4個1×1的卷積,特征圖的深度將由3變?yōu)?。所以使用1×1卷積進行降維時,特征圖的深度降低,參數(shù)量下降,從而可以達到網(wǎng)絡(luò)輕量化的目的。

        圖7 1×1卷積實現(xiàn)降維和升維a)降維 b)升維Figure 7 1×1 convolution to achieve dimensionality reduction and increase a)dimensionality reduction b)dimensionality increase

        MobileNets[61]由谷歌在2017年提出,MobileNets中使用深度可分離卷積來代替了VGG中的標(biāo)準(zhǔn)卷積層,深度可分離卷積由深度卷積(depthwise convolution)和逐點卷積(pointwise convolution)兩部分組成。其中逐點卷積使用1×1卷積核,對深度卷積運算后的通道數(shù)量進行調(diào)整,相較于3×3卷積核計算量可以降低為原來的1/9。另外,為降低模型參數(shù)量,EffNet[62]則是使用在空間上分解為1×3和3×1的一維卷積核組合替換MobileNets的深度層面分離的3×3卷積核,提高了網(wǎng)絡(luò)的效率。

        上面縮減卷積核大小的方式其實就是將大卷積核替換為小卷積核,其本質(zhì)都是通過加法運算替代部分乘法運算,降低卷積運算過程中的參數(shù)量和計算量,提升模型的運算速度。

        3.2 分解卷積運算

        除了調(diào)整卷積核大小的方法以外,我們還可以考慮改變卷積運算方式。來看這樣一個問題,輸入特征大小為H×W×C,卷積核大小為K×K(個數(shù)為M),輸出特征大小為H×W×M,則標(biāo)準(zhǔn)卷積計算量和參數(shù)量分別為HWCK2M和MCK2??梢钥闯瞿P偷膮?shù)量和計算量較大,由于標(biāo)準(zhǔn)卷積是先對每個通道卷積運算再進行求和,因此計算量和參數(shù)量與每個通道的特征相關(guān),通道的卷積運算存在很大的冗余。

        分組卷積是在標(biāo)準(zhǔn)卷積的基礎(chǔ)上演變過來的,主要思想是將輸入特征通道劃分成不同的組來降低參數(shù)量和計算量。若將輸入特征通道劃分成G個組,則分組卷積計算量和參數(shù)量為HWCK2M/G和MCK2/G。ResNeXt[63]利用分組卷積將多個分支合并成一個分支,在與ResNet消耗的計算量同等的條件下,有著更高的準(zhǔn)確率。另外,IGCNets[64]網(wǎng)絡(luò)中將標(biāo)準(zhǔn)卷積分解成多個分組卷積,大大減少了參數(shù)的數(shù)量。

        如圖8所示,MobileNet V1利用深度可分離卷積對標(biāo)準(zhǔn)卷積進行分解。圖8 a)是標(biāo)準(zhǔn)卷積;如圖8 b)所示,深度卷積是分組卷積的特殊形式,在忽略通道維度卷積的同時,對每個輸入通道使用不同的卷積核;如圖8 c)所示,逐點卷積即是卷積核為1×1的標(biāo)準(zhǔn)卷積,解決通道之間的特征融合問題。其中輸入特征大小為DF×DF×M,DF為輸入的寬和高,M為輸入通道數(shù),卷積核尺寸為DK×DK,輸出特征圖維度為DF×DF×N,其中N為輸出通道數(shù),則標(biāo)準(zhǔn)卷積計算量為Dk2MDF2N,深度可分離卷積計算量為Dk2MDF2+MDF2N,與標(biāo)準(zhǔn)卷積計算量相比:

        圖8 深度卷積和逐點卷積替換標(biāo)準(zhǔn)卷積a)標(biāo)準(zhǔn)卷積;b)深度卷積;c)逐點卷積Figure 8 Depthwise convolution and pointwise convolution replacing standard convolution a)standard convolution;b)depthwise convolution;c)pointwise convolution

        計算量降低到了原來的1/9至1/8。最終,在準(zhǔn)確率接近相同的情況下,參數(shù)量和計算量分別是VGG-16的1/32和1/27。

        MobileNet V1網(wǎng)絡(luò)的主要思路就是深度可分離卷積的的堆疊。如圖9所示,在MobileNet V2[65]的網(wǎng)絡(luò)設(shè)計中,除了繼續(xù)使用MobileNet V1中的深度可分離結(jié)構(gòu)之外,加入了一個1×1卷積提升通道數(shù)來獲取更多的特征。另外,作者采用了Linear Bottleneck替換了MobileNet V1的非線性激活變換ReLU函數(shù)。MobileNet V2相比于MobileNet V1,在相同的性能下只需要2/5的計算量。

        圖9 MobileNet V1與V2微結(jié)構(gòu)對比Figure 9 Microstructure comparison between MobileNet V1 and V2

        考慮到Xception[66]和ResNeXt有太多的1×1卷積,導(dǎo)致網(wǎng)絡(luò)性能不高,因此Face++提出了ShuffleNet V1[67]改進ResNet,使用分組逐點卷積(Group Pointwise Convolution)和通道混洗(Channel shuffle),將來自不同組的特征重新進行排列,使得新的分組中包含來自之前各個組的特征,保證了各個組之間的信息流通。如圖10所示,圖10 a)為一般卷積,圖10 b)和圖10 c)為通道混洗操作。

        圖10 通道混洗操作a)一般卷積 b)和c)通道混洗Figure 10 Channel shuffling operation a)General Convolution b)Channel Shuffling

        ShuffleNet V1利用上面的思想設(shè)計出了ShuffleNet Unit。圖11a)是ResNet的殘差單元;如圖11b)所示,可以看出改進的地方:一是將1×1卷積換成分組卷積,并在其后加入了Channel Shuffle操作;二是移除了3×3深度卷積后的ReLu激活函數(shù)。

        圖11 ResNet殘差單元和ShuffleNet V1構(gòu)建模塊a)ResNet殘差單元;b)ShuffleNet V1 Unit(stride=1)Figure 11 ResNet residual unit and ShuffleNet V1 building block a)ResNet residual unit;b)ShuffleNet V1 Unit(stride=1)

        ShuffleNet V2[68]考慮到內(nèi)存訪問消耗(Memory Access Cost,MAC)、并行化速度、平臺的限制等因素,給出了四條指導(dǎo)準(zhǔn)則:(1)平衡通道寬度;(2)謹(jǐn)慎使用分組卷積;(3)防止網(wǎng)絡(luò)碎片化;(4)減少元素級運算。依據(jù)這四條準(zhǔn)則,在ShuffleNet V1的基礎(chǔ)上改進,構(gòu)建模塊如圖12所示。

        圖12 ShuffleNet V2基礎(chǔ)構(gòu)建模塊Figure 12 ShuffleNet V2 basic building blocks

        在ShuffleNet V2中引入了Channel Split,將通道數(shù)分為兩部分:一部分進行卷積操作,并且保證卷積層的輸入輸出通道數(shù)相同;另一部分直接進行拼接,減少了內(nèi)存訪問成本。兩部分進行拼接后,再進行Channel Shuffle,通道上的信息得以流動。使用GPU作為加速器,在500MFLOPs下,ShuffleNet V2比MobileNet V1快58%,比ShuffleNet V1快63%,比Xception快25%。

        在ShuffleNets中,通道產(chǎn)生的特征并沒有考慮權(quán)重,即默認(rèn)所有通道的特征在模型中的重要程度都相同。因此SENet[69]提出利用壓縮(Squeeze)和激勵(Excitation)的方法讓模型學(xué)習(xí)到不同通道特征的作用,這種方法更注重通道間的相互依賴關(guān)系。

        3.3 其他方法

        Tan等人在NAS(Neural Architecture Search)神經(jīng)架構(gòu)搜索的基礎(chǔ)上提出了EfficientNet[70],利用混合縮放方法可以更好地選擇寬度、深度和分辨率的維度縮放比例,僅用很少量的參數(shù)就獲得較高的準(zhǔn)確率,提升了模型的性能。Han等人[71]提出了GhostNet模塊,先使用原始卷積操作(非卷積層操作)減少輸出,接著使用一系列線性操作來生成更多的特征。這樣一來,不需要改變其輸出特征圖的數(shù)量,Ghost模塊整體的計算量和參數(shù)量就已經(jīng)降低了。表2給出了近年來輕量化神經(jīng)網(wǎng)絡(luò)主流的方法在ImageNet數(shù)據(jù)集上實驗的性能對比。Parameters代表網(wǎng)絡(luò)中參數(shù)量的大小,F(xiàn)LOPs表示浮點數(shù)計算,Top-1表示精度。

        表2 ImageNet數(shù)據(jù)集上典型輕量化卷積核設(shè)計方法的性能對比Table2Performancecomparisonoftypical lightweightconvolutionkerneldesignmethodson ImageNetdataset

        輕量化神經(jīng)網(wǎng)絡(luò)設(shè)計對將來嵌入式神經(jīng)網(wǎng)絡(luò)的發(fā)展有著重大的意義,在物體檢測、圖像識別等計算機視覺任務(wù)上面也取得了不錯的成績。目前大量的研究者致力于這方面的研究,比如華為提出的DeepShift[72]模型用移位和求反運算代替卷積運算中的乘法,但是這種卷積運算的替代方式嚴(yán)重依賴于底層硬件的設(shè)計,從而導(dǎo)致模型在實際應(yīng)用方面受限。另外,近年來提出了神經(jīng)網(wǎng)絡(luò)架構(gòu)搜索(NeuralArchitectureSearch,NAS)的方法,能夠自動設(shè)計網(wǎng)絡(luò)結(jié)構(gòu)。但是由于網(wǎng)絡(luò)結(jié)構(gòu)搜索前對網(wǎng)絡(luò)中卷積核大小等參數(shù)難以設(shè)定,再加上資源消耗量較大,使其應(yīng)用具有很大的局限性。目前來看,調(diào)整卷積核大小和分解卷積運算依然是神經(jīng)網(wǎng)絡(luò)輕量化的主流方向。

        4 知識蒸餾

        與前面幾種壓縮方法不同的是,知識蒸餾通常包含教師模型(Teachermodel)和學(xué)生模型(Student Model)兩部分。一般而言,教師模型是使用復(fù)雜的網(wǎng)絡(luò)訓(xùn)練得到的模型,而學(xué)生模型則是使用輕量級網(wǎng)絡(luò)訓(xùn)練得到的模型。知識蒸餾的主要思想是利用教師模型在訓(xùn)練中學(xué)習(xí)到的知識進而去指導(dǎo)學(xué)生模型的訓(xùn)練,使得學(xué)生模型的性能盡可能接近于教師模型,從而達到大網(wǎng)絡(luò)壓縮成小網(wǎng)絡(luò)的目的。

        2015年,Hinton等人[73]首次提出知識蒸餾(KnowledgeDistillation,KD)的壓縮技術(shù)。在前面的工作[74,75]的基礎(chǔ)上,Hinton等人引入與教師網(wǎng)絡(luò)相關(guān)的軟目標(biāo) (soft-target),代替了傳統(tǒng)的真值(groundtruth)作為總損失函數(shù)的一部分指導(dǎo)學(xué)生網(wǎng)絡(luò)的訓(xùn)練。在這里,soft-target指的輸入圖片屬于某一類的概率,使用帶有溫度T的softmax函數(shù)qi來表示。

        其中,T為引入的溫度系數(shù),zi為輸入數(shù)據(jù)中第i個類別的概率。需要將原始的softmax層輸出概率預(yù)測分布軟化,設(shè)為1即為原始的softmax函數(shù)。另外,對于同一個輸入,教師模型和學(xué)生模型都會生成一個軟目標(biāo)。利用輸入數(shù)據(jù)的真實標(biāo)簽(hard target)和學(xué)生模型輸出的軟目標(biāo)計算交叉熵,并且利用學(xué)生模型和教師模型生成的軟目標(biāo)計算交叉熵,這兩部分構(gòu)成損失函數(shù)的輸入,整個蒸餾過程如圖13所示。

        圖13 知識蒸餾過程Figure 13 Knowledge Distillation Process

        Romero等人[76]對Hinton提出的知識蒸餾法進行了擴展,允許學(xué)生網(wǎng)絡(luò)可以比教師網(wǎng)絡(luò)更深更窄,利用中間隱藏層和教師網(wǎng)絡(luò)輸出的特征指導(dǎo)訓(xùn)練學(xué)生網(wǎng)絡(luò),從而訓(xùn)練出更深更細(xì)的網(wǎng)絡(luò)FitNets。Lee等人[77]利用奇異值分解(SingularValueDecomposition,SVD)與知識蒸餾相結(jié)合,減少特征圖的空間維數(shù),去除空間冗余信息,并將特征降維過程中重要的隱含特征信息傳給學(xué)生網(wǎng)絡(luò)。Zagoruyko等人[78]在FitNets的假設(shè)上提出利用注意力轉(zhuǎn)移(AttentionTransfer,AT),使用一個注意力圖來代替多通道的特征圖。Kim等人[79]提出一種新的知識蒸餾訓(xùn)練方法,使用卷積運算來解釋教師的知識并為學(xué)生翻譯。其中模型訓(xùn)練由釋義器(paraphraser)和翻譯器(translator)兩個卷積模塊一起完成,釋義器使用無監(jiān)督方式訓(xùn)練教師網(wǎng)絡(luò)獲取有效信息,而翻譯器則在教師網(wǎng)絡(luò)釋義器獲取信息的指導(dǎo)下,將學(xué)生網(wǎng)絡(luò)中的對應(yīng)信息進行變換。Heo等人[80]提出了一種新的基于特征蒸餾損失函數(shù)的方法,在教師變換、學(xué)生變換、提取特征位置和距離函數(shù)之間起到了協(xié)同作用,并在圖像分類、目標(biāo)檢測和語義分割等任務(wù)上進行了評估,取得了顯著的性能改進。

        受限于softmax層,基于知識蒸餾的方法大多數(shù)還是應(yīng)用于分類任務(wù)。但近年來,許多研究人員將知識蒸餾的方法應(yīng)用于深度學(xué)習(xí)的其他場景。Li等人[81]借助于知識蒸餾的思想提出通過學(xué)習(xí)feature map來實現(xiàn)目標(biāo)檢測任務(wù)的Mimic方法。Chen等人[82]提出一個基于知識蒸餾的端到端框架,結(jié)合FitNets15和新的損失函數(shù)解決了目標(biāo)檢測中存在的標(biāo)簽少、不均衡、回歸損失等問題。Liu等人[83]將知識蒸餾的算法運用在訓(xùn)練好的大的分割模型上,使較小模型的語義分割的性能也能提高。Takuya等[84]通過使用Kullback-Leibler散度(KL散度)進行知識提取來訓(xùn)練低延遲SNN(Spiking Neural Network),不損失準(zhǔn)確性的情況下加快了推理。

        知識蒸餾可以使得模型的深度大大變淺,從而降低網(wǎng)絡(luò)的參數(shù)量和計算量。但是目前知識蒸餾主要應(yīng)用在分類任務(wù)上面,對目標(biāo)檢測、追蹤等應(yīng)用還有很大的局限性。另外,學(xué)生模型沒有好的指導(dǎo)很難達到教師模型的精度,所以知識蒸餾在模型壓縮上還有很長的路要走。

        5 總結(jié)展望

        DNN模型壓縮的目的是為了減少模型參數(shù)、減少計算帶來的開銷和降低存儲空間,使其能夠更好部署在實際應(yīng)用場景中。本文首先介紹了DNN模型壓縮的研究背景,接著介紹了DNN模型壓縮的四種方法:模型剪枝、模型量化、輕量化網(wǎng)絡(luò)設(shè)計和知識蒸餾。如表3所示,我們基于上面的論述對這些壓縮方法進行了總結(jié)。

        表3 不同深度神經(jīng)網(wǎng)絡(luò)壓縮方法總結(jié)Table 3 Summary of different deep neural network compression methods

        現(xiàn)在,深度神經(jīng)網(wǎng)絡(luò)壓縮主要還是集中在卷積神經(jīng)網(wǎng)絡(luò)上,未來有可能會出現(xiàn)有關(guān)循環(huán)神經(jīng)網(wǎng)絡(luò)(Recurrent Neural Network,RNN)等其他深度神經(jīng)網(wǎng)絡(luò)壓縮的成果。目前很多主流的壓縮方法如量化、知識蒸餾等應(yīng)用移植到硬件時往往不能夠達到理想的效果,所以今后還需要結(jié)合硬件來針對性地設(shè)計壓縮方法。再者就是當(dāng)下的深度神經(jīng)網(wǎng)絡(luò)壓縮方法需要探索在更多任務(wù)場景下的應(yīng)用,而不是僅僅局限于圖像分類等簡單任務(wù)。綜上所述,關(guān)于DNN模型壓縮的研究依然具有巨大的潛力和研究空間。

        猜你喜歡
        深度特征方法
        深度理解一元一次方程
        如何表達“特征”
        不忠誠的四個特征
        深度觀察
        深度觀察
        深度觀察
        抓住特征巧觀察
        可能是方法不對
        用對方法才能瘦
        Coco薇(2016年2期)2016-03-22 02:42:52
        四大方法 教你不再“坐以待病”!
        Coco薇(2015年1期)2015-08-13 02:47:34
        中国一级毛片在线观看| 日本不卡一区二区三区在线| 国产午夜福利在线观看中文字幕| 亚欧同人精品天堂| 国产在线a免费观看不卡| 免费av片在线观看网址| 午夜福利av无码一区二区| 久久精品国产精品亚洲毛片| www久久久888| 丝袜美腿久久亚洲一区| 国产精品国三级国产a| 怡红院av一区二区三区 | 丰满人妻妇伦又伦精品国产 | 中国极品少妇videossexhd| 两个人免费视频大全毛片| 丁香婷婷六月综合缴清| 妺妺窝人体色www看人体| 黄色成人网站免费无码av| 亚洲av综合色区在线观看| 日韩人妻免费一区二区三区| 水野优香中文字幕av网站| 色多多性虎精品无码av| 日韩人妻无码一区二区三区久久99| 日本一区二区三区中文字幕最新| 日韩精品人妻视频一区二区三区 | 国产一区二区精品av| 一区二区视频在线观看地址| 国产一区二区三区四区三区| 少妇寂寞难耐被黑人中出| 91免费国产| 日韩精品乱码中文字幕| 一本久久伊人热热精品中文字幕| 国产精品视频久久久久| 人妻av中文字幕精品久久| 午夜精品久久久久久久| 国产精品久久无码一区二区三区网| 亚洲欧美v国产蜜芽tv| 国产三级不卡一区不卡二区在线| 国产好大好硬好爽免费不卡| 91精品啪在线观看国产18| 日本岛国大片不卡人妻|