最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊

模型壓縮-剪枝算法詳解

2023-02-22 11:30 作者:吳小敏63  | 我要投稿

一,前言

學(xué)術(shù)界的 SOTA 模型在落地部署到工業(yè)界應(yīng)用到過程中,通常是要面臨著低延遲(Latency)、高吞吐(Throughpout)、高效率(Efficiency)挑戰(zhàn)的。而模型壓縮算法可以將一個(gè)龐大而復(fù)雜的預(yù)訓(xùn)練模型轉(zhuǎn)化為一個(gè)精簡的小模型,從而減少對(duì)硬件的存儲(chǔ)、帶寬和計(jì)算需求,以達(dá)到加速模型推理和落地的目的。

近年來主流的模型壓縮方法包括:數(shù)值量化(Data Quantization,也叫模型量化),模型稀疏化(Model sparsification,也叫模型剪枝 Model Pruning),知識(shí)蒸餾(Knowledge Distillation),?輕量化網(wǎng)絡(luò)設(shè)計(jì)(Lightweight Network Design)和 張量分解(Tensor Decomposition)。

其中模型剪枝是一種應(yīng)用非常廣的模型壓縮方法,其可以直接減少模型中的參數(shù)量。本文會(huì)對(duì)模型剪枝的定義、發(fā)展歷程、分類以及算法原理進(jìn)行詳細(xì)的介紹。

1.1,模型剪枝定義

模型剪枝(Pruning)也叫模型稀疏化,不同于模型量化對(duì)每一個(gè)權(quán)重參數(shù)進(jìn)行壓縮,稀疏化方法是嘗試直接“刪除”部分權(quán)重參數(shù)。模型剪枝的原理是通過剔除模型中 “不重要” 的權(quán)重,使得模型減少參數(shù)量和計(jì)算量,同時(shí)盡量保證模型的精度不受影響。

二,深度神經(jīng)網(wǎng)絡(luò)的稀疏性

生物研究發(fā)現(xiàn)人腦是高度稀疏的。2016 年早期經(jīng)典的剪枝論文 [1 ][1]曾提到,生理學(xué)上發(fā)現(xiàn)對(duì)于哺乳動(dòng)物,嬰兒期產(chǎn)生許多的突觸連接,在后續(xù)的成長過程中,不怎么用的那些突出會(huì)退化消失。而深度神經(jīng)網(wǎng)絡(luò)是模仿人類大腦的結(jié)構(gòu),所以說其也是存在稀疏的,這也是作者提出的模型剪枝方法的生理學(xué)上依據(jù)。因此,我們可以認(rèn)為深度神經(jīng)網(wǎng)絡(luò)是存在稀疏性的。

根據(jù)深度學(xué)習(xí)模型中可以被稀疏化的對(duì)象,深度神經(jīng)網(wǎng)絡(luò)中的稀疏性主要包括權(quán)重稀疏,激活稀疏梯度稀疏

2.1,權(quán)重稀疏

在大多數(shù)神經(jīng)網(wǎng)絡(luò)中,通過對(duì)網(wǎng)絡(luò)層(卷積層或者全連接層)對(duì)權(quán)重?cái)?shù)值進(jìn)行直方圖統(tǒng)計(jì),可以發(fā)現(xiàn),權(quán)重(訓(xùn)練前/訓(xùn)練后)的數(shù)值分布很像正太分布(或者是多正太分布的混合),且越接近于 0,權(quán)重越多,這句是權(quán)重稀疏現(xiàn)象。

論文[1]認(rèn)為,權(quán)重?cái)?shù)值的絕對(duì)值大小可以看做重要性的一種度量,權(quán)重?cái)?shù)值越大對(duì)模型輸出貢獻(xiàn)也越大,反正則不重要,刪去后模型精度的影響應(yīng)該也比較小。

當(dāng)然,影響較小不等于沒有影響,且不同類型、不同順序的網(wǎng)絡(luò)層,在權(quán)重剪枝后影響也各不相同。論文[1]在 AlexNet 的 CONV 層和 FC 層的剪枝敏感性實(shí)驗(yàn),結(jié)果如下圖所示。

從圖中實(shí)驗(yàn)結(jié)果可以看出,卷積層的剪枝敏感性大于全連接層,且第一個(gè)卷積層對(duì)剪枝最為敏感。論文作者推測這是因?yàn)槿B接層本身參數(shù)冗余性更大,第一個(gè)卷積層的輸入只有 3 個(gè)通道所以比起他卷積層冗余性更少。

即使是移除絕對(duì)值接近于 0 的權(quán)重也會(huì)帶來推理精度的損失,因此為了恢復(fù)模型精度,通常在剪枝之后需要再訓(xùn)練模型。典型的模型剪枝三段式工作?pipeline?流程和剪枝前后網(wǎng)絡(luò)連接變化如下圖所示。

剪枝算法常用的迭代計(jì)算流程:訓(xùn)練、剪枝、微調(diào)。

剪枝Three-Step Training Pipeline?中三個(gè)階段權(quán)重?cái)?shù)值分布如下圖所示。微調(diào)之后的模型權(quán)重分布將部分地恢復(fù)正太分布的特性。

深度網(wǎng)絡(luò)中存在權(quán)重稀疏性:(a)剪枝前的權(quán)重分布;(b)剪除0值附近權(quán)值后的權(quán)重分布;(c)網(wǎng)絡(luò)微調(diào)后的權(quán)重分布

2.2,激活稀疏

早期的神經(jīng)網(wǎng)絡(luò)模型-早期的神經(jīng)網(wǎng)絡(luò)模型——多層感知機(jī)(MLP)中,多采用Sigmoid函數(shù)作為激活單元。但是其復(fù)雜的計(jì)算公式會(huì)導(dǎo)致模型訓(xùn)練過慢,且隨著網(wǎng)絡(luò)層數(shù)的加深,Sigmoid 函數(shù)引起的梯度消失和梯度爆炸問題嚴(yán)重影響了反向傳播算法的實(shí)用性。為解決上述問題,Hinton 等人于 2010 年在論文中[2]提出了?ReLU?激活函數(shù),并在?AlexNet模型[3]中第一次得到了實(shí)踐。

后續(xù)伴隨著?BN?層算子的提出,“2D卷積-BN層-ReLU激活函數(shù)”三個(gè)算子串聯(lián)而成的基本單元就構(gòu)成了后來 CNN 模型的基礎(chǔ)組件,如下述?Pytorch?代碼片段所示:

早期是 “2D卷積-ReLU激活函數(shù)-池化” 這樣串接的組件。

# cbr 組件示例代碼def convbn_relu(in_planes, out_planes, kernel_size, stride, pad, dilation):return nn.Sequential(nn.Conv2d(in_planes, out_planes,kernel_size=kernel_size, stride=stride,padding=dilation if dilation > 1 else pad,dilation=dilation, bias=False),nn.BatchNorm2d(out_planes),nn.ReLU(inplace=True))

ReLU 激活函數(shù)的定義為:


ReLU(x)=max(0,x)


該函數(shù)使得負(fù)半軸的輸入都產(chǎn)生 0 值的輸出,這可以認(rèn)為激活函數(shù)給網(wǎng)絡(luò)帶了另一種類型的稀疏性;另外?max_pooling?池化操作也會(huì)產(chǎn)生類似稀疏的效果。即無論網(wǎng)絡(luò)接收到什么輸入,大型網(wǎng)絡(luò)中很大一部分神經(jīng)元的輸出大多為零。激活和池化稀疏效果如下圖所示。

即 ReLU 激活層和池化層輸出特征圖矩陣是稀疏的。

受以上現(xiàn)象啟發(fā),論文[4]經(jīng)過了一些簡單的統(tǒng)計(jì),發(fā)現(xiàn)無論輸入什么樣圖像數(shù)據(jù),CNN 中的許多神經(jīng)元都具有非常低的激活。作者認(rèn)為零神經(jīng)元很可能是冗余的redundant),可以在不影響網(wǎng)絡(luò)整體精度的情況下將其移除。 因?yàn)樗鼈兊拇嬖谥粫?huì)增加過度擬合的機(jī)會(huì)和優(yōu)化難度,這兩者都對(duì)網(wǎng)絡(luò)有害。

由于神經(jīng)網(wǎng)絡(luò)具有乘法-加法-激活計(jì)算過程,因此其輸出大部分為零的神經(jīng)元對(duì)后續(xù)層的輸出以及最終結(jié)果的貢獻(xiàn)很小。

由此,提出了一種神經(jīng)元剪枝算法。首先,定義了?APoZ?(Average Percentage of Zeros)指標(biāo)來衡量經(jīng)過 ReLU 映射后神經(jīng)元零激活的百分比。假設(shè)?Oc(i)表示網(wǎng)絡(luò)第?i?層中第?c?個(gè)通道(特征圖),那么第?i?層中第?c?個(gè)的濾波器(論文中用神經(jīng)元 neuron)的 APoZ 定義如下:


APoZc(i)=APoZ(Oc(i))=∑kN∑jMf(Oc,j(i)(k=0))N×M


這里,f(?)?對(duì)真的表達(dá)式輸出 1,反之輸出 0,M?表示?Oc(i)?輸出特征圖的大小,N?表示用于驗(yàn)證的圖像樣本個(gè)數(shù)。由于每個(gè)特征圖均來自一個(gè)濾波器(神經(jīng)元)的卷積及激活映射結(jié)果,因此上式衡量了每個(gè)神經(jīng)元的重要性。

下圖給出了在 VGG-16 網(wǎng)絡(luò)中,利用 50,000 張 ImageNet 圖像樣本計(jì)算得到的 CONV5-3 層的 512 個(gè)和 FC6 層的 4096 個(gè) APoZ 指標(biāo)分布圖。

這里更高是指更接近于模型輸出側(cè)的網(wǎng)絡(luò)層。

可以看出 CONV5-3 層的大多數(shù)神經(jīng)元的該項(xiàng)指標(biāo)都分布在 93%附近。實(shí)際上,VGG-16 模型中共有 631 個(gè)神經(jīng)元的 APoZ 值超過90%。激活函數(shù)的引入反映出 VGG 網(wǎng)絡(luò)存在著大量的稀疏與冗余性,且大部分冗余都發(fā)生在更高的卷積層和全連接層。

激活稀疏的工作流程和稀疏前后網(wǎng)絡(luò)連接變化如下圖所示。

工作流程沿用韓松論文[1]提出的 Three-Step Training Pipeline,算法步驟如下所示:

  1. 首先,網(wǎng)絡(luò)在常規(guī)過程下進(jìn)行訓(xùn)練,每層中的神經(jīng)元數(shù)量根據(jù)經(jīng)驗(yàn)設(shè)置。 接下來,我們在大型驗(yàn)證數(shù)據(jù)集上運(yùn)行網(wǎng)絡(luò)以獲得每個(gè)神經(jīng)元的 APoZ。

  2. 根據(jù)特定標(biāo)準(zhǔn)修剪具有高 APoZ 的神經(jīng)元。 當(dāng)一個(gè)神經(jīng)元被修剪時(shí),與神經(jīng)元的連接被相應(yīng)地移除(參見上圖右邊紅色框)。

  3. 神經(jīng)元修剪后,修剪后的網(wǎng)絡(luò)使用修剪前的權(quán)重進(jìn)行初始化。 修剪后的網(wǎng)絡(luò)表現(xiàn)出一定程度的性能下降。因此,在最后一步中,我們重新訓(xùn)練網(wǎng)絡(luò)以加強(qiáng)剩余的神經(jīng)元以增強(qiáng)修剪后網(wǎng)絡(luò)的性能。

總結(jié):和權(quán)重剪枝的代表作[1]隨機(jī)權(quán)重剪枝方法(神經(jīng)元和連接都剪枝)相比,激活剪枝的代表作[4],其剪枝的直接對(duì)象是神經(jīng)元(neuron),即隨機(jī)的將一些神經(jīng)元的輸出置零,屬于結(jié)構(gòu)化稀疏。

2.3,梯度稀疏

大模型(如BERT)由于參數(shù)量龐大,單臺(tái)主機(jī)難以滿足其訓(xùn)練時(shí)的計(jì)算資源需求,往往需要借助分布式訓(xùn)練的方式在多臺(tái)節(jié)點(diǎn)(Worker)上協(xié)作完成。采用分布式隨機(jī)梯度下降(Distributed SGD)算法可以允許?N?臺(tái)節(jié)點(diǎn)共同完成梯度更新的后向傳播訓(xùn)練任務(wù)。其中每臺(tái)主機(jī)均保存一份完整的參數(shù)拷貝,并負(fù)責(zé)其中?1N?參數(shù)的更新計(jì)算任務(wù)。按照一定時(shí)間間隔,節(jié)點(diǎn)在網(wǎng)絡(luò)上發(fā)布自身更新的梯度,并獲取其他?N?1?臺(tái)節(jié)點(diǎn)發(fā)布的梯度計(jì)算結(jié)果,從而更新本地的參數(shù)拷貝。

隨著參與訓(xùn)練任務(wù)節(jié)點(diǎn)數(shù)目的增多,網(wǎng)絡(luò)上傳輸?shù)哪P吞荻葦?shù)據(jù)量也急劇增加,網(wǎng)絡(luò)通信所占據(jù)的資源開銷將逐漸超過梯度計(jì)算本身所消耗的資源,從而嚴(yán)重影響大規(guī)模分布式訓(xùn)練的效率。另外,大多數(shù)深度神經(jīng)網(wǎng)絡(luò)模型參數(shù)的梯度其實(shí)也是高度稀疏的,有研究[5]表明在分布式?SGD?算法中,99.9% 的梯度交換都是冗余的。例如下圖顯示了在 AlexNet 的訓(xùn)練早期,各層參數(shù)梯度的幅值還是較高的。但隨著訓(xùn)練周期的增加,參數(shù)梯度的稀疏度顯著增大

AlexNet 模型的訓(xùn)練是采用分布式訓(xùn)練。深度神經(jīng)網(wǎng)絡(luò)訓(xùn)練中的各層梯度值存在高度稀疏特性。

因?yàn)樘荻冉粨Q成本很高,由此導(dǎo)致了網(wǎng)絡(luò)帶寬成為了分布式訓(xùn)練的瓶頸,為了克服分布式訓(xùn)練中的通信瓶頸,梯度稀疏(Gradient Sparsification)得到了廣泛的研究,其實(shí)現(xiàn)的途徑包括:

  1. 選擇固定比例的正負(fù)梯度更新:在網(wǎng)絡(luò)上傳輸根據(jù)一定比例選出的一部分正、負(fù)梯度更新值。Dryden 等人2016年的論文。

  2. 預(yù)設(shè)閾值:在網(wǎng)絡(luò)上僅僅傳輸那些絕對(duì)值幅度超過預(yù)設(shè)閾值的梯度。Heafield (2017)論文。

深度梯度壓縮(DGC)[5],在梯度稀疏化基礎(chǔ)上采用動(dòng)量修正、本地梯度剪裁、動(dòng)量因子遮蔽和 warm-up訓(xùn)練 4 種方法來做梯度壓縮,從而減少分布式訓(xùn)練中的通信帶寬。其算法效果如下圖所示。

2.4,小結(jié)

雖然神經(jīng)網(wǎng)絡(luò)稀疏化目前在學(xué)術(shù)界研究和工業(yè)界落地已經(jīng)取得了寫進(jìn)展,但是目前并沒有一個(gè)完全確定的知識(shí)體系框架,許多以前 paper 上的結(jié)論是可能被后續(xù)新論文打破和重建的。以下是對(duì)主流權(quán)重剪枝、激活剪枝和梯度剪枝的總結(jié):

  1. 早期的權(quán)重剪枝是非結(jié)構(gòu)化的(細(xì)粒度稀疏)其對(duì)并行計(jì)算硬件-GPU支持并不友好,甚至可能完全沒有效果,其加速效果需要在專用加速器硬件(一般是?ASIC)上實(shí)現(xiàn),比如韓松提出的 EIE 加速硬件[6]。

  2. 更高層的網(wǎng)絡(luò)冗余性更大,且卷積層的冗余性比全連接層的冗余性更少。所以 ResNet、MobileNet 等網(wǎng)絡(luò)的剪枝難度大于 VGG、AlexNet 等。

  3. 神經(jīng)元剪枝相比權(quán)重剪枝更易損失模型精度,訓(xùn)練階段的梯度則擁有最多的稀疏度。

  4. 典型的模型剪枝三段式工作?pipeline?流程并不一定是準(zhǔn)確的,最新的研究表明,對(duì)于隨機(jī)初始化網(wǎng)絡(luò)先進(jìn)行剪枝操作再進(jìn)行訓(xùn)練,有可能會(huì)比剪枝預(yù)訓(xùn)練網(wǎng)絡(luò)獲得更高的稀疏度和精度。此需要更多研究。

神經(jīng)網(wǎng)絡(luò)的稀疏性總結(jié)如下表所示:

三,結(jié)構(gòu)化稀疏

早期提出的模型稀疏化[1][2]方法其實(shí)都是非結(jié)構(gòu)化稀疏(即細(xì)粒度稀疏,也叫非結(jié)構(gòu)化剪枝),其直接將模型大小壓縮10倍以上,理論上也可以減少10倍的計(jì)算量。但是,細(xì)粒度的剪枝帶來的計(jì)算特征上的“不規(guī)則”,對(duì)計(jì)算設(shè)備中的數(shù)據(jù)訪問和大規(guī)模并行計(jì)算非常不友好,尤其是對(duì)?GPU硬件!

論文[1]作者提出了專用加速器硬件?EIE?去支持他的細(xì)粒度權(quán)重剪枝算法。

因?yàn)?,“非結(jié)構(gòu)化稀疏”(Unstructured Sparsity)主要通過對(duì)權(quán)重矩陣中的單個(gè)或整行、整列的權(quán)重值進(jìn)行修剪。修剪后的新權(quán)重矩陣會(huì)變成稀疏矩陣(被修剪的值會(huì)設(shè)置為 0)。因而除非硬件平臺(tái)和計(jì)算庫能夠支持高效的稀疏矩陣計(jì)算,否則剪枝后的模型是無法獲得真正的性能提升的!

由此,許多研究開始探索通過給神經(jīng)網(wǎng)絡(luò)剪枝添加一個(gè)“規(guī)則”的約束-結(jié)構(gòu)化剪枝(Structured pruning),使得剪枝后的稀疏模式更加適合并行硬件計(jì)算。 “結(jié)構(gòu)化剪枝”的基本修剪單元是濾波器或權(quán)重矩陣的一個(gè)或多個(gè)Channel。由于結(jié)構(gòu)化剪枝沒有改變權(quán)重矩陣本身的稀疏程度,現(xiàn)有的計(jì)算平臺(tái)和框架都可以實(shí)現(xiàn)很好的支持。

這種引入了“規(guī)則”的結(jié)構(gòu)化約束的稀疏模式通常被稱為結(jié)構(gòu)化稀疏(Structured Sparsity),在很多文獻(xiàn)中也被稱之為粗粒度稀疏(Coarse-grained Sparsity)或塊稀疏(Block Sparsity)。

3.1,結(jié)構(gòu)化稀疏分類

結(jié)構(gòu)化剪枝又可進(jìn)一步細(xì)分:可以是 channel-wise,也可以是 filter-wise,還可以是在shape-wise。

3.1.1,channel 剪枝

通道剪枝的工作是最多的,是最易于 IC 實(shí)現(xiàn)的。channel 剪枝和 filter 剪枝目前有些文章等同一個(gè)意思,有些區(qū)別開。

filter (channel) pruning (FP) 屬于粗粒度剪枝(或者結(jié)構(gòu)化剪枝 Structured Pruning),基于 FP 的方法修剪的是過濾器或者卷積層中的通道,而不是對(duì)個(gè)別權(quán)重,其原始的卷積結(jié)構(gòu)不改變,所以剪枝后的模型不需要專門的算法和硬件就能夠加速運(yùn)行。

CNN?模型中通道剪枝的核心在于減少一個(gè)中間特征的數(shù)量,其前一個(gè)和后一個(gè)卷積層需要發(fā)生相應(yīng)的變化。論文Learning Efficient Convolutional Networks through Network Slimming[7] 認(rèn)為 conv-layer 的每個(gè)channel 的重要程度可以和 bn 層關(guān)聯(lián)起來,如果某個(gè) channel 后的?bn?層中對(duì)應(yīng)的 scaling factor 足夠小,就說明該 channel 的重要程度低,可以被忽略。如下圖中橙色的兩個(gè)通道被剪枝。

BN?層的計(jì)算公式如下:


μB=1m∑1mxiσB2=1m∑1m(xi?μB)2ni=xi?μBσB2+?zi=γni+β=γσB2+?xi+(β?γμBσB2+?)


其中,bn?層中的?γ?參數(shù)被作為?channel-level 剪枝?所需的縮放因子(scaling factor)。

3.1.2, 階段級(jí)別剪枝

濾波器級(jí)別的剪枝只能作用于殘差結(jié)構(gòu)塊內(nèi)部的卷積層,CURL[9]中指出只進(jìn)行濾波器級(jí)別的剪枝會(huì)導(dǎo)致模型形成一個(gè)沙漏狀、兩頭寬中間窄的結(jié)構(gòu),這樣的結(jié)構(gòu)會(huì)影響參數(shù)量和計(jì)算量。在這種情況下,階段級(jí)別的剪枝能彌補(bǔ)濾波器級(jí)別剪枝的不足。

一個(gè)階段中的殘差結(jié)構(gòu)塊是緊密聯(lián)系在一起的,如下圖所示。

當(dāng)一個(gè)階段的輸出特征發(fā)生變化時(shí)(一些特征被拋棄),其對(duì)應(yīng)的每個(gè)殘差結(jié)構(gòu)的輸入特征和輸出特征都要發(fā)生相應(yīng)的變化,所以整個(gè)階段中,每個(gè)殘差結(jié)構(gòu)的第一個(gè)卷積層的輸入通道數(shù),以及最后一個(gè)卷積層的輸出通道數(shù)都要發(fā)生相同的變化。由于這樣的影響只限定在當(dāng)前的階段,不會(huì)影響之前和之后的階段,因此我們稱這個(gè)剪枝過程為階段級(jí)別的剪枝(stage-level pruning)。

階段級(jí)別的剪枝加上濾波器級(jí)別的剪枝能夠使網(wǎng)絡(luò)的形狀更均勻,而避免出現(xiàn)沙漏狀的網(wǎng)絡(luò)結(jié)構(gòu)。此外,階段級(jí)別的剪枝能夠剪除更多的網(wǎng)絡(luò)參數(shù),這給網(wǎng)絡(luò)進(jìn)一步壓縮提供了支持。

3.2,結(jié)構(gòu)化稀疏與非結(jié)構(gòu)化稀疏比較

與非結(jié)構(gòu)化剪枝相比,結(jié)構(gòu)化剪枝通常通常會(huì)犧牲模型的準(zhǔn)確率和壓縮比。結(jié)構(gòu)化稀疏對(duì)非零權(quán)值的位置進(jìn)行了限制,在剪枝過程中會(huì)將一些數(shù)值較大的權(quán)值剪枝,從而影響模型準(zhǔn)確率。 “非規(guī)則”的剪枝則契合了神經(jīng)網(wǎng)絡(luò)模型中不同大小權(quán)值的隨機(jī)分布,這對(duì)深度學(xué)習(xí)模型的準(zhǔn)確度至關(guān)重要。

深度神經(jīng)網(wǎng)絡(luò)的權(quán)值稀疏存在模型有效性和計(jì)算高效性之間的權(quán)衡。展開來講就是:

  1. 非結(jié)構(gòu)化稀疏具有更高的模型壓縮率和準(zhǔn)確性,但通用性不好。因?yàn)槠溆?jì)算特征上的“不規(guī)則”,導(dǎo)致需要特定硬件支持才能實(shí)現(xiàn)加速效果。

  2. 結(jié)構(gòu)化稀疏雖然犧牲了模型壓縮率或準(zhǔn)確率,但通用性更好。因?yàn)榻Y(jié)構(gòu)化稀疏使得權(quán)值矩陣更規(guī)則更加結(jié)構(gòu)化,更利于硬件加速。


模型壓縮-剪枝算法詳解的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國家法律
广昌县| 普陀区| 启东市| 临澧县| 屏南县| 什邡市| 封开县| 夏津县| 宿州市| 开原市| 林口县| 景宁| 资中县| 巫溪县| 青川县| 平舆县| 徐州市| 鄂温| 安新县| 綦江县| 调兵山市| 青铜峡市| 沾化县| 西乌| 高雄市| 天门市| 静海县| 祁阳县| 宁城县| 汝南县| 恩平市| 哈尔滨市| 澄城县| 黄浦区| 曲麻莱县| 长乐市| 井研县| 陇川县| 泊头市| 彭泽县| 九龙坡区|