chineseocr / darknet-ocr

darknet text detect and darknet cnn ocr
MIT License
1.13k stars 288 forks source link

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

Open Kekwi opened 4 years ago

Kekwi commented 4 years ago

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 commented 4 years ago

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

Kekwi commented 4 years ago

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

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

elliotgao commented 4 years ago

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

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

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

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

Kekwi commented 4 years ago

不知道具体楼主是怎么测的。就提一下,测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 commented 4 years ago

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

wenlihaoyu commented 4 years ago

你的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 commented 4 years ago

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

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

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

不知道有人解决没...

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

sincerefly commented 4 years ago

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

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

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

Kekwi commented 4 years ago

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

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

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

不知道有人解决没...

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

同样问题还有

84

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

tomwwjjtt commented 3 years ago

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