手把手教学训练MTCNN模型.

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

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
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值