手把手教学训练MTCNN模型
0 背景介绍
我在学习人脸识别时,发现虽然网络上关于人脸识别理论的文章非常的多,但涉及到如何获取训练样本,如何进行预处理,以及如何去训练,并研究训练中的主要耗时情况等问题的文章非常的零散.因此在这里我结合我自己训练的步骤重头进行汇众整理并加入一些自己的理解.
此github的代码提交在: https://github.com/hlzy/caffe_mtcnn (目前代码还没整理完,我几乎是在2019-09-15日前整理完)
1.关于训练集,测试集,校验集
1.1 获取数据集
我使用的是WIDER_FACE数据集,这个数据集有32203张图片,并且标记了393703张脸,数据集共有61个大分类,如下:
0--Parade 17--Ceremony 24--Soldier_Firing 31--Waiter_Waitress 39--Ice_Skating 46--Jockey 53--Raid 61--Street_Battle
10--People_Marching 18--Concerts 25--Soldier_Patrol 32--Worker_Laborer 3--Riot 47--Matador_Bullfighter 54--Rescue 6--Funeral
11--Meeting 19--Couple 26--Soldier_Drilling 33--Running 40--Gymnastics 48--Parachutist_Paratrooper 55--Sports_Coach_Trainer 7--Cheering
12--Group 1--Handshaking 27--Spa 34--Baseball 41--Swimming 49--Greeting 56--Voter 8--Election_Campain
13--Interview 20--Family_Group 28--Sports_Fan 35--Basketball 42--Car_Racing 4--Dancing 57--Angler 9--Press_Conference
14--Traffic 21--Festival 29--Students_Schoolkids 36--Football 43--Row_Boat 50--Celebration_Or_Party 58--Hockey
15--Stock_Market 22--Picnic 2--Demonstration 37--Soccer 44--Aerobics 51--Dresses 59--people--driving--car
16--Award_Ceremony 23--Shoppers 30--Surgeons 38--Tennis 45--Balloonist 52--Photographers 5--Car_Accident
这些文件夹中存放是图片文件本身,其中训练,校验,测试集的比例是40%,10%,50%,区分几个集合使用的是face_annotations文件.

如:wider_face_train_bbx_gt.txt 就是训练集,打开来看看,其中有
0--Parade/0_Parade_marchingband_1_799.jpg
21
78 221 7 8 2 0 0 0 0 0
78 238 14 17 2 0 0 0 0 0
113 212 11 15 2 0 0 0 0 0
134 260 15 15 2 0 0 0 0 0
163 250 14 17 2 0 0 0 0 0
201 218 10 12 2 0 0 0 0 0
182 266 15 17 2 0 0 0 0 0
245 279 18 15 2 0 0 0 0 0
304 265 16 17 2 0 0 0 2 1
第一行是图片path
第二行代表有此图片有多少人脸
之后21行,没一行分别表示x1, y1, w, h, blur, expression, illumination, invalid, occlusion, pose,其对照含义如下:
blur:
clear->0
normal blur->1
heavy blur->2
expression:
typical expression->0
exaggerate expression->1
illumination:
normal illumination->0
extreme illumination->1
occlusion:
no occlusion->0
partial occlusion->1
heavy occlusion->2
pose:
typical pose->0
atypical pose->1
invalid:
false->0(valid image)
true->1(invalid image)
1.2 数据集预处理
mtcnn网络结构介绍
在说明数据预处理前首先要弄清楚训练网络模型是怎样的.这里我使用可视化工具放置一个处理12*12的网络在下面:

我们知道MTCNN分为三个子网络:
- Proposal Network(P-Net) 以12123为bbox进行初步预测
- Refine Network(R-Net)
- Output Network(O-Net)
预处理过程
- 负样本生成过程:
使用代码来说明:
while neg_num < 50`
# 截取的图片最小像素40,最大不会超过边宽的一半,基本上wider_face上也没有出现这么大的脸
size = npr.randint(40, min(width, height) / 2)
# 截图图片的位置是完全随机
nx = npr.randint(0, width - size)
ny = npr.randint(0, height - size)
crop_box = np.array([nx, ny, nx + size, ny + size])
# IOU选取是低于0.3作为负样本
Iou = IoU(crop_box, boxes)
cropped_im = img

本文详细介绍了使用MTCNN模型进行人脸识别的全过程,包括数据集获取、预处理、模型训练及效果评估,特别强调了WIDER_FACE数据集的使用和训练中遇到的问题。
最低0.47元/天 解锁文章
1759

被折叠的 条评论
为什么被折叠?



