MTCNN訓練整理


轉自:http://blog.csdn.net/amds123/article/details/69568495

MTCNN主要包括三個部分,PNet,RNet,ONet

其中PNet在訓練階段的輸入尺寸為12*12,RNet的輸入尺寸為24*24, ONet的輸入尺寸為48*48.  PNet網絡參數最小,ceffemodel僅有28.2KB, 所以速度最快.RNet的網絡參數次之,caffemodel大小為407.9KB, ONetcaffemodel大小為1.6M,三個網絡合起來不到2M.

 

測試階段大概過程

首先圖像經過金字塔,生成多個尺度的圖像,然后輸入PNet, PNet由於尺寸很小,所以可以很快的選出候選區域,但是准確率不高,然后采用NMS算法,合並候選框,然后根據候選框提取圖像,作為RNet的輸入,RNet可以精確的選取邊框,一般最后只剩幾個邊框,最后輸入ONet,ONet雖然速度較慢,但是由於經過前兩個網絡,已經得到了高概率的邊框,所以輸入ONet的圖像較少,然后ONet輸出精確的邊框和關鍵點信息.

 

訓練數據庫

論文中作者主要使用了Wider_face CelebA數據庫,其中Wider_face主要用於檢測任務的訓練,CelebA主要用於關鍵點的訓練.訓練集分為四種:負樣本,正樣本 ,部分樣本,關鍵點樣本三個樣本的比例為3: 1: 1: 2

 

訓練主要包括三個任務

人臉分類任務:利用正樣本和負樣本進行訓練

人臉邊框回歸任務:利用正樣本和部分樣本進行訓練

關鍵點檢測任務:利用關鍵點樣本進行訓練

 

訓練數據整理:

Wider_face包含人臉邊框標注數據,大概人臉在20,CelebA包含邊框標注數據和5個點的關鍵點信息.對於三個網絡,提取過程類似,但是圖像尺寸不同.

正負樣本,部分樣本提取

1.從Wider_face隨機選出邊框,然后和標注數據計算IOU,如果大於0.65,則為正樣本,大於0.4小於0.65為部分樣本,小於0.4為負樣本.

2.計算邊框偏移.對於邊框,(x1,y1)為左上角坐標,(x2,y2)為右下角坐標,新剪裁的邊框坐標為(xn1,yn1),(xn2,yn2),width,height.則offset_x1 = (x1 - xn1)/width,同上,計算另三個點的坐標偏移.

3.對於正樣本,部分樣本均有邊框信息,而對於負樣本不需要邊框信息

關鍵點樣本提取

1.從celeba中提取,可以根據標注的邊框,在滿足正樣本的要求下,隨機裁剪出圖片,然后調整關鍵點的坐標.

loss修改

由於訓練過程中需要同時計算3個loss,但是對於不同的任務,每個任務需要的loss不同.

所有在整理數據中,對於每個圖片進行了15label的標注信息

1.1列:為正負樣本標志,1正樣本,0負樣本,2部分樣本,3關鍵點信息

2.2-5列:為邊框偏移,為float類型,對於無邊框信息的數據,全部置為-1

3.6-15列:為關鍵點偏移,為floagt類型,對於無邊框信息的數據,全部置為-1

修改softmax_loss_layer.cpp 增加判斷,只對於1,0計算loss

修改euclidean_loss_layer.cpp 增加判斷,對於置為-1的不進行loss計算

困難樣本選擇

論文中作者對與人臉分類任務,采用了在線困難樣本選擇,實現過程如下:

修改softmax_loss_layer.cpp,根據計算出的loss值,進行排序,只對於70%的值較低的數據,

進行反向傳播.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM