人臉偵測Face Detection 算法 - allenlu2007

文章推薦指數: 80 %
投票人數:10人

一但偵測到人臉再做進一步的處理(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:



請為這篇文章評分?