人臉偵測Face Detection 算法 - allenlu2007
文章推薦指數: 80 %
一但偵測到人臉再做進一步的處理(feature extraction and face recognition)。
好處是可以大幅減少computation resource. image. Face Detection Algorithm.
allenlu2007
AgreatWordPress.comsite
人臉偵測FaceDetection 算法 byallenlu2007
雖然deeplearning被視為computervision的萬靈丹,但deeplearning需要的computationresourcefortrainingandtesting非常大。
另外需要收集bigdataforlearning.
有時並不容易用在小系統的real-timeapplication(withrelativelylowcomputationpower)或lowpowerwearable/portabledevice.
對於一些特徵明顯的imageorvideodetection/recognitionproblem如人臉偵測,特定交通號誌識別(速限),指紋辨識。
特定的算法可以得到準確的結果,同時也比較容易implement,有其價值。
Limitation: 當局部的特徵不明顯或被遮避,e.g.正面照才可以,如果wearsunglass,featurebasefacedetection可能就不如deeplearning.
本文主要參考Viola’spaper以及馬克周的article.
http://mark-jo-prog.blogspot.tw/2012/08/face-detection-opencv-242.html
一般人臉相關應用如人臉識別,駕駛疲勞偵測的前處理可能會包含人臉偵測。
一但偵測到人臉再做進一步的處理(featureextractionandfacerecognition)。
好處是可以大幅減少computationresource.
FaceDetectionAlgorithm
Viola在[RobustReal-TimeFaceDetection]由PaulViola,MICHAELJ.JONES著作,這篇為2004年在InternationalJournalofComputerVision會議。
以下是馬克周的說明
Violapaper發表的論文利用了三個算法來做facedetectionframework,而非三種不同的facedetection算法!!!
1.IntegralImage;2.Adaboost;3.Cascadeclassifier.
IntegralImage 所謂的IntegralImage的概念,如Figure1所示,點(x,y)位置的值為左上角所有灰 色方塊範圍內的pixel的值的加總。
Figure1.IntegralImage
Figure2.RectangleFeature
有了IntegralImage值的定義以後,對於一張Image我們會有小小的類似Figure2的 Feature,這些Feature我們稱之為rectanglefeature,這些rectanglefeature的大小不 固定,但是白色的方塊一定和灰色的方塊一樣大。
這些方塊會像Filter一樣,在 一張Image之中移動。
而對於每一個Feature值的計算,就是將白色的Integral的值 減掉灰色方框Integral的值。
對於這樣的方式,為何可以找到Image中想要的Feature,可以利用Simardetal等人的證明來解釋。
這個部份可以直接參閱paper第四頁的部份。
AdaBoost -AdaBoost全名為AdaptiveBoosting。
AdaBoost是一种迭代算法,其核心思想是針對同一個訓練集(trainingset)訓練不同的分類器(弱分類器),然後把這些弱分類器集合起來,構成一個更強的最终分類器(強分類器)。
AdaBoost結合Rectanglefeature在人臉辨識的algorithm如Algorithm1所示。
首先會 有一堆training的image,分別標示著人臉m張以及非人臉l張。
對於每一張image 我們一開始分別給他們1/m或是1/l的weight,端看它們是人臉或是非人臉。
接著我們要從一大堆rectanglefeature裡面取出T個feature來。
因此對下面的步 驟,我們會重複T次。
1.首先將所有的weightnormalize成加起來為1。
2.根據hypothesesfunction,選出一個error值最小的feature。
關於這個 function如Algorithm2所示。
3.紀錄可以使error值最小的參數。
4.將weight根據Algorithm1的公式update。
最後我們求出來的classifier就是由T個weakfeature所組成的。
因此對於丟入的 一張image,就會由這T個feature來投票,每一個feature的投票的權重不太一 樣。
但只有當加權值大於一半以上的所有分數時,才會認可這一張image為人臉。
Algorithm2.AdaBoostinfacedetection
CascadeClassifier 對於Cascadeclassifier的概念,就如Figure3所示。
我們一開始將feature分成好幾 個classifier。
最前面的classier辨識率最低,但是可以先篩選掉很大一部份不是人 臉的圖片;接下來的Classier處理比較難處理一點的case篩選掉的圖片也不如第一 個classier多了;依此下去,直到最後一個classier為止。
最後留下來的就會是我們 想要的人臉的照片。
Figure3.Cascadeclassifier
然而應該要決定多少個classifier呢?這個問題決定於我們所設定的falsepositive rate以及detectionrate而定。
所謂的falsepositiverate就是我們將人臉的圖片誤 判成不是人臉的圖片的機率。
而所謂的detectionrate則正確找到人臉的準確率。
通常這兩個之間會有tradeoff,如果我們想要達到比較高的detectionrate,那麼 falsepositiverate可能就會比較高一點;而如果想達到比較低的falsepositive rate,那麼正確率難免就會下降。
整個選取cascadeclassifier的演算法如Algorithm3所示。
首先我們要決定每一個階 層的classifier的falsepositiverate以及detectionrate。
然後我們要決定一個target的 falsepositiverate以及targetdetectionrate,當所有的整體的falsepositiverate以及 detectionrate達到設定的值以後才會停止。
因此對於每一個階層,我們就要選足 夠多的feature來達到falsepositiverate以及detectionrate。
Algorithm3.Cascadeclassifierinfacedetection
OpenCV: HaarFeature-basedCascadeClassifierforObjectDetection
檢測方法最初由PaulViola[Viola01]提出,並由RainerLienhart[Lienhart02]對這一方法進行了改善.首先,利用樣本(大約幾百幅樣本圖片)的harr特征進行分類器訓練,得到一個級聯的boosted分類器。
訓練樣本分為正例樣本和反例樣本,其中正例樣本是指待檢目標樣本(例如人臉或汽車等),反例樣本指其它任意圖片,所有的樣本圖片都被歸一化為同樣的尺寸大小(例如,20×20)。
分類器訓練完以後,就可以應用於輸入圖像中的感興趣區域(與訓練樣本相同的尺寸)的檢測。
檢測到目標區域(汽車或人臉)分類器輸出為1,否則輸出為0。
為了檢測整副圖像,可以在圖像中移動搜索視窗,檢測每一個位置來確定可能的目標。
為了搜索不同大小的目標物體,分類器被設計為可以進行尺寸改變,這樣比改變待檢圖像的尺寸大小更為有效。
所以,為了在圖像中檢測未知大小的目標物體,掃描程式通常需要用不同比例大小的搜索視窗對圖片進行幾次掃描。
分類器中的“級聯”(cascade)是指最終的分類器是由幾個簡單分類器級聯組成。
在圖像檢測中,被檢視窗依次通過每一級分類器,這樣在前面幾層的檢測中大部分的候選區域就被排除了,全部通過每一級分類器檢測的區域即為目標區域,目前支持這種分類器的boosting技術有四種:DiscreteAdaboost,RealAdaboost,GentleAdaboostandLogitboost。
”boosted”即指級聯分類器的每一層都可以從中選取一個boosting演算法(權重投票),並利用基礎分類器的自我訓練得到。
基礎分類器是至少有兩個葉結點的決策樹分類器。
Haar特征是基礎分類器的輸入,主要描述如下。
目前的演算法主要利用下面的Harr特征:
每個特定分類器所使用的特征用形狀、感興趣區域中的位置以及比例繫數(這裡的比例繫數跟檢測時候採用的比例繫數是不一樣的,儘管最後會取兩個繫數的乘積值)來定義。
例如在第二行特征(2c)的情況下,響應計算為覆蓋全部特征整個矩形框(包括兩個白色矩形框和一個黑色矩形框)象素的和減去黑色矩形框內象素和的三倍。
每個矩形框內的象素和都可以通過積分圖象很快的計算出來。
(察看下麵和對cvIntegral的描述)。
以下是opencv對Violapaper的說明更清楚。
opencv以及wiki說明facedetection算法包含4stages如下。
Thealgorithmhasfourstages:
HaarFeatureSelection
CreatinganIntegralImage
AdaboostTraining
CascadingClassifiers
ObjectDetectionusingHaarfeature-basedcascadeclassifiersisaneffectiveobjectdetectionmethodproposedbyPaulViolaandMichaelJonesintheirpaper,“RapidObjectDetectionusingaBoostedCascadeofSimpleFeatures”in2001.Itisamachinelearningbasedapproachwhereacascadefunctionistrainedfromalotofpositiveandnegativeimages.Itisthenusedtodetectobjectsinotherimages.
Herewewillworkwithfacedetection.Initially,thealgorithmneedsalotofpositiveimages(imagesoffaces)andnegativeimages(imageswithoutfaces)totraintheclassifier.Thenweneedtoextractfeaturesfromit.Forthis,haarfeaturesshowninbelowimageareused.Theyarejustlikeourconvolutionalkernel.Eachfeatureisasinglevalueobtainedbysubtractingsumofpixelsunderwhiterectanglefromsumofpixelsunderblackrectangle.
image
Nowallpossiblesizesandlocationsofeachkernelisusedtocalculateplentyoffeatures.(Justimaginehowmuchcomputationitneeds?Evena24×24windowresultsover160000features).Foreachfeaturecalculation,weneedtofindsumofpixelsunderwhiteandblackrectangles.Tosolvethis,theyintroducedtheintegralimages.Itsimplifiescalculationofsumofpixels,howlargemaybethenumberofpixels,toanoperationinvolvingjustfourpixels.Nice,isn’tit?Itmakesthingssuper-fast.
Butamongallthesefeatureswecalculated,mostofthemareirrelevant.Forexample,considertheimagebelow.Toprowshowstwogoodfeatures.Thefirstfeatureselectedseemstofocusonthepropertythattheregionoftheeyesisoftendarkerthantheregionofthenoseandcheeks.Thesecondfeatureselectedreliesonthepropertythattheeyesaredarkerthanthebridgeofthenose.Butthesamewindowsapplyingoncheeksoranyotherplaceisirrelevant.Sohowdoweselectthebestfeaturesoutof160000+features?Itisachievedby Adaboost.
image
Forthis,weapplyeachandeveryfeatureonallthetrainingimages.Foreachfeature,itfindsthebestthresholdwhichwillclassifythefacestopositiveandnegative.Butobviously,therewillbeerrorsormisclassifications.Weselectthefeatureswithminimumerrorrate,whichmeanstheyarethefeaturesthatbestclassifiesthefaceandnon-faceimages.(Theprocessisnotassimpleasthis.Eachimageisgivenanequalweightinthebeginning.Aftereachclassification,weightsofmisclassifiedimagesareincreased.Thenagainsameprocessisdone.Newerrorratesarecalculated.Alsonewweights.Theprocessiscontinueduntilrequiredaccuracyorerrorrateisachievedorrequirednumberoffeaturesarefound).
Finalclassifierisaweightedsumoftheseweakclassifiers.Itiscalledweakbecauseitalonecan’tclassifytheimage,buttogetherwithothersformsastrongclassifier.Thepapersayseven200featuresprovidedetectionwith95%accuracy.Theirfinalsetuphadaround6000features.(Imagineareductionfrom160000+featuresto6000features.Thatisabiggain).
Sonowyoutakeanimage.Takeeach24×24window.Apply6000featurestoit.Checkifitisfaceornot.Wow..Wow..Isn’titalittleinefficientandtimeconsuming?Yes,itis.Authorshaveagoodsolutionforthat.
Inanimage,mostoftheimageregionisnon-faceregion.Soitisabetterideatohaveasimplemethodtocheckifawindowisnotafaceregion.Ifitisnot,discarditinasingleshot.Don’tprocessitagain.Insteadfocusonregionwheretherecanbeaface.Thisway,wecanfindmoretimetocheckapossiblefaceregion.
Forthistheyintroducedtheconceptof CascadeofClassifiers.Insteadofapplyingallthe6000featuresonawindow,groupthefeaturesintodifferentstagesofclassifiersandapplyone-by-one.(Normallyfirstfewstageswillcontainverylessnumberoffeatures).Ifawindowfailsthefirststage,discardit.Wedon’tconsiderremainingfeaturesonit.Ifitpasses,applythesecondstageoffeaturesandcontinuetheprocess.Thewindowwhichpassesallstagesisafaceregion.Howistheplan!!!
Authors’detectorhad6000+featureswith38stageswith1,10,25,25and50featuresinfirstfivestages.(TwofeaturesintheaboveimageisactuallyobtainedasthebesttwofeaturesfromAdaboost).Accordingtoauthors,onanaverage,10featuresoutof6000+areevaluatedpersub-window.
SothisisasimpleintuitiveexplanationofhowViola-Jonesfacedetectionworks.ReadpaperformoredetailsorcheckoutthereferencesinAdditionalResourcessection.
Haar-cascadeDetectioninOpenCV
OpenCVcomeswithatraineraswellasdetector.Ifyouwanttotrainyourownclassifierforanyobjectlikecar,planesetc.youcanuseOpenCVtocreateone.Itsfulldetailsaregivenhere: CascadeClassifierTraining.
Herewewilldealwithdetection.OpenCValreadycontainsmanypre-trainedclassifiersforface,eyes,smileetc.ThoseXMLfilesarestoredinopencv/data/haarcascades/folder.Let’screatefaceandeyedetectorwithOpenCV.
FirstweneedtoloadtherequiredXMLclassifiers.Thenloadourinputimage(orvideo)ingrayscalemode.
另外可以參考WikiViola-Jonesobjectdetectionframework.
Sharethis:TwitterFacebookLikethis:LikeLoading...
Related
Published:May5,2016
FiledUnder:MachineLearning,演算法
LeaveaReplyCancelreply
Enteryourcommenthere...
Fillinyourdetailsbeloworclickanicontologin:
Email(required)(Addressnevermadepublic)
Name(required)
Website
YouarecommentingusingyourWordPress.comaccount.
( Log Out /
Change )
YouarecommentingusingyourTwitteraccount.
( Log Out /
Change )
YouarecommentingusingyourFacebookaccount.
( Log Out /
Change )
Cancel
Connectingto%s
Notifymeofnewcommentsviaemail.Notifymeofnewpostsviaemail.
Δ
«PreviousPost
NextPost»
Searchfor:
RecentPosts
乾電池省錢兼環保秘訣
DeepLearningMachineonUbuntuLTS16.04/20.04withGTX 1080
從Portainer了解Docker 運作
DockerforDeepLearningandAndroid Studio
增進工程師效率PythonScriptDebugging Tools
RecentCommentsArchives
August2021
March2021
March2020
January2020
September2019
August2019
July2019
June2019
May2019
April2019
March2019
February2019
January2019
December2018
November2018
October2018
September2018
August2018
July2018
June2018
May2018
April2018
March2018
February2018
January2018
December2017
October2017
September2017
August2017
July2017
June2017
May2017
April2017
March2017
February2017
January2017
December2016
November2016
October2016
September2016
August2016
July2016
June2016
May2016
March2016
February2016
January2016
December2015
November2015
October2015
September2015
August2015
July2015
June2015
May2015
April2015
March2015
February2015
January2015
December2014
November2014
October2014
August2014
July2014
June2014
May2014
April2014
March2014
February2014
Categories
物理
程式語言
deeplearning
gcp
linux
MachineLearning
machinelearning
math
Scripting
Uncategorized
工程
控制
機率
演算法
Meta
Register Login
Entriesfeed
Commentsfeed
WordPress.com
Searchfor:
RecentPosts
乾電池省錢兼環保秘訣
DeepLearningMachineonUbuntuLTS16.04/20.04withGTX 1080
從Portainer了解Docker 運作
DockerforDeepLearningandAndroid Studio
增進工程師效率PythonScriptDebugging Tools
RecentCommentsArchives
August2021
March2021
March2020
January2020
September2019
August2019
July2019
June2019
May2019
April2019
March2019
February2019
January2019
December2018
November2018
October2018
September2018
August2018
July2018
June2018
May2018
April2018
March2018
February2018
January2018
December2017
October2017
September2017
August2017
July2017
June2017
May2017
April2017
March2017
February2017
January2017
December2016
November2016
October2016
September2016
August2016
July2016
June2016
May2016
March2016
February2016
January2016
December2015
November2015
October2015
September2015
August2015
July2015
June2015
May2015
April2015
March2015
February2015
January2015
December2014
November2014
October2014
August2014
July2014
June2014
May2014
April2014
March2014
February2014
Categories
物理
程式語言
deeplearning
gcp
linux
MachineLearning
machinelearning
math
Scripting
Uncategorized
工程
控制
機率
演算法
Meta
Register Login
Entriesfeed
Commentsfeed
WordPress.com
CreateafreewebsiteorblogatWordPress.com.
Follow
Following
allenlu2007
Signmeup
AlreadyhaveaWordPress.comaccount?Loginnow.
allenlu2007
Customize
Follow
Following
Signup
Login
Copyshortlink
Reportthiscontent
ViewpostinReader
Managesubscriptions
Collapsethisbar
LoadingComments...
WriteaComment...
Email(Required)
Name(Required)
Website
%dbloggerslikethis:
延伸文章資訊
- 1MediaPipe Face Detection - Google
MediaPipe Face Detection is an ultrafast face detection solution that comes with 6 landmarks and ...
- 2Face Detection | ML Kit - Google Developers
With face detection, you can get the information you need to perform tasks like embellishing self...
- 3人臉偵測Face Detection 算法 - allenlu2007
一但偵測到人臉再做進一步的處理(feature extraction and face recognition)。好處是可以大幅減少computation resource. image. Fa...
- 4[Day3] 人臉偵測(Face Detection) - iT 邦幫忙
這部分我會在[Day7] Face Detection - 使用Amazon Rekognition說明更多細節與實作內容。 Microsoft Azure - 臉部識別API. 看名字就知道,...
- 5Face Detection | Firebase Documentation - Google
With face detection, you can get the information you need to perform tasks like embellishing self...