前几天,深圳大学于仕琪老师突然开源了libfacedetection——号称最快的人脸检测项目(超越OpenCV,史上最快人脸检测系统开源 | 新智元)吸引了一大波人脸检测应用开发者围观,紧接着Tengine也立马对libfacedetection模型增加了支持,让我们一起来看看,在Tengine加持下的libfacedetection能快到什么程度吧!
libfacedetection
github项目:https://github.com/ShiqiYu/li...
模型结构
本次开源的库是基于卷积神经网络实现的,320x240模型如下图所示:
其整体框架参照SSD,并由若干组类似VGG的卷积层组合堆叠而成——
- 和VGG一样,大部分降采样都由2x2最大池化完成,不过libfacedetction的入口部分则与Inception、ResNet类似——由卷积层完成降采样(Inception、ResNet这种大网络喜欢一上来先来一层7x7/s2的卷积下采样,改进版则用三层3x3卷积替换7x7;像Mobilenet这些小网络就直接一层3x3/s2的下采样,这里的libfacedetection也是如此);
- 与VGG类似的卷积层组合,两到三个带激活的卷积层一组,不同的是,VGG用若干3x3卷积堆叠作为一组,而libfacedetection则是采用【3x3 + 1x1】或【3x3 + 1x1 + 3x3】的组合,将其中一个3x3卷积层替换为1x1不仅降低了MAC而且避免了im2col;
- 比较特别的是,每一组卷积之后送去回归和分类之前都经过一个Normilization层对特征图进行归一化操作;
- libfacedetection设置了四组锚框,总计$3600+600+140+45=4385$;
- 参数数量约660K,乘加次数约80M(作为参照:MobileNet-v1-1.00约4.25M参数和570M次乘加运算)
没细算,参数数量用caffemodel的文件大小简单除了个4;乘加次数则是用gluon随手搭了个主干(实际应该比这个数字更大一些),然后调mxop测算了一下MAC,粗糙数据,仅供参考。
检测效果
原图:
FP32精度输出:
INT8精度输出:
性能表现
至于速度,于老师的github上已经有了与OpenCV Haar+AdaBoost的比较数据,引用至此而不再赘述:
加持Tengine的libfacedetection
用开发者版的Tengine分别在EAIDK-610(RK3399,4A53@1.4GHz+2A72@1.8GHz
)和树莓派3B(BCM2837,4A53@1.2GHz
)、树莓派3B+(BCM2837,4A53@1.4Hz
)平台上测试libfacedetection——
使用于老师github上的caffe模型,输入大小为320x240。
EAIDK-610
CPU-Core | Time(fp32) | FPS(fp32) | Time(int8) | FPS(int8) | FPS(int8)/FPS(fp32) |
---|---|---|---|---|---|
1A53 | 68.26ms | 14.65 | 59.25ms | 16.88 | 1.1520 |
2A53 | 50.66ms | 19.74 | 49.61ms | 20.16 | 1.0213 |
3A53 | 45.97ms | 21.75 | 47.90ms | 20.88 | 0.9598 |
4A53 | 42.97ms | 23.27 | 46.03ms | 21.73 | 0.9335 |
1A72 | 34.70ms | 28.82 | 24.56ms | 40.71 | 1.4126 |
2A72 | 26.41ms | 37.86 | 20.59ms | 48.57 | 1.2828 |
由于大小核共同运算时速度比单个大核还慢,所以此处不列出大小核测试的数据。
- 最快可以达到48.57FPS!
- 2A53相对于1A53有相对可观的提升,3A53、4A53就只有少量的提升了;
- 相比于A53,大核的A72量化后能有比较明显的提升
树莓派3B
CPU-Core | Time(fp32) | FPS(fp32) | Time(int8) | FPS(int8) | FPS(int8)/FPS(fp32) |
---|---|---|---|---|---|
1A53 | 93.96ms | 10.64 | 104.11ms | 9.61 | 0.9025 |
2A53 | 66.74ms | 14.98 | 62.90ms | 15.90 | 1.0611 |
3A53 | 58.03ms | 17.23 | 50.73ms | 19.71 | 1.1438 |
4A53 | 56.57ms | 17.68 | 43.69ms | 22.89 | 1.2947 |
树莓派3B+
CPU-Core | Time(fp32) | FPS(fp32) | Time(int8) | FPS(int8) | FPS(int8)/FPS(fp32) |
---|---|---|---|---|---|
1A53 | 89.90ms | 11.12 | 94.61ms | 10.57 | 0.9502 |
2A53 | 65.87ms | 15.18 | 58.34ms | 17.14 | 1.1290 |
3A53 | 59.76ms | 16.73 | 47.99ms | 20.84 | 1.2451 |
4A53 | 58.22ms | 17.18 | 41.26ms | 24.24 | 1.4111 |