前言
网上大多都没有训练的项目,都是直接有的模型。就算有,网上大多数都是用widerface等数据集来训练MTCNN,但是由于不同的应用场景,官方训练出来的模型应用到实际存在一定偏差,下面主要介绍如何依葫芦画瓢实现用自己的数据集训练模型,无需基础。
一、MTCNN简介
转载:人脸识别经典网络-MTCNN(含Python源码实现)_mtcnn代码_Moresweet猫甜的博客-CSDN博客
这里就不做概述了,大概知道他由三层PRO-NET组成,各个层的作用即可。我们该章主要是直接上手实操,理论的东西少。
二、准备自己的训练集
根据上述github项目readme所述,下载官方数据集后,dataset目录下应该有lfw_5590, net_7876,WIDER_train以及对应的标签trainImageList.txt,testImageList.txt和wider_face_train.txt。只需仿造齐格式即可。下面主要介绍关键点部分数据集的增加,bbox数据集方法相同
1.获取关键点数据集
最原始的方法,人工标注。但是如果你有效果很好的模型,可以直接检测,将检测结果作为数据集。这里我懒且没有好的模型,我直接调用阿里云的人脸检测以及五官走位的API,网址如下:能力展示-阿里云视觉智能开放平台,调用API得到的数据为一串JSON格式的字符串,需要对他做一定处理,来过滤得到你所需要的人脸检测框以及关键点坐标,最重要的,记得仿照原数据集格式将路径放在数据集的第一位。过滤应该还是蛮简单的,这里就不贴代码了。这样子我们就得到了关键点数据集的标签文件。格式如下,(path,x1,x2,y1,y2,landmarks(x,y)*5)。这里图方便,我直接将路径也改为lfw_5590,后续只需要将图片放在lfw_5590下,并将标签数据增加至trainImageLis t以及testImageList(虽然二者有出入,但是我放进去的数据标注是一样的,我不知道testImageList的作用是什么,先这么做吧,有懂的大哥可以教我一下)。
2.开始训练
经过上述得到数据集以及将数据集迁移后,可以直接根据官方教程产生数据集然后开始训练。
时间可能比较长,可以修改train_PNet中的batch_size来加快(只要你能够带的动)。
cd /train_PNet
python generate_PNet_data.py
python train_PNet.py
3. 过程中可能遇到的bug
在train_PNet过程中,我出现了Image is None 的报错,原因是解码后Image为None,查阅过后,总结原因大概如下
1. 图片路径错误,检查一下你trainImageList中的路径和你图片存放的路径
2. 图片后缀(我是这个原因),我原本图片为png,全部修改为jpg问题就得到了解决。