SqueezeNet 翻译
論文地址:SqueezeNet
論文翻譯:木凌
時間:2016年11月。
文章連接:http://blog.csdn.net/u014540717
1 引言和動機
最近對深卷積神經網絡(CNN)的研究集中在提高計算機視覺數據集的準確性。 對于給定的精度水平,通常存在實現該精度水平的多個CNN架構。給定等效精度,具有較少參數的CNN架構具有幾個優點:
1. 更高效的分布式訓練。服務器之間的通信是分布式CNN訓練的可擴展性的限制因素。對于分布式數據并行訓練,通信開銷與模型中的參數數量成正比(Iandola等,2016)。總之,小模型訓練更快,因為需要較少的溝通。
2. 將新模型導出到客戶端時減少開銷。 對于自動駕駛,特斯拉等公司定期將新型號從其服務器復制到客戶的汽車。 這種做法通常被稱為空中更新(譯者注:OTA,刷過機的同學估計都知道)。 消費者報告發現,特斯拉自動駕駛儀半自動駕駛功能的安全性隨著最近的空中更新(消費者報告,2016)而逐漸改善。然而,當今典型的CNN/DNN模型的空中更新可能需要大量的數據傳輸。 使用AlexNet,這將需要240MB的從服務器到汽車的通信。較小的模型需要較少的通信,使頻繁更新更可行。
3. 可行的FPGA和嵌入式部署。 FPGA通常具有小于10MB的片上存儲器并且沒有片外存儲器。對于推理,足夠小的模型可以直接存儲在FPGA上,而不是讓存儲帶寬變成它的瓶頸(Qiu等人,2016),從而使得FPGA可以實時地處理視頻流。此外,當在專用集成電路(ASIC)上部署CNN時,足夠小的模型可以直接存儲在芯片上,并且較小的模型可以使ASIC適合更小的管芯。
正如您所看到的,較小的CNN架構有幾個優點。考慮到這一點,我們直接關注與眾所周知的模型相比,識別具有較少參數但等效精度的CNN架構的問題。我們發現了一個這樣的架構,我們稱之為SqueezeNet。 此外,我們提出了一個更嚴謹的方法來搜索設計空間的新的CNN架構。
本文的其余部分組織如下。 在第2節中,我們回顧了相關工作。然后,在第3節和第4節中,我們描述和評估SqueezeNet架構。之后,我們將注意力轉向理解CNN架構設計選擇如何影響模型大小和精度。 我們通過探索SqueezeNet樣架構的設計空間獲得這種理解。在第5節中,我們在CNN微體系結構上設計空間探索,我們將其定義為各個層和模塊的組織和維度。在第6節中,我們在CNN宏結構上設計空間探索,我們將其定義為CNN中的層的高級組織。最后,我們在第7節總結。總之,第3節和第4節對于CNN研究人員以及只想將SqueezeNet應用于新應用程序的從業者非常有用。其余部分針對打算設計自己的CNN架構的高級研究人員。
2 相關工作
2.1 模型壓縮
我們工作的首要目標是確定一個具有很少參數,同時保持精度的模型。為了解決這個問題,一種明智的方法是采用現有的CNN模型并以有損的方式壓縮它。事實上,圍繞模型壓縮的主題出現了一個研究社區,并且已經報道了幾種方法。Denton等人的一個相當直接的方法是對預訓練的CNN模型應用奇異值分解(SVD)(Denton等人,2014)。Han等人開發了網絡修剪,其從預訓練模型開始,然后用零替換低于某個閾值的參數以形成稀疏矩陣,并且最后對稀疏CNN執行幾次迭代訓練(Han等人,2015b)。最近,Han等人通過將網絡修剪與量化(至8位或更少)和huffman編碼相結合,創建了一種稱為深度壓縮的方法(Han等人,2015a),并進一步設計了一種稱為EIE的硬件加速器(Han等人,2016a ),直接對壓縮模型操作,實現大幅加速和節能。
2.2 CNN微觀結構
卷積已經在人工神經網絡中使用了至少25年; LeCun等人在20世紀80年代后期幫助推廣用于數字識別應用的CNN(LeCun等人,1989)。在神經網絡中,卷積濾波器通常是3D,具有作為關鍵尺寸的高度,寬度和通道。當應用于圖像時,CNN濾波器通常在其第一層(即RGB)中具有3個通道,并且在每個后續層Li中,濾波器具有與Li-1具有濾波器相同數量的通道。LeCun等人的早期工作(LeCun等人,1989)使用5x5x通道2濾波器,并且最近的VGG(Simonyan&Zisserman,2014)架構廣泛地使用3x3濾波器。包括Network-in-Network(Lin等人,2013)和GoogLeNet系列架構(Szegedy等人,2014; Ioffe&Szegedy,2015; Szegedy等人,2015; 2016)等模型在一些層使用1x1濾波器。
隨著設計非常深的CNN的趨勢,手動選擇每層的濾波器尺寸變得麻煩。為了解決這個問題,已經提出了由具有特定固定組織的多個卷積層組成的各種更高級別的構建塊或模塊。例如,GoogLeNet論文提出了Inception模塊,其包括多個不同維度的濾波器,通常包括1x1和3x3,有時5x5(Szegedy等人,2014),有時1x3和3x1(Szegedy等人,2015)。然后,許多這樣的模塊可能與附加的自組織層組合以形成完整的網絡。我們使用術語CNN微架構來指代各個模塊的特定組織和尺寸。
2.3 CNN宏結構
雖然CNN微體系結構涉及單個層和模塊,但是我們將CNN宏體系結構定義為多個模塊到端到端CNN體系結構的系統級組織。
也許在最近的文獻中最廣泛研究的CNN宏觀架構主題是網絡中深度(即層數)的影響。Simoyan和Zisserman提出了具有12到19層的的VGG(Simonyan&Zisserman,2014)族,并且說明了更深的網絡在ImageNet-1k數據集上產生更高的精度(Deng等人,2009)。K.He等人提出了最多30層的更深的CNNs,提供更高的ImageNet精度(He等人,2015a)。
選擇跨越多個層或模塊的連接是CNN宏觀結構研究的新興領域。殘差網絡(ResNet)(He等人。,2015b)和Highway Networks(Srivastava等人,2015)分別提出了跨越多層的連接的使用,例如將來自層3的激活與來自層6的激活相加連接,我們將這些連接稱為旁路連接。ResNet的作者提供了一個具有和不具有旁路連接的34層CNN的A/B比較; 添加旁路連接可在ImageNet Top-5的精度上提高2個百分點。
2.4 神經網絡設計空間探索
神經網絡(包括深度卷積神經網絡)具有大的設計空間,具有用于微架構,宏架構,解算器和其它超參數的許多選項。社區似乎希望獲得關于這些因素如何影響神經網絡的準確性(即設計空間的形狀)。神經網絡的設計空間探索(DSE)的許多工作集中在開發自動化方法以發現提供更高精度的神經網絡架構。這些自動化DSE方法包括貝葉斯優化(Snoek等人,2012),模擬退火(Ludermir等人,2006),隨機搜索(Bergstra&Bengio,2012)和遺傳算法(Stanley和Miikkulainen,2002)。他們認為,這些論文中的每一篇提供了一種情況,其中所提出的DSE方法產生了與具有代表性的基線相比精度更高的神經網絡架構。然而,這些論文沒有試圖提供關于神經網絡設計空間的直觀形狀。在本文的后面,我們避開了自動化方法,相反,我們以這樣一種方式重構CNN,以便我們可以進行原理性的A/B比較來研究CNN架構決策如何影響模型大小和準確性。
在以下部分,我們首先提出和評估具有和不具有模型壓縮的SqueezeNet體系結構。然后,我們探討設計選擇對微型架構和宏構架對SqueezeNet樣CNN架構的影響。
3 SqueezeNet:保留精度并具有較少的參數
在本節中,我們首先概述了幾個參數的CNN架構的設計策略。然后,我們介紹Fire模塊,我們的新構建塊,用于構建CNN架構。最后,我們使用我們的設計策略構建SqueezeNet,它主要由Fire模塊組成。
3.1 結構設計策略
我們在本文的總體目標是確定具有很少參數的CNN架構,同時保持競爭的準確性。為了實現這一點,我們在設計CNN架構時采用三個主要策略:
策略1.使用1x1過濾器替換3x3過濾器。給定一定數量的卷積濾波器的預算,我們將選擇使這些濾波器中的大多數是1x1,因為1x1濾波器具有比3x3濾波器少9倍的參數。
策略2.將輸入到3x3過濾器的通道的數量減少。考慮一個完全由3x3濾波器組成的卷積層。該層中的參數的總量是(輸入通道的數量)??(3 * 3)。 因此,為了在CNN中保持小的參數總數,不僅要減少3×3濾波器的數量(見上面的策略1),而且要減少3×3濾波器的輸入通道的數量。我們使用擠壓層將輸入到3x3個過濾器的通道數量減少,我們將在下一節中進行描述。
策略3.在網絡后期降采樣,以使卷積層具有大的激活圖。在卷積網絡中,每個卷積層產生至少1x1并且經常比1x1大得多的空間分辨率的輸出激活圖。這些激活圖的高度和寬度由以下控制:(1)輸入數據的大小(例如256×256圖像)和(2)在CNN架構中對其進行下采樣的層的選擇。最常見的是,通過在一些卷積或池化層中設置(stride> 1),將下采樣設計到CNN架構中(例如(Szegedy等人,2014;Simonyan&Zisserman,2014;Krizhevsky等人,2012))。 如果網絡中早期的層具有較大的步幅,則大多數層將具有小的激活圖。相反,如果網絡中的大多數層具有1的步幅,并且大于1的步幅集中朝向網絡的尾部,則網絡中的許多層將具有大的激活圖。 我們的直覺是,在其他保持不變的情況下,大的激活圖(由于延遲下采樣)可以導致更高的分類精度。 實際上,K.He和H.Sun對4種不同的CNN結構應用了延遲下采樣,并且在每種情況下延遲下采樣導致更高的分類精度(He&Sun,2015)。
圖1:微觀結構視圖:在Fire模塊中組織卷積過濾器。 在這個例子中,s1x1s1x1= 4。我們展示的是卷積濾波器不是激活器。
策略1和2關于在試圖保持準確性的同時明智地減少CNN中的參數的數量。策略3是關于在有限的參數預算上最大化精度。接下來,我們描述Fire模塊,這是我們的CNN架構的構建塊,使我們能夠成功地采用戰略1,2和3。
3.2 Fire模塊
我們定義Fire模塊如下。Fire模塊包括:擠壓卷積層(其僅具有1x1濾波器),饋送到具有1x1和3x3卷積濾波器的混合的擴展層; 我們在圖1中說明了這一點。在fire模塊中自由使用1x1過濾器是第3.1節中策略1的一個應用。我們在Fire模塊中公開了三個可調整維度(超級參數):s1X1s1X1),因此擠壓層有助于將輸入通道的數量限制為3x3過濾器,如第3.1節中的策略2所示。
3.3 SqueezeNet結構
我們現在描述SqueezeNet CNN架構。我們在圖2中說明SqueezeNet開始于一個獨立的卷積層(conv1),然后是8個fire模塊(fire2-9),最后是一個最終的轉換層(conv10)。 我們從網絡的開始到結束逐漸增加每個fire模塊的過濾器數量。 SqueezeNet在層conv1,fire4,fire8和conv10之后以步長為2來執行max-pooling; 這些相對較晚的polling安排是根據3.1節中的策略3。我們在表1中給出了完整的SqueezeNet架構。
圖2:我們的SqueezeNet架構的宏體系結構視圖。 左:SqueezeNet(3.3節); 中間:SqueezeNet與簡單的旁路(第6節); 右:具有復雜旁路的SqueezeNet(第6節)。
3.3.1 其他SequenceNet細節
為簡潔起見,我們從表1和圖2中省略了關于SqueezeNet的細節和設計選擇的數量。我們在下面提供這些設計選擇。這些選擇背后的直覺可以在下面引用的論文中找到。
1、為了使來自1x1和3x3濾波器的輸出激活具有相同的高度和寬度,我們在輸入數據中向擴展模塊的3x3濾波器添加零填充的1像素邊界。
2、ReLU(Nair&Hinton,2010)應用于擠壓和膨脹層的激活。
3、 在fire9模塊之后應用比率為50%的dropout(Srivastava等人,2014)。
4、注意SqueezeNet中缺少全連接層; 這個設計選擇是受到NiN(Lin et al。,2013)架構的啟發。
5、當訓練SqueezeNet時,我們從0.04的學習率開始,我們線性減少整個訓練的學習率,如(Mishkin et al。,2016)所述。 有關訓練協議(例如批量大小,學習速率,參數初始化)的詳細信息,請參閱我們的Caffe兼容配置文件,位于這里:https://github.com/DeepScale/SqueezeNet。
6、Caffe框架本身不支持包含多個濾波器分辨率的卷積層(例如1x1和3x3)(Jia等人,2014)。為了解決這個問題,我們使用兩個獨立的卷積層來實現我們的擴展層:一個帶1x1濾波器的層和一個帶有3x3濾波器的層。然后,我們在通道維中將這些層的輸出連接在一起。這在數值上等同于實現包含1x1和3x3濾波器的一個層。
我們以Caffe CNN框架定義的格式發布了SqueezeNet配置文件。 然而,除了Caffe之外,還出現了其他一些CNN框架,包括MXNet(Chen等,2015a),Chainer(Tokui等,2015),Keras(Chollet,2016)和Torch(Collobert等, 2011)。它們中的每一個具有其自己的用于表示CNN架構的本地格式。也就是說,大多數這些庫使用相同的底層計算后端,如cuDNN(Chetlur等,2014)和MKL-DNN(Das等,2016)。研究團體已經移植了SqueezeNet CNN架構,以便與許多其他CNN軟件框架兼容:
SequeezeNet的MXNet (Chen et al., 2015a) 接口: (Haria, 2016)
SequeezeNet的Chainer(Tokui et al., 2015) 接口:(Bell, 2016)
SequeezeNet的Keras(Chollet, 2016) 接口:(DT42, 2016)
SequeezeNet fire模型的Torch(Collobert et al., 2011) 接口:(Waghmare, 2016)
4 SqueezeNet評估
我們現在將注意力轉向評估SqueezeNet。 在第2.1節中回顧的每一個CNN模型壓縮論文中,目標是壓縮AlexNet(Krizhevsky等人,2012)模型,該模型被訓練使用ImageNet(Deng等人,2009)(ILSVRC 2012) 數據集。因此,在評估SqueezeNet時,我們使用AlexNet 5和相關的模型壓縮結果作為比較的基礎。
表1:SqueezeNet體系結構尺寸。(此表格的格式受到Inception2文章(Ioffe&Szegedy,2015)的啟發。)
在表2中,我們在最近的模型壓縮結果的上下文中檢查SqueezeNet。 基于SVD的方法能夠將預訓練的AlexNet模型壓縮5倍,同時將頂1精度降低到56.0%(Denton等人,2014)。網絡修剪實現了9倍的模型大小減少,同時在ImageNet上保持了57.2%的top-1和80.3%的top-5精度的基線(Han et al。,2015b)。深度壓縮使模型尺寸減小了35倍,同時仍然保持了基線精度水平(Han 等人,2015a)。現在,使用SqueezeNet,與AlexNet相比,我們實現了模型尺寸減少50倍,同時滿足或超過了AlexNet的top-1和前top-5的精度。 我們在表2中總結了所有上述結果。
看來,我們已經超過了模型壓縮社區的最先進的結果:即使使用未壓縮的32位值來表示模型,SqueezeNet具有比模型壓縮社區的最好結果小1.4倍的模型大小,同時保持或超過基線精度。 直到現在,一個懸而未決的問題是:是小模型適合被壓縮,還是小模型“需要”由密集浮點值才能提供強大的表示能力? 為了發現,我們使用33%稀疏度和8-bits,對SqueezeNet應用深度壓縮(Han等,2015a)。 這產生了與AlexNet相當的精度的0.66MB模型(363×小于32位AlexNet)。此外,在SqueezeNet上應用具有6-bits和33%稀疏性的深度壓縮,我們產生具有等效精度的0.47MB型號(510x小于32位AlexNet)。 我們的小模型確實適合壓縮。
表2:比較SqueezeNet和模型壓縮方法。根據模型大小,我們是指在訓練模型中存儲所有參數所需的字節數。
此外,這些結果表明,深壓縮(Han等人,2015a)不僅在具有許多參數(例如AlexNet和VGG)的CNN架構上工作良好,而且還能夠壓縮已經緊湊,完全卷積的SqueezeNet架構。深度壓縮將SqueezeNet壓縮10倍,同時保持基線精度。 總之:通過將CNN架構創新(SqueezeNet)與最先進的壓縮技術(深度壓縮)相結合,我們實現了模型尺寸減少510×,與基準相比精度沒有降低。
最后,請注意,深度壓縮(Han等人,2015b)使用codebook作為其用于將CNN參數量化為6-bits或8-bits精度的方案的一部分。 因此,在大多數商品處理器上,使用深度壓縮中開發的方案實現具有8-bits量化的32/8 = 4x或使用6-bits量化的32/6 = 5.3x的加速并不是微不足道的。 然而,Han等人開發的定制硬件 - 高效推理機(EIE) - 可以更有效地計算碼本量化的CNN(Han等人,2016a)。此外,在我們發布SqueezeNet后的幾個月中,P. Gysel開發了一種稱為Ristretto的策略,用于將SqueezeNet線性量化為8位(Gysel,2016)。具體來說,Ristretto以8位計算,并以8位數據類型存儲參數和激活。 使用Ristretto策略在SqueezeNet推理中進行8位計算,當使用8位而不是32位數據類型時,Gysel的精度下降小于1個百分點。
5 CNN微結構設計空間探索
到目前為止,我們已經為小型模型提出了結構設計策略,遵循這些原則來創建SqueezeNet,發現SqueezeNet比AlexNet小50倍,具有同等的精度。 然而,SqueezeNet和其他模型仍然是一個廣泛并且大部分設計空間未被開發的CNN架構。 現在,在第5和第6節,我們探討了設計空間的幾個方面。 我們將這個架構探索分為兩個主要主題:微架構探索(每個模塊層的維度和配置)和宏架構探索(模塊和其他層的高級端到端組織)。
在本節中,我們設計和執行實驗,目的是提供關于微結構設計空間的形狀相對于我們在第3.1節中提出的設計策略的直觀表現。 請注意,我們的目標不是最大化每個實驗的準確性,而是理解CNN架構選擇對模型大小和精度的影響。
(a)探討擠壓比(SR)對模型尺寸和精度的影響。(b)探索3x3濾波器在擴展層中的比率(pct3x3)對模型大小和精度的影響。
圖3:微體系結構設計空間探索。
5.1 CNN微結構元參數
在SqueezeNet中,每個fire模塊都有三維超參數,我們在3.2節定義:s1X1s1X1。
5.2 擠壓比
在3.1節中,我們建議通過使用擠壓層來減少參數數量,以減少3X33X3濾波器看到的輸入通道數。 我們將擠壓比(SR)定義為擠壓層中的過濾器數量與膨脹層中的過濾器數量之間的比率。 我們現在設計一個實驗來研究擠壓比對模型大小和精度的影響。
在這些實驗中,我們使用SqueezeNet(圖2)作為起點。 與SqueezeNet中一樣,這些實驗使用以下元參數:basee=128,incre=128,pct3X3=0.5,freq=2basee=128,incre=128,pct3X3=0.5,freq=2進一步增加模型尺寸,但是精度沒有提高。
5.3 關閉1X1和3X3濾波器
在3.1節中,我們建議通過用1X11X1濾波器來減少CNN中的參數數量。一個開放的問題是,CNN過濾器的空間分辨率有多重要?
VGG(Simonyan&Zisserman,2014)架構在大多數層的濾波器中具有3×3的空間分辨率; GoogLeNet(Szegedy等人,2014)和Network in Network(NiN)(Lin等人,2013)在一些層中具有1X11X1濾波器的比例如何影響模型大小和精度。
我們在本實驗中使用以下元參數:basee=incre=128,freq=2,SR=0.500basee=incre=128,freq=2,SR=0.500濾波器的百分比導致更大的模型尺寸,但是在ImageNet上的精度沒有提高。
6 CNN宏觀設計空間探索
到目前為止,我們已經探索了在微架構級別的設計空間,即CNN的單個模塊的內容。 現在,我們在宏觀架構層面探討關于Fire模塊的高級連接的設計決策。 受ResNet的啟發(He等人,2015b),我們探索了三種不同的架構:
Vanilla SqueezeNet(按照前面的章節)。
SqueezeNet與一些Fire模塊之間的簡單旁路連接。 (受(Srivastava等人,2015; He等人,2015b)的啟發。)
SqueezeNet與其余的Fire模塊之間的復雜旁路連接。
我們在圖2中說明了SqueezeNet的這三個變體。
一個限制是,在簡單的情況下,輸入通道的數量和輸出通道的數量必須相同; 因此,只有一半的Fire模塊可以具有簡單的旁路連接,如圖2的中間圖所示。當不能滿足“相同數量的通道”要求時,我們使用復雜的旁路連接,如圖所示 在圖2的右側。雖然簡單的旁路是“僅有線”,但是我們將復雜旁路定義為包括1x11x1卷積層的旁路,濾波器的數量等于所需的輸出通道的數量。 請注意,復雜的旁路連接會為模型添加額外的參數,而簡單的旁路連接則不會。
除了改變正則化之外,對我們來說直觀的是,添加旁路連接將有助于減輕擠壓層引入的表示性瓶頸。 在SqueezeNet中,擠壓比(SR)為0.125,意味著每個擠壓層比相應的膨脹層具有8倍少的輸出通道。 由于這種嚴重的維度減小,可以通過擠壓層的信息有限。 然而,通過添加旁路連接到SqueezeNet,我們打開了信息繞擠壓層流動的途徑。
我們使用圖2中的三個宏結構訓練SqueezeNet,并比較表3中的精度和模型大小。在整個宏結構探索中,我們固定了微結構以匹配SqueezeNet,如表1所述。 復雜和簡單的旁路連接都比vanilla SqueezeNet架構提高了精度。有趣的是,簡單的旁路實現了比復雜旁路更高的精度。
添加簡單的旁路連接使得在不增加模型尺寸的情況下在 精度top-1方面增加2.9個百分點,在top-5精度方面增加2.2個百分點。
表3:使用不同的宏架構配置的SqueezeNet精度和模型大小
7 結論
在本文中,我們提出了一個更嚴格的方法來設計空間探索卷積神經網絡的步驟。 為了實現這一目標,我們提出了SqueezeNet,這是一種CNN架構,比AlexNet少50倍的參數,并在ImageNet上維護AlexNet級精度。 我們還將SqueezeNet壓縮到小于0.5MB,或比沒有壓縮的AlexNet小510倍。 自從我們在2016年發布本文作為技術報告以來,宋漢和他的合作者進一步嘗試了SqueezeNet和模型壓縮。使用一種稱為密集稀疏密度(DSD)的新方法(Han等人,2016b),Han等人在訓練期間使用模型壓縮作為正則化器,以進一步提高精度,生成SqueezeNet參數的壓縮集,在ImageNet-1k上更準確1.2百分點,并且還生成SqueezeNet參數的未壓縮集,更精確地為4.3個百分點 ,與我們在表2中的結果相比。
我們在本文開頭提到,小型模型更適合FPGA上的片上實現。 自從我們發布了SqueezeNet模型,Gschwend開發了一個SqueezeNet的變種并在FPGA上實現(Gschwend,2016)。 正如我們的預期,Gschwend能夠將一個類似SqueezeNet的模型的參數完全存儲在FPGA中,并且無需對負載模型參數進行片外存儲訪問。
在本文的上下文中,我們將ImageNet作為目標數據集。 然而,將ImageNet訓練的CNN模型應用于日常的很多方面已成為常見的做法,如細粒度物體識別(Zhang等人,2013;Donahue等人,2013),圖像中的logo識別(Iandola等人 ,2015),給圖像打標簽(Fang等人,2015)等。ImageNet訓練的CNN也被應用于許多與自主駕駛有關的應用,包括圖像(Iandola等人,2014; Girshick等人,2015; Ashraf等人,2016)和視頻(Chen等,2015b)中的行人和車輛檢測,以及分割道路的形狀(Badrinarayanan等,2015)。 我們認為SqueezeNet將是一個用于各個領域的CNN架構的很好候選,特別是在那些小的模型是重要的應用領域。
SqueezeNet是我們在廣泛探索CNN架構設計空間時發現的幾個新的CNN之一。 我們希望SqueezeNet將激勵讀者考慮和探索在CNN架構的設計空間的廣泛的可能性,并以更系統的方式進行探索。
8 Fire模型的形狀(譯者注)
Fire model長什么樣子呢?其實很簡單的,如下圖所示~
參考文獻
略
(END)
總結
以上是生活随笔為你收集整理的SqueezeNet 翻译的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [matlab]空间平面绘制
- 下一篇: 请问下载那种软件可以使模糊的照片变清晰?