chore(i18n): sync translations with latest source changes (chunk 4/8, 8 changes)
This commit is contained in:
parent
c9fa7a3051
commit
42824f786e
File diff suppressed because one or more lines are too long
|
|
@ -0,0 +1,30 @@
|
|||
# 使用遷移學習對牛津寵物進行分類
|
||||
|
||||
來自 [AI for Beginners Curriculum](https://github.com/microsoft/ai-for-beginners) 的實驗作業。
|
||||
|
||||
## 任務
|
||||
|
||||
想像一下,你需要為一間寵物托兒所開發一個應用程式,用來記錄所有的寵物。這個應用程式的一個很棒的功能就是能夠從照片中自動識別寵物的品種。在這次作業中,我們將使用遷移學習來對 [Oxford-IIIT](https://www.robots.ox.ac.uk/~vgg/data/pets/) 寵物數據集中的真實寵物圖片進行分類。
|
||||
|
||||
## 數據集
|
||||
|
||||
我們將使用原始的 [Oxford-IIIT](https://www.robots.ox.ac.uk/~vgg/data/pets/) 寵物數據集,該數據集包含 35 種不同品種的狗和貓。
|
||||
|
||||
要下載數據集,請使用以下程式碼片段:
|
||||
|
||||
```python
|
||||
!wget https://www.robots.ox.ac.uk/~vgg/data/pets/data/images.tar.gz
|
||||
!tar xfz images.tar.gz
|
||||
!rm images.tar.gz
|
||||
```
|
||||
|
||||
## 開始筆記本
|
||||
|
||||
通過打開 [OxfordPets.ipynb](../../../../../../lessons/4-ComputerVision/08-TransferLearning/lab/OxfordPets.ipynb) 開始這次實驗。
|
||||
|
||||
## 重點
|
||||
|
||||
遷移學習和預訓練網絡使我們能夠相對輕鬆地解決現實世界中的圖像分類問題。然而,預訓練網絡在處理類似類型的圖像時效果較好,如果我們開始分類非常不同的圖像(例如醫學圖像),結果可能會差得多。
|
||||
|
||||
**免責聲明**:
|
||||
本文件已使用人工智能翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。儘管我們致力於提供準確的翻譯,請注意自動翻譯可能包含錯誤或不準確之處。原始文件的母語版本應被視為權威來源。對於重要信息,建議使用專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或錯誤解釋概不負責。
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
|
@ -0,0 +1,100 @@
|
|||
# 自動編碼器
|
||||
|
||||
在訓練 CNN 時,其中一個問題是需要大量標註的數據。在圖像分類的情況下,我們需要將圖像分成不同的類別,這是一項手動工作。
|
||||
|
||||
## [課前測驗](https://ff-quizzes.netlify.app/en/ai/quiz/17)
|
||||
|
||||
然而,我們可能希望使用原始(未標註)的數據來訓練 CNN 特徵提取器,這被稱為**自監督學習**。在這種情況下,我們使用訓練圖像作為網絡的輸入和輸出。**自動編碼器**的主要思想是,我們會有一個**編碼器網絡**,將輸入圖像轉換為某種**潛在空間**(通常是一個較小尺寸的向量),然後通過**解碼器網絡**來重建原始圖像。
|
||||
|
||||
> ✅ [自動編碼器](https://wikipedia.org/wiki/Autoencoder) 是“一種用於學習未標註數據的高效編碼的人工神經網絡。”
|
||||
|
||||
由於我們訓練自動編碼器以捕捉原始圖像中的盡可能多的信息以進行準確重建,網絡會嘗試找到最佳的**嵌入**方式來捕捉輸入圖像的含義。
|
||||
|
||||

|
||||
|
||||
> 圖片來源:[Keras 博客](https://blog.keras.io/building-autoencoders-in-keras.html)
|
||||
|
||||
## 使用自動編碼器的場景
|
||||
|
||||
雖然重建原始圖像本身似乎並不有用,但在某些場景下,自動編碼器非常有用:
|
||||
|
||||
* **降低圖像的維度以進行可視化**或**訓練圖像嵌入**。通常,自動編碼器比 PCA 效果更好,因為它考慮了圖像的空間特性和層次特徵。
|
||||
* **去噪**,即去除圖像中的噪點。由於噪點包含大量無用信息,自動編碼器無法將所有噪點壓縮到相對較小的潛在空間,因此它只捕捉圖像的重要部分。在訓練去噪器時,我們以原始圖像為起點,並使用人工添加噪點的圖像作為自動編碼器的輸入。
|
||||
* **超分辨率**,即提高圖像分辨率。我們以高分辨率圖像為起點,並使用低分辨率圖像作為自動編碼器的輸入。
|
||||
* **生成模型**。一旦我們訓練了自動編碼器,解碼器部分可以用來從隨機潛在向量生成新物體。
|
||||
|
||||
## 變分自動編碼器 (VAE)
|
||||
|
||||
傳統的自動編碼器以某種方式降低輸入數據的維度,找出輸入圖像的重要特徵。然而,潛在向量通常沒有太多意義。換句話說,以 MNIST 數據集為例,找出哪些數字對應於不同的潛在向量並不容易,因為相近的潛在向量不一定對應於相同的數字。
|
||||
|
||||
另一方面,為了訓練*生成*模型,了解潛在空間會更好。這一想法引導我們走向**變分自動編碼器** (VAE)。
|
||||
|
||||
VAE 是一種自動編碼器,它學習預測潛在參數的*統計分佈*,即所謂的**潛在分佈**。例如,我們可能希望潛在向量呈正態分佈,具有某些均值 z<sub>mean</sub> 和標準差 z<sub>sigma</sub>(均值和標準差都是某個維度 d 的向量)。VAE 的編碼器學習預測這些參數,然後解碼器從該分佈中取隨機向量以重建物體。
|
||||
|
||||
總結如下:
|
||||
|
||||
* 從輸入向量中,我們預測 `z_mean` 和 `z_log_sigma`(不是直接預測標準差,而是預測其對數)
|
||||
* 從分佈 N(z<sub>mean</sub>,exp(z<sub>log\_sigma</sub>)) 中抽樣一個向量 `sample`
|
||||
* 解碼器嘗試使用 `sample` 作為輸入向量解碼原始圖像
|
||||
|
||||
<img src="../../../../../translated_images/zh-HK/vae.464c465a5b6a9e25.webp" width="50%">
|
||||
|
||||
> 圖片來源:[這篇博客文章](https://ijdykeman.github.io/ml/2016/12/21/cvae.html) 作者 Isaak Dykeman
|
||||
|
||||
變分自動編碼器使用一個由兩部分組成的複雜損失函數:
|
||||
|
||||
* **重建損失**是顯示重建圖像與目標圖像有多接近的損失函數(可以是均方誤差,或 MSE)。這與普通自動編碼器的損失函數相同。
|
||||
* **KL 損失**,確保潛在變量分佈接近正態分佈。它基於 [Kullback-Leibler 散度](https://www.countbayesie.com/blog/2017/5/9/kullback-leibler-divergence-explained) 的概念——一種估算兩個統計分佈相似程度的度量。
|
||||
|
||||
VAE 的一個重要優勢是它使生成新圖像變得相對容易,因為我們知道從哪個分佈中抽樣潛在向量。例如,如果我們在 MNIST 上用 2D 潛在向量訓練 VAE,我們可以改變潛在向量的組件以獲得不同的數字:
|
||||
|
||||
<img alt="vaemnist" src="../../../../../translated_images/zh-HK/vaemnist.cab9e602dc08dc50.webp" width="50%"/>
|
||||
|
||||
> 圖片來源:[Dmitry Soshnikov](http://soshnikov.com)
|
||||
|
||||
觀察圖像如何相互融合,當我們開始從潛在參數空間的不同部分獲取潛在向量時。我們還可以在 2D 中可視化這個空間:
|
||||
|
||||
<img alt="vaemnist cluster" src="../../../../../translated_images/zh-HK/vaemnist-diag.694315f775d5d666.webp" width="50%"/>
|
||||
|
||||
> 圖片來源:[Dmitry Soshnikov](http://soshnikov.com)
|
||||
|
||||
## ✍️ 練習:自動編碼器
|
||||
|
||||
在以下筆記本中了解更多關於自動編碼器的內容:
|
||||
|
||||
* [TensorFlow 中的自動編碼器](AutoencodersTF.ipynb)
|
||||
* [PyTorch 中的自動編碼器](AutoEncodersPyTorch.ipynb)
|
||||
|
||||
## 自動編碼器的特性
|
||||
|
||||
* **數據特定** - 它們僅適用於訓練時使用的圖像類型。例如,如果我們在花卉上訓練超分辨率網絡,它在肖像上效果不佳。這是因為網絡可以通過從訓練數據集中學到的特徵中提取細節來生成高分辨率圖像。
|
||||
* **有損** - 重建的圖像與原始圖像並不完全相同。損失的性質由訓練期間使用的*損失函數*定義。
|
||||
* 適用於**未標註數據**
|
||||
|
||||
## [課後測驗](https://ff-quizzes.netlify.app/en/ai/quiz/18)
|
||||
|
||||
## 結論
|
||||
|
||||
在本課中,您學習了 AI 科學家可用的各種類型的自動編碼器。您學習了如何構建它們,以及如何使用它們重建圖像。您還學習了 VAE 以及如何使用它生成新圖像。
|
||||
|
||||
## 🚀 挑戰
|
||||
|
||||
在本課中,您學習了如何使用自動編碼器處理圖像。但它們也可以用於音樂!查看 Magenta 項目的 [MusicVAE](https://magenta.tensorflow.org/music-vae) 項目,它使用自動編碼器學習重建音樂。使用此庫進行一些[實驗](https://colab.research.google.com/github/magenta/magenta-demos/blob/master/colab-notebooks/Multitrack_MusicVAE.ipynb),看看您能創造出什麼。
|
||||
|
||||
## [課後測驗](https://ff-quizzes.netlify.app/en/ai/quiz/16)
|
||||
|
||||
## 回顧與自學
|
||||
|
||||
作為參考,您可以在以下資源中閱讀更多關於自動編碼器的內容:
|
||||
|
||||
* [在 Keras 中構建自動編碼器](https://blog.keras.io/building-autoencoders-in-keras.html)
|
||||
* [NeuroHive 博客文章](https://neurohive.io/ru/osnovy-data-science/variacionnyj-avtojenkoder-vae/)
|
||||
* [變分自動編碼器解析](https://kvfrans.com/variational-autoencoders-explained/)
|
||||
* [條件變分自動編碼器](https://ijdykeman.github.io/ml/2016/12/21/cvae.html)
|
||||
|
||||
## 作業
|
||||
|
||||
在 [使用 TensorFlow 的筆記本](AutoencodersTF.ipynb) 的末尾,您會找到一個“任務”——將其作為您的作業。
|
||||
|
||||
---
|
||||
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
|
@ -0,0 +1,101 @@
|
|||
# 生成對抗網絡
|
||||
|
||||
在上一節中,我們學習了**生成模型**:能夠生成與訓練數據集中的圖像相似的新圖像的模型。VAE 是生成模型的一個好例子。
|
||||
|
||||
## [課前測驗](https://ff-quizzes.netlify.app/en/ai/quiz/19)
|
||||
|
||||
然而,如果我們嘗試生成一些真正有意義的東西,比如一幅合理分辨率的畫作,使用 VAE 可能會發現訓練效果不佳。針對這種需求,我們需要了解另一種專門針對生成模型的架構——**生成對抗網絡**,簡稱 GAN。
|
||||
|
||||
GAN 的核心思想是使用兩個神經網絡相互對抗進行訓練:
|
||||
|
||||
<img src="../../../../../translated_images/zh-HK/gan_architecture.8f3a5ab62b8d5d69.webp" width="70%"/>
|
||||
|
||||
> 圖片來源:[Dmitry Soshnikov](http://soshnikov.com)
|
||||
|
||||
> ✅ 一些術語:
|
||||
> * **生成器**是一個網絡,它接收一些隨機向量並生成圖像作為結果。
|
||||
> * **判別器**是一個網絡,它接收一張圖像並判斷該圖像是真實圖像(來自訓練數據集)還是由生成器生成的。它本質上是一個圖像分類器。
|
||||
|
||||
### 判別器
|
||||
|
||||
判別器的架構與普通的圖像分類網絡並無不同。最簡單的情況下,它可以是一個全連接分類器,但更常見的是使用[卷積網絡](../07-ConvNets/README.md)。
|
||||
|
||||
> ✅ 基於卷積網絡的 GAN 被稱為 [DCGAN](https://arxiv.org/pdf/1511.06434.pdf)
|
||||
|
||||
CNN 判別器由以下層組成:幾個卷積+池化層(空間尺寸逐漸減小),以及一個或多個全連接層以獲得“特徵向量”,最後是一個二元分類器。
|
||||
|
||||
> ✅ 在這裡,“池化”是一種減少圖像尺寸的技術。“池化層通過將一層中神經元集群的輸出合併到下一層的一個神經元中來減少數據的維度。” - [來源](https://wikipedia.org/wiki/Convolutional_neural_network#Pooling_layers)
|
||||
|
||||
### 生成器
|
||||
|
||||
生成器稍微複雜一些。可以將其視為判別器的反向版本。從一個潛在向量(代替特徵向量)開始,它使用一個全連接層將其轉換為所需的尺寸/形狀,然後進行反卷積+上採樣。這類似於[自編碼器](../09-Autoencoders/README.md)的*解碼器*部分。
|
||||
|
||||
> ✅ 由於卷積層是通過線性濾波器遍歷圖像來實現的,反卷積本質上與卷積相似,可以使用相同的層邏輯來實現。
|
||||
|
||||
<img src="../../../../../translated_images/zh-HK/gan_arch_detail.46b95fd366f8e543.webp" width="70%"/>
|
||||
|
||||
> 圖片來源:[Dmitry Soshnikov](http://soshnikov.com)
|
||||
|
||||
### 訓練 GAN
|
||||
|
||||
GAN 被稱為**對抗性**,因為生成器和判別器之間存在持續的競爭。在這種競爭中,生成器和判別器都會改進,從而使網絡學習生成越來越好的圖像。
|
||||
|
||||
訓練分為兩個階段:
|
||||
|
||||
* **訓練判別器**。這個任務相對簡單:我們生成一批由生成器生成的圖像,標記為 0(代表假圖像),並從輸入數據集中取一批圖像(標記為 1,真實圖像)。我們獲得一些*判別器損失*,然後進行反向傳播。
|
||||
* **訓練生成器**。這稍微複雜一些,因為我們無法直接知道生成器的期望輸出。我們將整個 GAN 網絡(由生成器和判別器組成)輸入一些隨機向量,期望結果為 1(對應於真實圖像)。然後我們凍結判別器的參數(此步驟不希望判別器被訓練),並進行反向傳播。
|
||||
|
||||
在此過程中,生成器和判別器的損失通常不會顯著下降。在理想情況下,它們應該呈現振盪,表明兩個網絡都在改進其性能。
|
||||
|
||||
## ✍️ 練習:GANs
|
||||
|
||||
* [TensorFlow/Keras 的 GAN Notebook](GANTF.ipynb)
|
||||
* [PyTorch 的 GAN Notebook](GANPyTorch.ipynb)
|
||||
|
||||
### GAN 訓練的問題
|
||||
|
||||
GAN 以訓練困難而聞名。以下是一些常見問題:
|
||||
|
||||
* **模式崩塌**。這指的是生成器學會生成一個成功欺騙判別器的圖像,而不是生成多樣化的圖像。
|
||||
* **對超參數的敏感性**。有時 GAN 可能完全無法收斂,但突然降低學習率後可能會收斂。
|
||||
* **保持生成器和判別器之間的平衡**。在許多情況下,判別器的損失可能會迅速降到零,導致生成器無法進一步訓練。為了解決這個問題,我們可以嘗試為生成器和判別器設置不同的學習率,或者在判別器損失已經很低時跳過判別器的訓練。
|
||||
* **高分辨率訓練**。與自編碼器的問題類似,重建太多層的卷積網絡會導致伪影。通常通過所謂的**漸進式增長**來解決此問題,首先在低分辨率圖像上訓練幾層,然後“解鎖”或添加層。另一種解決方案是增加層之間的額外連接並同時訓練多個分辨率——詳情請參閱這篇[多尺度梯度 GANs 論文](https://arxiv.org/abs/1903.06048)。
|
||||
|
||||
## 風格遷移
|
||||
|
||||
GAN 是生成藝術圖像的絕佳方式。另一種有趣的技術是所謂的**風格遷移**,它將一張**內容圖像**重新繪製成不同的風格,應用來自**風格圖像**的濾鏡。
|
||||
|
||||
其工作原理如下:
|
||||
* 我們從一張隨機噪聲圖像開始(或者從內容圖像開始,但為了便於理解,從隨機噪聲開始更容易)
|
||||
* 我們的目標是創建一張既接近內容圖像又接近風格圖像的圖像。這由兩個損失函數決定:
|
||||
- **內容損失**基於 CNN 從當前圖像和內容圖像的某些層提取的特徵計算
|
||||
- **風格損失**通過使用 Gram 矩陣在當前圖像和風格圖像之間進行巧妙計算(更多細節請參閱[示例 Notebook](StyleTransfer.ipynb))
|
||||
* 為了使圖像更平滑並去除噪聲,我們還引入了**變異損失**,它計算相鄰像素之間的平均距離
|
||||
* 主優化循環使用梯度下降(或其他優化算法)調整當前圖像以最小化總損失,總損失是所有三個損失的加權和。
|
||||
|
||||
## ✍️ 示例:[風格遷移](StyleTransfer.ipynb)
|
||||
|
||||
## [課後測驗](https://ff-quizzes.netlify.app/en/ai/quiz/20)
|
||||
|
||||
## 總結
|
||||
|
||||
在本課中,你學習了 GANs 及其訓練方法。你還了解了這類神經網絡可能面臨的特殊挑戰,以及一些解決這些挑戰的策略。
|
||||
|
||||
## 🚀 挑戰
|
||||
|
||||
使用你的圖像運行[風格遷移 Notebook](StyleTransfer.ipynb)。
|
||||
|
||||
## 回顧與自學
|
||||
|
||||
參考以下資源以了解更多關於 GANs 的信息:
|
||||
|
||||
* Marco Pasini,[我一年訓練 GANs 的 10 個教訓](https://towardsdatascience.com/10-lessons-i-learned-training-generative-adversarial-networks-gans-for-a-year-c9071159628)
|
||||
* [StyleGAN](https://en.wikipedia.org/wiki/StyleGAN),一個值得考慮的 GAN 架構
|
||||
* [在 Azure ML 上使用 GANs 創建生成藝術](https://soshnikov.com/scienceart/creating-generative-art-using-gan-on-azureml/)
|
||||
|
||||
## 作業
|
||||
|
||||
重新訪問本課程相關的兩個 Notebook 中的一個,並使用自己的圖像重新訓練 GAN。你能創造出什麼?
|
||||
|
||||
---
|
||||
|
||||
Loading…
Reference in New Issue