ROCm / MIVisionX

MIVisionX toolkit is a set of comprehensive computer vision and machine intelligence libraries, utilities, and applications bundled into a single toolkit. AMD MIVisionX also delivers a highly optimized open-source implementation of the Khronos OpenVX™ and OpenVX™ Extensions.
https://rocm.docs.amd.com/projects/MIVisionX/en/latest/
MIT License
185 stars 72 forks source link

[Feature Updates]: OpenCV - Install Optimization #1405

Closed kiritigowda closed 3 weeks ago

kiritigowda commented 3 weeks ago

Problem Description

Current setup OpenCV install is comprehensive. MIVisionX does not use all modules built.

Can turn off unused modules

--   OpenCV modules:
--     To be built:                 calib3d core dnn features2d flann gapi highgui imgcodecs imgproc ml objdetect photo python3 stitching ts video videoio
--     Disabled:                    world
--     Disabled by dependency:      -
--     Unavailable:                 java python2
--     Applications:                tests perf_tests apps
--     Documentation:               NO
--     Non-free algorithms:         NO
-- 
--   GUI:                           GTK2
--     GTK+:                        YES (ver 2.24.33)
--       GThread :                  YES (ver 2.70.5)
--       GtkGlExt:                  NO
--     VTK support:                 NO
-- 
--   Media I/O: 
--     ZLib:                        /usr/lib64/libz.so (ver 1.2.13)
--     JPEG:                        /usr/lib64/libjpeg.so (ver 62)
--     WEBP:                        build (ver encoder: 0x020f)
--     PNG:                         /usr/lib64/libpng.so (ver 1.6.34)
--     TIFF:                        /usr/lib64/libtiff.so (ver 42 / 4.0.9)
--     JPEG 2000:                   build (ver 2.4.0)
--     OpenEXR:                     build (ver 2.3.0)
--     HDR:                         YES
--     SUNRASTER:                   YES
--     PXM:                         YES
--     PFM:                         YES
-- 
--   Video I/O:
--     DC1394:                      NO
--     FFMPEG:                      YES
--       avcodec:                   YES (58.134.100)
--       avformat:                  YES (58.76.100)
--       avutil:                    YES (56.70.100)
--       swscale:                   YES (5.9.100)
--       avresample:                YES (4.0.0)
--     GStreamer:                   NO
--     v4l/v4l2:                    YES (linux/videodev2.h)
-- 
--   Parallel framework:            pthreads
-- 
--   Trace:                         YES (with Intel ITT)
-- 
--   Other third-party libraries:
--     Intel IPP:                   2020.0.0 Gold [2020.0.0]
--            at:                   /home/amd/mivisionx-deps/build/OpenCV/3rdparty/ippicv/ippicv_lnx/icv
--     Intel IPP IW:                sources (2020.0.0)
--               at:                /home/amd/mivisionx-deps/build/OpenCV/3rdparty/ippicv/ippicv_lnx/iw
--     VA:                          YES
--     Lapack:                      YES (/usr/lib64/libopenblas.so)
--     Eigen:                       YES (ver ..)
--     Custom HAL:                  NO
--     Protobuf:                    build (3.19.1)
-- 
--   OpenCL:                        YES (INTELVA)
--     Include path:                /home/amd/mivisionx-deps/opencv-4.6.0/3rdparty/include/opencl/1.2
--     Link libraries:              Dynamic load
-- 
--   Python 3:
--     Interpreter:                 /usr/local/bin/python3 (ver 3.10.8)
--     Libraries:                   /usr/local/lib64/libpython3.10.a (ver 3.10.8)
--     numpy:                       /home/amd/.local/lib/python3.10/site-packages/numpy/core/include (ver 1.23.5)
--     install path:                lib/python3.10/site-packages/cv2/python-3.10
-- 
--   Python (for build):            /usr/bin/python2.7

Operating System

ALL

CPU

ALL

GPU

AMD Instinct MI300

Other

No response

ROCm Version

ROCm 6.0.0

ROCm Component

MIVisionX

Steps to Reproduce

No response

(Optional for Linux users) Output of /opt/rocm/bin/rocminfo --support

No response

Additional Information

No response

kiritigowda commented 3 weeks ago

Use

cmake   -D WITH_EIGEN=OFF \
        -D WITH_GTK=ON \
        -D WITH_JPEG=ON \
        -D BUILD_JPEG=ON \
        -D WITH_OPENCL=OFF \
        -D WITH_OPENCLAMDFFT=OFF \
        -D WITH_OPENCLAMDBLAS=OFF \
        -D WITH_VA_INTEL=OFF \
        -D WITH_OPENCL_SVM=OFF  \
        -D CMAKE_INSTALL_PREFIX=/usr/local \
        -D BUILD_LIST=core,features2d,highgui,imgcodecs,imgproc,photo,python3,video,videoio  \
        ../opencv-4.6.0
kiritigowda commented 3 weeks ago

SLES 15

cmake   -D WITH_EIGEN=OFF \
        -D WITH_GTK=ON \
        -D WITH_JPEG=ON \
        -D BUILD_JPEG=ON \
        -D WITH_OPENCL=OFF \
        -D WITH_OPENCLAMDFFT=OFF \
        -D WITH_OPENCLAMDBLAS=OFF \
        -D WITH_VA_INTEL=OFF \
        -D WITH_OPENCL_SVM=OFF  \
        -D CMAKE_INSTALL_PREFIX=/usr/local \
        -D BUILD_LIST=core,features2d,highgui,imgcodecs,imgproc,photo,video,videoio  \
        ../opencv-4.6.0
kiritigowda commented 3 weeks ago

Trimmed down OpenCV build with essentials only -- @LakshmiKumar23 can you look at this

--   OpenCV modules:
--     To be built:                 core features2d highgui imgcodecs imgproc photo video videoio
--     Disabled:                    world
--     Disabled by dependency:      calib3d dnn flann gapi java_bindings_generator js_bindings_generator ml objc_bindings_generator objdetect python3 python_bindings_generator python_tests stitching ts
--     Unavailable:                 java python2
--     Applications:                apps
--     Documentation:               NO
--     Non-free algorithms:         NO
-- 
--   GUI:                           GTK2
--     GTK+:                        YES (ver 2.24.33)
--       GThread :                  YES (ver 2.72.4)
--       GtkGlExt:                  NO
--     VTK support:                 NO
-- 
--   Media I/O: 
--     ZLib:                        /usr/lib/x86_64-linux-gnu/libz.so (ver 1.2.11)
--     JPEG:                        build-libjpeg-turbo (ver 2.1.2-62)
--     WEBP:                        build (ver encoder: 0x020f)
--     PNG:                         /usr/lib/x86_64-linux-gnu/libpng.so (ver 1.6.37)
--     TIFF:                        /usr/lib/x86_64-linux-gnu/libtiff.so (ver 42 / 4.3.0)
--     JPEG 2000:                   build (ver 2.4.0)
--     OpenEXR:                     /usr/lib/x86_64-linux-gnu/libImath-2_5.so /usr/lib/x86_64-linux-gnu/libIlmImf-2_5.so /usr/lib/x86_64-linux-gnu/libIex-2_5.so /usr/lib/x86_64-linux-gnu/libHalf-2_5.so /usr/lib/x86_64-linux-gnu/libIlmThread-2_5.so (ver 2_5)
--     HDR:                         YES
--     SUNRASTER:                   YES
--     PXM:                         YES
--     PFM:                         YES
-- 
--   Video I/O:
--     DC1394:                      YES (2.2.6)
--     FFMPEG:                      YES
--       avcodec:                   YES (58.134.100)
--       avformat:                  YES (58.76.100)
--       avutil:                    YES (56.70.100)
--       swscale:                   YES (5.9.100)
--       avresample:                NO
--     GStreamer:                   NO
--     v4l/v4l2:                    YES (linux/videodev2.h)
-- 
--   Parallel framework:            pthreads
-- 
--   Trace:                         YES (with Intel ITT)
-- 
--   Other third-party libraries:
--     Intel IPP:                   2020.0.0 Gold [2020.0.0]
--            at:                   /home/kiriti/mivisionx-deps/build/3rdparty/ippicv/ippicv_lnx/icv
--     Intel IPP IW:                sources (2020.0.0)
--               at:                /home/kiriti/mivisionx-deps/build/3rdparty/ippicv/ippicv_lnx/iw
--     VA:                          YES
--     Lapack:                      NO
--     Custom HAL:                  NO
--     Protobuf:                    build (3.19.1)
-- 
--   Python 3:
--     Interpreter:                 /usr/bin/python3 (ver 3.10.12)
--     Libraries:                   NO
--     numpy:                       /usr/local/lib/python3.10/dist-packages/numpy/core/include (ver 1.23.0)
--     install path:                -
-- 
--   Python (for build):            /usr/bin/python3
-- 
--   Java:                          
--     ant:                         NO
--     JNI:                         NO
--     Java wrappers:               NO
--     Java tests:                  NO
-- 
--   Install to:                    /usr/local
-- -----------------------------------------------------------------
-- 
-- Configuring done
-- Generating done
-- Build files have been written to: /home/
kiritigowda commented 3 weeks ago

RunVX

ldd /opt/rocm/bin/runvx | grep opencv
    libopencv_highgui.so.406 => /usr/local/lib/libopencv_highgui.so.406 (0x000070ef01b96000)
    libopencv_videoio.so.406 => /usr/local/lib/libopencv_videoio.so.406 (0x000070ef01370000)
    libopencv_imgcodecs.so.406 => /usr/local/lib/libopencv_imgcodecs.so.406 (0x000070eefe83a000)
    libopencv_imgproc.so.406 => /usr/local/lib/libopencv_imgproc.so.406 (0x000070eefcc00000)
    libopencv_core.so.406 => /usr/local/lib/libopencv_core.so.406 (0x000070eefbc00000)

OpenCV Ext

ldd /opt/rocm/lib/libvx_opencv.so | grep opencv
    libopencv_features2d.so.406 => /usr/local/lib/libopencv_features2d.so.406 (0x000077b098f46000)
    libopencv_photo.so.406 => /usr/local/lib/libopencv_photo.so.406 (0x000077b098eab000)
    libopencv_video.so.406 => /usr/local/lib/libopencv_video.so.406 (0x000077b098e4b000)
    libopencv_imgproc.so.406 => /usr/local/lib/libopencv_imgproc.so.406 (0x000077b096a00000)
    libopencv_core.so.406 => /usr/local/lib/libopencv_core.so.406 (0x000077b095a00000)
kiritigowda commented 3 weeks ago

With Option -D CMAKE_PLATFORM_NO_VERSIONED_SONAME=ON

OpenCV ext

ldd /opt/rocm/lib/libvx_opencv.so | grep opencv
    libopencv_features2d.so => /usr/local/lib/libopencv_features2d.so (0x00007b4149560000)
    libopencv_photo.so => /usr/local/lib/libopencv_photo.so (0x00007b4148d65000)
    libopencv_video.so => /usr/local/lib/libopencv_video.so (0x00007b4148d05000)
    libopencv_imgproc.so => /usr/local/lib/libopencv_imgproc.so (0x00007b4146800000)
    libopencv_core.so => /usr/local/lib/libopencv_core.so (0x00007b4145800000)
kiritigowda commented 3 weeks ago

-- OpenCV Build option for setup script

cmake   -D WITH_EIGEN=OFF \
        -D WITH_GTK=ON \
        -D WITH_JPEG=ON \
        -D BUILD_JPEG=ON \
        -D WITH_OPENCL=OFF \
        -D WITH_OPENCLAMDFFT=OFF \
        -D WITH_OPENCLAMDBLAS=OFF \
        -D WITH_VA_INTEL=OFF \
        -D WITH_OPENCL_SVM=OFF  \
        -D CMAKE_INSTALL_PREFIX=/usr/local \
        -D BUILD_LIST=core,features2d,highgui,imgcodecs,imgproc,photo,python3,video,videoio  \
        -D CMAKE_PLATFORM_NO_VERSIONED_SONAME=ON \
        ../opencv-4.6.0
kiritigowda commented 3 weeks ago

Covers all functions used

OpenVX Node Frames Count tmp (ms) avg (ms) min (ms) max (ms)
absdiff.gdf 1 1.852 1.852 1.852 1.852
adaptiveThreshold.gdf 1 4.364 4.364 4.364 4.364
add.gdf 1 2.169 2.169 2.169 2.169
addWeighted.gdf 1 2.670 2.670 2.670 2.670
bilateralFilter.gdf 1 7.783 7.783 7.783 7.783
bitwise_and.gdf 1 2.082 2.082 2.082 2.082
bitwise_not.gdf 1 1.919 1.919 1.919 1.919
bitwise_or.gdf 1 2.280 2.280 2.280 2.280
bitwise_xor.gdf 1 2.128 2.128 2.128 2.128
blur.gdf 1 1.977 1.977 1.977 1.977
boxFilter.gdf 1 2.100 2.100 2.100 2.100
canny.gdf 1 8.458 8.458 8.458 8.458
compare.gdf 1 2.289 2.289 2.289 2.289
convertScaleAbs.gdf 1 1.754 1.754 1.754 1.754
cornerMinEigenVal.gdf 1 18.208 18.208 18.208 18.208
cornerharris.gdf 1 4.698 4.698 4.698 4.698
cvBuildPyramid.gdf 1 7.023 7.023 7.023 7.023
cvtColor.gdf 1 7.179 7.179 7.179 7.179
dilate.gdf 1 1.549 1.549 1.549 1.549
distanceTransform.gdf 1 4.183 4.183 4.183 4.183
divide.gdf 1 2.392 2.392 2.392 2.392
erode.gdf 1 1.708 1.708 1.708 1.708
fastNlMeansDenoising.gdf 1 21.989 21.989 21.989 21.989
fastNlMeansDenoisingColored.gdf 1 0.000 0.000 0.000 0.000
filter2D.gdf 1 2.012 2.012 2.012 2.012
flip.gdf 1 1.660 1.660 1.660 1.660
gaussianBlur.gdf 1 6.682 6.682 6.682 6.682
goodFeatures.gdf 1 28.131 28.131 28.131 28.131
laplacian.gdf 1 2.966 2.966 2.966 2.966
medianBlur.gdf 1 3.331 3.331 3.331 3.331
morphologyEX.gdf 1 1.781 1.781 1.781 1.781
multiply.gdf 1 2.407 2.407 2.407 2.407
pyrDown.gdf 1 5.720 5.720 5.720 5.720
pyrUp.gdf 1 5.931 5.931 5.931 5.931
resize.gdf 1 7.207 7.207 7.207 7.207
scharr.gdf 1 3.544 3.544 3.544 3.544
sepFilter2D.gdf 1 1.939 1.939 1.939 1.939
simple_blob.gdf 1 74.169 74.169 74.169 74.169
sobel.gdf 1 3.549 3.549 3.549 3.549
subtract.gdf 1 2.310 2.310 2.310 2.310
threshold.gdf 1 7.216 7.216 7.216 7.216
transpose.gdf 1 1.790 1.790 1.790 1.790
warpAffine.gdf 1 11.027 11.027 11.027 11.027
warpPerspective.gdf 1 7.112 7.112 7.112 7.112
BRISK_Compute.gdf 1 0.000 0.000 0.000 0.000
BRISK_Detect.gdf 1 59.329 59.329 59.329 59.329
FAST.gdf 1 0.781 0.781 0.781 0.781
MSER_Detect.gdf 1 0.000 0.000 0.000 0.000
ORB_Compute.gdf 1 23.720 23.720 23.720 23.720
ORB_Detect.gdf 1 21.302 21.302 21.302 21.302
kiritigowda commented 3 weeks ago

PR #1413 fixes this issue