深度學習論文翻譯解析(二):An End-to-End Trainable Neural Network for Image-based Sequence Recognition and Its Application to Scene Text Recognition


論文標題:An End-to-End Trainable Neural Network for Image-based Sequence Recognition and Its Application to Scene Text Recognition

論文作者: Baoguang Shi, Xiang Bai and Cong Yao

論文代碼的下載地址:http://mc.eistar.net/~xbai/CRNN/crnn_code.zip

論文地址:https://arxiv.org/pdf/1507.05717.pdf

聲明:小編翻譯論文僅為學習,如有侵權請聯系小編刪除博文,謝謝!

            小編是一個機器學習初學者,打算認真研究論文,但是英文水平有限,所以論文翻譯中用到了Google,並自己逐句檢查過,但還是會有顯得晦澀的地方,如有語法/專業名詞翻譯錯誤,還請見諒,並歡迎及時指出。

一:論文的思路和方法

(1)問題范疇:單詞識別

(2)CNN層:使用標准CNN提取圖像特征,利用Map-to-Swquence表示成特征向量;

(3)RNN層:使用雙向LSTM識別特征向量,得到每列特征的概率分布;

(4)Transcript層:利用CTC和前向后向算法求解最優的label序列

二:論文亮點和創新點

(1)端到端可訓練(把CNN和RNN聯合訓練)

(2)任意長度的輸入(圖像寬度任意,單詞長度任意)

(3)訓練集無需有字符的標定

(4)帶字典和不帶字典的庫(樣本)都可以使用

(5)性能好,而且模型小(參數小)

 三:論文翻譯

摘要

  基於圖像的序列識別一直是計算機視覺中長期存在的研究課題。在本文中,我們研究了場景文本識別的問題,這是基於圖像的序列識別中最重要和最具有挑戰性的任務之一。提出了一種將特征提取,序列建模和轉錄整合到統一框架中的新型神經網絡架構。與以前的場景文本識別系統相比,所提出的架構具有四個不同的特性:(1)與大多數現有的組件需要單獨訓練和協調的算法相比,它是端對端訓練的。(2)它自然地處理任意長度的序列,不涉及字符分割或者水平尺度歸一化。(3)它不僅限於任何預定義的詞匯,並且在無詞典和基於詞典的場景文本識別任務中都取得了顯著的表現。(4)它產生了一個有效而小得多的模型,這對於現實世界的應用場景更為實用。在包括IIIT-5K,Strsst View Text和ICDAR數據集在內的標准基數據集上的實驗證明了提出的算法比現有的技術更有優勢。此外,提出的算法在基於圖像的音樂樂譜識別任務中表現良好,這顯然證實了它的泛化性。

1.引言

  最近,社區已經看到神經網絡的強大復興,這主要受到深度神經網絡模型。特別是深度卷積神經網絡模型(DCNN)在各種視覺任務中的巨大成功的推動。然而,最近大多數與深度神經網絡相關的工作主要致力於檢測或分類對象類別[12,25]。在本文中,我們關注計算機視覺中的一個經典問題:基於圖像的序列識別。在顯示世界中,穩定的視覺對象,如場景文字,手寫字符和樂譜,往往以序列的形式出現,而不是孤立的出現。與一般的對象識別不同,識別這樣的類序列對象通常需要系統預測yixilduix標簽,而不是單個標簽。因此,可以自然地將這樣的對象的識別作為序列識別問題。類序列對象的另一個獨特之處在與它們的長度可能會有很大變化。例如,英文單詞可以由兩個字符組成,如“OK”,或者15個字符組成,如“congratulation”。因此,最流行的深度模型像DCNN[25,26]不能直接應用於序列預測,因為DCNN模型通常對具有固定維度的輸入和輸出進行操作,因此不能產生可變長度的標簽序列。

  已經針對特定的類似序列的對象(例如場景文本)進行了一些嘗試來解決該問題。例如[35,8]中的算法首先檢測單個字符,然后利用DCNN模型識別這些檢測到的字符,並使用標注的字符圖像進行訓練。這些方法通常需要訓練強字符檢測器,以便從原始單詞圖像中准確地檢測和裁剪每個字符。一些其他方法(如[22])將場景文本識別視為圖像分類問題,並未每個英文單詞(總共9萬個詞)分配一個類標簽。結果是一個大的訓練模型中有很多類,這很難泛化到其他類型的類序列對象,如中文文本,音樂配樂等,因為這種序列的基本組合數目可能大於100萬。總之,目前基於DCNN的系統不能直接用於基於圖像的序列識別。

  循環神經網絡(RNN)模型時深度神經網絡家族中另一個重要分支,主要是設計來處理序列,RNN的優點之一是在訓練和測試中不需要序列目標圖像中每個元素的位置。然而,將輸入目標圖像轉化成圖像特征序列的預處理步驟通常是必須的。例如:Draves等[16]從手寫文本中提取一系列幾何或圖像特征,而Su和Lu[33]將字符圖像轉換成序列HOG特征。預處理步驟獨立於流程中的后續組件,因此基於RNN的現有系統不能以端到端的方式進行訓練和優化。

  一些不是基於神經網絡的傳統場景文本識別方法也為這一領域帶來了有見地的想法和新穎的表現。例如,Almazan等人[5]和Rodriguez-Serrano等[30]提出將單詞圖像和文本字符串嵌入到公共向量子空間中,並將詞識別轉化為檢索問題。Yao等人[36]和Gordo等人[14]使用中層特征進行場景文本識別。雖然在標准基准數據及上取得了有效的性能,但是前面的基於神經網絡的算法[8,22]以及本文提出的方法通常優於這些方法。

  本文的主要共享是一種新穎的神經網絡模型,其網絡架構設計專門用於識別圖像中的類序列對象。所提出的神經網絡模型被稱為卷積神經網絡(CRNN ),因為它是DCNN和RNN的組合。對於類序列對象,CRNN與傳統神經網絡模型相比具有一些獨特的優點:(1)可以直接從序列標簽(例如單詞)學習,不需要詳細的標注(例如字符);(2)直接從圖形數據學習信息表示時具有與DCNN相同的性質,既不需要手工特征也不需要預處理步驟,包括二值化/分割,組件定位等;(3)具有與RNN相同的性質,能夠產生一系列的標簽;(4)對類序列對象的長度無約束,只需要在訓練階段和測試階段對高度進行歸一化;(5)與現有技術相比,它在場景文本(字識別)上獲得更好或更具競爭力的表現[23,8]。(6)它比標准DCNN模型包含的參數要少得多,占用更少的存儲空間。

  圖1。網絡架構。架構包括三部分:1) 卷積層,從輸入圖像中提取特征序列;2) 循環層,預測每一幀的標簽分布;3) 轉錄層,將每一幀的預測變為最終的標簽序列。

 

2. 提出的網絡架構

如圖1所示,CRNN的網絡架構由三部分組成,包括卷積層,循環層和轉錄層,由下到上。

  在CRNN的底部,卷積層自動從每個輸入圖像中提取特征序列。在卷積網絡之上,構建了一個循環網絡,用於對卷積層輸出的特征序列的每一幀進行預測。采用CRNN頂部的轉錄層將循環層的每幀預測轉化為標簽序列。雖然CRNN由不同類型的網絡架構(如CNN和RNN)組成,但可以通過一個損失函數進行聯合訓練。

 2.1 特征序列提取

  在CRNN模型中,通過采用標准CNN模型(去除全連接層)中的卷積層和最大池化層來構造卷積層的組件。這樣的組件用於從輸入圖像中提取序列特征表示。在進入網絡之前,所有的圖像需要縮放到相同的高度。然后從卷積層組件產生的特征圖中提取特征向量序列,這些特征向量作為循環層的輸入。具體的,特征序列的每一個特征向量在特征圖中提取特征向量序列,這些特征向量序列作為循環層的輸入。具體地,特征序列的每一個特征向量在特征圖上按列從左到右生成。這意味着第i個特征向量是所有特征圖第i列的連接。在我們設置中每列的寬度固定為單個像素。

  由於卷積層,最大池化層和元素激活函數在局部區域上執行,因此他們是平移不變的。因此,特征圖的每列對應於原始圖像的一個矩形區域(稱為感受野),並且這些矩形區域與特征圖上從左到右的相應列具有相同的順序。如圖2所示,特征序列中的每個向量關聯一個感受野,並且可以被認為是該區域的圖像描述符。

  圖2 感受野,提取的特征序列中的每一個向量關聯輸入圖像的一個感受野,可以認為是該區域的特征向量、

  魯棒的,豐富的和可訓練的深度卷積特征已經被廣泛應用於各種視覺識別任務[25,12]。一些以前的方法已經使用CNN來學習諸如場景文本之類的類序列對象的魯棒表示[22]。然而,這些方法通常通過CNN提取整個圖像的整體表示,然后收集局部深度特征來識別類序列對象的每個分量。由於CNN要求將輸入圖像縮放到固定尺寸,以滿足其固定的輸入尺寸,因為它們的長度變化很大,因此不適合類序列對象。在CRNN中,我們將深度特征傳遞到序列表示中,以便對類序列對象的長度變化保持不變。

2.2 序列標注

  一個深度雙向循環神經網絡是建立在卷積層的頂部,作為循環層。循環層預測特征序列循環層的優點是三重的。首先,RNN具有很強的捕獲序列內上下文信息的能力。對於基於圖像的序列識別使用上下文提示比獨立處理每個符號更穩定且更有幫助。以場景文本識別為例,寬字符可能需要一些連續的幀來完全描述(參見圖2)。此外,一些模糊的字符在觀察其上下文時更容易區分,例如,通過對比字符高度更容易識別“il”而不是分別識別它們中的每一個。其次,RNN可以將誤差差值反向傳播到其輸入,即卷積層,從而允許我們在統一的網絡中共同訓練循環層和卷積層。第三,RNN能夠從頭到尾對任意長度的序列進行操作。

   圖3。(a) 基本的LSTM單元的結構。LSTM包括單元模塊和三個門,即輸入門,輸出門和遺忘門。(b)我們論文中使用的深度雙向LSTM結構。合並前向(從左到右)和后向(從右到左)LSTM的結果到雙向LSTM中。在深度雙向LSTM中堆疊多個雙向LSTM結果。

  

  LSTM是定向的,它只使用過去的上下文。然后,在基於圖像的序列中,兩個方向的上下文是相互有用且互補的。因此,我們循環[17],將兩個LSTM,一個向前和一個向后組合到一個雙向LSTM中。此外,可以堆疊多個雙向LSTM,得到如圖3.b所示的深雙向LSTM。深層結構允許比淺層抽象更高層次的抽象,並且在語音識別任務中取得了顯著的性能改進[17]。

  在循環層中,誤差在圖3.b所示箭頭的相反方向傳播,即反向傳播時間(BPTT)。在循環層的地步,傳播差異的序列被連接成映射,將特征映射轉化為特征序列的操作進行反轉並反饋到卷積層。實際上,我們創建 了一個稱為“Map-to-Sequence”的自定義網絡層,作為卷積層和循環層之間的橋梁。

2.3  轉錄

  轉錄是將RNN所做的每幀預測轉換成標簽序列的過程。數學上,轉錄是根據每幀預測找到具有最高概率的標簽序列。在實踐中,存在兩種轉錄模式,即無詞典轉錄和基於詞典的轉錄。詞典是一組標簽序列,預測受拼寫檢查字典約束。在無詞典模式中,預測時沒有任何詞典。在基於詞典的模式中,通過選擇具有最高概率的標簽序列進行預測。

 

2.3.1  標簽序列的概率

   我們采用Graves等人[15]提出的聯接時間分類(CTC)層中定義的條件概率。按照每幀預測對標簽序列l定義概率,並忽略l中每個標簽所在的位置。因此,當我們使用這種概率的負對數似然作為訓練網絡的目標函數時,我們只需要圖像及其相應的標簽序列,避免了標注單個字符位置的勞動。

2.3.2 無字典轉錄

2.3.3 基於詞典的轉錄

 

 2.4 網絡訓練

 

  網絡使用隨機梯度下降(SGD)進行訓練。梯度由反向傳播算法計算。特別地,在轉錄層中,如[15]所述,誤差使用前向算法進行反向傳播。在循環層中,應用隨時間反向傳播(BPTT)來計算誤差。

  為了優化,我們使用ADADELTA[37]自動計算每維的學習率。與傳統的動量[31]方法相比,ADADELTA不需要手動設置學習率。更重要的是,我們發現使用ADADELTA的優化收斂速度比動量方法快。

3 實驗

   為了評估提出的CRNN模型的有效性,我們在場景文本識別和樂譜識別的標准基准數據集上進行了實驗,這些都是具有挑戰性的視覺任務。數據集和訓練測試的設置見3.1小節,場景文本圖像中CRNN的詳細設置見3.2小節,綜合比較的結果在3.3小節報告。為了進一步證明CRNN的泛化性,在3.4小節我們在樂譜識別任務上驗證了提出的算法。

3.1 數據集

  對於場景文本識別的所有實驗,我們使用Jaderberg等人[20]發布的合成數據集(Synth)作為訓練數據。數據集包含8百萬訓練圖像及其對應的實際單詞。這樣的圖像由合成文本引擎生成並且是非常現實的。我們的網絡在合成數據上進行了一次訓練,並在所有其它現實世界的測試數據集上進行了測試,而沒有在其訓練數據上進行任何微調。即使CRNN模型是在純合成文本數據上訓練,但它在標准文本識別基准數據集的真實圖像上工作良好。

  有四個流行的基准數據集用於場景文本識別的性能評估,即ICDAR 2003(IC03),ICDAR 2013(IC13),IIIT 5k-word(IIIT5k)和Street View Text (SVT)。

   IC03[27]測試數據集包含251個具有標記文本邊界框的場景圖像。王等人[34],我們忽略包含非字母數字字符或少於三個字符的圖像,並獲得具有860個裁剪的文本圖像的測試集。每張測試圖像與由Wang等人[34]定義的50詞的詞典相關聯。通過組合所有的每張圖像詞匯構建完整的詞典。此外,我們使用由Hunspell拼寫檢查字典[1]中的單詞組成的5萬個詞的詞典。

  IC13[24]測試數據集繼承了IC03中的大部分數據。它包含1015個實際的裁剪單詞圖像。

  IIIT5k[28]包含從互聯網收集的3000張裁剪的詞測試圖像。每張圖像關聯一個50詞的詞典和一個1000詞的詞典。

  SVT[34]測試數據集由從Google街景視圖收集的249張街景圖像組成。從它們中裁剪出了647張詞圖像。每張單詞圖像都有一個由Wang等人[34]定義的50個詞的詞典。

  表1。網絡配置總結。第一行是頂層。ksp分別表示核大小,步長和填充大小。

3.2 實現細節

  在實驗中我們使用的網絡配置總結在表1中。卷積層的架構是基於VGG-VeryDeep的架構[32]。為了使其適用於識別英文文本,對其進行了調整。在第3和第4個最大池化層中,我們采用1×2大小的矩形池化窗口而不是傳統的平方形。這種調整產生寬度較大的特征圖,因此具有更長的特征序列。例如,包含10個字符的圖像通常為大小為100×32,可以從其生成25幀的特征序列。這個長度超過了大多數英文單詞的長度。最重要的是,矩形池窗口產生矩形感受野(如圖2所示),這有助於識別一些具有窄形狀的字符,例如il

  網絡不僅有深度卷積層,而且還有循環層。眾所周知兩者都難以訓練。我們發現批歸一化[19]技術對於訓練這種深度網絡非常有用。分別在第5和第6卷積層之后插入兩個批歸一化層。使用批歸一化層訓練過程大大加快。

  我們在Torch7[10]框架內實現了網絡,使用定制實現的LSTM單元(Torch7/CUDA),轉錄層(C++)和BK樹數據結構(C++)。實驗在具有2.50 GHz Intel(R)Xeon E5-2609 CPU,64GB RAM和NVIDIA(R)Tesla(TM) K40 GPU的工作站上進行。網絡用ADADELTA訓練,將參數ρ設置為0.9。在訓練期間,所有圖像都被縮放為100×32,以加快訓練過程。訓練過程大約需要50個小時才能達到收斂。測試圖像縮放的高度為32。寬度與高度成比例地縮放,但至少為100像素。平均測試時間為0.16s/樣本,在IC03上測得的,沒有詞典。近似詞典搜索應用於IC03的50k詞典,參數δ設置為3。測試每個樣本平均花費0.53s。

3.3 比較評估

  提出的CRNN模型在上述四個公共數據集上獲得的所有識別精度以及最近的最新技術,包括基於深度模型[23,22,21]的方法如表2所示。

  在有約束詞典的情況中,我們的方法始終優於大多數最新的方法,並且平均打敗了[22]中提出的最佳文本閱讀器。具體來說,與[22]相比,我們在IIIT5k和SVT上獲得了卓越的性能,僅在IC03上通過“Full”詞典實現了較低性能。請注意,[22]中的模型是在特定字典上訓練的,即每個單詞都與一個類標簽相關聯。與[22]不同,CRNN不限於識別已知字典中的單詞,並且能夠處理隨機字符串(例如電話號碼),句子或其他諸如中文單詞的腳本。 因此,CRNN的結果在所有測試數據集上都具有競爭力。

  在無約束詞典的情況下,我們的方法在SVT上仍取得了最佳性能,但在IC03和IC13上仍然落后於一些方法[8,22]。注意,表2的“none”列中的空白表示這種方法不能應用於沒有詞典的識別,或者在無約束的情況下不能報告識別精度。我們的方法只使用具有單詞級標簽的合成文本作為訓練數據,與PhotoOCR[8]非常不同,后者使用790萬個具有字符級標注的真實單詞圖像進行訓練。[22]中報告的最佳性能是在無約束詞典的情況下,受益於它的大字典,然而,它不是前面提到的嚴格的無約束詞典模型。在這個意義上,我們在無限制詞典表中的結果仍然是有前途的。


圖4。藍線圖:識別准確率作為δδ的函數。紅條:每個樣本的詞典搜索時間。在IC03數據集上使用50k詞典進行的測試。

 

  為了進一步了解與其它文本識別方法相比,所提出算法的優點,我們提供了在一些特性上的綜合比較,這些特性名稱為E2E Train,Conv Ftrs,CharGT-Free,Unconstrained和Model Size,如表3所示。

   E2E Train:這一列是為了顯示某種文字閱讀模型是否可以進行端到端的訓練,無需任何預處理或經過幾個分離的步驟,這表明這種方法對於訓練是優雅且干凈的。從表3可以看出,只有基於深度神經網絡的模型,包括[22,21]以及CRNN具有這種性質。

  Conv Ftrs:這一列用來表明一個方法是否使用從訓練圖像直接學習到的卷積特征或手動特征作為基本的表示。

  CharGT-Free:這一列用來表明字符級標注對於訓練模型是否是必要的。由於CRNN的輸入和輸出標簽是序列,因此字符級標注是不必要的。

  Unconstrained:這一列用來表明訓練模型是否受限於一個特定的字典,是否不能處理字典之外的單詞或隨機序列。注意盡管最近通過標簽嵌入[5, 14]和增強學習[22]學習到的模型取得了非常有競爭力的性能,但它們受限於一個特定的字典。

 

  Model Size:這一列報告了學習模型的存儲空間。在CRNN中,所有的層有權重共享連接,不需要全連接層。因此,CRNN的參數數量遠小於CNN變體[22,21]所得到的模型,導致與[22,21]相比,模型要小得多。我們的模型有830萬個參數,只有33MB RAM(每個參數使用4字節單精度浮點數),因此可以輕松地移植到移動設備上。

  表3詳細列出了不同方法之間的差異,充分展示了CRNN與其它競爭方法的優勢。

表2。四個數據集上識別准確率(%)。在第二行,“50”,“1k”,“50k”和“Full”表示使用的字典,“None”表示識別沒有字典。*[22]嚴格意義上講不是無字典的,因為它的輸出限制在90K的字典。

 

表3。各種方法的對比。比較的屬性包括:1)端到端訓練(E2E Train);2)從圖像中直接學習卷積特征而不是使用手動設計的特征(Conv Ftrs);3)訓練期間不需要字符的實際邊界框(CharGT-Free);4)不受限於預定義字典(Unconstrained);5)模型大小(如果使用端到端模型),通過模型參數數量來衡量(Model Size, M表示百萬)。

 

3.4 樂譜識別

  樂譜通常由排列在五線譜的音符序列組成。識別圖像中的樂譜被稱為光學音樂識別(OMR)問題。以前的方法通常需要圖像預處理(主要是二值化),五線譜檢測和單個音符識別[29]。我們將OMR作為序列識別問題,直接用CRNN從圖像中預測音符的序列。為了簡單起見,我們僅認識音調,忽略所有和弦,並假定所有樂譜具有相同的大調音階(C大調)。

  據我們所知,沒有用於評估音調識別算法的公共數據集。為了准備CRNN所需的訓練數據,我們從[2]中收集了2650張圖像。每個圖像中有一個包含3到20個音符的樂譜片段。我們手動標記所有圖像的真實標簽序列(不是的音調序列)。收集到的圖像通過旋轉,縮放和用噪聲損壞增強到了265k個訓練樣本,並用自然圖像替換它們的背景。對於測試,我們創建了三個數據集:1)“純凈的”,其中包含從[2]收集的260張圖像。實例如圖5.a所示;2)“合成的”,使用“純凈的”創建的,使用了上述的增強策略。它包含200個樣本,其中一些如圖5.b所示;3)“現實世界”,其中包含用手機相機拍攝的音樂書籍中的200張圖像。例子如圖5.c所示。

  由於我們的訓練數據有限,因此我們使用簡化的CRNN配置來減少模型容量。與表1中指定的配置不同,我們移除了第4和第6卷積層,將2層雙向LSTM替換為2層單向LSTM。網絡對圖像對和對應的標簽序列進行訓練。使用兩種方法來評估識別性能:1)片段准確度,即正確識別的樂譜片段的百分比;2)平均編輯距離,即預測音調序列與真實值之間的平均編輯距離。為了比較,我們評估了兩種商用OMR引擎,即Capella Scan[3]和PhotoScore[4]。

  圖5。(a)從[2]中收集的干凈的樂譜圖像。(b)合成的樂譜圖像。(c)用手機相機拍攝的現實世界的樂譜圖像。

  表4總結了結果。CRNN大大優於兩個商業系統。Capella Scan和PhotoScore系統在干凈的數據集上表現相當不錯,但是它們的性能在合成和現實世界數據方面顯著下降。主要原因是它們依賴於強大的二值化來檢五線譜和音符,但是由於光線不良,噪音破壞和雜亂的背景,二值化步驟經常會在合成數據和現實數據上失敗。另一方面,CRNN使用對噪聲和扭曲具有魯棒性的卷積特征。此外,CRNN中的循環層可以利用樂譜中的上下文信息。每個音符不僅自身被識別,而且被附近的音符識別。因此,通過將一些音符與附近的音符進行比較可以識別它們,例如對比他們的垂直位置。

 

表4。在我們收集的數據集上,CRNN和兩個商業OMR系統對音調識別准確率的對比。通過片段准確率和平均編輯距離(“片段准確率/平均編輯距離”)來評估性能。

 

  結果顯示了CRNN的泛化性,因為它可以很容易地應用於其它的基於圖像的序列識別問題,需要極少的領域知識。與Capella Scan和PhotoScore相比,我們的基於CRNN的系統仍然是初步的,並且缺少許多功能。但它為OMR提供了一個新的方案,並且在音高識別方面表現出有前途的能力。

4. 總結

在本文中,我們提出了一種新穎的神經網絡架構,稱為卷積循環神經網絡(CRNN),其集成了卷積神經網絡(CNN)和循環神經網絡(RNN)的優點。CRNN能夠獲取不同尺寸的輸入圖像,並產生不同長度的預測。它直接在粗粒度的標簽(例如單詞)上運行,在訓練階段不需要詳細標注每一個單獨的元素(例如字符)。此外,由於CRNN放棄了傳統神經網絡中使用的全連接層,因此得到了更加緊湊和高效的模型。所有這些屬性使得CRNN成為一種基於圖像序列識別的極好方法。

  在場景文本識別基准數據集上的實驗表明,與傳統方法以及其它基於CNN和RNN的算法相比,CRNN實現了優異或極具競爭力的性能。這證實了所提出的算法的優點。此外,CRNN在光學音樂識別(OMR)的基准數據集上顯著優於其它的競爭者,這驗證了CRNN的泛化性。

  實際上,CRNN是一個通用框架,因此可以應用於其它的涉及圖像序列預測的領域和問題(如漢字識別)。進一步加快CRNN,使其在現實應用中更加實用,是未來值得探索的另一個方向。

致謝

  這項工作主要是由中國國家自然科學基金(NSFC)支持 (No. 61222308)。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM