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

歡迎訪問 生活随笔!

生活随笔

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

pytorch

实时人脸检测

發布時間:2025/7/25 pytorch 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 实时人脸检测 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

實時人臉檢測?(Real-Time?Face?Detection)

?(2014-08-24 17:23:16)
??最近需要用到人臉檢測,于是找了篇引用廣泛的論文實現了一下:Robust Real-Time Face Detection。實現的過程主要有三個步驟:人臉數據準備,算法實現,算法調試。 ????人臉數據集的準備:網上有很多免費的和付費的。比如這里有個網頁介紹了一些常用的人臉數據庫。我這里只是人臉檢測(不是人臉識別),只要有人臉就可以了,所以我下載了幾個數據集,然后把它們混在一起用(后面也因此產生了一些問題)。 ????算法大意很簡單:可以把它看作是一個二分類的問題。給定一張圖片后,程序會用一個矩形框掃描整張圖片,然后每次判斷當前矩形框是不是人臉。 ???方法的核心在于掃描框的分類。這里采用了AdaBoost的學習方法。AdaBoost的思想是,把一些簡單的弱分類器組合起來得到一個強大的分類器。學習過程中,每個弱分類器會根據數據學到一個權重,一般由它的分類誤差來確定,誤差越小,權重越大。數據也有權重,根據每次弱分類器的分類結果來定,比如當前分錯的數據權重需要增加。 ????因為AdaBoost由很多弱分類器構成,理論上弱分類器越多,分類能力越強,但是計算量也更大。由于實時性的要求,這里采用了分層的思想:訓練出多層的AdaBoost分類器,層次靠前的分類器包含的弱分類器數量少一些。這是一個樹結構。每層的AdaBoost分類器會過濾掉非人臉數據,只有完全通過的數據才會判定為人臉。 ????大致步驟理解起來很容易,實現過程中也會遇到很多參數需要調節,下面就我遇到的一些問題做一些討論:
  • 首先是數據集的準備。人臉數據好說,非人臉數據怎么準備呢?可以找一些有人臉的圖片作為訓練集,目的是使得分類器在這些訓練集中的誤判率(false positive rate)最小。窮舉出所有的掃描框會掃到的子圖片不太現實,因為這樣數據量實在是太大了。我這里先隨機采樣一些圖片,然后用這些圖片作為非人臉數據,學習出一個分類器,然后再用這個分類器去測試訓練集,把誤判的數據收集起來,和前面的非人臉數據混合起來,再訓練。訓練過程中我發現,第一次隨機采樣的數據很好分類,很快就能訓練出一個分類器,越到后面,數據越不好分,訓練的時間也越久。原文說他們第一次的分類器采用了兩個弱分類器就能過濾掉50%的非人臉數據,其實這句話是沒有意義的,并不能說明它的分類器好,只能說明它的數據集比較弱。
  • 數據噪音問題:在訓練的過程中,數據剛開始還比較容易分類,前面幾層AdaBoost能過濾掉大半部分的非人臉數據,但是到了后面,每層AdaBoost能過濾掉的非人臉數據就很少了(因為每層AdaBoost分類器要保證人臉分對的幾率在99.9%以上)。后來我查看了數據,發現人臉數據集中有一些非人臉數據,并且非人臉數據集中有一些人臉。這就是數據噪音。可以考慮先過濾掉噪音再進行訓練。其實在多層次的AdaBoost訓練過程中,每層過濾出來的人臉數據差不多就是質量不好的,里面也會包含噪音。訓練到最后很難過濾掉的非人臉數據,也往往包含了大量的噪音數據。可以通過多次的快速訓練(調節參數使其訓練速度加快),來過濾掉這些噪音數據。
  • 每一層AdaBoost的弱分類器數量:理論上弱分類器的數量可以根據檢測率和誤判率來確定,但是這樣確定出來的數量往往偏小。雖然這樣分類速度會很快,由于這里每一個弱分類器就代表了一個Haar Feature,Feature過少的話,即使訓練集上誤差很小,測試的時候,分類能力也很弱。這里可以人為的制定一些策略,比如某層的弱分類器數量有個下限之類的,來權衡速度與分類能力。
  • 理想的情況下,一個人臉只響應一個掃描框。但是實際情況是,人臉附近可能會響應幾個掃描框。這就需要合并這些掃描框。合并的策略也是很多的,簡單的可以通過重疊率來合并,也可以通過聚類方法合并。但是要考慮到速度問題,我采用了重疊率的計算來合并,簡單快速。
  • 訓練過程中,最好能可視化一些中間結果。一來可以檢測代碼實現是否有Bug,二來也可以通過這些中間結果,來幫助自己更好的理解這個算法的過程。比如每層過濾掉的人臉和非人臉數據,每層AdaBoost選擇了哪些Feature,每層AdaBoost的誤判率是多少等等。其中特別是Feature的選擇,不同的訓練集,選擇出來的Feature是不一樣的。如果訓練集里的人臉對齊的比較好,那么Haar Feature的矩形塊會比較大,如果人臉對齊不好或者顏色差異大,那么Haar Feature的矩形框會比較的窄小。仔細想想,好像確實是這樣。
  • Haar Feature的選擇:窮舉出所有可能的Feature,計算量和存儲量會比較大,可以考慮均勻采樣出可接受的數量的Feature。采樣也可以加入一些隨機性。采樣也會影響弱分類器數量的選擇,因為采樣的緣故,可能某些好的Feature沒有采樣到,那么在增加弱分類器數量之前可以考慮嘗試多次采樣不同的Feature來訓練。訓練過程中我發現,多次嘗試不同的采樣結果確實是有幫助的。另外Haar Feature的矩形框不能太小,不然在計算多分辨率的時候,Feature值誤差會比較大。
????訓練過程中,我覺得數據和Feature的選擇是很重要的。這里用的Haar Feature,很簡單,同樣分類能力也是受限的,比如人臉的姿態,光照影響。要提升分類能力,一方面可以在數據上做文章,可以建立更多類型的數據集,比如正面人臉集,側面人臉集,各種不同光照下的數據集。這么做局限性很大。另一方面可以設計出更好的Feature,或者是學習出更好的Feature(Feature Learning)。 最后,這個算法實現的源代碼在https://github.com/liguocn/MagicLib里的RealTimeFaceDetection.h/.cpp里面。? 下面貼上一個結果:

人臉檢測做好后,可以利用這個檢測器,生成更多的人臉數據。我在網上下載了很多圖片,特別是一些集體照,然后把這些人臉檢測出來,再均勻縮放到128*128大小。這樣就可以得到了一些人臉數據,下面是一個文件小截圖:



總結

以上是生活随笔為你收集整理的实时人脸检测的全部內容,希望文章能夠幫你解決所遇到的問題。

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