<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>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                # 如何使用預訓練的 VGG 模型對照片中的物體進行分類 > 原文: [https://machinelearningmastery.com/use-pre-trained-vgg-model-classify-objects-photographs/](https://machinelearningmastery.com/use-pre-trained-vgg-model-classify-objects-photographs/) 卷積神經網絡現在能夠在某些計算機視覺任務上勝過人類,例如分類圖像。 也就是說,給定物體的照片,回答照片顯示的 1000 個特定物體中的哪一個的問題。 牛津大學研究人員的 VGG 模型是一項競爭獲勝的模型。除了能夠對照片中的物體進行分類之外,這個模型的重要之處在于模型權重是免費提供的,可以在您自己的模型和應用程序中加載和使用。 在本教程中,您將發現用于圖像分類的 VGG 卷積神經網絡模型。 完成本教程后,您將了解: * 關于 ImageNet 數據集和競爭以及 VGG 獲獎模型。 * 如何在 Keras 中加載 VGG 模型并總結其結構。 * 如何使用加載的 VGG 模型對特定照片中的對象進行分類。 讓我們開始吧。 ## 教程概述 本教程分為 4 個部分;他們是: 1. ImageNet 2. 牛津 VGG 模型 3. 在 Keras 中加載 VGG 模型 4. 開發簡單的照片分類器 ## ImageNet [ImageNet](http://www.image-net.org/) 是一個研究項目,用于開發帶有注釋的大型圖像數據庫,例如:圖像及其描述。 自 2010 年以來,這些圖像及其注釋已成為稱為 [ImageNet 大規模視覺識別挑戰](http://www.image-net.org/challenges/LSVRC/)或 ILSVRC 的圖像分類挑戰的基礎。結果是研究組織在預先定義的數據集上進行戰斗,以查看誰具有用于對圖像中的對象進行分類的最佳模型。 > ImageNet 大規模視覺識別挑戰是對象類別分類和檢測數百個對象類別和數百萬圖像的基準。從 2010 年到現在每年都在進行挑戰,吸引了來自 50 多個機構的參與。 - [ImageNet 大規模視覺識別挑戰](https://arxiv.org/abs/1409.0575),2015 年。 對于分類任務,圖像必須分為 1,000 個不同類別中的一個。 在過去幾年中,已經使用非常深度的卷積神經網絡模型來贏得這些挑戰,并且任務的結果已超過人類的表現。 ![Sample of Images from the ImageNet Dataset used in the ILSVRC Challenge](https://img.kancloud.cn/ca/48/ca48f83c4ff8e3f65cfcd74e8e69a98f_1360x1294.png) 來自“ImageNet 大規模視覺識別挑戰”的 ILSVRC 挑戰 中使用的 ImageNet 數據集的圖像樣本,2015 年。 ## 牛津 VGG 模型 來自[牛津視覺幾何組](http://www.robots.ox.ac.uk/~vgg/)(簡稱 VGG)的研究人員參與了 ILSVRC 的挑戰。 2014 年,由 VGG [開發的卷積神經網絡模型(CNN)贏得了圖像分類任務](http://image-net.org/challenges/LSVRC/2014/results)。 ![ILSVRC Results in 2014 for the Classification task](https://img.kancloud.cn/a1/3a/a13a64c016de8b17cc99d4187e3d3005_1666x700.png) ILSVRC 2014 年的分類任務結果 比賽結束后,參與者在論文中寫下了他們的發現: * [用于大規模圖像識別的非常深的卷積網絡](https://arxiv.org/abs/1409.1556),2014 年。 他們還在線提供了他們的模型和學習重量 [](http://www.robots.ox.ac.uk/~vgg/research/very_deep/) 。 這使得其他研究人員和開發人員可以在自己的工作和程序中使用最先進的圖像分類模型。 這有助于推動一系列轉移學習工作,其中使用預先訓練的模型,對全新的預測建模任務進行微小修改,利用經過驗證的模型的最先進的特征提取功能。 > ......我們提出了更加精確的 ConvNet 架構,它不僅可以實現 ILSVRC 分類和定位任務的最先進精度,而且還適用于其他圖像識別數據集,即使在用作相對簡單的管道的一部分(例如,由線性 SVM 分類的深度特征,沒有微調)。我們發布了兩個表現最佳的模型,以促進進一步的研究。 - [用于大規模圖像識別的非常深的卷積網絡](https://arxiv.org/abs/1409.1556),2014 年。 VGG 發布了兩種不同的 CNN 模型,特別是 16 層模型和 19 層模型。 有關這些型號的完整詳細信息,請參閱本文。 VGG 模型不再僅僅是幾個百分點的最新技術。然而,它們是非常強大的模型,既可用作圖像分類器,也可用作使用圖像輸入的新模型的基礎。 在下一節中,我們將看到如何在 Keras 中直接使用 VGG 模型。 ## 在 Keras 中加載 VGG 模型 可以在 Keras 深度學習庫中加載和使用 VGG 模型。 Keras 提供[應用程序界面](https://keras.io/applications/),用于加載和使用預先訓練的模型。 使用此界面,您可以使用 Oxford 組提供的預訓練權重創建 VGG 模型,并將其用作您自己模型中的起點,或者將其用作模型直接用于分類圖像。 在本教程中,我們將重點介紹使用 VGG 模型對新圖像進行分類的用例。 Keras 通過 VGG16 和 VGG19 類提供 16 層和 19 層版本。讓我們關注 VGG16 模型。 可以按如下方式創建模型: ```py from keras.applications.vgg16 import VGG16 model = VGG16() ``` 而已。 第一次運行此示例時,Keras 將從 Internet 下載權重文件并將其存儲在 _?/ .keras / models_ 目錄中。 **注意**權重約為 528 兆字節,因此下載可能需要幾分鐘,具體取決于您的 Internet 連接速度。 權重僅下載一次。下次運行示例時,權重將在本地加載,模型應該可以在幾秒鐘內使用。 我們可以使用標準的 Keras 工具來檢查模型結構。 例如,您可以打印網絡層的摘要,如下所示: ```py from keras.applications.vgg16 import VGG16 model = VGG16() print(model.summary()) ``` 你可以看到模型很大。 您還可以看到,默認情況下,模型要求圖像作為輸入,大小為 224 x 224 像素,具有 3 個通道(例如顏色)。 ```py _________________________________________________________________ Layer (type) Output Shape Param # ================================================================= input_1 (InputLayer) (None, 224, 224, 3) 0 _________________________________________________________________ block1_conv1 (Conv2D) (None, 224, 224, 64) 1792 _________________________________________________________________ block1_conv2 (Conv2D) (None, 224, 224, 64) 36928 _________________________________________________________________ block1_pool (MaxPooling2D) (None, 112, 112, 64) 0 _________________________________________________________________ block2_conv1 (Conv2D) (None, 112, 112, 128) 73856 _________________________________________________________________ block2_conv2 (Conv2D) (None, 112, 112, 128) 147584 _________________________________________________________________ block2_pool (MaxPooling2D) (None, 56, 56, 128) 0 _________________________________________________________________ block3_conv1 (Conv2D) (None, 56, 56, 256) 295168 _________________________________________________________________ block3_conv2 (Conv2D) (None, 56, 56, 256) 590080 _________________________________________________________________ block3_conv3 (Conv2D) (None, 56, 56, 256) 590080 _________________________________________________________________ block3_pool (MaxPooling2D) (None, 28, 28, 256) 0 _________________________________________________________________ block4_conv1 (Conv2D) (None, 28, 28, 512) 1180160 _________________________________________________________________ block4_conv2 (Conv2D) (None, 28, 28, 512) 2359808 _________________________________________________________________ block4_conv3 (Conv2D) (None, 28, 28, 512) 2359808 _________________________________________________________________ block4_pool (MaxPooling2D) (None, 14, 14, 512) 0 _________________________________________________________________ block5_conv1 (Conv2D) (None, 14, 14, 512) 2359808 _________________________________________________________________ block5_conv2 (Conv2D) (None, 14, 14, 512) 2359808 _________________________________________________________________ block5_conv3 (Conv2D) (None, 14, 14, 512) 2359808 _________________________________________________________________ block5_pool (MaxPooling2D) (None, 7, 7, 512) 0 _________________________________________________________________ flatten (Flatten) (None, 25088) 0 _________________________________________________________________ fc1 (Dense) (None, 4096) 102764544 _________________________________________________________________ fc2 (Dense) (None, 4096) 16781312 _________________________________________________________________ predictions (Dense) (None, 1000) 4097000 ================================================================= Total params: 138,357,544 Trainable params: 138,357,544 Non-trainable params: 0 _________________________________________________________________ ``` 我們還可以在 VGG 模型中創建層,如下所示: ```py from keras.applications.vgg16 import VGG16 from keras.utils.vis_utils import plot_model model = VGG16() plot_model(model, to_file='vgg.png') ``` 同樣,因為模型很大,情節有點太大,也許不可讀。然而,它在下面提供。 ![Plot of Layers in the VGG Model](https://img.kancloud.cn/5b/52/5b52a65e9b80e1913a54477343c41479_251x2201.png) VGG 模型中的層圖 _VGG()_ 類需要一些參數,如果您希望在自己的項目中使用該模型,可能只會感興趣。轉學習。 例如: * **include_top** ( _True_ ):是否包含模型的輸出層。如果您根據自己的問題擬合模型,則不需要這些。 * **權重**(' _imagenet_ '):要加載的權重。如果您有興趣從頭開始訓練模型,則可以指定“無”以不加載預先訓練的權重。 * **input_tensor** (_ 無 _):如果您打算在不同大小的新數據上擬合模型,則為新輸入層。 * **input_shape** (_ 無 _):如果更改輸入層,模型應采用的圖像大小。 * **匯集**(_ 無 _):訓練一組新輸出層時要使用的池類型。 * **類**( _1000_ ):模型的類數(例如輸出向量的大小)。 接下來,讓我們看一下使用加載的 VGG 模型對特定照片進行分類。 ## 開發簡單的照片分類器 讓我們開發一個簡單的圖像分類腳本。 ### 1.獲取樣本圖像 首先,我們需要一個可以分類的圖像。 你可以在這里從 Flickr [下載咖啡杯的隨機照片。](https://www.flickr.com/photos/jfanaian/4994221690/) ![Coffee Mug](https://img.kancloud.cn/3f/73/3f73f998f18d3af45e58eb55c8fd79b7_640x480.png) 咖啡杯 攝影: [jfanaian](https://www.flickr.com/photos/jfanaian/4994221690/) ,保留一些權利。 下載圖像并將其保存到當前工作目錄,文件名為“ _mug.png_ ”。 ### 2.加載 VGG 模型 加載 VGG-16 型號的重量,就像我們在上一節中所做的那樣。 ```py from keras.applications.vgg16 import VGG16 # load the model model = VGG16() ``` ### 3.加載并準備圖像 接下來,我們可以將圖像作為像素數據加載并準備將其呈現給網絡。 Keras 提供了一些幫助完成此步驟的工具。 首先,我們可以使用 _load_img()_ 函數加載圖像并將其大小調整為所需的 224×224 像素大小。 ```py from keras.preprocessing.image import load_img # load an image from file image = load_img('mug.png', target_size=(224, 224)) ``` 接下來,我們可以將像素轉換為 NumPy 數組,以便我們可以在 Keras 中使用它。我們可以使用 _img_to_array()_ 函數。 ```py from keras.preprocessing.image import img_to_array # convert the image pixels to a numpy array image = img_to_array(image) ``` 網絡期望一個或多個圖像作為輸入;這意味著輸入數組需要是 4 維的:樣本,行,列和通道。 我們只有一個樣本(一個圖像)。我們可以通過調用 _reshape()_ 并添加額外的維度來重新整形數組。 ```py # reshape data for the model image = image.reshape((1, image.shape[0], image.shape[1], image.shape[2])) ``` 接下來,需要以與準備 ImageNet 訓練數據相同的方式準備圖像像素。具體來說,從論文: > 我們唯一的預處理是從每個像素中減去在訓練集上計算的平均 RGB 值。 - [用于大規模圖像識別的非常深的卷積網絡](https://arxiv.org/abs/1409.1556),2014 年。 Keras 提供了一個名為 _preprocess_input()_ 的函數來為網絡準備新的輸入。 ```py from keras.applications.vgg16 import preprocess_input # prepare the image for the VGG model image = preprocess_input(image) ``` 我們現在準備對我們加載和準備好的圖像進行預測。 ### 4.進行預測 我們可以在模型上調用 _predict()_ 函數,以便預測屬于 1000 種已知對象類型中的每一種的圖像的概率。 ```py # predict the probability across all output classes yhat = model.predict(image) ``` 幾乎在那里,現在我們需要解釋概率。 ### 5.解釋預測 Keras 提供了解釋稱為 _decode_predictions()_ 的概率的函數。 它可以返回類列表及其概率,以防您想要呈現照片中可能存在的前 3 個對象。 我們將報告第一個最可能的對象。 ```py from keras.applications.vgg16 import decode_predictions # convert the probabilities to class labels label = decode_predictions(yhat) # retrieve the most likely result, e.g. highest probability label = label[0][0] # print the classification print('%s (%.2f%%)' % (label[1], label[2]*100)) ``` 就是這樣。 ### 完整的例子 將所有這些結合在一起,下面列出了完整的示例: ```py from keras.preprocessing.image import load_img from keras.preprocessing.image import img_to_array from keras.applications.vgg16 import preprocess_input from keras.applications.vgg16 import decode_predictions from keras.applications.vgg16 import VGG16 # load the model model = VGG16() # load an image from file image = load_img('mug.png', target_size=(224, 224)) # convert the image pixels to a numpy array image = img_to_array(image) # reshape data for the model image = image.reshape((1, image.shape[0], image.shape[1], image.shape[2])) # prepare the image for the VGG model image = preprocess_input(image) # predict the probability across all output classes yhat = model.predict(image) # convert the probabilities to class labels label = decode_predictions(yhat) # retrieve the most likely result, e.g. highest probability label = label[0][0] # print the classification print('%s (%.2f%%)' % (label[1], label[2]*100)) ``` 運行該示例,我們可以看到圖像被正確分類為“_ 咖啡杯 _”,可能性為 75%。 ```py coffee_mug (75.27%) ``` ## 擴展 本節列出了一些擴展您可能希望探索的教程的想法。 * **創建一個函數**。更新示例并添加一個給定圖像文件名的函數,加載的模型將返回分類結果。 * **命令行工具**。更新示例,以便在命令行上給出圖像文件名,程序將報告圖像的分類。 * **報告多個類**。更新示例以報告給定圖像的前 5 個最可能的類及其概率。 ## 進一步閱讀 如果您要深入了解,本節將提供有關該主題的更多資源。 * [ImageNet](http://www.image-net.org/) * [維基百科上的 ImageNet](https://en.wikipedia.org/wiki/ImageNet) * [用于大規模圖像識別的非常深的卷積網絡](https://arxiv.org/abs/1409.1556),2015 年。 * [用于大規模視覺識別的非常深的卷積網絡](http://www.robots.ox.ac.uk/~vgg/research/very_deep/),位于牛津大學。 * [使用非常少的數據建立強大的圖像分類模型](https://blog.keras.io/building-powerful-image-classification-models-using-very-little-data.html),2016。 * [Keras Applications API](https://keras.io/applications/) * [Keras 重量文件](https://github.com/fchollet/deep-learning-models/releases/) ## 摘要 在本教程中,您發現了用于圖像分類的 VGG 卷積神經網絡模型。 具體來說,你學到了: * 關于 ImageNet 數據集和競爭以及 VGG 獲獎模型。 * 如何在 Keras 中加載 VGG 模型并總結其結構。 * 如何使用加載的 VGG 模型對特定照片中的對象進行分類。 你有任何問題嗎? 在下面的評論中提出您的問題,我會盡力回答。
                  <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>

                              哎呀哎呀视频在线观看