原文:
https://github.com/LeslieZhoa/tensorflow-MTCNN
1.三个模型要按顺序训练,PNet-RNet-ONet
2.训练集
负样本:IOU < 0.3
正样本:IOU > 0.65
part 样本:0.4 < IOU < 0.65
关键点位置:5个关键点位置。
人脸分类:正样本 + 负样本
人脸检测:正样本 + part样本
人脸关键点检测:关键点位置
【分析】:
正样本:需要label标注1,人脸框相对图像坐上角的偏移。
part样本:需要label标注-1,人脸框相对于图像左上角的偏移量。
【偏移量相对于图像大小进行了归一化】
负样本:需要label标注0。
关键点位置:需要label标注为-2,人脸关键点的坐标偏移量。
3.PNet
3.1训练集
从WIDER FACE中收集正样本、负样本、part样本。
从CelebA中裁剪人脸,作为人脸关键点。
3.2网络
输入:12 * 12 * 3
输出卷积数 核大小 步长 pad 输出
conv1:10 3 1 same 12 * 12 *10
pool1: 10 3 2 —— 5*5*10
conv2:16 3 1 valid 3*3*16
conv3:32 3 1 valid 1*1*32
3.3具体训练
对于是否存在人脸,只计算正负样本的损失;
对于人脸框的损失,只计算正样本和part数据的损失;
对于人脸关键点的损失,只计算人脸关键点的。
【具体操作:通过label尽心遮掩来处理。】
【以下为转载】
https://zhuanlan.zhihu.com/p/31913064
3.4其推理过程
Pnet进行推理,生成很多的bounding box,然后采用NMS进行过滤。得到landmarks,bounding box。
4.RNet
4.1训练集
使用PNet检测WIDER FACE的bounding box ,结合groundtruth依据IOU来标记正样本、负样本、part样本;
人脸关键点采用CelebA。
4.2推理
根据PNET推理之后的bounding box输入,进行微调。