CuPy 需要更多时间来预处理图像?

问题描述 投票:0回答:1
import cv2
import numpy as np
import cupy as cp
import time


def op_image(image):
    start_time = time.time()
    image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
    image = cv2.resize(image, (640, 480))
    image_mean = np.array([127, 127, 127])
    image = (image - image_mean) / 128
    image = np.transpose(image, [2, 0, 1])
    image = np.expand_dims(image, axis=0)
    image = image.astype(np.float32)
    print("Opencv End time : ",time.time() - start_time)


def Cu_image(image):
    start_time = time.time()
    image = cp.array(image)
    image = cp.ascontiguousarray(image[:, :, ::-1])
    image = cp.resize(image, (640, 480,3))
    image_mean = cp.array([127, 127, 127])
    image = (image - image_mean) / 128
    image = cp.transpose(image, (2, 0, 1))
    image = cp.expand_dims(image, axis=0)
    image = cp.expand_dims(image, axis=0)
    image = image.astype(cp.float32)
    print("Cupy End time : ",time.time() - start_time)


image = cv2.imread("/home/nextbrain-ssd/Vision/cctv-server/assets/event_created_images/camera_0_9_509_2024-05-23T04:14:32.931834Z.jpg")
op_image(image=image)
image = cv2.imread("/home/nextbrain-ssd/Vision/cctv-server/assets/event_created_images/camera_0_9_509_2024-05-23T04:14:32.931834Z.jpg")
Cu_image(image=image)

Output:

Opencv End time :  0.00825643539428711
Cupy End time :  0.10329556465148926

上面的代码使用两个不同的库预处理图像:OpenCV(CPU)和CuPy(GPU)。令人惊讶的是,与 OpenCV 相比,CuPy 需要更多时间。 OpenCV 使用 CPU 处理图像,而 CuPy 使用 GPU。我预计 CuPy 会更快,但事实恰恰相反。为什么 CuPy 比 OpenCV 花费更长的时间?

python opencv image-processing cupy
1个回答
0
投票

您在这里所做的处理相当简单,并且可以在 CPU 上非常有效地完成。在大多数计算机上,使用 GPU 意味着向其传输数据,然后将结果传回。这是一个很大的开销。在 GPU 上执行计算所节省的时间必须足够大才能补偿此数据传输开销。

除此之外,您的计时代码不足。任何快于一秒左右的事情都应该在循环中运行以进行计时。从函数中删除对

time.time()
的调用,然后使用
timeit
调用函数:

timeit.timeit(lambda: op_image(image=image), number=1000)
© www.soinside.com 2019 - 2024. All rights reserved.