天天看點

視覺實戰|使用人工神經網絡進行圖像分類

SPCA每年要收養7000到9000隻動物,其中有一半是抛棄的寵物,例如貓,狗,兔子和豚鼠等。識别這些寵物需要一定的時間,可能會增加等待收養的時間。

視覺實戰|使用人工神經網絡進行圖像分類

NParks有一群志願者,他們會定期聚會,參加觀鳥活動,同時他們會幫助收集有關新加坡鳥類數量的資料,但不是所有的人都能正确識别鳥的種類。

視覺實戰|使用人工神經網絡進行圖像分類

本項目的目标是為這兩個組織開發一種工具:為SPCA确定動物的品種,為NParks識别鳥的種類。

這個目标可以轉化為深度學習模型的圖像分類問題。是以,我開發了一個簡單的神經網絡,然後逐漸發展到卷積神經網絡和遷移學習。

首先是建構簡單的圖像分類神經網絡,資料集使用的是pyimagesearch^1,它有3類動物:貓,狗和熊貓。資料集共有3000張圖像,每個類别有1000張圖像。

我建立了一個簡單的神經網絡模型,中間隻有1個密集層,花了大約4分鐘來訓練這個模型。

視覺實戰|使用人工神經網絡進行圖像分類

準确率達到了61%。接下來用新的圖像測試訓練好的模型。

視覺實戰|使用人工神經網絡進行圖像分類

我輸入下面這些圖像,然後神經網絡模型就可以根據最高的機率對它們進行分類。

視覺實戰|使用人工神經網絡進行圖像分類

例如,模型以58%的機率确定該動物是熊貓。但它也有腿,是以也有可能是貓或狗。

視覺實戰|使用人工神經網絡進行圖像分類

如果輸入複雜的圖像,簡單的神經網絡模型便無法做出正确的分類。是以,我又訓練了一個卷積神經網絡(CNN)模型,該模型能夠可以進行正确的分類。

視覺實戰|使用人工神經網絡進行圖像分類
視覺實戰|使用人工神經網絡進行圖像分類

接下來輸入更加複雜的圖像,CNN模型很擅長圖像分類。

視覺實戰|使用人工神經網絡進行圖像分類

那麼,CNN模型是什麼樣子的?

視覺實戰|使用人工神經網絡進行圖像分類

CNN表示卷積神經網絡,其中每個圖像都要經過一系列的卷積和最大池化以提取特征。我使用CIFAR-10^2資料集進行驗證,該資料集包含60,000張圖像,分為10類。

視覺實戰|使用人工神經網絡進行圖像分類

由于有很多圖像,模型訓練花費了将近4個小時,達到了75%的準确率。

視覺實戰|使用人工神經網絡進行圖像分類

接下來開始進行測試。CNN模型大部分時候都能做出正确的預測,例如,它很确定上面的圖像是一架飛機,下面的圖像有72%的機率是船。

視覺實戰|使用人工神經網絡進行圖像分類

下面的圖像也預測的比較準确。

視覺實戰|使用人工神經網絡進行圖像分類

偶然地,由于模型錯誤的識别某些特征,可能将馬識别為鹿或青蛙。為了提高分類準确性還需要更多的資料,需要在更大的資料集上訓練模型。

視覺實戰|使用人工神經網絡進行圖像分類

接下來,我使用了一個更龐大的資料集,有超過一百萬個圖像。但是訓練該模型要花費很長時間。是以,我使用遷移學習避免重複造輪子。

我使用了由牛津大學開發的VGG16預訓練模型^3,該模型包含1000種類型,從動物到物品和食物。牛津大學已經花費了大量的GPU,時間和資源來訓練這種模型。

視覺實戰|使用人工神經網絡進行圖像分類

我們使用這些圖像來測試模型。下面是非常相似的圖像,模型可以根據它們的品種對其進行分類。請注意,左側的Hush Puppies狗(Basset)有更明顯的特征,是以它的機率很高。

視覺實戰|使用人工神經網絡進行圖像分類

如何确定貓的種類?牛津大學已經使用了多種種類的貓進行了模型的訓練,是以使用該模型對貓進行分類沒有問題。

視覺實戰|使用人工神經網絡進行圖像分類

那鳥的種類呢?鳥類有非常明顯的特征,該模型可以準确識别鳥的種類。

視覺實戰|使用人工神經網絡進行圖像分類

但是,不是所有的鳥類都可以在新加坡找到。

下一步計劃是尋找在新加坡發現的其他常見鳥類和動物的圖像來訓練模型,以便添加到模型的“知識資料庫”中,有助于提高這兩個組織的分類工具的性能。

視覺實戰|使用人工神經網絡進行圖像分類

總之,使用神經網絡模型可以進行圖像分類。深度學習模型非常擅長識别并提取圖像上的特征。

GitHub代碼:https://github.com/JNYH/Project_Kojak

1:https://www.pyimagesearch.com/2018/09/10/keras-tutorial-how-to-get-started-with-keras-deep-learning-and-python/

2: https://www.cs.toronto.edu/~kriz/cifar.html

3: https://github.com/fchollet/deep-learning-models/release