Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

CPU的预测速度速度比GPU要快? #83

Open
Kekwi opened this issue Apr 17, 2020 · 10 comments
Open

CPU的预测速度速度比GPU要快? #83

Kekwi opened this issue Apr 17, 2020 · 10 comments

Comments

@Kekwi
Copy link

Kekwi commented Apr 17, 2020

CPU是24核48线程,显卡是 GTX 1080 Ti
这个在predict部分打的日志
CPU:
dnn.main - INFO - detection_time:3.1608s
dnn.main - INFO - ocr_time:2.0797s
GPU
dnn.main - INFO - detection_time:3.3761s
dnn.main - INFO - ocr_time:5.1645s

测试图预测出了52个boxes。
GPU是哪个部分还需要做优化的吗?

@elliotgao
Copy link

不知道具体楼主是怎么测的。就提一下,测GPU的话,第一次predict涉及到初始化,一般不纳入计算。

@Kekwi
Copy link
Author

Kekwi commented Apr 17, 2020

不知道具体楼主是怎么测的。就提一下,测GPU的话,第一次predict涉及到初始化,一般不纳入计算。

知道。用别的图片进行过初始化了,您测试过吗?相同的图片在GPU和CPU下各是多少时间?

@elliotgao
Copy link

elliotgao commented Apr 17, 2020

不知道具体楼主是怎么测的。就提一下,测GPU的话,第一次predict涉及到初始化,一般不纳入计算。

知道。用别的图片进行过初始化了,您测试过吗?相同的图片在GPU和CPU下各是多少时间?

我这边扫描大的扫描件 (1080p)可以控制在0.5秒一张(对比8核16线程的CPU,大概在3秒),还有大型表格件,gpu 1.5秒 对比 同上的cpu是7.5秒。我用的RTX Titan, 推算过去,就inference而言,1080Ti应该不会慢这个数值太多。

上述时间是 全程 (CTPN + CNN)两个模型总共的时间。

@Kekwi
Copy link
Author

Kekwi commented Apr 17, 2020

不知道具体楼主是怎么测的。就提一下,测GPU的话,第一次predict涉及到初始化,一般不纳入计算。

知道。用别的图片进行过初始化了,您测试过吗?相同的图片在GPU和CPU下各是多少时间?

我这边扫描大的扫描件 (1080p)可以控制在0.5秒一张(对比8核16线程的CPU,大概在3秒),还有大型表格件,gpu 1.5秒 对比 同上的cpu是7.5秒。我用的RTX Titan, 推算过去,就inference而言,1080Ti应该不会慢这个数值太多。

上述时间是 全程 (CTPN + CNN)两个模型总共的时间。

感谢回复。
我换上了RTX titan做测试。
test文件夹中的“img.jpeg”总耗时2.886s,其中CTPN 2.1s,CNN 0.7s
config中有什么需要调整的参数吗?
我只修改过ocrType和把GPU改成了True
ocrType = 'chinese-5k'
ocrPath = 'models/ocr/{}/ocr.weights'.format(ocrType)
textPath = 'models/text/text.weights'
darkRoot ='darknet/libdarknet.so' ##darknet
TEXT_LINE_SCORE=0.7 ##text line prob
scale = 900 ##可动态修改 no care text.cfg height,width
maxScale = 1800
GPU = True #False ## gpu for darknet or cpu for opencv.dnn
anchors = '16,11, 16,16, 16,23, 16,33, 16,48, 16,68, 16,97, 16,139, 16,198, 16,283'

@Kekwi
Copy link
Author

Kekwi commented Apr 17, 2020

我有两个容器
一个GPU版本的,执行了darknet的编译,没有做CPU优化
另一个CPU版本的,用的就是作者云盘提供的镜像

@wenlihaoyu
Copy link
Member

你的GPU测试时间肯定有问题,GPU肯定会比CPU快。请确保编译对GPU的支持。编译darknet用Makefile-GPU这个文件.
##测试配置:

机器ubuntu14

cpu 8核i7

GPU 1080ti cuda10.1 cudnn7.6

config.py配置
scale=900; maxScale=1800; GPU=False
CPU场景下:img.jpeg这张图片耗时大概,: 1.68s

GPU场景下: img.jpeg这张图片耗时大概,:0.96秒
scale=900; maxScale=1800; GPU=False

GPU2080TI:时间是0.83秒

可以优化加速的地方
(1) GPU 文字检测将img转换为C图像加载array_to_image函数耗时大概在0.2秒,在一个版本会用C内置的函数加载图片,会更快些。
(2)NMS环节,nms环节耗时0.2秒(nms环节可以先进行过滤,再nms,可提速0.18秒左右),修改helper/detectors.py line 32如下:
ind = scores>TEXT_PROPOSALS_MIN_SCORE text_proposals = text_proposals[ind] scores=scores[ind] text_proposals, scores = nms(text_proposals,scores,TEXT_PROPOSALS_MIN_SCORE,TEXT_PROPOSALS_NMS_THRESH)
(3)如果图像文字较少,可以将scale改为600,CPU能够到1秒内,GPU不到0.5秒。

@sincerefly
Copy link

我用 Ubuntu 18.04 测试,GPU 的速度也同样没有 CPU 快...

编译了OpenCV,没有使用优化。配置文件中开启了 GPU 为 True

到 darknet 文件夹,复制 GPU 的 Makefile 并编译。

不知道有人解决没...

@wenlihaoyu 大佬考虑补一份文档吗,比如编译所需要的依赖包,cuda 版本要求什么的~ [比心]

@sincerefly
Copy link

我用 2080Ti 测试示例的 test/img.jpeg
GPU 需要 1.73s,CPU 需要 1.76s
cuda10.0 cudnn7.6

不知道是什么原因,Makefile 用的 GPU 的,配置文件也改了, opencv 用的是 CPU 优化后的版本。

请问我还需要提供哪些信息来定位问题呢~

@Kekwi
Copy link
Author

Kekwi commented Apr 27, 2020

我用 Ubuntu 18.04 测试,GPU 的速度也同样没有 CPU 快...

编译了OpenCV,没有使用优化。配置文件中开启了 GPU 为 True

到 darknet 文件夹,复制 GPU 的 Makefile 并编译。

不知道有人解决没...

@wenlihaoyu 大佬考虑补一份文档吗,比如编译所需要的依赖包,cuda 版本要求什么的~ [比心]

同样问题还有
#84

我现在也还没解决这个问题
我等会贴一份我制作GPU的Dockerfile

@tomwwjjtt
Copy link

请问一下各位大佬,你们解决CPU预测时间比GPU短的问题了吗

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

5 participants