首发:https://zhuanlan.zhihu.com/p/79047443
作者:张新栋
训练的代码和资料请参考ReadMe文档中的BlazeFace相关内容,请看链接。
之前的知乎专栏中给大家介绍过BlazeFace人脸检测器 BlazeFace: 亚毫秒级的人脸检测器(含代码),并基于MNN框架实现了BlazeFace的inference,整个模型大小只有200多kb,速度在目前中低端的手机上都能达到实时的速度。本篇文章,打算跟大家介绍一下如何利用tensorflow去设计一个BlazeFace人脸检测器。这里采用tensorflow作为backend的设计框架,目前的主流inference框架对于tensorflow的支持程度是相对较好的,MNN也不例外。
为什么是BlazeFace-lite呢?其实作者偷了个小懒,训练的框架中没有完全实现BlazeFace文中的后处理,感兴趣的朋友可以基于该文章的基础再做小幅度修改即可完全实现BlazeFace的工作。 本文的实现是基于Tensorflow的Object detection API 进行修改的,如何基于该API进行开发和DIY大家也可以参考文章如何DIY轻型的Mobilenet-SSD模型。本篇文章我打算以如下几步来进行说明,首先我们先简单分析一下Object detection API的框架,然后选取主要模块进行BlazeFace-Lite的修改,最后是模型配置和训练。
Object detection API
Object detectio API是google开源的物体检测的框架,主要基于tensorflow进行开发。该框架的优点是工程化的程度较高,目前许多公司都采用该框架进行生产上面的部署,可用性较强;缺点也比较明显,可定制化的程度较低,代码的可理解性较差(集成度太高)。不过不用担心,我们其实在DIY的过程中,只需要注意如下几个模块即可。
1. /research/object\_detection/models
这个目录内是检测器的的骨干架构,主要包含feature-extraction模块(如Inception、Mobilenet-v1、Mobilenet-v2等)、detection模块(SSD、Faster-RCNN)的定义和集成。
2. https://github.com/tensorflow/models/tree/master/research/slim/nets
这个目录内是检测器所采用的一些Backbone,当然你自己也可以参考该文件夹内的class进行修改。该目录中包含了很多网络结构,如Mobilenet-v1、Mobilenet-v2、VGG、Inception等等。
BlazeFace-Lite的修改
在进行网络修改的时候,我们其实只需要针对BlazeFace设计相应的models(定义blazeface extractor)、设计相应的Backbones,只需要完成这两步工作,再书写相应的config文件就可以用Object detection API进行训练。
- 设计相应的Backbones
BlazeFace的Backbone可以参考 BlazeFace: 亚毫秒级的人脸检测器(含代码) 这篇文章内的介绍,这里不再进行展开。基于/research/slim/nets/mobilenet\_v1.py该文件进行简单修改就可以,如下面代码:
/research/slim/nets/mobilenet\_v1.py中针对BLAZENETV1\_CONV\_DEFS进行相应的修改即可。
2. 设计相应的models
models的设计可以参考ssd\_mobilenet\_v1\_feature\_extractor.py进行修改,主要修改该文件中的preprocess预处理函数和extract\_features函数,extract\_feature的修改可以参考如下代码
这里需要注意的是from\_layer指的是从feature extraction backbone中输出的两个尺度的特种层,算法细节可以参考Blazeface的论文。
最后
完成上述几步工作后,只需要书写相应的config文件就可以进行Blazeface的训练了。完整的代码后续会上传到Github中,然后分享给大家。欢迎留言讨论,关注本专栏,谢谢大家!
参考阅读
- 如何DIY轻型的Mobilenet回归器
- BlazeFace: 亚毫秒级的人脸检测器(含代码)
- https://github.com/tensorflow/models/tree/master/research/object\_detection
- https://github.com/alibaba/MNN
专注嵌入式端的AI算法实现,欢迎关注作者微信公众号和知乎嵌入式AI算法实现专栏。
更多嵌入式AI相关的技术文章请关注极术嵌入式AI专栏