日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人工智能 > pytorch >内容正文

pytorch

OpenCV学习记录(二):自己训练haar特征的adaboost分类器进行人脸识别

發布時間:2025/3/21 pytorch 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 OpenCV学习记录(二):自己训练haar特征的adaboost分类器进行人脸识别 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

上一篇文章中介紹了如何使用OpenCV自帶的haar分類器進行人臉識別(點我打開)。
這次我試著自己去訓練一個haar分類器,前后花了兩天,最后總算是訓練完了。不過效果并不是特別理想,由于我是在自己的筆記本上進行訓練,為減少訓練時間我的樣本量不是很大,最后也只是勉強看看效果了。網上有關的資料和博客可以說很多了,只要耐心點總是能成功的。

采集樣本:

首先要訓練,就得有訓練集。網上有很多國外高校開源的庫可供下載:
1、卡耐基梅隆大學圖像數據庫(點我打開)
2、MIT人臉數據庫(點我打開)
3、ORL人臉數據庫(點我打開)
由于是國外的網站,可能需要翻墻,所以下載可能會有些麻煩。這里給出了我在網上收集的訓練集,正樣本為20*20的人臉圖片,負樣本為50*50的背景圖片。樣本集下載地址:http://download.csdn.net/detail/hongbin_xu/9887672。

準備工作:

在指定目錄中放入以下所提到的文件夾及文件。
將正樣本放在pos文件夾中,負樣本放在neg文件夾中,xml文件夾存放后面訓練過程中產生的數據模型,最后opencv會將其轉換生成一個xml文件,也就是最終的分類器。

從OpenCv安裝目錄中查找出如下兩個exe可執行文件。

opencv_createsamples.exe:用于創建樣本描述文件,后綴名是.vec。專門為OpenCV訓練準備,只有正樣本需要,負樣本不需要。
opencv_haartraining.exe:是OpenCV自帶的一個工具,封裝了haar特征提取以及adaboost分類器訓練過程。
一般來說,正負樣本數目比例在1:3的時候訓練結果比較好,但是不是絕對。由于每個樣本的差異性不同等因素,所以沒有絕對的比例關系。但是負樣本需要比正樣本多,因為原則上說負樣本的多樣性越大越好,我們才能有效降低誤檢率,而不僅僅是通過正樣本的訓練讓其能識別物體。為了節約時間,我選了1500個正樣本和4500個負樣本。

獲取樣本路徑列表:

打開Windows下的命令行窗口,進入指定目錄下。

1、建立正樣本的描述文件:
首先進入pos文件夾中,輸入:

dir /b > pos.txt

在當前pos目錄下生成一個pos.txt記錄所有圖片的名稱。

打開記事本,去除pos.txt最后一行的pos文件夾;
將所有jpg替換成 jpg 1 0 0 20 20。這里1表示當前圖片重復出現的次數是1, 0 0 20 20表示目標圖片大小是矩形框從(0,0)到(20,20)。

2、建立負樣本的描述文件:
接下來重新進入neg文件夾,輸入:

dir /b > neg.txt

之后,生成neg.txt文件,這里負樣本不做其他修改。

3、使用opencv_createsamples.exe建立訓練需要的參數列表:
Windows控制臺進入指定目錄下,我們之前已經在目錄下放了opencv_createsamples.exe文件,在控制臺下輸入opencv_createsamples.exe可以得到各參數信息:

在當前目錄下輸入如下指令:

opencv_createsamples.exe -vec pos.vec -info pos\pos.txt -bg neg\neg.txt -w 20 -h 20 -num 1500

當前目錄下,產生了pos.vec文件。

簡要介紹指令:

-vec pos.vec:指定生成的文件,最終生成的就是pos.vec;
-info pos\pos.txt:目標圖片描述文件,在pos\pos.txt;
-bg neg\neg.txt:背景圖片描述文件,在neg\neg.txt;
-w 20:輸出樣本的寬度,20;
-h 20:輸出樣本的高度,20;
-num 1500:要產生的正樣本數量,1500;

訓練模型:

Windows控制臺進入指定目錄下,我們之前已經在目錄下放了opencv_haartraining.exe文件,在控制臺下輸入opencv_haartraining.exe可以得到各參數信息:

輸入如下指令進行訓練:

opencv_haartraining.exe -vec pos.vec -bg neg\neg.txt -data xml -w 20 -h 20 -mem 1024 -npos 1000 -neg 3000 -nstages 2 -nsplits 5

簡要介紹指令:

-vec pos.vec:正樣本文件名;
-bg neg\neg.txt:背景描述文件;
-data xml:指定存放訓練好的分類器的路徑名,也就是前面建立的xml文件夾;
-w 20:樣本圖片寬度,20;
-h 20:樣本圖片高度,20;
-mem 1024:提供的以MB為單位的內存,很明顯,這個值越大,提供的內存越多,運算也越快;
-npos 1000:取1000個正樣本,小于總正樣本數;
-neg 3000:取3000個負樣本,小于總負樣本數;
-nstages 2:指定訓練層數,層數越高耗時越長;
-nsplits 5:分裂子節點數目, 默認值 為2;

其他參數:

-minhitrate:最小命中率,即訓練目標準確度;
-maxfalsealarm:最大虛警(誤檢率),每一層訓練到這個值小于0.5時訓練結束,進入下一層訓練;
-sym或者-nonsym:臉是否垂直對稱,若是,則選前者,且可以加快訓練速度。

輸入指令之后就是等待了,最后可以看到結果如下:

這里我的層數太少了,導致訓練結果不是很好,一般要增加到15~20層才能有較好的效果。

中間可能遇到的問題:

可能在訓練的過程中,過了很長時間但是卻一直停留在某一層不動,上網查找解決辦法如下:增大負樣本數目,增大負樣本之間的變化! 增加負樣本,然后重新接著訓練,注意更改負樣本的數目。
詳細說明可以查看:http://blog.csdn.net/jimeshui/article/details/42039615

參考鏈接:
1.http://blog.csdn.net/yangleo1987/article/details/52883864
2.http://blog.csdn.net/u014365862/article/details/52997019

總結

以上是生活随笔為你收集整理的OpenCV学习记录(二):自己训练haar特征的adaboost分类器进行人脸识别的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。