閱讀-MTCNN
原始資料
人臉資料集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資料集的標註資訊
相關文章
- 【原始碼閱讀】AndPermission原始碼閱讀原始碼
- 磨刀不誤閱讀工 |《如何閱讀一本書》之基礎閱讀和檢視閱讀
- 閱讀程式碼就像閱讀猶太法典
- 如何閱讀一本書——分析閱讀Pre
- JDK原始碼閱讀:Object類閱讀筆記JDK原始碼Object筆記
- 打造web版epub閱讀器(閱讀設計)Web
- MTCNN教學+程式碼白嫖CNN
- JDK原始碼閱讀(5):HashTable類閱讀筆記JDK原始碼筆記
- JDK原始碼閱讀(4):HashMap類閱讀筆記JDK原始碼HashMap筆記
- JDK原始碼閱讀:String類閱讀筆記JDK原始碼筆記
- 個人閱讀 程式碼大全的閱讀與提問
- 閱讀YYModel
- MongoDB閱讀精要MongoDB
- 閱讀習慣
- 閱讀文獻
- 如何閱讀 Paper
- 閱讀筆記筆記
- 淺談閱讀
- 【原始碼閱讀】Glide原始碼閱讀之with方法(一)原始碼IDE
- 【原始碼閱讀】Glide原始碼閱讀之into方法(三)原始碼IDE
- JDK原始碼閱讀(7):ConcurrentHashMap類閱讀筆記JDK原始碼HashMap筆記
- 如何高效的閱讀paper--三遍閱讀法
- 《快速閱讀術》讀書筆記筆記
- ReactorKit原始碼閱讀React原始碼
- 【閱讀筆記:字典】筆記
- AQS原始碼閱讀AQS原始碼
- CountDownLatch原始碼閱讀CountDownLatch原始碼
- HashMap 原始碼閱讀HashMap原始碼
- delta原始碼閱讀原始碼
- 原始碼閱讀-HashMap原始碼HashMap
- NGINX原始碼閱讀Nginx原始碼
- 閱讀分享《三體》
- Redis閱讀目錄Redis
- Mux 原始碼閱讀UX原始碼
- HashMap原始碼閱讀HashMap原始碼
- fuzz原始碼閱讀原始碼
- gdbOF閱讀筆記筆記
- C#文字閱讀C#