Я обрабатываю изображения размером 2208x1242 из видео в то время как -l oop, используя C ++ с OpenCV.
Чтобы ускорить процесс, я хотел выполнить операции на Графический процессор моего Nvidia Jetson Nano.
Для преобразования цвета из BGR в HSV с использованием cv::cuda::cvtColor
вместо cv::cvtColor
ускорение достигается в 5 раз.
К сожалению, морфологические операции намного медленнее Графический процессор:
int num_frame = 10;
int frame = 0;
cv::Mat img;
cv::cuda::GpuMat img_gpu;
cv::Mat open_kernel = cv::getStructuringElement(cv::MORPH_RECT, cv::Size(11, 11));
cv::Mat close_kernel = cv::getStructuringElement(cv::MORPH_RECT, cv::Size(21, 21));
while (frame < num_frame){
// load image to img
// ...
img_gpu.upload(img);
cv::Ptr<cv::cuda::Filter> morph_filter_open = cv::cuda::createMorphologyFilter(cv::MORPH_OPEN, img_gpu.type(), open_kernel);
cv::Ptr<cv::cuda::Filter> morph_filter_close = cv::cuda::createMorphologyFilter(cv::MORPH_CLOSE, img_gpu.type(), close_kernel);
morph_filter_open->apply(img_gpu, img_gpu);
morph_filter_close->apply(img_gpu, img_gpu);
frame++;
}
Измеряя только apply()
-вызовы, версия графического процессора примерно в 20 раз медленнее, чем cv::morphologyEx
на процессоре Jetson Nano ( 0,07 с против 1,5 с для одного кадра).
nvprof
показывает, что большую часть времени тратится на выполнение cudaDeviceSynchronize
(для всей программы выполняется больше вещей, чем в примере кода выше). , но длительные операции, вероятно, связаны с морфологией):
API calls: 71.05% 17.2756s 665 25.978ms 25.730us 1.44814s cudaDeviceSynchronize
8.36% 2.03194s 1826 1.1128ms 34.844us 847.66ms cudaLaunchKernel
5.16% 1.25490s 1 1.25490s 1.25490s 1.25490s cuCtxDestroy
4.80% 1.16684s 544 2.1449ms 17.865us 10.378ms cudaMallocPitch
1.89% 460.14ms 616 746.98us 20.469us 346.82ms cudaFree
1.65% 401.38ms 76 5.2813ms 44.533us 19.211ms cudaMemcpy2D
1.45% 352.97ms 51 6.9209ms 18.803us 242.14ms cudaMalloc
1.42% 345.25ms 1 345.25ms 345.25ms 345.25ms cudaFuncGetAttributes
1.23% 299.95ms 1 299.95ms 299.95ms 299.95ms cuCtxCreate
1.03% 251.43ms 20 12.572ms 162.61us 103.74ms cudaMallocManaged
0.92% 224.67ms 13 17.283ms 32.553us 65.173ms cudaMemcpy
0.56% 135.48ms 1 135.48ms 135.48ms 135.48ms cudaDeviceReset
...
Я надеюсь, что кто-то может помочь мне выяснить, в чем проблема!