git clone https://github.com/AITTSMD/MTCNN-Tensorflow
mtcnn为一个多任务训练,物体框和特征点数据分别为两个数据集,
数据集1标记里物体框位置,因此只用与训练物体检测。
数据集2标记有物体框,特征点,用于训练特征点。
输入数据每行分别为,
path to image, cls_label, bbox_label, landmark_label
对于数据集1,随机裁剪物体框,根据物体框与ground truth bbox的IOU值,得到正、负、部分样本集,对于数据集1,没有特征点,特征点用0补充。
对于数据集2,提取特征点,并采取crop,flip,rotate方式进行数据增益,预测的时候,根据预测框,然后预测特征点,所以,输入bbox用0补充。
在训练的时候,用一个label值,标记当前的数据是用于训练物体框类别,物体框位置,还是特征点。
For pos sample,cls_label=1,bbox_label(calculate),landmark_label=[0,0,0,0,0,0,0,0,0,0].
For part sample,cls_label=-1,bbox_label(calculate),landmark_label=[0,0,0,0,0,0,0,0,0,0].
For landmark sample,cls_label=-2,bbox_label=[0,0,0,0],landmark_label(calculate).
For neg sample,cls_label=0,bbox_label=[0,0,0,0],landmark_label=[0,0,0,0,0,0,0,0,0,0].
数据准备
下载训练数据,
http://mmlab.ie.cuhk.edu.hk/projects/WIDERFace/ ,人脸框数据。
将下载好的训练数据放在MTCNN-Tensorflow/prepare_data目录。
gen_12net_data.py
用于得到正、负样本框,对每张图片,得到50个负样本框(np.max(Iou) < 0.3),并将负样本框图片保存在 ‘…/…/DATA/12/negative’。
生成正样本框,iou >= 0.65,保存在…/…/DATA/12/positive/,u >= 0.4,保存在…/…/DATA/12/part/.
wider_face_train.txt为标注文件,每行为文件名,bbox1,bbox2,…,每个bbox对应为box的四个点的坐标,
im_path = annotation[0]
#print(im_path)
#boxed change to float type
bbox = list(map(flo