OPENCV が4.0.0-preになってたので cmakeのコンフィグを改めて眺めていろいろ検討してコンパイルしてみる。

メモ

朝起きてSourcetreeを見たらOpenCVのバージョンが4.0になってたので。夏休み前に公式バイナリが出そうですね。

今回の目標は
VisualStudioで必要なコア機能をつめこんでWorldモジュールを作る
いろいろ高速に処理できると嬉しい。

こんな感じです。

準備としては
CMAKE 3.51以上が必須になりましたので、古いCMAKEを使っている人はアップデートしましょう。
C言語サポートは本格的に切っていく感じです。3.41で指摘されていたCのヘッダーファイルの不具合とかもむにゃむにゃ言ってたのでCで使いたい人は3.4.0までが限界でしょうね。知らんけど。
CUDA入れたいならVisualStudioのバージョンに気をつけましょう。この件は前回書きましたので飛ばしますが。
CUDAするなら、CUDAのSDKをダウンロードして、インストールします。
インテルで配布しているMKL、TBB、MediaSDKは幸せになれる予感がありますのでダウンロードして開発環境にインストールします。
ところで、traincascadeはいつの間にかTBBではなく、OpenCVのParallelLoopBodyを使用するようになっていましたので、以前書いたTBBを有効にすると幸せになれる件は最新ではそうでもないみたいになる予感です。

ただ、MKLがwith tbbというオプションがあり、もしかしたら幸せを呼ぶ可能性があります。
WITH_TBBはOFFにしてMKL_WITH_TBBをONにしてみました。

また、パラレル化のライブラリ選択からCstripが消えています。もともと入れている人はいなかったと思うので気にしません。


TurboJpegのJPEG-STATIC.LIBは使いたいところです。とりあえず準備しておきます。もしかしてJPEG9の新機能とか使っててリンクできない可能性もありますから。　いまのところ問題なさそう。

Eigenもダウンロードしておきます。これは効くような気がするんです。CUDAもこいつがあると使うみたいです。


それではCMAKEしてみましょう。

AVX_512F is not supported by C++ compiler
AVX512_SKX is not supported by C++ compiler
Dispatch optimization AVX512_SKX is not available, skipped
Looking for Mfapi.h
Looking for Mfapi.h - found
MFX_INCLUDE: C:/Program Files (x86)/IntelSWTools/Intel(R)_Media_SDK_2017.0.1/include (C:\Program Files (x86)\IntelSWTools\Intel(R)_Media_SDK_2017.0.1\/include)
found Intel IPP (ICV version): 2017.0.3 [2017.0.3]
at: D:/dev/cvmaster/cv400/3rdparty/ippicv/ippicv_win
found Intel IPP IW sources: 2017.0.3
at: D:/dev/cvmaster/cv400/3rdparty/ippicv/ippiw_win
CUDA detected: 9.1
CUDA NVCC target flags: -gencode;arch=compute_60,code=sm_60;-gencode;arch=compute_61,code=sm_61;-D_FORCE_INLINES
LAPACK(MKL): LAPACK_LIBRARIES: C:/Program Files (x86)/IntelSWTools/compilers_and_libraries/windows/mkl/lib/intel64/mkl_intel_lp64.lib;C:/Program Files (x86)/IntelSWTools/compilers_and_libraries/windows/mkl/lib/intel64/mkl_tbb_thread.lib;C:/Program Files (x86)/IntelSWTools/compilers_and_libraries/windows/tbb/lib/intel64_win/vc14/tbb.lib;C:/Program Files (x86)/IntelSWTools/compilers_and_libraries/windows/mkl/lib/intel64/mkl_core.lib
LAPACK(MKL): Support is enabled.
Processing WORLD modules...
    module opencv_cudev...
    module opencv_core...
    module opencv_cudaarithm...
    module opencv_flann...
    module opencv_imgproc...
    module opencv_ml...
    module opencv_objdetect...
    module opencv_video...
    module opencv_cudabgsegm...
    module opencv_cudafilters...
    module opencv_cudaimgproc...
    module opencv_cudawarping...
    module opencv_dnn...
    module opencv_imgcodecs...
    module opencv_photo...
    module opencv_shape...
    module opencv_videoio...
    module opencv_cudacodec...
    module opencv_highgui...
    module opencv_features2d...
    module opencv_calib3d...
    module opencv_cudafeatures2d...
    module opencv_cudalegacy...
    module opencv_cudaobjdetect...
    module opencv_cudaoptflow...
    module opencv_cudastereo...
    module opencv_stitching...
    module opencv_superres...
    module opencv_videostab...
Processing WORLD modules... DONE
Excluding from source files list: <BUILD>/modules/world/layers/layers_common.avx512_skx.cpp

General configuration for OpenCV 4.0.0-pre =====================================
  Version control:               3.4.1-308-g10ba6a93a

  Platform:
    Timestamp:                   2018-04-11T03:08:39Z
    Host:                        Windows 10.0.16299 AMD64
    CMake:                       3.10.3
    CMake generator:             Visual Studio 15 2017 Win64
    CMake build tool:            C:/Program Files (x86)/Microsoft Visual Studio/2017/Community/MSBuild/15.0/Bin/MSBuild.exe
    MSVC:                        1911

  CPU/HW features:
    Baseline:                    SSE SSE2 SSE3
      requested:                 SSE3
    Dispatched code generation:  SSE4_1 SSE4_2 FP16 AVX AVX2
      requested:                 SSE4_1 SSE4_2 AVX FP16 AVX2 AVX512_SKX
      SSE4_1 (3 files):          + SSSE3 SSE4_1
      SSE4_2 (1 files):          + SSSE3 SSE4_1 POPCNT SSE4_2
      FP16 (2 files):            + SSSE3 SSE4_1 POPCNT SSE4_2 FP16 AVX
      AVX (5 files):             + SSSE3 SSE4_1 POPCNT SSE4_2 AVX
      AVX2 (9 files):            + SSSE3 SSE4_1 POPCNT SSE4_2 FP16 FMA3 AVX AVX2

  C/C++:
    Built as dynamic libs?:      YES
    C++ Compiler:                C:/Program Files (x86)/Microsoft Visual Studio/2017/Community/VC/Tools/MSVC/14.11.25503/bin/Hostx86/x64/cl.exe  (ver 19.11.25547.0)
    C++ flags (Release):         /DWIN32 /D_WINDOWS /W4 /GR  /D _CRT_SECURE_NO_DEPRECATE /D _CRT_NONSTDC_NO_DEPRECATE /D _SCL_SECURE_NO_WARNINGS /Gy /bigobj /Oi      /EHa /wd4127 /wd4251 /wd4324 /wd4275 /wd4512 /wd4589 /MP8   /MD /O2 /Ob2 /DNDEBUG 
    C++ flags (Debug):           /DWIN32 /D_WINDOWS /W4 /GR  /D _CRT_SECURE_NO_DEPRECATE /D _CRT_NONSTDC_NO_DEPRECATE /D _SCL_SECURE_NO_WARNINGS /Gy /bigobj /Oi      /EHa /wd4127 /wd4251 /wd4324 /wd4275 /wd4512 /wd4589 /MP8   /MDd /Zi /Ob0 /Od /RTC1 
    C Compiler:                  C:/Program Files (x86)/Microsoft Visual Studio/2017/Community/VC/Tools/MSVC/14.11.25503/bin/Hostx86/x64/cl.exe
    C flags (Release):           /DWIN32 /D_WINDOWS /W3  /D _CRT_SECURE_NO_DEPRECATE /D _CRT_NONSTDC_NO_DEPRECATE /D _SCL_SECURE_NO_WARNINGS /Gy /bigobj /Oi        /MP8    /MD /O2 /Ob2 /DNDEBUG 
    C flags (Debug):             /DWIN32 /D_WINDOWS /W3  /D _CRT_SECURE_NO_DEPRECATE /D _CRT_NONSTDC_NO_DEPRECATE /D _SCL_SECURE_NO_WARNINGS /Gy /bigobj /Oi        /MP8  /MDd /Zi /Ob0 /Od /RTC1 
    Linker flags (Release):      /machine:x64  /INCREMENTAL:NO 
    Linker flags (Debug):        /machine:x64  /debug /INCREMENTAL 
    ccache:                      NO
    Precompiled headers:         NO
    Extra dependencies:          cudart.lib nppc.lib nppial.lib nppicc.lib nppicom.lib nppidei.lib nppif.lib nppig.lib nppim.lib nppist.lib nppisu.lib nppitc.lib npps.lib cublas.lib cufft.lib -LIBPATH:C:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v9.1/lib/x64
    3rdparty dependencies:

  OpenCV modules:
    To be built:                 calib3d core cudaarithm cudabgsegm cudacodec cudafeatures2d cudafilters cudaimgproc cudalegacy cudaobjdetect cudaoptflow cudastereo cudawarping cudev dnn features2d flann highgui imgcodecs imgproc java_bindings_generator ml objdetect photo python_bindings_generator shape stitching superres ts video videoio videostab world
    Disabled:                    js
    Disabled by dependency:      -
    Unavailable:                 java python2 python3 viz
    Applications:                tests perf_tests apps
    Documentation:               NO
    Non-free algorithms:         NO

  Windows RT support:            NO

  GUI: 
    Win32 UI:                    YES

  Media I/O: 
    ZLib:                        build (ver 1.2.11)
    JPEG:                        D:/Tools/libjpeg-turbo/lib/jpeg-static.lib (ver )
    WEBP:                        build (ver encoder: 0x020e)
    PNG:                         build (ver 1.6.34)
    TIFF:                        build (ver 42 - 4.0.9)
    JPEG 2000:                   build (ver 1.900.1)

  Video I/O:
    Video for Windows:           YES
    DC1394:                      NO
    FFMPEG:                      YES (prebuilt binaries)
      avcodec:                   YES (ver 57.107.100)
      avformat:                  YES (ver 57.83.100)
      avutil:                    YES (ver 55.78.100)
      swscale:                   YES (ver 4.8.100)
      avresample:                YES (ver 3.7.0)
    DirectShow:                  YES
    Media Foundation:            YES
    Intel Media SDK:             YES (C:/Program Files (x86)/IntelSWTools/Intel(R)_Media_SDK_2017.0.1/lib/x64/libmfx_vs2015.lib)

  Parallel framework:            Concurrency

  Trace:                         YES (with Intel ITT)

  Other third-party libraries:
    Intel IPP:                   2017.0.3 [2017.0.3]
           at:                   D:/dev/cvmaster/cv400/3rdparty/ippicv/ippicv_win
    Intel IPP IW:                sources (2017.0.3)
              at:                D:/dev/cvmaster/cv400/3rdparty/ippicv/ippiw_win
    Lapack:                      YES (C:/Program Files (x86)/IntelSWTools/compilers_and_libraries/windows/mkl/lib/intel64/mkl_intel_lp64.lib C:/Program Files (x86)/IntelSWTools/compilers_and_libraries/windows/mkl/lib/intel64/mkl_tbb_thread.lib C:/Program Files (x86)/IntelSWTools/compilers_and_libraries/windows/tbb/lib/intel64_win/vc14/tbb.lib C:/Program Files (x86)/IntelSWTools/compilers_and_libraries/windows/mkl/lib/intel64/mkl_core.lib)
    Eigen:                       YES (ver 3.3.90)
    Custom HAL:                  NO
    Protobuf:                    build (3.5.1)

  NVIDIA CUDA:                   YES (ver 9.1, CUFFT CUBLAS NVCUVID)
    NVIDIA GPU arch:             60 61
    NVIDIA PTX archs:

  OpenCL:                        YES (no extra features)
    Include path:                D:/dev/cvmaster/opencv/3rdparty/include/opencl/1.2
    Link libraries:              Dynamic load

  Python (for build):            C:/Python27/python.exe

  Java:                          
    ant:                         NO
    JNI:                         C:/Program Files/Java/jdk1.8.0_152/include C:/Program Files/Java/jdk1.8.0_152/include/win32 C:/Program Files/Java/jdk1.8.0_152/include
    Java wrappers:               NO
    Java tests:                  NO

  Install to:                    D:/dev/cvmaster/cv400/install
-----------------------------------------------------------------

Configuring done
Generating done

こんな感じです。
ちょっと前までのバージョンですと
AVX512_SKX is not supported by C++ compiler なのに張り切ってなんかやって非常に時間がかかっていたのですがここで時間をとられることはなくなったようです。

MKLはTBB有効な感じで入れました。それでもCV側はちゃんと　Parallel framework:            Concurrency　となっています。
警告はめちゃくちゃ出てましたがエラーはなく、ライブラリの構築が出来ました。

私が気になるのはカスケードトレーニングのパフォーマンスなので、明日にでも試してみたいと思います。
それでは。