RetinaFace使用TVM、Openvino、TNN、NCNN实现
前言
- 这几天用了TNN、TVM、NCNN、Openvino四个前向推理框实现RetinaFace,并决定开源这些代码,希望个位大佬能指出不足,也欢迎大家一起讨论.
- 先上gitee地址:https://gitee.com/damon93/inference_retina_face.git
- 为了下载后直接能编译运行,基本上第三方库、原始模型、转换后的模型都上传了
- 在使用这份工程前默认您对RetinaFace的用途以及算法相当熟悉,并对C++代码以及Cmake都有一定的了解,适合算法工程化行业的同学.
RetinaFace算法来自:
https://github.com/deepinsight/insightface/tree/master/detection/RetinaFace
RetinaFace模型来自:
yangfly: RetinaFace-MobileNet0.25 (baidu cloud:nzof).
WiderFace validation mAP: Hard 82.5. (model size: 1.68Mb)
上述RetinaFace-MobileNet0.25 已保存在./original_model/目录下[mnet.25-0000.params, mnet.25-symbol.json]
工程目录
├── common 通用模块
├── config.cmake 编译配置文件,按自身环境配置
├── image 测试图片
├── original_model 原始模型
├── README.md
├── tool
├── openvino 使用Openvino实现RetinaFace工程目录
├── tnn 使用Tnn实现RetinaFace工程目录
├── ncnn 使用Ncnn实现RetinaFace工程目录
└── tvm 使用TVM实现RetinaFace工程目录
编译与运行
-
编译前准备:按自身环境修改config.cmake文件,主要是配置OpenCV_DIR
-
下面以TVM的工程为例子,其他工程类似,注意buildLinux.sh中有部分配置项,如GPU的使用与否 -DUSE_GPU=OFF或-DUSE_GPU=ON
编译:
cd ./tvm
./scripts/buildLinux.sh
运行:
./bin/RetinaFaceTvm
关于工程
- 每个部分基本上都有readme,具体的实现也有相应的代码以及注释,就不展开讲了.
四个框架运行结果
四个框架运行时间
- 不计前处理和后处理,只测框架进行前向推理的时间
- 注意这里得出的时间是在模型输入为1x3x320x320, date type: float32, 有些框架可能在做过int8量化之后会有速度大幅提升,下面这个表只能是一个参考,并没有全面的测试过其他的date type和size下的情况,表中的TNN没有选择Tenorrt和openvino编译
TVM(ms) | OpenVino(ms) | TNN(ms) | NCNN(ms) | |
---|---|---|---|---|
Cpu [Core i7-7700] | 3.65417 | 5.21706 | 7.9898 | 8.97799 |
Gpu [GTX1080Ti] | 1.09579 | - | - | - |
四个框架的个人使用心得
TVM、Openvino、TNN、NCNN前向推理框架使用心得