人脸检测算法MTCNN的Pytorch实现

时间:2024-03-25 17:57:32

     本人最近在研究人脸识别、人脸检测和姿态估计等视觉领域的算法,也在研究各类神经网络例如ResNet、Feature Pyramid Net、Retina Net和DenseNet。所以将自己研究的论文和算法源码修复奉献给大家。

     人脸检测算法MTCNN代码:https://github.com/Sierkinhane/mtcnn-pytorch

     论文地址:https://kpzhang93.github.io/MTCNN_face_detection_alignment/paper/spl.pdf

     迫于项目和比赛的截止日期,算法详解暂时没有时间写,过段时间会更新,如果对源代码有疑问可以留言。所以只能给大家能成功训练和测试的代码。代码是基于DFace仓库更新和修改,非常感谢作者的实现。

     测试图片结果:

人脸检测算法MTCNN的Pytorch实现

人脸检测算法MTCNN的Pytorch实现

      

人脸检测算法MTCNN的Pytorch实现

人脸检测算法MTCNN的Pytorch实现

      

     以下是代码目录(开发环境可选win10和linux系统,本人是用win10):

人脸检测算法MTCNN的Pytorch实现

    mtcnn_test.py 可以测试人脸检测效果。

   

准备训练数据

  • 百度网盘下载 WIDER FACE (passcode:lsl3) 人脸检测数据集放到 ./data_set/face_detection​​​​​​
  • 也可以在http://mmlab.ie.cuhk.edu.hk/projects/WIDERFace/ 下载
    •  python ./anno_store/tool/format/transform.py 因为数据集的训练标签是MATLAB格式的,所以先转换成txt
    • 我已经将转化好的放在了anno_store/anno_train.txt
  • 下载 CNN_FacePoint 人脸检测和特征点数据集放到./data_set/face_landmark, 如果搞不懂具体目录,我在下面描述的程序中已经给出,按照目录放置数据集即可。

训练

  • 生成P-Net训练数据(positive、negative、part)

    • run > python mtcnn/data_preprocessing/gen_Pnet_train_data.py
    • run > python mtcnn/data_preprocessing/assemble_pnet_imglist.py
  • 训练 P-Net

    • run > python mtcnn/train_net/train_p_net.py
  • 生成R-Net训练数据(positive、negative、part)

    • run > python mtcnn/data_preprocessing/gen_Rnet_train_data.py (可能你需要修改代码中已经训练好的P-Net模型路径,默认的是原来的模型)
    • run > python mtcnn/data_preprocessing/assemble_rnet_imglist.py
  • 训练 R-Net

    • run > python mtcnn/train_net/train_r_net.py
  • 生成O-Net训练数据(positive、negative、part)

    • run > python mtcnn/data_preprocessing/gen_Onet_train_data.py
    • run > python mtcnn/data_preprocessing/gen_landmark_48.py
    • run > python mtcnn/data_preprocessing/assemble_onet_imglist.py
  • 训练 O-Net

    • run > python mtcnn/train_net/train_o_net.py

     MTCNN代码:https://github.com/Sierkinhane/mtcnn-pytorch

     论文地址:https://kpzhang93.github.io/MTCNN_face_detection_alignment/paper/spl.pdf

     此次我只将精力放在了看论文和源码上,虽然没有训练自己的模型,但是我已经将bug修复,已经确定每个模块都能正常运行,如果有疑问可以留言提问。