<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                # 用 Keras 進行深度學習的圖像增強 > 原文: [https://machinelearningmastery.com/image-augmentation-deep-learning-keras/](https://machinelearningmastery.com/image-augmentation-deep-learning-keras/) 使用神經網絡和深度學習模型時,需要進行數據處理,更復雜的物體識別任務也需要越來越多數據增強。 在本文中,您將了解如何在使用 Keras 開發和評估 Python 中的深度學習模型時,使用數據預處理和數據增強處理圖像數據集。 閱讀這篇文章后,你會知道: * 關于 Keras 提供的圖像增強 API 以及如何將其與模型一起使用。 * 如何執行特征標準化。 * 如何對圖像執行 ZCA 白化。 * 如何使用隨機旋轉,移位和翻轉來增加數據。 * 如何將增強的圖像數據保存到磁盤。 讓我們開始吧。 * **更新**:本文中的示例已針對最新的 Keras API 進行了更新, `datagen.next()`函數已被刪除。 * **2016 年 10 月更新**:更新了 Keras 1.1.0,TensorFlow 0.10.0 和 scikit-learn v0.18 的示例。 * **2017 年 1 月更新**:更新了 Keras 1.2.0 和 TensorFlow 0.12.1 的示例。 * **2017 年 3 月更新**:更新了 Keras 2.0.2,TensorFlow 1.0.1 和 Theano 0.9.0 的示例。 ## Keras 圖像增謙API 與 Keras 的其他部分一樣,圖像增強 API 簡單而強大。 Keras 提供 [ImageDataGenerator](http://keras.io/preprocessing/image/) 類,用于定義圖像數據準備和擴充的配置。這包括以下功能: * 樣本標準化。 * 特征標準化。 * ZCA 白化。 * 隨機旋轉,移位,剪切和翻轉。 * 維數重組。 * 將增強的圖像保存到磁盤。 可以如下創建增強圖像生成器: ```py datagen = ImageDataGenerator() ``` API 不是在內存中對整個圖像數據集執行操作,而是通過深度學習模型擬合過程進行迭代,為您及時創建增強的圖像數據,這可以減少內存開銷,但在模型訓練期間會增加一些額外的時間成本。 創建并配置 **ImageDataGenerator** 后,你需要通過數據擬合,這個過程將計算實際執行圖像數據轉換所需的任何統計信息,您可以通過調用數據生成器上的`fit()`函數并將其傳遞給訓練數據集來完成此操作。 ```py datagen.fit(train) ``` 數據生成器本身實際上是一個迭代器,在請求時返回批量的圖像樣本。我們可以通過調用 `flow()`函數來配置批量大小并準備數據生成器并獲取批量圖像。 ```py X_batch, y_batch = datagen.flow(train, train, batch_size=32) ``` 最后我們可以使用數據生成器,我們必須調用 `fit_generator()`函數并傳入數據生成器和所需的時間長度,訓練的迭代次數以及總數,而不是在我們的模型上調用 `fit()`函數。 ```py fit_generator(datagen, samples_per_epoch=len(train), epochs=100) ``` 您可以在 Keras 文檔中了解有關 Keras 圖像[數據生成器 API 的更多信息。](http://keras.io/preprocessing/image/) ## 圖像增強的比較點 既然您已了解 Keras 中的圖像增強 API 的工作原理,那么讓我們看一些示例。 我們將在這些示例中使用 MNIST 手寫數字識別任務。首先,讓我們看一下訓練數據集中的前 9 個圖像。 ```py # 繪制圖像 from keras.datasets import mnist from matplotlib import pyplot # 加載數據 (X_train, y_train), (X_test, y_test) = mnist.load_data() # 創建一個3×3的網格圖像 for i in range(0, 9): pyplot.subplot(330 + 1 + i) pyplot.imshow(X_train[i], cmap=pyplot.get_cmap('gray')) # 顯示圖像 pyplot.show() ``` 運行此示例提供了以下圖像,可以將以下示例中的圖像處理和增強當作一個比較點。 ![Example MNIST images](https://img.kancloud.cn/57/18/5718dd772812d566058ede896f96342e_800x600.png) 示例 MNIST 圖像 ## 特征標準化 還可以標準化整個數據集中的像素值,這稱為特征標準化,并反映了通常對表格數據集中的每列執行的標準化類型。 您可以通過在 ImageDataGenerator 類上設置 featurewise_center 和 featurewise_std_normalization 參數來執行特征標準化。實際上,默認情況下這些參數設置為 True,并且創建沒有參數的 ImageDataGenerator 實例將具有相同的效果。 ```py # 標準化圖像數據集,均值為0,方差為1 from keras.datasets import mnist from keras.preprocessing.image import ImageDataGenerator from matplotlib import pyplot from keras import backend as K K.set_image_dim_ordering('th') # 加載數據 (X_train, y_train), (X_test, y_test) = mnist.load_data() # 將圖像轉換為一維數據 高度×寬度×通道 X_train = X_train.reshape(X_train.shape[0], 1, 28, 28) X_test = X_test.reshape(X_test.shape[0], 1, 28, 28) # 將int類型轉化為float型 X_train = X_train.astype('float32') X_test = X_test.astype('float32') # 定義數據處理 datagen = ImageDataGenerator(featurewise_center=True, featurewise_std_normalization=True) # fit parameters from data datagen.fit(X_train) # configure batch size and retrieve one batch of images for X_batch, y_batch in datagen.flow(X_train, y_train, batch_size=9): # 創建3×3的網個圖像 for i in range(0, 9): pyplot.subplot(330 + 1 + i) pyplot.imshow(X_batch[i].reshape(28, 28), cmap=pyplot.get_cmap('gray')) # 繪制圖像 pyplot.show() break ``` 運行此示例,您可以看到效果不同,看似變暗并使不同的數字變亮。 ![Standardized Feature MNIST Images](https://img.kancloud.cn/9e/65/9e656f9d7bb3e38873bd5ae8f09986a1_800x600.png) 標準化特征 MNIST 圖像 ## ZCA 白化 圖像的[白化變換](https://en.wikipedia.org/wiki/Whitening_transformation)是線性代數運算,其減少了像素圖像矩陣中的冗余。 圖像中較少的冗余旨在更好地突出圖像中的結構和特征并應用到學習算法。 通常,使用主成分分析(PCA)技術執行圖像白化。最近,一種名為 [ZCA](http://ufldl.stanford.edu/wiki/index.php/Whitening) 的替代方案([在本技術報告](http://www.cs.toronto.edu/~kriz/learning-features-2009-TR.pdf)的附錄 A 中了解更多)顯示了更好的結果和結果,在轉換后的圖像中保留了所有原始尺寸,與 PCA 不同,變換后的圖像看起來仍然像他們的原件。 您可以通過將 zca_whitening 參數設置為 True 來執行 ZCA 白化轉換。 ```py # ZCA 白化 from keras.datasets import mnist from keras.preprocessing.image import ImageDataGenerator from matplotlib import pyplot from keras import backend as K K.set_image_dim_ordering('th') # 加載數據集 (X_train, y_train), (X_test, y_test) = mnist.load_data() # 將圖像轉換為一維數據 高度×寬度×通道 X_train = X_train.reshape(X_train.shape[0], 1, 28, 28) X_test = X_test.reshape(X_test.shape[0], 1, 28, 28) # 將int類型轉化為float型 X_train = X_train.astype('float32') X_test = X_test.astype('float32') # 定義數據處理 datagen = ImageDataGenerator(zca_whitening=True) # 從數據中擬合參數 datagen.fit(X_train) # configure batch size and retrieve one batch of images for X_batch, y_batch in datagen.flow(X_train, y_train, batch_size=9): # 創建個3×3的網格圖像 for i in range(0, 9): pyplot.subplot(330 + 1 + i) pyplot.imshow(X_batch[i].reshape(28, 28), cmap=pyplot.get_cmap('gray')) # 顯示圖像 pyplot.show() break ``` 運行該示例,您可以在圖像中看到相同的一般結構,以及如何突出顯示每個數字的輪廓。 ![ZCA Whitening MNIST Images](https://img.kancloud.cn/61/c2/61c25903681cde0ca6eec0bb2e22fe7f_800x600.png) ZCA 白化 MNIST 圖像 ## 隨機旋轉 有時,樣本數據中的圖像可能在不同場景中具有不同的角度。 您可以訓練模型,以便在訓練期間通過人工和隨機旋轉數據集中的圖像來更好地處理圖像旋轉。 下面的示例通過設置 rotation_range 參數創建最多 達90 度的 MNIST 數字的隨機旋轉。 ```py # 隨機旋轉 from keras.datasets import mnist from keras.preprocessing.image import ImageDataGenerator from matplotlib import pyplot from keras import backend as K K.set_image_dim_ordering('th') # 加載數據 (X_train, y_train), (X_test, y_test) = mnist.load_data() # 將圖像轉換為一維數據 高度×寬度×通道 X_train = X_train.reshape(X_train.shape[0], 1, 28, 28) X_test = X_test.reshape(X_test.shape[0], 1, 28, 28) # 將int類型轉化為float類型 X_train = X_train.astype('float32') X_test = X_test.astype('float32') # 定義數據處理 datagen = ImageDataGenerator(rotation_range=90) # 從數據中擬合參數 datagen.fit(X_train) # configure batch size and retrieve one batch of images for X_batch, y_batch in datagen.flow(X_train, y_train, batch_size=9): # 創建3×3的網格圖像 for i in range(0, 9): pyplot.subplot(330 + 1 + i) pyplot.imshow(X_batch[i].reshape(28, 28), cmap=pyplot.get_cmap('gray')) # 顯示圖像 pyplot.show() break ``` 運行該示例,您可以看到圖像已經發生了旋轉,并且最大角度達到了90度,這對具有標準方向的MINIST的數字來說,可能意義不大,但是當學習的照片中物體具有不同的方向時,這種變換可能會有所幫助。 ![Random Rotations of MNIST Images](https://img.kancloud.cn/61/80/61802421505e8da8d18a676efba17710_800x600.png) MNIST 圖像的隨機旋轉 ## 隨機移位 圖像中的物體可能無法在框架中居中。他們可能以各種不同的方式偏離中心。 您可以通過人工創建訓練數據的移位版本來訓練您的深度學習網絡以期望并且當前處理偏離中心的對象。 Keras 通過 width_shift_range 和 height_shift_range 參數支持訓練數據的水平移位或者垂直移位。 ```py # 隨機移位 from keras.datasets import mnist from keras.preprocessing.image import ImageDataGenerator from matplotlib import pyplot from keras import backend as K K.set_image_dim_ordering('th') # 加載數據集 (X_train, y_train), (X_test, y_test) = mnist.load_data() # 將圖像轉換為一維數據 高度×寬度×通道 X_train = X_train.reshape(X_train.shape[0], 1, 28, 28) X_test = X_test.reshape(X_test.shape[0], 1, 28, 28) # 將數據集從int類型轉化為float類型 X_train = X_train.astype('float32') X_test = X_test.astype('float32') # 定義數據處理 shift = 0.2 datagen = ImageDataGenerator(width_shift_range=shift, height_shift_range=shift) # 從數據中擬合參數 datagen.fit(X_train) # configure batch size and retrieve one batch of images for X_batch, y_batch in datagen.flow(X_train, y_train, batch_size=9): # 創建個3×3的網格圖像 for i in range(0, 9): pyplot.subplot(330 + 1 + i) pyplot.imshow(X_batch[i].reshape(28, 28), cmap=pyplot.get_cmap('gray')) # 顯示圖像 pyplot.show() break ``` 運行此示例會創建數字的移位版本,同樣,這不是 MNIST 所必需的,因為手寫數字已經居中,但您可以看到這種操作對于更復雜的問題有何幫助。 ![Random Shifted MNIST Images](https://img.kancloud.cn/15/5a/155ad5e9523b3cac46f46c50a30e4c79_800x600.png) 隨機移位的 MNIST 圖像 ## 隨機翻轉 另一種可以提高大型復雜問題表現的圖像數據增強函數是在訓練數據中創建隨機翻轉的圖像。 Keras 支持使用 vertical_flip 和 horizontal_flip 參數沿垂直軸和水平軸進行隨機翻轉。 ```py # 隨機翻轉 from keras.datasets import mnist from keras.preprocessing.image import ImageDataGenerator from matplotlib import pyplot from keras import backend as K K.set_image_dim_ordering('th') # 加載數據集 (X_train, y_train), (X_test, y_test) = mnist.load_data() # 將圖像轉換為一維數據 高度×寬度×通道 X_train = X_train.reshape(X_train.shape[0], 1, 28, 28) X_test = X_test.reshape(X_test.shape[0], 1, 28, 28) # 將int類型轉化為float類型 X_train = X_train.astype('float32') X_test = X_test.astype('float32') # 定義數據處理 datagen = ImageDataGenerator(horizontal_flip=True, vertical_flip=True) # 從數據中擬合參數 datagen.fit(X_train) # configure batch size and retrieve one batch of images for X_batch, y_batch in datagen.flow(X_train, y_train, batch_size=9): # 創建一個3×3的網格圖像 for i in range(0, 9): pyplot.subplot(330 + 1 + i) pyplot.imshow(X_batch[i].reshape(28, 28), cmap=pyplot.get_cmap('gray')) # 顯示圖像 pyplot.show() break ``` 運行此示例,您可以看到翻轉的數字,翻轉的圖像對于總是有正確左右方向的數據可能沒有用,但這對于場景中可以具有不同方向的物體的照片的問題可能是有所幫助的 ![Randomly Flipped MNIST Images](https://img.kancloud.cn/fa/9e/fa9e80920f95f54fee81eb28e178cdd2_800x600.png) 隨機翻轉 MNIST 圖像 ## 將增強圖像保存到文件 數據準備和增強由 Keras 及時執行。 這在內存方面很有效,但您可能需要在訓練期間使用的確切圖像,例如,您可能希望稍后將它們與不同的軟件包一起使用,或者僅生成一次并在多個不同的深度學習模型或配置中使用它們。 Keras 允許您保存訓練期間生成的圖像,可以在訓練之前將目錄,文件名前綴和圖像文件類型指定給`flow()`函數,然后,在訓練期間,生成的圖像將會被寫入文件。 下面的示例演示了這一點,并將 9 個圖像寫入“images”子目錄,前綴為“aug”,文件類型為 PNG。 ```py # 將增強之后的圖像保存到文件中 from keras.datasets import mnist from keras.preprocessing.image import ImageDataGenerator from matplotlib import pyplot import os from keras import backend as K K.set_image_dim_ordering('th') # 加載數據集 (X_train, y_train), (X_test, y_test) = mnist.load_data() # 將圖像轉換為一維數據 高度×寬度×通道 X_train = X_train.reshape(X_train.shape[0], 1, 28, 28) X_test = X_test.reshape(X_test.shape[0], 1, 28, 28) # 將int類型轉換為float類型 X_train = X_train.astype('float32') X_test = X_test.astype('float32') # 定義數據處理 datagen = ImageDataGenerator() # 從數據中擬合參數 datagen.fit(X_train) # 配置批大小并且保存一個批大小的圖像數量 os.makedirs('images') for X_batch, y_batch in datagen.flow(X_train, y_train, batch_size=9, save_to_dir='images', save_prefix='aug', save_format='png'): # 創建一個3×3的圖像網格 for i in range(0, 9): pyplot.subplot(330 + 1 + i) pyplot.imshow(X_batch[i].reshape(28, 28), cmap=pyplot.get_cmap('gray')) # 顯示圖像 pyplot.show() break ``` 運行該示例,您可以看到圖像僅在生成時寫入。 ![Augmented MNIST Images Saved To File](https://img.kancloud.cn/65/dd/65dd1436adbf4acad2fb50445a1e505c_543x342.png) 增強的 MNIST 圖像保存到文件 ## 使用 Keras 增強圖像數據的技巧 圖像數據的獨特之處在于,您可以查看數據和轉換的數據副本,并快速了解模型如何感知模型。 以下是一些從圖像數據準備和深度學習擴充中獲取最多的技巧。 * **審查數據集**:花些時間詳細檢查您的數據集,看看圖片,記下可能有益于模型訓練過程的圖像處理和擴充,例如需要處理場景中對象的不同移位,旋轉或翻轉。 * **審查增補**:在執行增強后查看樣本圖像,在理智上知道您正在使用的圖像變換是一回事,看一些例子是一件非常不同的事情,使用您正在使用的單個擴充以及您計劃使用的全部擴充來查看圖像,您可能會看到簡化或進一步增強模型訓練流程的方法。 * **評估變換套件**:嘗試多個圖像數據準備和增強方案,通常,您可能會對您認為不會有益的數據處理方案的結果感到驚訝。 ## 摘要 在這篇文章中,您學習了圖像數據的處理和擴充。 您發現了一系列技術,您可以在 Python 中輕松使用 Keras 進行深度學習模型。你了解到: * Keras 中的 ImageDataGenerator API 用于及時生成轉換后的圖像。 * 樣本和特征的像素標準化。 * ZCA 白化。 * 隨機旋轉,移位和翻轉圖像。 * 如何將轉換后的圖像保存到文件中以供以后重用。 您對圖像數據增加或此帖有任何疑問嗎?在評論中提出您的問題,我會盡力回答。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看