閱讀-MTCNN

透明的胡蘿蔔發表於2019-03-09

原始資料

人臉資料集WIDER FACE,該資料集僅提供了大量的人臉邊框定位資料。

如果使用wider face的 wider_face_train.mat 註解檔案需要轉換成txt格式的,我這裡用h5py寫了個 轉換指令碼. 這裡我提供一個已經轉換好的wider face註解檔案 anno_store/wider_origin_anno.txt, 以下訓練過程引數名--anno_file預設就是使用該轉換好的註解檔案。

在註解檔案wider_origin_anno.txt格式如下 :

0--Parade/0_Parade_marchingband_1_849.jpg 448 329 570 478 
0--Parade/0_Parade_marchingband_1_117.jpg 68 359 118 394 226 382 282 425 295 304 339 330 353 279 393 315 884 377 947 418 818 390 853 434 727 341 764 372 598 246 631 275 740 308 785 341 

每四個數字代表該圖片中的一個人臉邊框定位資料x1, y1, x2, y2(x_left, y_top, x_right, y_bottom),第一張照片有隻一個人臉,第二張照片有9個人臉

PNET

輸入/輸出

輸入是12*12*3的圖片,以及標籤  =  樣本型別0/1/-1  +   四個數字為一組的crop_box與真實box之間的偏差,成為迴歸框(bounding box regressiom)

negative樣本:IOU < 0.3,標籤為:0 0 0 0 0
positive樣本:IOU > =0.65,標籤為:1 0.01 0.02 0.01 0.02
part樣本:0.4 <= IOU < 0.65,標籤為: -1 0.03 0.04 0.03 0.04

P-Net主要用來生成一些候選框(bounding box)以及lable。在訓練的時候該網路的頂部有3條支路用來分別做人臉分類、人臉框的迴歸和人臉關鍵點定位;在測試的時候這一步的輸出只有N個bounding box的4個座標資訊和score,score可以看做是分類的輸出(是人臉的概率),原始碼中輸出就是sigmoid函式值。

PNet訓練資料

1、遍歷資料集,在每一張照片的基礎上:

  • 一張照片可能有多張人臉,所以有boxes。由一張照片裁剪出50張不同的大小為12*12的照片,如果Iou值小於0.3,就寫入nagetive樣本檔案中。

具體方法:在一張照片的基礎上隨機生成crop_box,計算crop_box與boxes的Iou,然後按照crop_box的尺寸剪下原圖片並縮放成12*12大小的圖片,轉換成12*12*3的結構,根據Iou對新生成的照片歸類

2、遍歷第一步中的那張照片的boxes,在每個box的基礎上

  • # generate negative examples that have overlap with gt
  • 加入隨機數,隨機生成crop_box,之後步驟同上
  • # generate positive examples and part faces
  • 加入隨機數,隨機生成crop_box,計算crop_box與box之間的偏差,把這些偏差稱為迴歸框,生成的訓練資料的標註lable不僅有positive/part,還要加上回歸框資訊。計算rop_box與boxes的Iou進行歸類。
# compute bbox reg label,其中x1,x2,y1,y2為真實的人臉座標,x_left,x_right,y_top,y_bottom,width,height為預測的人臉座標,
# 如果是在準備人臉和非人臉樣本的時候,x_left,x_right,y_top,y_bottom,width,height就是你的滑動窗與真實人臉的IOU>0.65(根據你的定義)的滑動窗座標。
# dface程式碼中box用的是正方形,即size=width=height代表box視窗的邊長
offset_x1 = (x1 - x_left) / float(width)
offset_y1 = (y1 - y_top) / float(height)
offset_x2 = (x2 - x_right) / float(width)
offset_y2 = (y2 - y_bottom ) / float(height)

3、最後的輸出

negative樣本:IOU < 0.3,標籤為:0 0 0 0 0
positive樣本:IOU > =0.65,標籤為:1 0.01 0.02 0.01 0.02
part樣本:0.4 <= IOU < 0.65,標籤為: -1 0.03 0.04 0.03 0.04

亂序合併標註檔案

將三個樣本檔案合併到一個檔案  PNET_TRAIN_IMGLIST_FILENAME = "imglist_anno_12.txt"

訓練PNet模型

訓練PNet的訓練資料就是上面提到的PNET_TRAIN_IMGLIST_FILENAME

RNET

載入pnet模型,預測圖片的bounding box資訊

讀取WIDER FACE資料集的標註資訊

 

相關文章