Toybrick

标题: 如何提高算法fps [打印本页]

作者: rlgl    时间: 2020-4-23 16:23
标题: 如何提高算法fps
现将姿态检测算法移植到RK3399Pro开发板上,该算法由两个子模块组成:“人体检测模型yolov3”和“单人姿态检测模型”。算法大致原理是先使用yolov3将输入图像中的人体都检测出来,然后将检测出的人体裁剪出来,一个个送进“单人姿态检测模型”检测关节点位置。

原算法运行在pc上,主要通过多线程(两个模型同时在运行)+大batchsize(yolo的batchsize=5,单人姿态检测模型的batchsize=60)提高fps。
我目前的程序未使用任何优化,按上面将的流程,从头到尾进行处理。想问下如果想在不对模型进行量化的情况下,如何通过优化程序,来提高fps。
如:
    1. 能否通过使用多线程,使得两个模型同时在npu上运行,以提高fps;
    2. 如何增大batchsize,使得模型一次推理多张图,以提高fps。



作者: jefferyzhang    时间: 2020-4-23 16:36
1. 意义不大,NPU是分时复用系统,处理一个单位算法复杂度是O,那处理2个就是2O,多线程处理和单线程处理在NPU没有空闲情况下是一样的,除非你NPU出现空闲,那多线程有一定意义。
2. 增大batch意义也不大,同上,分时复用。理论上能提高NPU利用率,但实际上效果跟1个1个送差不多。
作者: rlgl    时间: 2020-4-23 16:43
jefferyzhang 发表于 2020-4-23 16:36
1. 意义不大,NPU是分时复用系统,处理一个单位算法复杂度是O,那处理2个就是2O,多线程处理和单线程处理在 ...

那请问想提高fps能有其他的什么思路吗
作者: rlgl    时间: 2020-4-23 16:47
jefferyzhang 发表于 2020-4-23 16:36
1. 意义不大,NPU是分时复用系统,处理一个单位算法复杂度是O,那处理2个就是2O,多线程处理和单线程处理在 ...

另,百度了下分时复用系统,请问意思是npu在运行一个模型的时候,就已经把npu的所有资源都用上了的意思吗?所以,即使同时跑多个模型,也不会再提高npu的利用率?
抱歉,分时复用理解的不是很清楚...
作者: jefferyzhang    时间: 2020-4-23 17:08
rlgl 发表于 2020-4-23 16:47
另,百度了下分时复用系统,请问意思是npu在运行一个模型的时候,就已经把npu的所有资源都用上了的意思吗 ...

你就当GPU看就好了,GPU也是分时复用。只是我们的MACs运算单元没有多到gpu那个级别,多个batch并行处理并不会用到更多计算单元
作者: jefferyzhang    时间: 2020-4-23 17:09
除非你的模型比如只需要跑30ms,但是你送来运算的间隔是33ms,那这里会空闲3ms NPU不干活。这种情况你多线程就会有意义。
作者: rlgl    时间: 2020-4-24 10:45
jefferyzhang 发表于 2020-4-23 17:09
除非你的模型比如只需要跑30ms,但是你送来运算的间隔是33ms,那这里会空闲3ms NPU不干活。这种情况你多线 ...

另问个与本题无关的问题:如何将模型运行在与pc相连的RK3399ProD上,文档“Rockchip_User_Guide_RKNN_Toolkit_V1.3.0_CN.pdf”中3.2.2节的写到“确保开发板的USB OTG连接到pc,并且正确连接到设备”,请问这里开发板是通过那个接口与pc相连接。

我的目的是在pc上写程序,然后在RK3399ProD的npu上运行RKNN模型。而不用把代码拷贝到开发板上再运行
作者: jefferyzhang    时间: 2020-4-24 14:27
rlgl 发表于 2020-4-24 10:45
另问个与本题无关的问题:如何将模型运行在与pc相连的RK3399ProD上,文档“Rockchip_User_Guide_RKNN_Too ...

TypeC那个口是OTG, mini-usb扁口那个是串口,大的三个usb都是host




欢迎光临 Toybrick (https://t.rock-chips.com/) Powered by Discuz! X3.3