I know that in the past OpenCV was based on IPP and was optimized only for Intel CPUs. Is this still the case with OpenCV 2.0?
History says that OpenCV was originally developed by Intel.
If you check OpenCV faq, they'll say:
OpenCV itself is open source and written in quite portable C/C++, it runs on other processors already and should be fairly easy to port (for example, there are already some CUDA optimizations on NVidia. On the other hand, OpenCV can sometimes run much faster on Intel processors (and sometimes AMD) because it can take advantage of SSE optimizations. OpenCV can be compiled statically with IPP libraries from Intel also which can speed up some function.
I have used it on other processors and different OS and I've always been very happy, including for video processing applications.
Related
long time tormented by this question, I ask your advice in what direction to move. Objective - to develop universal application with yolo on windows, which can use computing power of AMD/Nvidia/Intel GPU, AMD/Intel CPU (one of the devices will be used). As far as I know, the OpenCV DNN module is leading in CPU computation; a DNN + Cuda bundle is planned for Nvidia graphics cards and a DNN + OpenCL bundle is planned for Intel GPUs. But testing AMD GPU rx580 with DNN + OpenCL, I ran into the following problem: https://github.com/opencv/opencv/issues/17656. Does this module not support AMD GPU computing at all? If so, could you please let me know what platform this is possible on and, preferably, as efficiently as possible. A possible solution might be Tencent's ncnn, but I'm not sure of the performance on the desktop. By output I mean the coordinates of detected objects and their names (in opencv dnn module I got them with cv::dnn::Net::forward()). Also, correct me if I'm wrong somewhere. Any feedback would be appreciated.
I tried the OpenCV DNN + OpenCL module and expected high performance, but this combination does not work.
I believe OpenCV doesn't support AMD for GPU optimization. If you're interested in running DL models on non-Nvidia GPUs, I suggest reading PlaidML, YOLO-OpenCL, DeepCL
When I desided to build opencv library I have found out that there are number of compiler options available that does nearly the same - speed up algorithms. For example: TBB, IPP, CUDA, pthreads, Eigen2/Eigen3, OpenCL and others. Are there any benchmarks or known recommendations of what options are better than others and what caveats should be known?
It depends on your system needs.
CUDA for example is relevant only if you have NVIDIA grpahic card, IPP only if you have the correct intel processor.
As said here, OpenCV uses IPP which uses GPU:
It turned out that OpenCV was using IPP and IPP itself can use GPU
nowadays.
just in case someone else googles for "opencv gpu slower" and didnt
know about the IPP GPU support ;)
Also, I found this:
Optimizing an Augmented Reality Pipeline using IntelĀ® IPP Asynchronous
Using IntelĀ® GPUs to Optimize the Performance and Power Consumption of
Total Immersion's D'Fusion* Augmented Reality Pipeline
And there is no one keyword: OpenCL, OpenACC, CUDA, nVidia, ...
There is only one relative to GPU keyword: OpenGL
Does this mean that the Intel IPP supports only Intel GPU? Or Intel IPP support any GPU (nVidia GeForce, AMD Radeon) which supports OpenGL?
Intel IPP doesn't support GPUs. It was kind of "preview" product - Intel 8.0 Preview, which was discontinued.
Intel integrated graphics is supported only by OpenCL. Intel IPP is focused on CPUs only.
Regards!
I was the one of your linked posting...
I didnt try to find out IPP capabilities because it wasnt my project but one of a colleague...
googling talks about "IPP Asynchronous" library and config stuff like
HPP_ACCEL_TYPE_GPU_VIA_DX9 looks like there are options to use OpenCL and DX9 but no warranties from my side that they are supported or that this list is complete...
I am currently working on performance comparison of various computer vision applications. The research is based on evaluating how these different algorithms perform on CUDA and OpenMP.
Do you have any source codes in CUDA as well as the serial implementation in C for these kind of applications?
Where can I find them?
The CUDA SDK is full of examples, compiled both on GPU and CPU.
sources are included.
Here is a list of the samples you get by installing it.
You could start from here :)
Is there any open-source library to replace proprietary Intel Image Processing Library? At first I need to do image loading-saving, filtering (3x3,5x5 and so) with arbitrary kernel. Support of manychannel images with pixel values stored as float will be wonderful. Also I need a library with good documentation.
PS. both linux/x86 & windows/x86. I want to use it with mingw32 on windows.
PPS. The first task I need to solve using this library is to compute an fractal dimension.
Thanks
There is opencv
If you want to go Cuda then the Nvidia Performance Primitives
OpenCV is probably what you're looking for.
The latest version (2.2) contains both SSE optimization a-la IPP and CUDA implementations.