前言
这一篇主要记录模型的训练尝试过程,之所以称为“尝试”,是因为受限于个人能力,这里只做了简单粗浅的训练,无法提供详细的调参/效果提升的相关建议。训练代码包括训练集数据主要参考自链接,原文中代码存在一些错误在这里做了一些修改。另外这里只训练模型输出人脸得分与人脸框位置,并未输出人脸5个关键点信息。
数据准备
训练中需要ground truth数据,这里从人脸数据集(密码:ctvw)下载相关数据。下载后的数据中包括图像数据与包含人脸框的标注xml文件,需要从xml文件中解析得到人脸框数据,并与图像文件对应起来保存到一个文本中,具体见我的工程中的parse_xml.py。
之后我们需要生成训练集,原始版本算法中需要生成4类数据集pos、part、neg、landmark,这里由于没有人脸关键点的数据,不会生成第四项数据集。通过在人脸照片中随机裁剪部分图像数据,并计算该区域与参考人脸框的IOU值。若IOU值大于0.65,将其归为part,若IOU小于0.4,将其归为neg;否则归为part。训练中会使用pos+neg训练网络的人脸得分部分,使用pos+part训练网络中的人脸框位置部分。将裁剪的图像宽高缩放为12X12,这里生成的数据都是为了训练PNET网络。
模型训练
训练PNET:其输入