zoukankan      html  css  js  c++  java
  • Github推荐一个国内牛人开发的超轻量级通用人脸检测模型

    Ultra-Light-Fast-Generic-Face-Detector-1MB

    1MB轻量级通用人脸检测模型

     

    Github推荐一个国内牛人开发的超轻量级通用人脸检测模型

     

     

     

    作者表示该模型设计是为了边缘计算设备以及低功耗设备(如arm)设计的实时超轻量级通用人脸检测模型。它可以用于arm等低功耗计算设备,实现实时的通用场景人脸。

    检测推理同样适用于移动终端或pc机。

    作者加入widerface测试代码,完善部分测试数据及添加MNN、NCNN C++推理代码等。

    • 从模型大小来看,默认的fp32精度(.pth)文件大小为1.04~1.1MB,推理帧int8约为300KB。
    • 在模型计算中,320x240的输入分辨率约为90~109mflops。
    • 该模型有两个版本,版本slim(简化速度稍快)、版本rfb(带有修改后的rfb模块,精度更高)。
    • 提供使用320x240和640x480不同输入分辨率的Widerface培训的预培训模型,以便更好地在不同的应用场景中工作。
    • 支持onxx导出,易于移植推理。

     

    作者测试过PC运行环境

    • Ubuntu16.04、Ubuntu18.04、Windows 10(inference)
    • Python3.6
    • Pytorch1.2
    • CUDA10.0 + CUDNN7.6

     

    我们来看下速度、精度和模型大小对比数据

    训练集是使用Retinaface提供的清洁过的Wideface标记以及Wideface数据集生成的,以生成VOC训练集(PS:以下测试结果由我本人测试,结果可能有所不同)。

    Widerface测试情况

    宽面测试集中的测试精度(单标度输入分辨率:320*240)

    模型Easy SetMedium SetHard Setlibfacedetection v1(caffe)0.650.50.233libfacedetection v2(caffe)0.7140.5850.306官方 Retinaface-Mobilenet-0.25 (Mxnet)0.7450.5530.232version-slim0.7650.6620.385version-RFB0.7840.6880.418

     

    宽面测试集中的测试精度(单刻度输入分辨率:VGA 640*480)

    模型Easy SetMedium SetHard Setlibfacedetection v1(caffe)0.7410.6830.421libfacedetection v2(caffe)0.7730.7180.485官方 Retinaface-Mobilenet-0.25 (Mxnet)0.8790.8070.481version-slim0.7570.7210.511version-RFB0.8510.810.541

     

    看看在树莓派推理速度

    树莓pi 4b mnn推理测试时间(ms)(arm/a72x4/1.5ghz/输入分辨率:320x240/int8量化)

    模型1核2核3核4核libfacedetection v12816129.7官方 Retinaface-Mobilenet-0.25 (Mxnet)462518.515version-slim2916129.5version-RFB3519.614.811

    我们来看看模型大小数据比较

    几种主流开源轻量级人脸检测模型的大小比较:

    模型模型文件大小(MB)libfacedetection v1(caffe)2.58libfacedetection v2(caffe)3.34官方 Retinaface-Mobilenet-0.25 (Mxnet)1.68version-slim1.04version-RFB1.11

     

    生成voc格式的训练数据集和训练流程

    一、下载wideface官方网站数据集或下载我提供的培训集并将其提取到./data文件夹:

    (1)过滤掉10px*10px面后干净的wideface数据压缩包

    (2)完整的未过滤小面宽面数据压缩包

    (注:如果下载上述(1)中的过滤包,则无需执行此步骤)

    二、由于宽空间中有许多小而不清晰的面,不利于有效模型的收敛,因此需要进行过滤。训练时,默认值是过滤10像素x 10像素的脸大小。

    运行./data/wide_face_2_voc_add_landmark.py

    python3 ./data/wider_face_2_voc_add_landmark.py

    程序运行并完成后,将在./data目录中生成更宽的

    “u face_add_lm_10_10”文件夹。解压后文件夹数据和数据包(1)相同。完整的目录结构如下:

     data/
    retinaface_labels/
    test/
    train/
    val/
    wider_face/
    WIDER_test/
    WIDER_train/
    WIDER_val/
    wider_face_add_lm_10_10/
    Annotations/
    ImageSets/
    JPEGImages/
    wider_face_2_voc_add_landmark.py

     

    三、VOC训练集已准备就绪,在项目的根目录中有两个脚本

    train_mb_tiny_fd.sh和train_mb_tiny_rfb_fd.sh。

    四、前者用于训练slim版本模型,后者用于训练rfb版本模型。已设置默认参数。有关微调,请参阅./train.py中每个训练超参数的说明。

    运行train_mb_tiny_fd.sh和train_mb_tiny_rfb_fd.sh

    sh train_mb_tiny_fd.sh 或者 sh train_mb_tiny_RFB_fd.sh

     

    我们来看看几张分辨率为640*480的人脸检测效果图:

     

    Github推荐一个国内牛人开发的超轻量级通用人脸检测模型

     

     

    Github推荐一个国内牛人开发的超轻量级通用人脸检测模型

     

     

    Github推荐一个国内牛人开发的超轻量级通用人脸检测模型

     

     

    • 如果实际的生产场景是中距离、大面和小面,建议使用输入尺寸输入尺寸:320(320x240)分辨率训练,并使用320x240图像尺寸输入进行预测推理,例如使用提供的预训练模型。用于推理的mb_tiny_rfb_fd_train_320.pth输入。
    • 如果实际的生产场景是中长距离、小面和大量面,建议:
    • (1)最优:输入大小输入大小:640(640x480)分辨率训练,并使用相同或更大的输入大小进行预测推理,如使用提供的训练前模型mb_tiny_rfb_fd_train_640.pth进行推理,误报率更低。
    • (2)次优:输入大小输入大小:320(320x240)分辨率训练,并使用480x360或640x480大小输入进行预测推理,对小脸更敏感,误报会增加。

     

    • 每个场景的最佳结果都需要调整输入分辨率,以便在速度和精度之间取得平衡。
    • 过大的输入分辨率会提高小人脸的召回率,但也会增加大、近距离人脸的误报率,推理速度会成倍增加。
    • 输入分辨率过小会显著加快推理速度,但会大大降低小人脸的召回率。
    • 制作场景的输入分辨率应尽量与模型训练的输入分辨率一致,上下浮动不宜过大。

    相关数据集及代码大家可以在Github上找得到。

  • 相关阅读:
    POJ 2236 Wireless Network(并查集)
    POJ 2010 Moo University
    POJ 3614 Sunscreen(贪心,区间单点匹配)
    POJ 2184 Cow Exhibition(背包)
    POJ 1631 Bridging signals(LIS的等价表述)
    POJ 3181 Dollar Dayz(递推,两个long long)
    POJ 3046 Ant Counting(递推,和号优化)
    POJ 3280 Cheapest Palindrome(区间dp)
    POJ 3616 Milking Time(dp)
    POJ 2385 Apple Catching(01背包)
  • 原文地址:https://www.cnblogs.com/wuhh123/p/11697766.html
Copyright © 2011-2022 走看看