ImageNet Classification with Deep Convolutional Neural Networks(譯文)

ImageNet Classification with Deep Convolutional Neural Networks

Alex Krizhevsky, Ilya Sutskever, Geoffrey E. Hinton

摘要

我們訓練了一個大型的深度卷積神經網絡,來將在ImageNet LSVRC-2010大賽中的120萬張高清圖像分爲1000個不同的類別。對測試數據,我們得到了top-1誤差率37.5%,以及top-5誤差率17.0%,這個效果比之前最頂尖的都要好得多。該神經網絡有6000萬個參數和650,000個神經元,由五個卷積層,以及某些卷積層後跟着的max-pooling層,和三個全連接層,還有排在最後的1000-way的softmax層組成。爲了使訓練速度更快,我們使用了非飽和的神經元和一個非常高效的GPU關於卷積運算的工具。爲了減少全連接層的過擬合,我們採用了最新開發的正則化方法,稱爲“dropout”,它已被證明是非常有效的。在ILSVRC-2012大賽中,我們又輸入了該模型的一個變體,並依靠top-5測試誤差率15.3%取得了勝利,相比較下,次優項的錯誤率是26.2%。

1 引言

當前物體識別的方法基本上都使用了機器學習方法。爲了改善這些方法的性能,我們可以收集更大的數據集,學習更強有力的模型,並使用更好的技術,以防止過擬合。直到最近,標記圖像的數據集都相當小——大約數萬張圖像(例如,NORB [16],Caltech-101/256 [8, 9],以及CIFAR-10/100 [12])。簡單的識別任務可以用這種規模的數據集解決得相當好,特別是當它們用標籤-保留轉換增強了的時候。例如,在MNIST數字識別任務中當前最好的誤差率(<0.3%)接近於人類的表現[4]。但是現實環境中的物體表現出相當大的變化,因此要學習它們以對它們進行識別就必須使用更大的訓練集。事實上,小規模圖像數據集的缺陷已被廣泛認同(例如,Pinto等人[21]),但是直到最近,收集有着上百萬張圖像的帶標籤數據集才成爲可能。更大型的新數據集包括LabelMe [23],它由幾十萬張完全分割圖組成,還有ImageNet [6],它由多於22,000個種類中超過1500萬張帶標籤的高分辨率圖像組成。

爲了從幾百萬張圖像中學習數以千計的物體,我們需要一個學習能力更強的模型。然而,物體識別任務的極大複雜性意味着這個問題不能被指定,即使是通過與ImageNet一樣大的數據集,所以我們的模型中也應該有大量的先驗知識,以補償我們所沒有的全部數據。卷積神經網絡(CNN)構成了一個這種類型的模型[16, 11, 13, 18, 15, 22, 26]。它們的能力可以通過改變其深度與廣度得到控制,它們也可作出有關圖像性質的強壯且多半正確的假設(即,統計數據的穩定性和像素依賴關係的局部性)。因此,與層次規模相同的標準前饋神經網絡相比,CNN的連接關係和參數更少,所以更易於訓練,而其理論上的最佳性能可能只略差一點。

不論CNN的性質多有吸引力,也不論它們局部結構的相對效率有多高,將它們大規模地應用到高分辨率圖像中仍然是極其昂貴的。幸運的是,目前的GPU搭配了一個高度優化的2D卷積工具,強大到足以促進大規模CNN的訓練,而且最近的數據集像ImageNet包含足夠的帶標籤的樣例來訓練這樣的模型,還不會有嚴重的過擬合。

本文的具體貢獻如下:我們在ILSVRC-2010和ILSVRC-2012大賽中使用過的ImageNet的子集上[2],訓練了迄今爲止最大型的卷積神經網絡之一,並取得了迄今爲止在這些數據集上報告過的最好結果。我們寫了一個高度優化的GPU二維卷積工具以及訓練卷積神經網絡過程中的所有其他操作,這些我們都提供了 公開地址 。我們的網絡中包含一些既新鮮而又不同尋常的特徵,它們提高了網絡的性能,並減少了網絡的訓練時間,這些詳見第3節。我們的網絡中甚至有120萬個帶標籤的訓練樣本,這麼大的規模使得過擬合成爲一個顯著的問題,所以我們使用了幾種有效的方法來防止過擬合,這些在第4節中給以描述。我們最終的網絡包含五個卷積層和三個全連接層,且這種層次深度似乎是重要的:我們發現,移去任何卷積層(其中每一個包含的模型參數都不超過1%)都會導致性能變差。

最後,網絡的規模主要受限於當前GPU的可用內存和我們願意容忍的訓練時間。我們的網絡在兩塊GTX 580 3GB GPU上訓練需要五到六天。我們所有的實驗表明,等更快的GPU和更大的數據集可用以後,我們的結果就可以輕而易舉地得到改進。

2 數據集

ImageNet是一個擁有超過1500萬張帶標籤的高分辨率圖像的數據集,這些圖像分屬於大概22,000個類別。這些圖像是從網上收集,並使用Amazon Mechanical Turk羣衆外包工具來人工貼標籤的。作爲PASCAL視覺目標挑戰賽的一部分,一年一度的ImageNet大型視覺識別挑戰賽(ILSVRC)從2010年開始就已經在舉辦了。ILSVRC使用ImageNet的一個子集,分爲1000種類別,每種類別中都有大約1000張圖像。總之,大約有120萬張訓練圖像,50,000張驗證圖像和150,000張測試圖像。

ILSVRC-2010是ILSVRC中能獲得測試集標籤的唯一版本,因此這也就是我們完成大部分實驗的版本。由於我們也在ILSVRC-2012上輸入了模型,在第6節中我們也會報告這個數據集版本上的結果,該版本上的測試集標籤難以獲取。在ImageNet上,習慣性地報告兩個誤差率:top-1和top-5,其中top-5誤差率是指測試圖像上正確標籤不屬於被模型認爲是最有可能的五個標籤的百分比。

ImageNet由各種分辨率的圖像組成,而我們的系統需要一個恆定的輸入維數。因此,我們下采樣這些圖像到固定的分辨率256×256。給定一張矩形圖像,我們首先重新縮放圖像,使得短邊長度爲256,然後從得到的圖像中裁剪出中央256×256的一片。除了遍歷訓練集從每個像素中減去平均活躍度外,我們沒有以任何其他方式預處理圖像。所以我們用這些像素(中央那一片的)原始RGB值訓練網絡。

3 體系結構

圖2總結了我們網絡的體系結構。它包含八個學習層——五個卷積層和三個全連接層。下面,我們將介紹該網絡體系結構的一些新穎獨特的功能。3.1-3.4是根據我們對於其重要性的估計來排序的,最重要的排在最前面。

3.1 ReLU非線性

將神經元的輸出f,作爲其輸入x的函數,對其建模的標準方法是用  或者  。就梯度下降的訓練時間而言,這些飽和非線性函數比不飽和非線性函數  要慢得多。我們跟隨Nair和Hinton[20]稱這種不飽和非線性的神經元爲修正線性單元(ReLU)。訓練帶ReLUs的深度卷積神經網絡比帶tanh單元的同等網絡要快好幾倍。如圖1所示,它顯示出對於特定的四層卷積網絡,在CIFAR-10數據集上達到25%的訓練誤差所需的迭代次數。此圖顯示,如果我們使用了傳統的飽和神經元模型,就不能用如此大的神經網絡來對該工作完成實驗。


圖1:帶ReLU的四層卷積神經網絡(實線)在CIFAR-10數據集上達到25%訓練誤差率要比帶tanh神經元的同等網絡(虛線)快六倍。每個網絡的學習速率是獨立選取的,以使得訓練儘可能快。沒有使用任何形式的正則化。這裏演示的效果因網絡結構的不同而不同,但帶ReLU的網絡學習始終比帶飽和神經元的同等網絡快好幾倍。

我們不是第一個在CNN中考慮傳統神經元模型的替代品的。例如,Jarrett等人[11]聲稱,非線性函數  由於其後隨局部average pooling的對比度歸一化的類型,它在Caltech-101數據集上工作得特別好。然而,在該數據集上的主要關注點是防止過擬合,所以他們正在觀察的效果不同於我們報告的爲擬合訓練集使用ReLU時的加速能力。更快的學習對大型數據集上訓練的大型模型的性能有很大影響。

3.2 在多個GPU上訓練

單個GTX 580 GPU只有3GB內存,這限制了可以在其上訓練的網絡的最大規模。事實證明,120萬個訓練樣本才足以訓練網絡,這網絡太大了,不適合在一個GPU上訓練。因此我們將網絡分佈在兩個GPU上。目前的GPU特別適合跨GPU並行化,因爲它們能夠直接從另一個GPU的內存中讀出和寫入,不需要通過主機內存。我們採用的並行方案基本上是在每個GPU中放置一半核(或神經元),還有一個額外的技巧:GPU間的通訊只在某些層進行。這就是說,例如,第3層的核需要從第2層中所有核映射輸入。然而,第4層的核只需要從第3層中位於同一GPU的那些核映射輸入。選擇連接模式是一個交叉驗證的問題,但是這讓我們可以精確地調整通信量,直到它的計算量在可接受的部分。由此產生的體系結構有點類似於Ciresan等人提出的“柱狀”CNN的體系結構[5],不同之處在於我們的縱列不是獨立的(見圖2)。與在一個GPU上訓練的每個卷積層有一半核的網絡比較,該方案將我們的top-1與top-5誤差率分別減少了1.7%與1.2%。訓練雙GPU網絡比訓練單GPU網絡花費的時間略少一些 (實際上單GPU網絡與雙GPU網絡在最後的卷積層有着相同數量的核。這是因爲大多數網絡的參數在第一個全連接層,這需要上一個卷積層作爲輸入。所以,爲了使兩個網絡有數目大致相同的參數,我們不把最後一個卷積層大小減半(也不把它後面跟隨的全連接層減半)。因此,這種比較關係更偏向有利於單GPU網絡,因爲它比雙GPU網絡的“一半大小”要大)。

3.3 局部響應歸一化

ReLU具有所希望的特性,它們不需要輸入歸一化來防止它們達到飽和。如果至少有一些訓練樣例對ReLU產生了正輸入,學習就將發生在那個神經元。可是,我們仍然發現下列局部歸一化方案有助於一般化。用  表示點  處通過應用核 計算出的神經元激活度,然後應用ReLU非線性,響應歸一化活性 

由下式給出


 其中求和覆蓋了n個“相鄰的”位於相同空間位置的核映射,N是該層中的核總數。核映射的順序當然是任意的,且在訓練開始前就確定。受到在真實神經元中發現的類型啓發,這種響應歸一化實現了一種側向抑制,在使用不同覈計算神經元輸出的過程中創造對大激活度的競爭。常數k,n,α和β是超參數,它們的值要用驗證集來確定;我們使用 

。我們在某些層應用ReLU歸一化後再應用這種歸一化(見3.5節)。

該方案與Jarrett等人的局部對比度歸一化方案具有一些相似之處[11],但我們的方案更正確的命名爲“亮度歸一化”,因爲我們不減去平均活躍度。響應歸一化將我們的top-1與top-5誤差率分別減少了1.4%與1.2%。我們也驗證了該方案在CIFAR-10數據集上的有效性:四層CNN不帶歸一化時的測試誤差率是13%,帶歸一化時是11%(由於版面有限我們不能詳細描述該網絡,但這裏提供的代碼和參數文件對其有精確詳細的說明: http://code.google.com/p/cuda-convnet/ )。

3.4 重疊Pooling

CNN中的Pooling層總結了同一核映射中鄰近神經元組的輸出。傳統上,通過鄰接pooling單元總結的鄰近關係不重疊(例如,[17,11,4])。更準確地說,一個pooling層可以被認爲是由間隔s像素的pooling單元網格組成,每個網格總結出一個z×z大小的鄰近關係,都位於pooling單元的中心位置。若設s=z,我們得到傳統的局部pooling,正如常用於CNN中的那樣。若設s

3.5 總體結構

現在,我們已經準備好描述CNN的總體結構。如圖2所示,該網絡包括八個帶權層;前五層是卷積層,剩下三層是全連接層。最後一個全連接層的輸出被送到一個1000-way的softmax層,其產生一個覆蓋1000類標籤的分佈。我們的網絡使得多分類的Logistic迴歸目標最大化,這相當於最大化了預測分佈下訓練樣本中正確標籤的對數概率平均值。


圖2:CNN體系結構示意圖,明確顯示了兩個GPU之間的職責劃分。一個GPU運行圖中頂部的層次部分,而另一個GPU運行圖中底部的層次部分。GPU之間僅在某些層互相通信。該網絡的輸入是150,528維的,且該網絡剩下各層的神經元數分別爲253,440–186,624–64,896–64,896–43,264–4096–4096–1000。

第二、第四和第五個卷積層的核只連接到前一個卷積層也位於同一GPU中的那些核映射上(見圖2)。第三個卷積層的核被連接到第二個卷積層中的所有核映射上。全連接層中的神經元被連接到前一層中所有的神經元上。響應歸一化層跟在第一、第二個卷積層後面。3.4節中描述的那種最大Pooling層,跟在響應歸一化層以及第五個卷積層之後。ReLU非線性應用於每個卷積層及全連接層的輸出。第一個卷積層利用96個大小爲11×11×3、步長爲4個像素(這是同一核映射中鄰近神經元的感受野中心之間的距離)的核,來對大小爲224×224×3的輸入圖像進行濾波。第二個卷積層需要將第一個卷積層的(響應歸一化及池化的)輸出作爲自己的輸入,且利用256個大小爲5×5×48的核對其進行濾波。第三、第四和第五個卷積層彼此相連,沒有任何介於中間的pooling層與歸一化層。第三個卷積層有384個大小爲3×3×256的核被連接到第二個卷積層的(歸一化的、池化的)輸出。第四個卷積層擁有384個大小爲3×3×192的核,第五個卷積層擁有256個大小爲3×3×192的核。全連接層都各有4096個神經元。

4 減少過擬合

我們的神經網絡結構有6000萬個參數。雖然ILSVRC的1000個類別使得每個訓練樣本強加10比特約束到從圖像到標籤的映射上,這顯示出要學習如此多的參數而不帶相當大的過擬合,這些類別是不夠的。下面,我們描述減少過擬合的兩種主要方法。

4.1 數據增強

減少圖像數據過擬合最簡單最常用的方法,是使用標籤-保留轉換,人爲地擴大數據集(例如,[25,4,5])。我們使用數據增強的兩種不同形式,這兩種形式都允許轉換圖像用很少的計算量從原始圖像中產生,所以轉換圖像不需要存儲在磁盤上。在我們的實現中,轉換圖像是由CPU上的Python代碼生成的,而GPU是在之前那一批圖像上訓練的。所以這些數據增強方案實際上是計算自由。

數據增強的第一種形式由生成圖像轉化和水平反射組成。爲此,我們從256×256的圖像中提取隨機的224×224的碎片(還有它們的水平反射),並在這些提取的碎片上訓練我們的網絡(這就是圖2中輸入圖像是224×224×3維的原因)。這使得我們的訓練集規模擴大了2048倍,但是由此產生的訓練樣例一定高度地相互依賴。如果沒有這個方案,我們的網絡會有大量的過擬合,這將迫使我們使用小得多的網絡。在測試時,該網絡通過提取五個224×224的碎片(四個邊角碎片和中心碎片)連同它們的水平反射(因此總共是十個碎片)做出了預測,並在這十個碎片上來平均該網絡的softmax層做出的預測。

數據增強的第二種形式包含改變訓練圖像中RGB通道的強度。具體來說,我們在遍及整個ImageNet訓練集的RGB像素值集合中執行PCA。對於每個訓練圖像,我們成倍增加已有主成分,比例大小爲對應特徵值乘以一個從均值爲0,標準差爲0.1的高斯分佈中提取的隨機變量。這樣一來,對於每個RGB圖像像素 

,我們增加下面這項:

 其中  與  分別是RGB像素值的3×3協方差矩陣的第i個特徵向量與特徵值,  是前面提到的隨機變量。每個 

對於特定訓練圖像的全部像素只提取一次,直到那個圖像再次被用於訓練,在那時它被重新提取。這個方案大致抓住了自然圖像的一個重要屬性,即,光照強度與顏色是變化的,而對象識別是不變的。該方案將top-1誤差率減少了1%以上。

4.2 Dropout

結合許多不同模型的預測是一種非常成功的減少測試誤差的方式[1,3],但它先前訓練花了好幾天時間,似乎對於大型神經網絡來說太過昂貴。然而,有一個非常有效的模型組合版本,它在訓練中只花費兩倍於單模型的時間。最近推出的叫做“dropout”的技術[10],它做的就是以0.5的概率將每個隱層神經元的輸出設置爲零。以這種方式“dropped out”的神經元既不利於前向傳播,也不參與反向傳播。所以每次提出一個輸入,該神經網絡就嘗試一個不同的結構,但是所有這些結構之間共享權重。因爲神經元不能依賴於其他特定神經元而存在,所以這種技術降低了神經元複雜的互適應關係。正因如此,要被迫學習更爲魯棒的特徵,這些特徵在結合其他神經元的一些不同隨機子集時有用。在測試時,我們將所有神經元的輸出都僅僅只乘以0.5,對於獲取指數級dropout網絡產生的預測分佈的幾何平均值,這是一個合理的近似方法。我們在圖2中前兩個全連接層使用dropout。如果沒有dropout,我們的網絡會表現出大量的過擬合。dropout使收斂所需的迭代次數大致增加了一倍。

5 學習的詳細過程

我們使用隨機梯度下降法和一批大小爲128、動力爲0.9、權重衰減爲0.0005的樣例來訓練我們的網絡。我們發現,這少量的權重衰減對於模型學習是重要的。換句話說,這裏的權重衰減不僅僅是一個正則化矩陣:它減少了模型的訓練誤差。對於權重w的更新規則爲


 其中i是迭代指數,v是動力變量,ε是學習率,  是目標關於w、對  求值的導數在第i批樣例 

上的平均值。

我們用一個均值爲0、標準差爲0.01的高斯分佈初始化了每一層的權重。我們用常數1初始化了第二、第四和第五個卷積層以及全連接隱層的神經元偏差。該初始化通過提供帶正輸入的ReLU來加速學習的初級階段。我們在其餘層用常數0初始化神經元偏差。

我們對於所有層都使用了相等的學習率,這是在整個訓練過程中手動調整的。我們遵循的啓發式是,當驗證誤差率在當前學習率下不再提高時,就將學習率除以10。學習率初始化爲0.01,在終止前降低三次。我們訓練該網絡時大致將這120萬張圖像的訓練集循環了90次,在兩個NVIDIA GTX 580 3GB GPU上花了五到六天。

6 結果

我們在ILSVRC-2010測試集上的結果總結於表1中。我們的網絡實現了top-1測試集誤差率 37.5% ,top-5測試集誤差率 17.0% (若沒有如4.1節所述的在十個碎片上平均預測,誤差率是39.0%與18.3%)。ILSVRC-2010大賽中取得的最好表現是47.1%與28.2%,它的方法是用不同特徵訓練六個sparse-coding模型,對這些模型產生的預測求平均值[2],自那以後公佈的最好結果是45.7%與25.7%,它的方法是從兩類密集採樣的特徵中計算出費舍爾向量(FV),用費舍爾向量訓練兩個分類器,再對這兩個分類器的預測求平均值[24]。


表1:ILSVRC-2010測試集上的結果比較。斜體字是他人取得的最好結果。

我們也在ILSVRC-2012大賽中輸入了我們的模型,並在表2中報告結果。由於ILSVRC-2012測試集標籤是不公開的,我們不能對試過的所有模型都報告測試誤差率。在本段的其餘部分,我們將驗證誤差率與測試誤差率互換,因爲根據我們的經驗,它們之間相差不超過0.1%(見表2)。本文所描述的CNN實現了18.2%的top-5誤差率。對五個相似CNN的預測求平均值得出了16.4%的誤差率。訓練一個在最末pooling層之後還有一個額外的第六個卷積層的CNN,用以對整個ImageNet 2011年秋季發佈的圖像(15M張圖像,22K種類別)進行分類,然後在ILSVRC-2012上“微調”它,這種方法得出了16.6%的誤差率。用在整個2011年秋季發佈的圖像上預訓練的兩個CNN,結合先前提到的五個CNN,再對這七個CNN作出的預測求平均值,這種方法得出了 15.3% 的誤差率。比賽中的第二名實現了26.2%的誤差率,用的方法是從不同類密集採樣的特徵中計算FV,用FV訓練幾個分類器,再對這幾個分類器的預測求平均值[7]。


表2:在ILSVRC-2012驗證集與測試集上的誤差率比較。斜體字是由他人取得的最好結果。帶星號的模型是經過“預訓練”以對整個ImageNet 2011年秋季發佈的圖像集進行分類的。詳見第6節。

最後,我們還報告在ImageNet 2009年秋季版本上的誤差率,該版本有10,184種類別與890萬張圖像。在這個數據集上,我們按照文獻慣例,用一半圖像來訓練,用另一半圖像來測試。由於沒有確定的測試集,我們的劃分必然不同於以前的作者使用的劃分,但這並不會明顯地影響到結果。我們在該數據集上的top-1誤差率和top-5誤差率分別爲67.4%和40.9%,這是通過上述的網絡得到的,但還有個附加條件,第六個卷積層接在最後一個pooling層之後。該數據集上公佈的最佳結果是78.1%和60.9%[19]。

6.1 定性評價

圖3顯示了通過該網絡的兩個數據連接層學習到的卷積核。該網絡已經學習到各種各樣的頻率與方向選擇核,以及各種顏色的斑點。注意兩個GPU顯現出的特性,3.5節中描述了一個結果是限制連接。GPU1上的核大多數顏色不明確,而GPU2上的核大多數顏色明確。這種特性在每一次運行中都會出現,且獨立於所有特定的隨機權重初始化(以GPU的重新編數爲模)。


圖3:通過 的輸入圖像上第一個卷積層學習到的96個大小爲 的卷積核。頂部的48個核是從GPU1上學到的,底部的48個核是從GPU2上學到的。詳見6.1節。

在圖4左邊面板上,通過計算該網絡在八個測試圖像上的top-5預測,我們定性地判斷它學到了什麼。注意到即使是偏離中心的物體,比如左上角的一小塊,也可以被網絡識別。大多數的top-5標籤似乎合情合理。例如,只有其他類型的貓科動物被認爲是對豹貌似合理的標籤。在某些情況下(鐵柵、櫻桃),對於圖片意圖的焦點存在歧義。


圖4:(左圖)八個ILSVRC-2010測試圖像,以及被我們的模型認爲最有可能的五個標籤。正確的標籤寫在每個圖像下面,正確標籤的概率也以紅色條予以顯示(若它在前5之內)。(右圖)第一列是五個ILSVRC-2010測試圖像。其餘列顯示了六個訓練圖像,它們在最後的隱層產生的特徵向量與測試圖像的特徵向量有最小的歐氏距離。

探測網絡的視覺知識有另一種方法,就是考慮由位於最後的4096維隱層上的圖像引起的特徵激活。如果兩個圖像用小歐氏分離產生了特徵激活向量,我們可以說,在神經網絡的更高級別上認爲它們是相似的。圖4顯示了測試集中的五個圖像,以及訓練集中根據這一標準與其中每一個最相似的六個圖像。注意,在像素級別,檢索到的訓練圖像一般不會接近第一列中的查詢圖像。例如,檢索到的狗和大象表現出各種各樣的姿勢。我們會在補充材料裏給出更多測試圖像的結果。通過使用兩個4096維實值向量之間的歐氏距離來計算相似性是低效的,但它可以通過訓練一個自動編碼器將這些向量壓縮爲短的二進制代碼來變得高效。這應該會產生一個比應用自動編碼器到原始像素要好得多的圖像檢索方法[14],它不利用圖像標籤,此後還有一種用相似邊緣圖案來檢索圖像的傾向,而不論它們在語義上是否相似。

7 討論

我們的研究結果表明,大型深度卷積神經網絡在一個非常具有挑戰性的數據集上使用純粹的監督學習,能夠達到破紀錄的結果。值得注意的是,如果有一個卷積層被移除,我們的網絡性能就會降低。例如,除去任何中間層都將導致該網絡的top-1性能有2%的損失。所以該層次深度對於達到我們的結果確實是重要的。爲了簡化實驗,我們沒有使用任何無監督的預訓練,即使我們預計它將帶來幫助,特別是我們可以獲得足夠的計算能力來顯著地擴大網絡規模,而不帶來標記數據量的相應增加。到目前爲止,我們的結果有所改善,因爲我們已經讓網絡更大,訓練時間更久,但是爲了匹配人類視覺系統的infero-temporal路徑,我們仍然有更高的數量級要去達到。最終我們想要在視頻序列上使用非常大型的深度卷積網絡,其中的瞬時結構會提供非常有用的信息,這些信息在靜態圖像中丟失了或極不明顯。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章