當前位置:編程學習大全網 - 編程語言 - 語義分割的解碼器去噪預訓練

語義分割的解碼器去噪預訓練

Decoder Denoising Pretraining for Semantic Segmentation

(He et al.,2016))逐漸降低了特征圖的分辨率。因此,為了進行像素級預測,需要解碼器將采樣恢復到像素級。大多數最先進的語義分割模型都不會預訓練解碼器引入的附加參數並隨機初始化它們。在本文中,我們認為解碼器的隨機初始化遠遠不是最優的,並且使用簡單但有效的去噪方法預訓練解碼器權重可以顯著提高性能。

去噪自動編碼器在機器學習方面有著悠久而豐富的歷史(Vincent et al.,2008;2010)。壹般的方法是向幹凈的數據中添加噪聲,並訓練模型將噪聲數據分離回幹凈的數據和噪聲分量,這需要模型學習數據分布。去噪目標非常適合於訓練密集預測模型,因為它們可以在每像素級別上輕松定義。雖然去噪的想法由來已久,但去噪目標最近在去噪擴散概率模型(DPM)背景下吸引了新的興趣;(Sohl Dickstein等人,2015;Song&Ermon,2019;Ho等人,2020))。DPMs通過學習通過壹系列叠代去噪步驟將高斯噪聲轉換為目標分布,從而近似復雜的經驗分布。這種方法在圖像和音頻合成方面取得了令人印象深刻的結果(Nichol&Dhariwal,2021;Dhariwal&Nichol,2021;Saharia et al.,2021b;Ho et al.,2021;Chen et al.,2021b),在樣本質量分數方面優於強GAN和自回歸基線。

受擴散模型中去噪的新興趣和成功的啟發,我們研究了通過去噪自動編碼器學習的表示在語義分割中的有效性,特別是對於通常隨機初始化的預訓練解碼器權重。

總之,本文研究了語義分割體系結構中解碼器的預訓練,發現通過隨機初始化可以獲得顯著的收益,特別是在有限的標註數據設置中。我們提出將去噪用於解碼器預訓練,並將去噪自動編碼器連接到擴散概率模型,以改進去噪預訓練的各個方面,例如在去噪目標中預測噪聲而不是圖像,以及在添加高斯噪聲之前縮放圖像。這導致在三個數據集上對編碼器的標準監督預訓練有了顯著的改進。

在第2節中,我們在深入研究常規去噪預訓練的細節之前,先對其進行簡要概述

第3節和第4節中的解碼器對預訓練進行去噪。

第5節介紹了與最新方法的實證比較。

2方法

我們的目標是學習能夠很好地遷移到密集視覺預測任務的圖像表示。我們考慮壹種由編碼器fθ和解碼器gφ組成的體系結構,解碼器gφ由兩組參數θ和φ參數化。此模型將圖像x作為輸入∈ R H×W×C並將其轉換為稠密表示y∈ R h×w×c,例如語義分割掩碼。

我們希望找到壹種初始化參數θ和φ的方法,這樣模型就可以通過幾個標註的樣本有效地在語義分割上進行微調。對於編碼器參數θ,我們可以按照標準實踐,使用分類時預訓練的權重初始化它們。我們的主要貢獻涉及解碼器參數φ,它通常是隨機初始化的。我們建議將這些參數作為去噪自動編碼器進行預訓練(Vincent et al.,2008;2010):給定壹幅未標註的圖像x,我們通過將高斯噪聲σc與固定的標準偏差σ相加到x,獲得壹幅帶噪圖像xe,然後將模型訓練為自動編碼器gφ? fθ以最小化重建誤差kgφ(fθ(xe))? xk 2 2(僅優化φ並保持θ固定)。我們稱這種方法為解碼器去噪預訓練(DDeP)。或者,φ和θ都可以通過去噪(去噪預訓練;DeP)進行訓練。下面,我們將討論對標準自動編碼器公式的幾個重要修改,這些修改將顯著提高表示的質量。

作為我們的實驗裝置,我們使用了Transune(Chen et al.(2021a));圖2)。編碼器根據ImageNet-21k(Deng等人,2009)分類進行預訓練,而解碼器則使用我們的去噪方法進行預訓練,也使用ImageNet-21k圖像,而不使用標註。預訓練後,該模型根據城市景觀、Pascal上下文或ADE20K語義分段數據集進行微調(Cordts等人,2016;Mottaghi等人,2014;Zhou等人,2018)。我們報告了所有語義類別的平均交並比(mIoU)。我們在第5.1節中描述了進壹步的實施細節。

圖1顯示,我們的DDeP方法明顯優於僅編碼器的預訓練,尤其是在少樣本情況下。圖6顯示,即使是DeP,即在沒有任何監督預訓練的情況下對整個模型(編碼器和解碼器)進行去噪預訓練,也可以與監督預訓練相競爭。我們的結果表明,盡管去噪預訓練簡單,但它是學習語義分割表示的壹種有效方法。

3編碼器和解碼器的去噪預訓練

如上所述,我們的目標是學習能夠很好地轉換到語義分割和其他密集視覺預測任務的有效視覺表示。我們重新討論去噪目標以實現這壹目標。我們首先介紹標準去噪自動編碼器公式(針對編碼器和解碼器)。然後,我們提出了對標準公式的壹些修改,這些修改的動機是最近擴散模型在圖像生成方面的成功(Ho等人,2020年;Nichol&Dhariwal,2021;Saharia等人,2021b)。

3.1標準去噪目標

在標準去噪自動編碼器公式中,給定壹個未標註的圖像x,我們通過將高斯噪聲σc與固定的標準偏差σx相加,得到壹個帶噪圖像xe,

然後我們訓練壹個自動編碼器gφ? fθ以最小化重建誤差kgφ(fθ(xe))? xk 2。因此,目標函數采用以下形式

雖然這個目標函數已經產生了對語義分割有用的表示,但我們發現,壹些關鍵的修改可以顯著提高表示的質量。

3.2目標中去噪目標的選擇

標準去噪自動編碼器目標訓練模型來預測無噪圖像x。然而,擴散模型通常訓練來預測噪聲向量c(Vincent,2011;Ho et al.,2020):

對於具有從輸入xe到輸出的跳躍連接的模型,這兩個公式的行為類似。在這種情況下,模型可以很容易地將其對c的估計與輸入xe結合起來,以獲得x。

然而,在沒有明確的跳躍連接的情況下,我們的實驗表明,預測噪聲向量明顯優於預測無噪聲圖像(表1)。

3.3作為預訓練目標的去噪的可擴展性

無監督的預訓練方法最終會受到由預訓練目標學習的表征與最終目標任務所需表征之間不匹配的限制。對於任何無監督的目標,壹個重要的“健全性檢查”是,它不會很快達到這個極限,以確保它與目標任務很好地壹致。我們發現,通過去噪學習的表示將繼續提高到我們的最大可行預訓練計算預算(圖3)。這表明去噪是壹種可擴展的方法,並且表示質量將隨著計算預算的增加而繼續提高。

3.4去噪與監督預訓練

在標準去噪自動編碼器公式中,使用去噪對整個模型(編碼器和解碼器)進行訓練。然而,至少在微調數據豐富的情況下,全模型的去噪預訓練性能不如編碼器的標準監督預訓練(表2)。在下壹節中,我們將探索將去噪和有監督的預訓練相結合,以獲得兩者的好處。

4僅對解碼器進行去噪預訓練

實際上,由於已經存在用於預訓練編碼器權重的強大且可伸縮的方法,因此去噪的主要潛力在於預訓練解碼器權重。為此,我們將編碼器參數θ固定在通過在ImageNet-21k上進行監督預訓練獲得的值上,並且僅對解碼器參數φ進行預訓練並進行去噪,從而實現以下目標:

我們將這種預訓練方案稱為解碼器去噪預訓練(DDeP)。如下所示,在所有標註效率機制中,DDeP的性能優於純監督或純去噪預訓練。在第5節給出基準結果之前,我們研究了DDeP的關鍵設計決策,如本節中的噪聲公式和最佳噪聲級。

4.1噪聲大小和圖像與噪聲的相對比例

解碼器去噪預訓練的關鍵超參數是添加到圖像中的噪聲的大小。噪聲方差σ必須足夠大,網絡必須學習有意義的圖像表示才能將其移除,但不能太大,導致幹凈圖像和噪聲圖像之間的分布過度偏移。對於目視檢查,圖4顯示了σ的幾個樣本值。

除了噪聲的絕對大小外,我們還發現幹凈圖像和噪聲圖像的相對縮放也起著重要作用。不同的去噪方法在這方面有所不同。具體地說,DDPM生成壹個有噪聲的圖像xe as

這不同於等式(1)中的標準去噪公式,因為x衰減為√γ和c衰減為√ 1.? γ,以確保如果x的方差為1,則隨機變量xe的方差為1。使用此公式,我們的去噪預訓練目標變為:

在圖5中,我們將這種縮放的加性噪聲公式與簡單的加性噪聲公式(公式(1))進行了比較,發現縮放圖像可以顯著提高下遊語義分割性能。我們推測,噪聲圖像的方差與噪聲大小的解耦減少了幹凈圖像和噪聲圖像之間的分布偏移,從而改善了預訓練表示到最終任務的傳遞。因此,本文其余部分將使用此公式。我們發現,對於縮放的加性噪聲公式,最佳噪聲幅值為0.22(圖5),並將該值用於下面的實驗。

4.2預訓練數據集的選擇

原則上,任何圖像數據集都可以用於去噪預訓練。理想情況下,我們希望使用大型數據集(如ImageNet)進行預訓練,但這引發了壹個潛在的擔憂,即預訓練數據和目標數據之間的分布變化可能會影響目標任務的性能。為了驗證這壹點,我們比較了解碼器在幾個數據集上進行去噪預訓練,而編碼器在ImageNet-21K上進行預訓練,並保持分類目標不變。我們發現,對於所有測試數據集(城市景觀、Pascal上下文和ADE20K;表3),在ImageNet-21K上預訓練解碼器比在目標數據上預訓練解碼器的效果更好。值得註意的是,這甚至適用於城市景觀,城市景觀在圖像分布方面與ImageNet-21k存在顯著差異。因此,在通用圖像數據集上使用DDeP預訓練的模型通常適用於範圍廣泛的目標數據集。

4.3解碼器變體

考慮到解碼器去噪預訓練顯著改善了解碼器的隨機初始化,我們假設該方法可以使解碼器的大小擴大到使用隨機初始化時效益減少的程度。我們通過在解碼器的各個階段改變特征映射的數量來測試這壹點。我們所有實驗的默認(1×)解碼器配置為[1024、512、256、128、64],其中索引i處的值對應於第i個解碼器塊處的特征映射數。這反映在圖2中。在Cityscapes上,我們嘗試將所有解碼器層的默認寬度加倍(2×),而在Pascal上下文和ADE20K上,我們嘗試將寬度加倍(3×)。雖然較大的解碼器通常即使在隨機初始化時也能提高性能,但DDeP在所有情況下都會帶來額外的增益。因此,DDeP可能會解鎖新的解碼器密集型架構。我們在第5節中給出了1×解碼器和2×/3×解碼器的主要結果。

4.4擴散過程的擴展

如上所述,我們發現,通過調整標準自動編碼器公式的某些方面,如預測目標的選擇以及圖像和噪聲的相對縮放,可以改進預訓練表示,使其更類似於擴散模型。這就提出了壹個問題,即是否可以通過使用全擴散過程進行預訓練來進壹步改進表征。在這裏,我們研究了使該方法更接近DDPM中使用的完全擴散過程的擴展,但發現它們並沒有改善上述簡單方法的結果。

可變噪聲表。

由於它使用單個固定噪聲級(式(6)中的γ),因此我們的方法對應於擴散過程中的單個步驟。完整的DDPMs通過從每個訓練樣本的[0,1]中隨機均勻采樣噪聲幅值γ,模擬從幹凈圖像到純噪聲(及其相反)的完整擴散過程(Ho et al.,2020)。因此,我們也對隨機抽樣γ進行了實驗,但發現固定γ表現最好(表4)。

調節噪聲水平。

在擴散形式中,模型表示從壹個噪聲級到下壹個噪聲級的(反向)過渡函數,因此以當前噪聲級為條件。在實踐中,這是通過為每個訓練樣本提供所采樣的γ作為額外的模型輸入來實現的,例如,提供給歸壹化層。由於我們通常使用固定的噪聲級,因此我們的方法不需要調節。當使用可變噪聲時間表時,調節也不會提供任何改善。

噪聲級加權。

在DDPM中,損失中不同噪聲級的相對權重對樣品質量有很大影響(Ho等人,2020年)。由於我們的實驗表明,學習可遷移表征不需要多個噪聲級,因此我們沒有對不同噪聲級的權重進行實驗,但請註意,這可能是未來研究的壹個有趣方向。

5基準結果

我們在幾個語義分割數據集上評估了所提出的解碼器去噪預訓練(DDeP)的有效性,並進行了標註效率實驗。

5.1實施細則

對於語義分割任務的預訓練模型的下遊微調,我們使用標準的逐像素交叉熵損失。我們使用Adam(Kingma&Ba,2015)優化器和余弦學習率衰減計劃。對於解碼器去噪預訓練(DDeP),我們使用512的批量大小,並訓練100個epoch。學習速度為6e?5用於1×和3×寬度解碼器,以及1e?4用於2×寬度解碼器。

在對目標語義分割任務中的預訓練模型進行微調時,我們將權值衰減和學習率值掃過[1e?5,3e?4] 並為每個任務選擇最佳組合。對於100%設置,我們報告所有數據集上10次運行的平均值。在Pascal上下文和ADE20K中,我們還報告了1%、5%和10%標註分數的10次運行(不同子集)的平均值,以及20%設置的5次運行的平均值。在城市景觀上,我們報告了1/30設置下10次跑步的平均值,1/8設置下6次跑步,1/4設置下4次跑步的平均值。

在訓練過程中,對圖像及其相應的分割模板應用隨機裁剪和隨機左右翻轉。對於城市景觀,我們將圖像隨機裁剪為1024×1024的固定大小,對於ADE20K和Pascal上下文,我們將圖像裁剪為512×512的固定大小。所有解碼器去噪預訓練運行均以224×224分辨率進行。

在城市景觀推斷過程中,我們通過將全分辨率1024×2048圖像分割為兩個1024×1024輸入patch來評估它們。我們采用水平翻轉,平均每壹半的結果。將兩半部分串聯起來以產生全分辨率輸出。對於Pascal Context和ADE20K,除了水平翻轉外,我們還對圖像的重縮放版本使用多尺度評估。使用的比例因子為(0.5、0.75、1.0、1.25、1.5、1.75)。

5.2解碼器去噪預訓練的性能增益

在城市景觀方面,DDeP的表現優於DeP和有監督的預培訓。在圖6中,我們報告了城市景觀上的DeP和DDeP結果,並將其與隨機初始化或使用ImageNet-21K預訓練編碼器初始化的訓練結果進行比較。DeP結果使用了縮放的加性噪聲公式(方程式(5)),與標準降噪目標獲得的結果相比,性能顯著提高。

如圖6所示,在1%和5%標註圖像設置中,DeP優於監督基線。對於1×和2×解碼器變體,解碼器去噪預訓練(DDeP)比DeP和ImageNet-21K監督預訓練都有進壹步改進(表6)。

如表5.2所示,DDeP在所有標註分數上都優於先前提出的城市景觀標註有效語義分割方法。只有25%的訓練數據,DDeP比最強的基線方法PC2Seg(Zhong等人,2021)在完整數據集上訓練時產生的分割效果更好。與最近的工作不同,我們不對城市景觀進行多尺度評估,這將導致進壹步的改進。

DDeP還改進了Pascal上下文數據集上的有監督預訓練。圖1比較了DDeP在1%、5%、10%、20%和100%的訓練數據上與有監督基線和Pascal上下文上隨機初始化模型的性能。表5.2將這些結果與使用3×解碼器獲得的結果進行了比較。對於1×和3×解碼器,DDeP的性能明顯優於架構上相同的監督模型,在所有半監督設置中獲得了4-12%的mIOU改進。值得註意的是,只有10%的標註,DDeP優於20%標註訓練的監督模型。

圖7顯示了ADE20K數據集上DDeP的類似改進。我們再次看到,在5%和10%的設置中,收益超過10分,在1%的設置中,收益超過5分。這些壹致的結果證明了DDeP在數據集和訓練集大小方面的有效性。

我們的上述結果使用了Transune(Chen等人(2021a));圖2)實現最大性能的體系結構,但DDeP與主幹網無關,並且與更簡單的主幹網體系結構壹起使用時也會帶來好處。在表7中,我們訓練了壹個標準的U-Net,該U-Net帶有壹個ResNet50編碼器,在Pascal上下文中具有DDeP(無多尺度評估)。DDeP在所有設置中都優於監督基線,表明我們的方法超越了transformer架構。

6相關工作

因為為語義分割收集詳細的像素級標註成本高昂、耗時且容易出錯,已經提出了許多方法來從較少的標註樣本中實現語義分割(Tarvainen&Valpola,2017;Miyato et al.,2018;Hung et al.,2018;Mittal et al.,2021;French et al.,2019;Ouali et al.,2020;Zou et al.,2021;Feng et al.,2020b;Ke et al.,2020;Olsson et al.,2021;Zhong et al.,2021)。這些方法通常求助於半監督學習(SSL)(Chapelle et al.,2006;Van Engelen&Hoos,2020),在這種學習中,除了有標註的訓練數據外,還假設可以訪問大量的未標註圖像數據集。在接下來的內容中,我們將討論以前關於強數據增強、生成模型、自訓練和自監督學習在標註有效語義分割中的作用的工作。雖然這項工作側重於自監督的預訓練,但我們相信,強大的數據增強和自訓練可以與所提出的去噪預訓練方法相結合,以進壹步改善結果。

數據增強。

French et al.(French et al.,2019)證明,Cutout(DeVries&Taylor,2017)和CutMix(Yun et al.,2019)等強大的數據增強技術對於少數標註樣本的語義分割特別有效。Ghiasi等人(2021)發現,簡單的復制粘貼增強有助於實例分割。之前的工作(Remez et al.,2018;Chen et al.,2019;Bielski&Favaro,2019;Arandjelovi?&Zisserman,2019)也通過利用GANs(Goodfello et al.,2014)組合不同的前景和背景區域來生成新的可信圖像,探索了完全無監督的語義分割。我們使用了相對簡單的數據增強,包括水平翻轉和隨機起始式裁剪(Szegedy et al.,2015)。使用更強大的數據增強留給未來的工作。

生成模型。

標註有效語義分割的早期工作使用GANs生成合成訓練數據(Souly et al.,2017),並區分真實和預測的分割掩碼(Hung et al.,2018;Mittal et al.,2021)。DatasetGAN(Zhang等人,2021)表明,現代GAN架構(Karras等人,2019)在生成合成數據以幫助像素級圖像理解方面是有效的,而此時只有少數標註圖像可用。我們的方法與擴散和基於分數的生成模型高度相關(Sohl Dickstein et al.,2015;Song&Ermon,2019;Ho et al.,2020),這代表了壹個新興的生成模型家族,導致圖像樣本質量優於GANs(Dhariwal&Nichol,2021;Ho et al.,2021)。這些模型通過去噪分數匹配與去噪自動編碼器相連(Vincent,2011),可以看作是訓練基於能量的模型的方法(Hyv?rinen&Dayan,2005)。去噪擴散模型(DDPM)最近已應用於超分辨率、著色和修復等條件生成任務(Li等人,2021;Saharia等人,2021b;Song等人,2021;Saharia等人,2021a),表明這些模型可能能夠學習有用的圖像表示。我們從DDPM的成功中得到了啟發,但我們發現DDPM的許多組件都不是必需的,簡單的去噪預訓練效果很好。擴散模型已被用於叠代優化語義分段掩碼(Amit等人,2021;Hoogeboom等人,2021)。Baranchuk et al.(Baranchuk et al.,2021)證明了通過擴散模型學習的特征在語義分割中的有效性,這些特征來自於極少數標註的樣本。相比之下,我們利用簡單的去噪預訓練進行表示學習,並研究編碼器-解碼器體系結構的完全微調,而不是提取固定特征。此外,我們使用成熟的基準將我們的結果與之前的工作進行比較。

自訓練,壹致性規範化。

自訓練(自學習或偽標註)是最古老的SSL算法之壹(Scudder,1965;Fralick,1967;Agrawala,1970;Yarowsky,1995)。它的工作原理是使用壹個初始的監督模型,用所謂的偽標註對未標註的數據進行註釋,然後使用偽標註和人類標註數據的混合來訓練改進的模型。這個叠代過程可以重復多次。自訓練已被用於改進目標檢測(Rosenberg等人,2005;Zoph等人,2020)和語義分割(Zhu等人,2020;Zou等人,2021;Feng等人,2020a;Chen等人,2020a)。壹致性正則化與自訓練密切相關,並在圖像增強過程中加強預測的壹致性(French et al.,2019;Kim et al.,2020;Ouali et al.,2020)。這些方法通常需要仔細調整超參數和合理的初始模型,以避免傳播噪聲。將自訓練與去噪預訓練相結合可能會進壹步改善結果。

自監督學習。

自監督學習方法可以制定預測性的借口任務,這些任務很容易從未標註的數據中構建,並且有利於下遊的區分性任務。在自然語言處理(NLP)中,掩蔽語言建模任務(Devlin等人,2019;Liu等人,2019;Raffel等人,2020)已成為事實上的標準,在NLP任務中顯示出令人印象深刻的結果。在計算機視覺中,提出了用於自監督學習的不同借口任務,包括預測圖像中相鄰patch的相對位置的任務(Doersch et al.,2015),修復任務(Pathak et al.,2016),解決拼圖(Noroozi&Favaro,2016),圖像著色(Zhang et al.,2016;Larsson et al.,2016),輪換預測(Gidaris et al.,2018)和其他任務(Zhang et al.,2017;Caron et al.,2018;Kolesnikov et al.,2019)。最近,基於樣本鑒別和對比學習的方法在圖像分類方面顯示出了有希望的結果(Oord et al.,2018;Hjelm et al.,2018;He et al.,2020;Chen et al.,2020b;c;Grill et al.,2020)。這些方法已被用於成功地預訓練用於對象檢測和分割的主幹(He et al.,2020;Chen et al.,2020d),但與這項工作不同的是,它們通常隨機初始化解碼器參數。最近,也有壹系列基於掩蔽自動編碼的新興方法,如BEIT(Bao等人,2021)、MAE(He等人,2021)和其他方法(Zhou等人,2021;Dong等人,2021;Chen等人,2022)。我們註意到,我們的方法是針對這壹系列掩模圖像建模同時開發的,我們的技術也是正交的,因為我們關註的是解碼器預訓練,這不是上述論文的重點。

用於密集預測的自監督學習。

Pinheiro et al.(2020)和Wang et al.(2021)提出了密集對比學習,這是壹種針對密集預測任務的自監督預訓練方法,對比學習應用於patch和像素級特征,而不是圖像級特征。這讓人想起AMDIM(Bachman et al.,2019)和CPC V2(Hénaff et al.,2019)。Zhong等人(2021)進壹步考慮了這壹想法,並將圖像不同增強(可能未標註)的模型輸出之間的分割掩碼壹致性與整個增強的像素級特征壹致性相結合。

視覺Transformer。

受NLP中Transformer的成功(Vaswani et al.,2017)的啟發,壹些出版物研究了卷積和自註意相結合的目標檢測(Carion et al.,2020)、語義分割(Wang et al.,2018;2020b)和全景分割(Wang et al.,2020a)。Vision Transformer(ViT)(Dosovitskiy et al.,2021)證明,當大量標註數據集可用時,無卷積方法可以產生令人印象深刻的結果。最近的研究探索了將ViT作為語義分割的主幹(Zheng等人,2020年;Liu等人,2021;Strudel等人,2021)。這些方法在解碼器的結構上有所不同,但它們顯示了基於ViT的語義分割的能力。我們采用混合ViT(Dosovitskiy et al.,2021)作為主幹,其中patch嵌入投影應用於從卷積特征圖中提取的patch。我們研究了解碼器的大小,發現更寬的解碼器通常會改善語義分割結果。

7結論

受最近流行的圖像合成擴散概率模型的啟發,我們研究了這些模型在學習語義分割有用的可遷移表示方面的有效性。令人驚訝的是,我們發現,將語義分割模型作為去噪自動編碼器進行預訓練可以大大提高語義分割性能,尤其是在標註樣本數量有限的情況下。我們基於這壹觀察結果,提出了壹種兩階段預訓練方法,其中監督預訓練編碼器與去噪預訓練解碼器相結合。這導致了數據集和訓練集大小的壹致收益,從而形成了壹種切實可行的預訓練方法。探索去噪預訓練在其他密集預測任務中的應用也很有趣。

  • 上一篇:程序員貓是如何設計遊戲結局的
  • 下一篇:virtuoso自學筆記
  • copyright 2024編程學習大全網