仅需一步将人脸检测算法从30FPS提升到120FPS

  • 算法加速瓶颈
  • 可行性验证
  • 模型手术
  • 推理速度及实验结果
  • 下一步计划


算法加速瓶颈

  目前,各种卷积神经网络算法在Tensorrt的加速下,inference时间已大幅度的缩短,但后处理部分依然需要在CPU端进行,特别是用于剔除冗余检测框的NMS计算,后处理的耗时往往是inference部分的10倍甚至更多。为了加快算法的整体运算速度,尝试将后处理操作同样迁移至GPU处理。在加速算法的同时,这样做还有一个额外的好处,如果需要在设备上部署系统(算法只是其中一部分),CPU使用率及内存占用的降低可以使系统运行的更流畅。

可行性验证

  1. Nv的官方博客Creating an Object Detection Pipeline for GPUs介绍了如何使用C++完成RetinaNet的训练与加速,其中包含了DALI(GPU端图像预处理)、Automatic Mixed Precision on Tensor Cores(混合精度训练)、TensorRT加速与添加NMS_TRT插件等。

  2. 上述方式只支持c++, 官方论坛python添加nms插件中的回答,验证了使用python在ONNX模型添加NMS插件的可能性。

 得益于python的便捷性,选择技术路线2对ONNX模型进行修改。完成.trt引擎构建后,考虑到c++与python的运算速度差异,使用C++编写引擎部署代码。由于推理以及后处理操作已经被包含至trt引擎中,GPU的计算结果即所需的算法输出,这使得引擎部署代码十分简单。
 TensorRT完美的Python、C++接口支持,使得Python修改模型,C++部署引擎这一检测流程最大化的提升了效率,充分利用设备资源。

模型手术

  感谢ShiqiYu大佬开源的人脸检测代码并提供源码及ONNX文件。再此基础上,本实验使用onnx graphsurgeon对原始onnx模型进行修改并添加NMS插件以使得inference以及后处理部分在GPU端被计算。完整的技术路线可以被分为模型手术、引擎构建、算法部署三个部分。

  1. 模型手术

      确定ShiqiYu大佬所提供模型的opset版本后,依据后处理代码并查看onnx支持的op对ONNX模型的计算图进行修改,即使用onnx graphsurgeon添加相应的节点以及NMS插件等。完成模型手术后,使用Netron可视化网络结构,关键结构图如下图所示:

  1. 引擎构建
    构建的.trt引擎视部署设备的不同而不同,不能将不同设备的引擎文件迁移至其他设备使用。本实验所使用的Jetson NX已经默认安装了TensorRT,可以使用trtexec完成引擎的构建,有几个经常使用的参数:

    1. --explicitBatch 在构建引擎时使用明确的batchsize
    2. --workspace   以兆字节为单位设置工作区大小,根据模型大小及设备资源设置
    3. --fp16     使用FP16精度以提升推理速度
    4. --best     自动选择性能最好的精度(FP32,FP16,int8)以提升性能,有坑需谨慎
    5. --verbose    引擎转换过程中输出详细的log,不知道报错原因时特别好用!
    6. --batch=    如果硬件支持的话,batchsize为32的倍数对于FP16和INT8推断往往具有最佳性能,因为可以使用Tensor Core。
  2. 算法部署

    该步骤需要注意的是:由于使用了trt插件,读取引擎前需要提前导入,避免找不到插件而报错。

    trt.init_libnvinfer_plugins(TRT_LOGGER, '')
    

推理速度及实验结果

实验1:Jetson NX启用15W-6Core模式并开启 jetson_clocks

model FP H(0.75*W) W inference_time total_time 备注 描述
YuFaceDetectNet_320 32 240 320 15.1ms 30.0ms opencv_dnn GPU使用率低
YuFaceDetectNet_320 32 240 320 15.0ms 29.5ms opencv_dnn onnx-simplifier精简网络结构
YuFaceDetectNet_320-trt 32 240 320 3.4ms 14.6ms python 仅推理部分使用trt加速

  注:-trt 表示 onnx-slim2tensorrt

实验2:YuFaceDetectNet_320算法的推理及后处理(包含NMS)全部在GPU端进行。

平台 FP H(0.75*W) W inference_time total_time
Jetson NX FP32 240 320 3.5ms 8.2ms
Jetson Nano FP32 240 320 9.8ms

  注:total_time包含了图像预处理及绘制detections到原图的过程

下一步计划

YOLOv3,YOLOv5的模型转换在路上,未来会逐步分享模型加速实验

仅需一步将人脸检测算法从30FPS提升到120FPS相关推荐

  1. 【全新发布】百度大脑人脸实名认证方案升级,仅需4步完成核身配置,安全可靠易部署

    百度大脑为方便开发者集成实名认证方案,全新发布的人脸实名认证方案配备了可视化操作后台,客户可以低开发成本,快速配置适合业务的H5端/APP端身份核验方案. 完整人脸核身,提供权威数据源,更安全 人脸实 ...

  2. RetinaFace,最强开源人脸检测算法

    作者 | CV君 来源 | 我爱计算机视觉(ID:aicvmlaicvmlaicvml) 人脸检测为目标检测的特例,是商业化最早的目标检测算法,也是目前几乎各大 CV 方向 AI 公司的必争之地. W ...

  3. 人脸检测算法之 S3FD

    其它机器学习.深度学习算法的全面系统讲解可以阅读<机器学习-原理.算法与应用>,清华大学出版社,雷明著,由SIGAI公众号作者倾力打造. 书的购买链接 书的勘误,优化,源代码资源 SIGA ...

  4. 一文带你了解人脸检测算法的类型及其工作原理

    在过去的几年里,人脸识别受到了广泛的关注,被认为是图像分析领域最有前途的应用之一.人脸检测可以考虑人脸识别操作的很大一部分.根据其强度将计算资源集中在持有人脸的图像部分.图片中的人脸检测方法很复杂,因 ...

  5. 人脸检测算法对比分析

    人脸识别包括以下5个步骤:人脸检测.图像预处理.特征提取.匹配.结果输出. 人脸检测是人脸识别中的第一个环节,是一项关键技术.人脸检测是指假设在输入图像中存在一个或者多个人脸区域的情况下,确定图像中全 ...

  6. 人脸检测算法总结:PyramidBox

    人脸检测算法总结:PyramidBox Introduction PyramidBox Training PyramidBox是百度提出的人脸检测算法,提出后在widerface上排第一(现在已经不是 ...

  7. Matlab人脸检测算法详解

    这是一个Matlab人脸检测算法详解 前言 人脸检测结果 算法详解 源代码解析 所调用函数解析 bwlabel(BW,n) regionprops rectangle 总结 前言 目前主流的人脸检测与 ...

  8. 大盘点|轻量级人脸检测算法实现,快到没朋友的都在这里了~

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 整理:公众号@OpenCV中文网 本文仅做学术分享,如有侵权,请联系删除. 人脸检测是计算机视觉中的老 ...

  9. 一文综述人脸检测算法(附资源)

    文章来源:SIGAI 本文共9400字,建议阅读10+分钟. 本文将和大家一起回顾人脸检测算法的整个发展历史. [导读] 人脸检测是目前所有目标检测子方向中被研究的最充分的问题之一,它在安防监控,人证 ...

最新文章

  1. 一次历史漏洞分析与复现的全部过程
  2. 图说二叉树添加数据原理以及遍历原理
  3. Angular 2 DI系统中 函数forwardRef 的作用?
  4. 服务器虚拟机网卡怎么配置文件,VMWARE复制虚拟机之后,需重新配置网卡(CENTOS 6)...
  5. 【Django】ORM操作#2
  6. linux命令详解:file命令
  7. idea swing 插件_【分享】我的idea配置
  8. JumpServer 开源堡垒机 快速部署
  9. #CSP 201312-4 有趣的数
  10. EonerCMS——做一个仿桌面系统的CMS(十四)
  11. 2020年7月的光立方包含程序和PCB文件
  12. magisk mask面具自动打卡
  13. 数据库表结构文档screw
  14. 数据湖(十一):Iceberg表数据组织与查询
  15. 无线移动通信技术快速发展历程和趋向(转)
  16. 如何从零构建对内网穿透的理解
  17. 视频图片 超分与动漫化+补帧
  18. Java生成唯一主键
  19. 如何在linux上直接运行python程序
  20. formdata格式的数据如何处理?

热门文章

  1. 减肥训练锻炼身体运动健身视频制作PR模板素材
  2. 【转】关于Flex未来走向的问答
  3. Team Silver_Bullet 训练记录
  4. shields 徽标_基本徽标设计的简单指南
  5. 拿起笔来做刀枪 · 之七 最终幻想 Final Fantasy
  6. 手机背光检测设备,三菱5U程序案例
  7. android 类似QQ 换皮肤 实现思路 apk资源共享
  8. Spring Cloud Alibaba 大型微服务项目实战
  9. 大家学习雷锋好榜样啊~~ 帮个忙啊
  10. 国税系统计算机代码变成a,美国国税局针对放弃美国国籍人士出台税责补救程序...