我正在使用更快的R-CNN(here)的TensorFlow(1.2,GPU)实现。当我使用demo.py代码在一些样本图像上运行VGG16网络(在PASCAL VOC07上训练)时,运行时间很奇怪:即使我提供相同的图像,它也会发生很大的变化。
旁注:调整所有输入图像的大小,使短边为600像素,长边为最大1000像素;因此所有输入图像的大小大致相同。
GPU:GTX 1060 6GB
使用tfconfig.gpu_options.allow_growth = True
图像分辨率,000456.jpg:500x375; 000188.png:1224x370
演示数据/ demo / 000456.jpg 对于300个对象提案,检测需要2.187秒 演示数据/演示/ 000456.jpg 对于300个对象提案,检测需要0.141秒 演示数据/ demo / 000188.png 对于300个对象提案,检测花费1.321s 演示数据/ demo / 000188.png 300个对象提案的检测需要0.112秒
更改图片的顺序:
演示数据/ demo / 000188.png 对于300个对象提案,检测需要1.760秒 演示数据/ demo / 000188.png 对于300个对象提案,检测花费了0.109秒 演示数据/演示/ 000456.jpg 对于300个对象提案,检测需要1.775秒 演示数据/演示/ 000456.jpg 对于300个对象提案,检测需要0.142秒
使用tfconfig.gpu_options.per_process_gpu_memory_fraction = 0.8
演示数据/ demo / 000188.png 对于300个对象提案,检测需要1.699秒 演示数据/ demo / 000188.png 300个对象提案的检测时间为0.114秒 演示数据/演示/ 000456.jpg 对于300个对象提案,检测需要1.782秒 演示数据/演示/ 000456.jpg 对于300个对象提案,检测需要0.142秒
看起来,当图像尺寸从小到大或从大到小变化时,第一张图像需要很长时间才能处理,而下面相似尺寸的图像需要更短的时间(大约0.1秒)。当我提供所有不同的图像时,类似的行为。
我想不出对这种奇怪行为的解释。 它似乎与内存分配/释放有某种关系,但如何? 你知道发生了什么以及如何避免这种行为,即第一个图像可能需要很长时间来处理(内存分配,缓存等),但所有后续图像应该采取正常/更短的时间(I想)。
编辑:以下显示了PASCAL VOC 2007对象检测测试集的运行时间( tfconfig.gpu_options.allow_growth = True )。在这种情况下,虽然图像大小大致相同,但推理时间从2.3秒逐渐减少到0.25秒。
im_detect:1/4952 2.326s 0.001s
im_detect:2/4952 2.153s 0.001s
im_detect:3/4952 2.047s 0.001s
im_detect:4/4952 1.971s 0.001s
im_detect:5/4952 1.606s 0.001s
im_detect:6/4952 1.363s 0.001s
im_detect:7/4952 1.433s 0.001s
im_detect:8/4952 1.507s 0.001s
im_detect:9/4952 1.356s 0.001s
im_detect:10/4952 1.424s 0.001s
im_detect:11/4952 1.307s 0.001s
im_detect:12/4952 1.210s 0.001s
im_detect:13/4952 1.198s 0.001s
im_detect:14/4952 1.123s 0.001s
...
im_detect:60/4952 0.733s 0.001s
im_detect:61/4952 0.723s 0.001s
im_detect:62/4952 0.713s 0.001s
im_detect:63/4952 0.704s 0.001s
im_detect:64/4952 0.696s 0.001s
im_detect:65/4952 0.687s 0.001s
...
im_detect:250/4952 0.463s 0.001s
im_detect:251/4952 0.462s 0.001s
im_detect:252/4952 0.468s 0.001s
im_detect:253/4952 0.466s 0.001s
im_detect:254/4952 0.470s 0.001s
im_detect:255/4952 0.469s 0.001s
...
im_detect:4948/4952 0.245s 0.001s
im_detect:4949/4952 0.245s 0.001s
im_detect:4950/4952 0.245s 0.001s
im_detect:4951/4952 0.245s 0.001s
im_detect:4952/4952 0.245s 0.001s