|

【影像辨識】訓練貓臉偵測器

   
作者:曾成訓(CH.TSENG)

OpenCV 使用的 Object detection 技術稱為 Cascade Classifier for Object Detection ,是一種屬於 boosted cascade of weak classifiers 的方法,也就是將數個弱分類器串聯起來再得出最佳的分類結果。其實最早整合到 OpenCV 並支援的分類特徵是哈爾特徵(Haar-like features),後來加入了 LBP ( Local Binary Pattern)以及 HOG( Histogram Of Gradient),不過可惜的是 HOG 在 3.x 後由於某些技術問題被取消了。

Boosting 的中心思想在於「三個臭皮匠勝過一個諸葛亮」,主要是將大量的弱分類器(分類效果僅比隨機好一點)逐步訓練成一個較強的分類器,透過對每個弱分類器分類錯誤的部份持續投入學習,最後形成一個超強的分類器。

舉例來說,我們熟知的 Spam mails 檢測,就是一種 Boosting 的概念,拆開,每一條 spam check rule 都是弱分類器,僅對一小部份的垃圾郵件有效,但是把數以百計的 rules 串連起來,便能打造一個滴水不漏的垃圾郵件防堵系統!

在機器學習中,有很多分類器便應用了 Boosting 的方法,例如 AdaBoost(Adaptive Boosting)、Gradient Tree Boosting、XGBoost 等, 而 OpenCV 內建的 Cascade Classifier for Object Detection,正是應用了AdaBoost。

新版 OpenCV 對於 Cascade Classifier 的支援

可惜的是,OpenCV 4.x 版後不再支援 Cascade Classifier 的訓練,因此目前在 4.x 版的 OpenCV 程式碼中,無法看見諸如 opencv_createsamples、opencv_traincascade 等程式,官方的說法是近幾年流行的 ML、DL 效果更佳,鑒於使用者日少,決定不再包入相關的訓練程式在原始碼中。

不過事實上目前還是有相當多的使用者對於 cascade classifier 有強烈的需求,因為它使用方便、偵測速度快,常讓人包容誤報率高和訓練複雜的缺點,因此有耳聞官方可能會在下一版本的 OpenCV 中再度支援。

訓練貓臉偵測器

我撰寫了一套工具程式可快速方便地進行 Cascade Classifier 的訓練,以下以貓臉偵測示範如何使用這個工具製作自己的 Cascade Classifier。

  • 搜集相片及標記

1. 先從網路上下載一些貓的相片,本例中我下載了 126 張。

(圖片來源:曾成訓提供)

2. 使用 labelImg 進行標記:由於貓臉區域不像人臉那麼明確,因此在框選時我選擇從兩眼外側(不包含耳朵)開始直到下巴的區域。

本文為會員限定文章

立即加入會員! 全站文章無限看~

                               

已經是會員? 按此登入

只需不到短短一分鐘...

輸入您的信箱與ID註冊即可享有一切福利!

會員福利
1

免費電子報

2

會員搶先看

3

主題訂閱

4

好文收藏

Author: 曾 成訓

人到中年就像沒對準的描圖紙,一點一點的錯開,我只能當個Maker來使它復位。

Share This Post On

1 Comment

  1. 老師您好:
    拜讀您的貓臉辨識器,有依循您的只是做執行,我是用spyder3,
    導入第一支1_labels_to_pos_neg_imgs.py檔後出現以下錯誤訊息:

    File “C:/Users/chun chieh/Desktop/cascade_opencv_train-master/1_labels_to_pos_neg_imgs.py”, line 148, in
    saveROI(saveROIsPath, imgFolder, xmlfile, labelName, generateNegativeSource)

    File “C:/Users/chun chieh/Desktop/cascade_opencv_train-master/1_labels_to_pos_neg_imgs.py”, line 78, in saveROI
    image2 = image.copy()

    AttributeError: ‘NoneType’ object has no attribute ‘copy’

    可否煩請老師解惑,感恩老師指教
    我的EMAIL: ada6658@gmail.com

    Post a Reply

Submit a Comment

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *