圖像識別零基礎?手把手帶你打造一個小狗分類器!

​項目介紹

小狗分類器可以做什麼?

通過這個分類器,你只需要上傳照片,就可以得到小狗的品種,以及更多的信息。

這就是所謂的「機器學習」,讓機器自己去“學習”。我們今天要做的這個分類任務,是一個“監督學習”的過程。

監督學習的主要目標是從有標籤的訓練數據中學習模型,以便對未知或未來的數據做出預測。

我給大家講一個例子。

用“房子的尺寸”預測“房子的價格”

X-房子的尺寸(小狗的圖片)

Y-房子的價格(小狗的類別)

如圖,我們根據已經有的數據集(圖上的座標),可以擬合出一條近似符合規律的直線。

這樣,再有新的房子尺寸(1250),我們就可以估算出房子的價格(220k)了。

有了這些簡單的基礎,可以開始搞了。

效果展示

訓練集的準確率爲0.925,但測試集只有0.7

說明過擬合了,可以再增加一些圖片,或者使用數據增強,來減少過擬合。

測試了兩張圖片,全都識別對了!

編寫思路

整個分類器的實現,可以分爲以下幾個部分:

1 準備數據集

我們可以通過爬蟲技術,把4類圖像(京巴、拉布拉多、柯基、泰迪)保存到本地。總共有840張圖片做訓練集,188張圖片做測試集。

數據集的準備,可以參考上一篇文章,關注(GitPython)查看文章。

2 數據集的預處理

1) 統一尺寸爲100*100*3(RGB彩色圖像)

2) 由於數據是自己下載的,需要製作標籤(label),可提取圖像名稱的第一個數字作爲類別。(重命名圖片)

3)劃分數據集

840張圖片做訓練集,188張圖片做測試集。

4)把圖片轉換爲網絡需要的類型

3 搭建卷積神經網絡

Keras是基於TensorFlow的深度學習庫,是由純Python編寫而成的高層神經網絡API,也僅支持Python開發。

它是爲了支持快速實踐而對Tensorflow的再次封裝,讓我們可以不用關注過多的底層細節,能夠把想法快速轉換爲結果。

4 訓練

訓練的過程,就是最優解的過程。

對上圖來說,就是根據數據集,不斷的迭代,找到一條最近似的直線(y = kx + b),把參數k,b保存下來,預測的時候直接加載。

5 預測

此時k、b(參數)和x(小狗的圖像)都是已知的了,求k(類別)就完了。

# 1.上傳圖片

name = input('上傳圖片的名稱(例如:XX.jpg)爲:')

# 2.預處理圖片(代碼省略)

# 3.加載權重文件

model.load_weights('dog_weights.h5')

# 4.預測類別

classes = model.predict_classes(x_test)[0]

target = ['京巴','拉布拉多','柯基','泰迪']

# 3-泰迪 2-柯基 1-拉布拉多 0-京巴

# 5.打印結果

print("識別結果爲:"+ target[classes])

依賴環境

1 深度學習框架Keras和TensorFlow

2 PIL擴展庫(預處理圖片)

3 Pycharm/Jupyter notebook

源碼

關注公衆號【GitPython】,回覆【圖像識別】

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章