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註冊即可享有一切福利!
會員福利
免費電子報
會員搶先看
主題訂閱
好文收藏
2020/03/01
老師您好:
拜讀您的貓臉辨識器,有依循您的只是做執行,我是用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