树莓派上几种人脸检测模型对比

前言

  人脸检测相对其他计算机视觉技术而言,可以算是比较烂大街的技术,各家都有各家的人脸检测技术,而且开源的很多人脸检测技术都有非常高的精度和速度。我觉得要比速度,就扔掉GPU,拿个边缘设备来试试,是不是真的快,立竿见影,谁也别说谁快枪手。今天就对github上找到的几款人脸检测模型进行对比。
  测试图像就一张,还是比较有名的那一张,大小2048*1150,如下:
树莓派上几种人脸检测模型对比_第1张图片
  我的运行硬件是4G版的树莓派4B,运行的推理框架主要是ncnn框架,运行语言是C++。本次测试的模型如下:

模型 地址
MTCNN https://github.com/ElegantGod/ncnn
CenterFace https://github.com/Star-Clouds/CenterFace https://github.com/MirrorYuChen/ncnn_example
RetinaFace https://github.com/deepinsight/insightface https://github.com/deepinsight/insightface/issues/669
UltraFace-1MB https://github.com/Linzaer/Ultra-Light-Fast-Generic-Face-Detector-1MB
LFFD https://github.com/SyGoing/LFFD-with-ncnn

  当然啦,github上开源的模型可不止这几个,还有于仕琪老师开源的libfacedetect,山世光老师团队的SeetaFace等,这些后面再补上(主要是这些项目好像都还不支持arm等边缘设备哈,所以我还没在树莓派上部署起来哈)。

检测

  在比较中,选取了几个尺寸、阈值等可变参数,然后计算能找到的人脸数量、推理的时间等指标,得到如下结果:

MTCNN

  MTCNN设置了阈值参数:PNet、RNet、ONet三个模型的输出阈值设置了0.4、0.2、0.2,factor阈值设置了0.9,最后检测出了33张人脸,用了1081.62ms。
树莓派上几种人脸检测模型对比_第2张图片

CenterFace

  CenterFace与MTCNN稍微不同,它可以指定输入的尺寸,也可以修改阈值,所以我设置了几组尺寸:。
  尺寸:(512,256),阈值0.4,时间:511.463ms,人脸:46:
树莓派上几种人脸检测模型对比_第3张图片
  尺寸:(1024,512),阈值0.4,时间:2903.19ms,人脸:193:
树莓派上几种人脸检测模型对比_第4张图片
  尺寸:(2048,1150),阈值0.4,时间:11726.5ms,人脸:499:
树莓派上几种人脸检测模型对比_第5张图片

RetinaFace

  RetinaFace的操作与CenterFace类似,它可以指定输入的尺寸,也可以修改阈值,所以我也设置了相同的尺寸:。
  尺寸:(512,256),阈值0.4,时间:170.906ms,人脸:27:
树莓派上几种人脸检测模型对比_第6张图片
  尺寸:(1024,512),阈值0.4,时间:649.532ms,人脸:149:
树莓派上几种人脸检测模型对比_第7张图片
  尺寸:(2048,1150),阈值0.4,时间:3926.29ms,人脸:457:
树莓派上几种人脸检测模型对比_第8张图片

UltraFace-1MB

  UltraFace-1MB的操作也与CenterFace类似,它可以指定输入的尺寸,也可以修改阈值,所以我也同样设置了相同的尺寸:。
  尺寸:(512,256),阈值0.4,时间:257.864ms,人脸:299:
树莓派上几种人脸检测模型对比_第9张图片

  尺寸:(1024,512),阈值0.4,时间:1106.54ms,人脸:565:
树莓派上几种人脸检测模型对比_第10张图片

  尺寸:(2048,1150),阈值0.4,时间:4515.47ms,人脸:695:
树莓派上几种人脸检测模型对比_第11张图片

LFFD

  追加一个LFFD,效果也是挺好的,速度稍微慢一丢丢哈:。
  尺寸:(512,256),阈值0.4,时间:1094.84ms,人脸:81:
树莓派上几种人脸检测模型对比_第12张图片

  尺寸:(1024,512),阈值0.4,时间:4683.66ms,人脸:283:
树莓派上几种人脸检测模型对比_第13张图片

  尺寸:(2048,1150),阈值0.4,时间:25551.5ms,人脸:578:
树莓派上几种人脸检测模型对比_第14张图片

最后

  最后,想说,这样子的比较不严谨,因此我也只是大概看下每个模型在树莓派上的运行速度。
  我觉得刷速度的要看应用设备和场景等因素吧,你不能拿在GPU上的速度来比较,GPU上的速度基本也就是那些很大的项目或者学术上比一比。我觉得既然是要讲速度或者说要在边缘设备上跑,那就找那些计算力有限的设备来比一笔,真刀真枪的在边缘端比,这才是有比较大的参考意义的,特别是模型的目标是部署在边缘端,结果拿GPU上的速度,什么6ms啦、7ms啦,都是没有用的参考价值的。
  此外呢,要严重注意的一点,模型的参数量下降,不等于模型速度的提升,模型的大小与模型的参数有比较强的关系,但是模型的推理速度与模型的参数量关系比较弱。就以上面的RetinaFace和UltraFace-1MB来比较,前者模型文件MB,后者基是1MB,但是实际上相同收入尺寸下的速度是前者稍微快一丢丢,当然啦,一次实验两次实验并不说明一切,而且也还与我编程技术有限等因素有关,但是还是可以说明一点点问题的哈。再比如,这两天看到的号称模型文件7MB、各大技术公众号都有推送的人脸检测模型DBFace,确实参数很少,模型很小,但也没那么夸张啦,而且我要说它是因为,我下载了它的github的源码,然后在我的树莓派上跑, 也是设置了(512,256)、(1024,512)、(2048,1150)三组参数,然后第三组参数成功让我的树莓派死机了,测试了几次第一组都要5、6秒的时间,用(320,240)的模型输入都要几秒的时间。所以这个模型在边缘端运行应该需要优化、量化,当然这部分我没做,所以这也是我自己实验存在问题哈。
  不过我们是不应该过分评价他人这样的开源工作的,作者开源让我们白嫖他的作品,比我这种白嫖别人的成果、还在这说这不好那不好的人对社会贡献更大的哈。所以,还是抱着尊敬之意说点自己的实验和理解。

世人作梅词,下笔便俗。予试作一篇,乃知前言不妄耳。

藤床纸帐朝眠起,说不尽无佳思。
沉香断续玉炉寒,伴我情怀如水。
笛声三弄,梅心惊破,多少春情意。
小风疏雨萧萧地,又催下千行泪。
吹箫人去玉楼空,肠断与谁同倚。
一枝折得,人间天上,没个人堪寄。
– 宋代-李清照 《孤雁儿·藤床纸帐朝眠起》

你可能感兴趣的:(树莓派,Deep,Learning)