在機器視覺和其他很多問題上,卷積神經(jīng)網(wǎng)絡(luò)取得了當前最好的效果,它的成功促使我們思考一個問題,卷積神經(jīng)網(wǎng)絡(luò)為什么會這么有效?在本文中,SIGAI將為大家分析卷積神經(jīng)網(wǎng)絡(luò)背后的奧秘。
思想起源
在各種深度神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)中,卷積神經(jīng)網(wǎng)絡(luò)是應(yīng)用最廣泛的一種,它由LeCun在1989年提出[1]。卷積神經(jīng)網(wǎng)絡(luò)在早期被成功應(yīng)用于手寫字符圖像識別。2012年更深層次的AlexNet網(wǎng)絡(luò)[4]取得成功,此后卷積神經(jīng)網(wǎng)絡(luò)蓬勃發(fā)展,被廣泛用于各個領(lǐng)域,在很多問題上都取得了當前最好的性能。
卷積神經(jīng)網(wǎng)絡(luò)通過卷積和池化操作自動學習圖像在各個層次上的特征,這符合我們理解圖像的常識。人在認知圖像時是分層抽象的,首先理解的是顏色和亮度,然后是邊緣、角點、直線等局部細節(jié)特征,接下來是紋理、幾何形狀等更復雜的信息和結(jié)構(gòu),最后形成整個物體的概念。
視覺神經(jīng)科學(Visual Neuroscience)對于視覺機理的研究驗證了這一結(jié)論,動物大腦的視覺皮層具有分層結(jié)構(gòu)。眼睛將看到的景象成像在視網(wǎng)膜上,視網(wǎng)膜把光學信號轉(zhuǎn)換成電信號,傳遞到大腦的視覺皮層(Visual cortex),視覺皮層是大腦中負責處理視覺信號的部分。1959年,David和Wiesel進行了一次實驗[5],他們在貓的大腦初級視覺皮層內(nèi)插入電極,在貓的眼前展示各種形狀、空間位置、角度的光帶,然后測量貓大腦神經(jīng)元放出的電信號。實驗發(fā)現(xiàn),當光帶處于某一位置和角度時,電信號最為強烈;不同的神經(jīng)元對各種空間位置和方向偏好不同。這一成果后來讓他們獲得了諾貝爾獎。
目前已經(jīng)證明,視覺皮層具有層次結(jié)構(gòu)。從視網(wǎng)膜傳來的信號首先到達初級視覺皮層(primary visual cortex),即V1皮層。V1皮層簡單神經(jīng)元對一些細節(jié)、特定方向的圖像信號敏感。V1皮層處理之后,將信號傳導到V2皮層。V2皮層將邊緣和輪廓信息表示成簡單形狀,然后由V4皮層中的神經(jīng)元進行處理,它顏色信息敏感。復雜物體最終在IT皮層(inferior temporal cortex)被表示出來。
視覺皮層結(jié)構(gòu)
卷積神經(jīng)網(wǎng)絡(luò)可以看成是上面這種機制的簡單模仿。它由多個卷積層構(gòu)成,每個卷積層包含多個卷積核,用這些卷積核從左向右、從上往下依次掃描整個圖像,得到稱為特征圖(feature map)的輸出數(shù)據(jù)。網(wǎng)絡(luò)前面的卷積層捕捉圖像局部、細節(jié)信息,有小的感受野,即輸出圖像的每個像素只利用輸入圖像很小的一個范圍。后面的卷積層感受野逐層加大,用于捕獲圖像更復雜,更抽象的信息。經(jīng)過多個卷積層的運算,最后得到圖像在各個不同尺度的抽象表示。
卷積運算
一維信號的卷積是數(shù)字信號處理里的一種經(jīng)典手段,在圖像處理領(lǐng)域,卷積也是一種常用的運算。它被用于圖像去噪、增強、邊緣檢測等問題,還可以提取圖像的特征。卷積運算用一個稱為卷積核的矩陣自上而下、自左向右在圖像上滑動,將卷積核矩陣的各個元素與它在圖像上覆蓋的對應(yīng)位置的元素相乘,然后求和,得到輸出像素值。以Sobel邊緣檢測算子為例,它的卷積核矩陣為:
假設(shè)輸入圖像的矩陣為以(x,y)為中心的3x3子圖像為:
在該點處的卷積結(jié)果按照如下方式計算:
即以(x,y)為中心的的子圖像與卷積核的對應(yīng)元素相乘,然后相加。通過核卷積作用于輸入圖像的所有位置,我們可以得到圖像的邊緣圖。邊緣圖在邊緣位置有更大的值,在非邊緣處的值接近于0。下圖為Sobel算子對圖像卷積的結(jié)果,左圖為輸入圖像,右圖為卷積后的結(jié)果:
Sobel算子卷積結(jié)果
從上圖可以看到,通過卷積將圖像的邊緣信息凸顯出來了。除了Sobel算子之外,常用的還有Roberts 、Prewitt算子等,它們實現(xiàn)卷積的方法相同 ,但有不同的卷積核矩陣。如果我們使用其他不同的核,也可以抽取更一般的圖像特征。在圖像處理中,這些卷積核矩陣的數(shù)值是人工設(shè)計的。通過某種方法,我們可以通過機器學習的手段來自動生成這些卷積核,從而描述各種不同類型的特征,卷積神經(jīng)網(wǎng)絡(luò)就是通過這種自動學習的手段來得到各種有用的卷積核。
卷積層
卷積層是卷積神經(jīng)網(wǎng)絡(luò)的核心。下面通過一個實際的例子來理解卷積運算。如果被卷積圖像為:
卷積核為:
首先用圖像第一個位置處的子圖像,即左上角的子圖像和卷積核對應(yīng)元素相乘,然后相加,在這里子圖像為:
卷積結(jié)果為:
接下來在待卷積圖像上向右滑動一列,將第二個位置處的子圖像:
與卷積核卷積,結(jié)果為154。接下來,再向右滑動一位,將第三個位置處的子圖像與卷積核進行卷積,結(jié)果為166。處理完第一行之后,向下滑動一行,然后重復上面的過程。以此類推,最后得到卷積結(jié)果圖像為:
經(jīng)過卷積運算之后,圖像尺寸變小了。我們也可以先對圖像進行擴充(padding),例如在周邊補0,然后用尺寸擴大后的圖像進行卷積,保證卷積結(jié)果圖像和原圖像尺寸相同。另外,在從上到下,從左到右滑動過程中,水平和垂直方向滑動的步長都是1,我們也可以采用其他步長。
卷積運算顯然是一個線性操作,而神經(jīng)網(wǎng)絡(luò)要擬合的是非線性的函數(shù),因此和全連接網(wǎng)絡(luò)類似,我們需要加上激活函數(shù),常用的有sigmoid函數(shù),tanh函數(shù),ReLU函數(shù)等。關(guān)于激活函數(shù)的解釋,為什么需要激活函數(shù),什么樣的函數(shù)可以用來做激活函數(shù),SIGAI會在后續(xù)的文章中講述,請關(guān)注我們的公眾號。
前面我們講述的是單通道圖像的卷積,輸入是二維數(shù)組。實際應(yīng)用時我們遇到的經(jīng)常是多通道圖像,如RGB彩色圖像有三個通道,另外由于每一層可以有多個卷積核,產(chǎn)生的輸出也是多通道的特征圖像,此時對應(yīng)的卷積核也是多通道的。具體做法是用卷積核的各個通道分別對輸入圖像的各個通道進行卷積,然后把對應(yīng)位置處的像素值按照各個通道累加。
由于每一層允許有多個卷積核,卷積操作后輸出多張?zhí)卣鲌D像,因此第L個卷積層的卷積核通道數(shù)必須和輸入特征圖像的通道數(shù)相同,即等于第L-1個卷積層的卷積核的個數(shù)。
下圖是一個簡單的例子:
多通道卷積
在上圖中卷積層的輸入圖像是3通道的(圖中第1列)。對應(yīng)的,卷積核也是3通道的。在進行卷積操作時,分別用每個通道的卷積核對對應(yīng)通道的圖像進行卷積,然后將同一個位置處的各個通道值累加,得到一個單通道圖像。在上圖中,有4個卷積核,每個卷積核產(chǎn)生一個單通道的輸出圖像,4個卷積核共產(chǎn)生4個通道的輸出圖像。
池化層
通過卷積操作,我們完成了對輸入向圖像的降維和特征抽取,但特征圖像的維數(shù)還是很高。維數(shù)高不僅計算耗時,而且容易導致過擬合。為此引入了下采樣技術(shù),也稱為pooling即池化操作。
池化的做法是對圖像的某一個區(qū)域用一個值代替,如最大值或平均值。如果采用最大值,叫做max池化;如果采用均值,叫做均值池化。除了降低圖像尺寸之外,下采樣帶來的另外一個好處是平移、旋轉(zhuǎn)不變性,因為輸出值由圖像的一片區(qū)域計算得到,對于平移和旋轉(zhuǎn)并不敏感。
下面通過一個實際例子來理解下采樣運算。輸入圖像為:
在這里進行無重疊的2x2max池化,結(jié)果圖像為:
結(jié)果圖像中第一個元素11是原圖左上角2x2子圖像:
元素的最大值11。第二個元素9為第二個2x2子圖像:
元素的最大值9,其他的以此類推。如果是采用的均值下采樣,結(jié)果為:
池化層的具體實現(xiàn)是在進行卷積操作之后對得到的特征圖像進行分塊,圖像被劃分成的不相交塊,計算這些塊內(nèi)的最大值或平均值,得到池化后的圖像。
均值池化和max池化都可以完成下采樣操作,前者是線性函數(shù),而后者是非線性函數(shù),一般情況下max池化有更好的效果。
網(wǎng)絡(luò)結(jié)構(gòu)
典型的卷積神經(jīng)網(wǎng)絡(luò)由卷積層、池化層、全連接層構(gòu)成。在這里以LeNet5網(wǎng)絡(luò)來說明,下圖是這個網(wǎng)絡(luò)的結(jié)構(gòu):
網(wǎng)絡(luò)的輸入為的灰度圖像,由3個卷積層,2個池化層,1個全連接層組成。前面兩個卷積層后面都有一個池化層。輸出層有10個神經(jīng)元,表示0-9這10個數(shù)字。
應(yīng)用
機器視覺是深度學習技術(shù)最先取得突破的領(lǐng)域,也是應(yīng)用最廣泛的領(lǐng)域。在AlexNet出現(xiàn)之后,卷積神經(jīng)網(wǎng)絡(luò)很快被用于機器視覺里的各種任務(wù),包括通用目標檢測、行人檢測、人臉檢測、人臉識別、圖像語義分割、邊緣檢測、目標跟蹤、視頻分類等各種問題,都取得了成功。
自然語言處理領(lǐng)域大多數(shù)的問題都是時間序列問題,這是循環(huán)神經(jīng)網(wǎng)絡(luò)擅長處理的問題。但對于有些問題,使用卷積網(wǎng)絡(luò)也能進行建模并且得到了很好的結(jié)果,典型的是文本分類和機器翻譯。
除此之外,卷積神經(jīng)網(wǎng)絡(luò)在語音識別、計算機圖形學等其他方向也有應(yīng)用。
卷積層可視化
卷積網(wǎng)絡(luò)設(shè)計的初衷是通過卷積層和池化層逐級提取圖像在各個不同抽象層次的特征,我們會有這樣的疑問:現(xiàn)實結(jié)果真的是這樣的嗎?
先看圖像卷積之后的結(jié)果。下面是一張卡車的圖像:
卡車圖像
用AlexNet網(wǎng)絡(luò)處理之后,第一個卷積層的輸出結(jié)果(我們把各個卷積核的結(jié)果依次排開了)是這樣的:
卷層1的結(jié)果
可以看到這里抽取了一些邊緣信息。第二個卷積層的輸出結(jié)果是這樣的:
卷層2的結(jié)果
它抽取了更大區(qū)域的特征。后面幾個卷積層的結(jié)果是這樣的:
卷層3—5的結(jié)果
卷積層3-5的結(jié)果在上圖中依次排開。然后我們看全連接層,下圖自上向下是3個全連接層的輸出結(jié)果:
全連接層的結(jié)果
我們再來看卷積核的可視化結(jié)果。第一個卷積層的卷積核圖像如下圖所示:
卷積層1的卷積核
可以看到,這些卷積核確實是在提取邊緣,方向等信息。再看第2個卷積層的卷積核:
卷積層2的卷積核
看上去很雜亂,沒有反應(yīng)太多信息。有沒有更好的辦法?答案是肯定的,目前出現(xiàn)了一些文章解決卷積層可視化的問題。在這里,我們介紹一種典型的方法,通過反卷積運算將卷積核的效果可視化出來。
文獻[6]設(shè)計了一種用反卷積操作可視化卷積層的方案。具體做法是,將卷積網(wǎng)絡(luò)學習到的特征圖像左乘得到這些特征圖像的卷積核的轉(zhuǎn)置矩陣,將圖片特征從特征圖像空間投影到像素空間,以發(fā)現(xiàn)是哪些像素激活了特定的特征圖像,達到分析理解卷積網(wǎng)絡(luò)的目的。這這操作稱為反卷積,也叫轉(zhuǎn)置卷積。
對于卷積層,在反卷積運算時使用正向傳播時的卷積核的轉(zhuǎn)置矩陣對特征圖像進行卷積,將特征圖像還原到原始的像素圖像空間得到重構(gòu)的圖像。通過反卷積操作得到卷積核的可視化圖像如下圖所示:
通過反卷積進行可視化
上圖表明,前面的層提取的特征比較簡單,是一些顏色、邊緣特征。越往后的卷積層提取的特征越復雜,是一些復雜的幾何形狀。這符合我們對卷積神經(jīng)網(wǎng)絡(luò)的設(shè)計初衷,即通過多層卷積完成對圖像的逐層特征提取和抽象。
另外一種分析卷積網(wǎng)絡(luò)機理的方法是根據(jù)卷積結(jié)果圖像直接重構(gòu)出原始輸入圖像,如果根據(jù)卷積結(jié)果可以重構(gòu)出原始輸入圖像,則說明卷積網(wǎng)絡(luò)很大程度上保留了圖像的信息。文獻[7]設(shè)計了一種方法,通過卷積網(wǎng)絡(luò)提取出來的特征反向表示圖像來觀察卷積網(wǎng)絡(luò)的表達能力。在這里,反向表示是指由卷積網(wǎng)絡(luò)編碼后的向量近似重構(gòu)原始輸入圖像。具體做法是給定卷積網(wǎng)絡(luò)編碼后的向量,尋找一張圖像,這種圖像通過卷積網(wǎng)絡(luò)編碼之后的向量與給定向量最匹配,這通過求解一個最優(yōu)化問題實現(xiàn)。下圖是根據(jù)卷積輸出結(jié)果重構(gòu)出來的圖像:
卷積圖像重構(gòu)
其中,上面一行是原始圖像,下面一行是重構(gòu)后的圖像。從這個結(jié)果可以看出,卷積神經(jīng)網(wǎng)絡(luò)確實提取出了圖像的有用信息。
理論分析
對卷積神經(jīng)網(wǎng)絡(luò)的理論解釋和分析來自兩個方面。第一個方面是從數(shù)學角度的分析,對網(wǎng)絡(luò)的表示能力、映射特性的數(shù)學分析;第二個方面是卷積網(wǎng)絡(luò)和動物視覺系統(tǒng)關(guān)系的研究,分析二者的關(guān)系有助于理解、設(shè)計更好的方法,同時也促進了神經(jīng)科學的進步。
數(shù)學特性
神經(jīng)網(wǎng)絡(luò)代表了人工智能中的連接主義思想,它是一種仿生的方法,被看做是對動物大腦神經(jīng)系統(tǒng)的模擬。在實現(xiàn)時,它又和大腦的結(jié)構(gòu)不同。從數(shù)學上看,多層神經(jīng)網(wǎng)絡(luò)本質(zhì)上是一個復合函數(shù)。
既然神經(jīng)網(wǎng)絡(luò)在本質(zhì)上是一個復雜的復合函數(shù),這會讓我們思考一個問題:這個函數(shù)的建模能力有多強?即它能模擬什么樣的目標函數(shù)?已經(jīng)證明,只要激活函數(shù)選擇得當,神經(jīng)元個數(shù)足夠多,使用3層即包含一個隱含層的神經(jīng)網(wǎng)絡(luò)就可以實現(xiàn)對任何一個從輸入向量到輸出向量的連續(xù)映射函數(shù)的逼近[8][9][10],這個結(jié)論稱為萬能逼近(universal approximation)定理。
文獻[10]對使用sigmoid激活函數(shù)時的情況進行了證明。文獻[8]指出,萬能逼近特性并不取決于神經(jīng)網(wǎng)絡(luò)具體的激活函數(shù),而是由神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)保證的。
萬能逼近定理的表述為:如果
對任意
萬能逼近定理的直觀解釋是可以構(gòu)造出上面這樣的函數(shù),逼近定義在單位立方體空間中的任何一個連續(xù)函數(shù)到任意指定的精度。這一結(jié)論和多項式逼近類似,后者利用多項式函數(shù)來逼近任何連續(xù)函數(shù)到任何精度。這個定理的意義在于,從理論上保證了神經(jīng)網(wǎng)絡(luò)的擬合能力。
但是這只是一個理論結(jié)果,具體實現(xiàn)時,神經(jīng)網(wǎng)絡(luò)需要多少層,每層要多少個神經(jīng)元?這些問題只能通過實驗和經(jīng)驗來確定,以保證效果。另外一個問題是訓練樣本,要擬合出一個復雜的函數(shù)需要大量的訓練樣本,而且面臨過擬合的問題。這些工程實現(xiàn)的細節(jié)也至關(guān)重要,卷積網(wǎng)絡(luò)在1989年就已經(jīng)出現(xiàn)了,為什么直到2012年才取得成功?答案有這么幾點:
1.訓練樣本數(shù)量的限制。早期的訓練樣本非常少,沒有大規(guī)模采集,不足以訓練出一個復雜的卷積網(wǎng)絡(luò)。
2.計算能力的限制。1990年代的計算機能力太弱,沒有GPU這樣的高性能計算技術(shù),要訓練一個復雜的神經(jīng)網(wǎng)絡(luò)不現(xiàn)實。
3.算法本身的問題。神經(jīng)網(wǎng)絡(luò)長期以來存在梯度消失的問題,由于反向傳播時每一層都要乘上激活函數(shù)的導數(shù)值,如果這個導數(shù)的絕對值小于1,次數(shù)多了之后梯度很快趨近于0,使得前面的層無法得到更新。
AlexNet網(wǎng)絡(luò)的規(guī)模尤其是層數(shù)比之前的網(wǎng)絡(luò)更深,使用了ReLU作為激活函數(shù),拋棄了sigmoid和tanh函數(shù),一定程度上緩解了梯度消失問題。加上Dropout機制,還減輕了過擬合問題。這些技術(shù)上的改進,加上ImageNet這樣的大樣本集,以及GPU的計算能力,保證了它的成功。后面的研究表明,加大網(wǎng)絡(luò)的層數(shù)、參數(shù)數(shù)量,能夠明顯的增加網(wǎng)絡(luò)的精度。對于這些問題,SIGAI會在后面的專題文章中詳細介紹,感興趣的讀者可以關(guān)注我們的公眾號。
卷積神經(jīng)網(wǎng)絡(luò)本質(zhì)上權(quán)重共享的全連接神經(jīng)網(wǎng)絡(luò),因此萬能逼近定理對它是適用的。但卷積網(wǎng)絡(luò)的卷積層,池化層又具有其特性。文獻[11]從數(shù)學的角度對深層卷積網(wǎng)絡(luò)進行了解釋。在這里,作者將卷積網(wǎng)絡(luò)看做是用一組級聯(lián)的線性加權(quán)濾波器和非線性函數(shù)對數(shù)據(jù)進行散射。通過對這一組函數(shù)的壓縮(contraction)和分離(separation)特性進行分析從而解釋深度卷積網(wǎng)絡(luò)的建模能力。另外,還解釋了深度神經(jīng)網(wǎng)絡(luò)的遷移特性。卷積神經(jīng)網(wǎng)絡(luò)的卷積操作分為兩步,第一步是線性變換,第二步是激活函數(shù)變換。前者可以看成是將數(shù)據(jù)線性投影到更低維的空間;后者是對數(shù)據(jù)的壓縮非線性變換。作者對這幾種變換的分離和壓縮特性分別進行了分析。
與視覺神經(jīng)系統(tǒng)的關(guān)系
卷積網(wǎng)絡(luò)與人腦視覺系統(tǒng)的關(guān)系對于卷積網(wǎng)絡(luò)的解釋和設(shè)計有重要的意義,這分為兩個方面的問題。第一個問題是深度卷積神經(jīng)網(wǎng)絡(luò)是否能夠取得和人腦視覺系統(tǒng)相似的性能,這涉及到二者能力的對比。第二個問題是二者在結(jié)構(gòu)上是否具有一致性,這是從系統(tǒng)結(jié)構(gòu)上分析二者的關(guān)系。
從更深層來看,這個問題也是人工智能無法回避的一個問題。很多人都會有一個疑問:我們是否要理解了大腦的工作機理才能實現(xiàn)出和它相當?shù)娜斯ぶ悄??對這個問題的答案有兩種觀點。第一種觀點認為,我們要先弄清楚大腦的原理,才能研制出和他功能相當?shù)娜斯ぶ悄?。第二種觀點認為,即使我們沒有弄清大腦的工作原理,也能研制出和它能力相當?shù)娜斯ぶ悄?。一個例子就是飛機的發(fā)明過程,長期以來,人們都想通過仿照鳥的飛行方式來制造飛機,即煽動翅膀,結(jié)果均以失敗告終。而螺旋槳的使用,使得我們采用另外一種方法,也能讓飛機飛起來,后面出現(xiàn)的噴氣發(fā)動機甚至讓我們突破了音速,遠比鳥強大。事實上,大腦可能不是實現(xiàn)和它具有同等功能的智能的唯一方案。
他們驗證了深度神經(jīng)網(wǎng)絡(luò)可以取得和靈長類動物視覺IT皮層相同的性能。人腦的視覺神經(jīng)系統(tǒng)在物體樣例變化,幾何變換,背景變化的情況下仍然可以達到很高的識別性能,這主要歸功于下顳葉皮層inferior temporal cortex,簡稱IT皮層的表示能力。通過深度卷積神經(jīng)網(wǎng)絡(luò)訓練的模型,在物體識別問題上同樣達到了很高的性能。對兩者的精確比較存在很多困難。
作者用擴展的核分析技術(shù)對深度神經(jīng)網(wǎng)絡(luò)和IT皮層進行了比較。這種技術(shù)將模型的泛化誤差作為表示復雜度的函數(shù)。分析結(jié)果表明,深度神經(jīng)網(wǎng)絡(luò)在視覺目標識別任務(wù)上的的性能可以得到大腦IT皮層的表示能力。
神經(jīng)網(wǎng)絡(luò)與視覺皮層能力的對比
深層神經(jīng)網(wǎng)絡(luò)與視覺神經(jīng)之間的對應(yīng)關(guān)系。他們利用目標驅(qū)動的深度學習模型來理解大腦的感覺皮層。具體的思路是用目標驅(qū)動的分層卷積神經(jīng)網(wǎng)絡(luò)(goal-driven hierarchical convolutional neural networks,簡稱HCNNs)對高視覺皮層區(qū)中單個單元和群體的輸出響應(yīng)進行建模。這種手段建立起了深層神經(jīng)網(wǎng)絡(luò)和大腦感知皮層的對應(yīng)關(guān)系,能夠幫助我們理解視覺皮層的機理。從另一角度看,也找到了深度神經(jīng)網(wǎng)絡(luò)在神經(jīng)科學上的對應(yīng)點。下圖是神經(jīng)網(wǎng)絡(luò)與視覺皮層的結(jié)構(gòu)和功能對比:
神經(jīng)網(wǎng)絡(luò)與視覺皮層的結(jié)構(gòu)對比
目前對深度神經(jīng)網(wǎng)絡(luò)工作機理、理論的研究還不完善,腦科學的研究也還處于比較低級的階段。相信在未來通過人類不斷的努力,能夠更清楚的理解大腦的工作機理,也能夠設(shè)計出功能更強大的神經(jīng)網(wǎng)絡(luò)。
-
神經(jīng)網(wǎng)絡(luò)
+關(guān)注
關(guān)注
42文章
4733瀏覽量
100415 -
深度學習
+關(guān)注
關(guān)注
73文章
5463瀏覽量
120890
原文標題:卷積神經(jīng)網(wǎng)絡(luò)為什么能稱霸計算機視覺領(lǐng)域?
文章出處:【微信號:gh_ecbcc3b6eabf,微信公眾號:人工智能和機器人研究院】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論