画像検出に向けて利用するフレームワーク
本家のDarknetも利用しましたが、特定ケースでの学習失敗やメモリ操作関係の不具合など、私自身も上手く行かないケースも有り、ブログ記事などからもAlexeyABを勧めている内容が多かったので、早い時期よりAlexeyABを導入し利用しております。
AlexeyABのDarknetは、WindowsおよびLinuxのDarknet Yolo v3 & v2のNeural Networks for object detection (Tensor Cores are used)をサポートしております。
AlexeyAB公開サイト
以下、サイトにすべての利用方法が記載されております。関連ソフトのインストール方法や、独自学習の方法など。
Darknetインストール方法
本件も同様ですが、AlexeyABでも2つのインストール方法が紹介されております。
最終的には、Legacy wayのVisual StudioでコンパイルしたDarknetを利用しております。この投稿では、1番めのVCPKGを利用したコンパイル方法を紹介します。
GitHUBよりAlexeyAB一式をダウンロードしておきます。
今後の学習モデル作成時などにも利用するフォルダとなるので、それなりの容量の余裕などを考え、各種ファイルを配置して下さい。
VCPKGを利用したDarknetの導入
Visual Studioインストール
Visual Studio CommunityよりVisual Studioをダウンロードしインストールします。
CUDAとcuDNNインストール
NVIDIA cuDNNの入手には、開発コミュニティへの登録が必要であるが、 cuDNNは、機械学習時のGPU-accelerated libraryとなるので、開発者登録を行い、導入しているCUDAと同じバージョンのcuDNNを入手し、入手したファイルをCUDAインストールフォルダに配置しましょう。
gitとcmakeのインストール
Gitおよびcmakeを導入して下さい。
CMakeよりWindows win64-x64 Installerをダウンロードし、インストラーを用いてCMakeをインストールします。
vcpkインストール
Microsoft vcpkへアクセスし、インストールを
- Githubからcloneする。
- クローンディレクトリの"bootstrap-vcpkg.bat"を実行する。
※ ここで、Visual Studioをインストール → "vcpkg.exe"が生成される。 - (visual studioに統合する場合)そこのフォルダで管理者権限で cmd を実行して以下のコマンドを入力。
cmd .\vcpkg.exe integrate install
環境変数「VCPKG_ROOT」「VCPKG_DEFAULT_TRIPLET」を設定
VCPKG_ROOT
の環境変数にvcpkg
のインストールパスを設定VCPKG_DEFAULT_TRIPLET
の環境変数にx64-windows
を設定
VCPKGで前提ソフトインストール
> cd $env:VCPKG_ROOT \Git\vcpkg> .\vcpkg.exe install pthreads opencv[cuda,ffmpeg] The following packages will be built and installed: * cuda[core]:x64-windows * eigen3[core]:x64-windows * libjpeg-turbo[core]:x64-windows * liblzma[core]:x64-windows * libpng[core]:x64-windows opencv[core,cuda,eigen,ffmpeg,flann,jpeg,opengl,png,tiff]:x64-windows pthreads[core]:x64-windows * tiff[core]:x64-windows * zlib[core]:x64-windows Additional packages (*) will be modified to complete this operation. Starting package 1/9: zlib:x64-windows Building package zlib[core]:x64-windows... Warning: The following VS instances are excluded because the English language pack is unavailable. D:\Program Files (x86)\Microsoft Visual Studio\2019\Community D:\Program Files (x86)\Microsoft Visual Studio\2019\Community Please install the English language pack. -- Downloading http://www.zlib.net/zlib-1.2.11.tar.gz... -- Extracting source S:/Public/Documents/Git/vcpkg/downloads/zlib1211.tar.gz -- Applying patch cmake_dont_build_more_than_needed.patch -- Using source at S:/Public/Documents/Git/vcpkg/buildtrees/zlib/src/1.2.11-f690224aeb -- Downloading https://github.com/ninja-build/ninja/releases/download/v1.8.2/ninja-win.zip... -- Configuring x64-windows CMake Error at scripts/cmake/vcpkg_execute_required_process.cmake:58 (message): Command failed: ninja -v Working Directory: S:/Public/Documents/Git/vcpkg/buildtrees/zlib/x64-windows-rel/vcpkg-parallel-configure Error code: 1 See logs for more information: S:\Public\Documents\Git\vcpkg\buildtrees\zlib\config-x64-windows-out.log Call Stack (most recent call first): scripts/cmake/vcpkg_configure_cmake.cmake:290 (vcpkg_execute_required_process) ports/zlib/portfile.cmake:22 (vcpkg_configure_cmake) scripts/ports.cmake:74 (include) Error: Building package zlib:x64-windows failed with: BUILD_FAILED Please ensure you're using the latest portfiles with `.\vcpkg update`, then submit an issue at https://github.com/Microsoft/vcpkg/issues including: Package: zlib:x64-windows Vcpkg version: 2019.07.18-nohash Additionally, attach any relevant sections from the log files above.
英語の言語パッケージがないと、エラーがでるので英語の言語パッケージをインストールします。
参考URL:https://github.com/Microsoft/vcpkg/issues/1939#issuecomment-354644869
PowershellよりDarknetビルド実行
Powershellのコマンドプロンプトを開き、Darknetをダウンロードしたフォルダで、「./build.ps1」を実行しビルドを実施します。
PS S:\Public\Documents\Git\darknet> .\build.ps1 Found vcpkg in VCPKG_ROOT: S:\Public\Documents\Git\vcpkg\ Found VS in D:\Program Files (x86)\Microsoft Visual Studio\2019\Community Visual Studio Command Prompt variables set Setting up environment to use CMake generator: Visual Studio 16 2019 Added missing env variable CUDA_TOOLKIT_ROOT_DIR ディレクトリ: S:\Public\Documents\Git\darknet Mode LastWriteTime Length Name ---- ------------- ------ ---- d----- 2019/07/25 11:23 build_win_release -- Selecting Windows SDK version 10.0.17763.0 to target Windows 10.0.18362. -- The C compiler identification is MSVC 19.21.27702.2 -- The CXX compiler identification is MSVC 19.21.27702.2 -- Check for working C compiler: D:/Program Files (x86)/Microsoft Visual Studio/2019/Community/VC/Tools/MSVC/14.21.27702/bin/Hostx64/x64/cl.exe -- Check for working C compiler: D:/Program Files (x86)/Microsoft Visual Studio/2019/Community/VC/Tools/MSVC/14.21.27702/bin/Hostx64/x64/cl.exe -- works -- Detecting C compiler ABI info -- Detecting C compiler ABI info - done -- Detecting C compile features -- Detecting C compile features - done -- Check for working CXX compiler: D:/Program Files (x86)/Microsoft Visual Studio/2019/Community/VC/Tools/MSVC/14.21.27702/bin/Hostx64/x64/cl.exe -- Check for working CXX compiler: D:/Program Files (x86)/Microsoft Visual Studio/2019/Community/VC/Tools/MSVC/14.21.27702/bin/Hostx64/x64/cl.exe -- works -- Detecting CXX compiler ABI info -- Detecting CXX compiler ABI info - done -- Detecting CXX compile features -- Detecting CXX compile features - done -- Looking for a CUDA compiler -- Looking for a CUDA compiler - NOTFOUND -- Looking for pthread.h -- Looking for pthread.h - not found -- Found Threads: TRUE -- Found PThreads4W: optimized;S:/Public/Documents/Git/vcpkg/installed/x64-windows/lib/pthreadVC3.lib;debug;S:/Public/Documents/Git/vcpkg/installed/x64-windows/debug/lib/pthreadVC3d.lib -- Found OpenCV: S:/Public/Documents/Git/vcpkg/installed/x64-windows (found version "3.4.3") -- Found Stb: S:/Public/Documents/Git/darknet/3rdparty/stb/include -- Found OpenMP_C: -openmp (found version "2.0") -- Found OpenMP_CXX: -openmp (found version "2.0") -- Found OpenMP: TRUE (found version "2.0") -- ZED SDK not enabled, since it requires CUDA -- Configuring done -- Generating done -- Build files have been written to: S:/Public/Documents/Git/darknet/build_win_release .NET Framework 向け Microsoft (R) Build Engine バージョン 16.1.76+g14b0a930a7 Copyright (C) Microsoft Corporation.All rights reserved. Checking Build System Building Custom Rule S:/Public/Documents/Git/darknet/CMakeLists.txt yolo_v2_class.cpp http_stream.cpp S:\Public\Documents\Git\darknet\src\http_stream.cpp(494,35): warning C4200: 非標準の拡張機能が使用されています: 構造体 または共用体中にサイズが 0 の配列があ ります。 [S:\Public\Documents\Git\darknet\build_win_release\dark.vcxproj] image_opencv.cpp S:\Public\Documents\Git\darknet\src\http_stream.cpp(494,35): message : このメンバーは、既定のコンストラクターまたはコピー/移動代入演算子により無視されます [S:\ Public\Documents\Git\darknet\build_win_release\dark.vcxproj] S:\Public\Documents\Git\darknet\src\image_opencv.cpp(81,39): warning C4200: 非標準の拡張機能が使用されています: 構造体 または共用体中にサイズが 0 の配列があ ります。 [S:\Public\Documents\Git\darknet\build_win_release\dark.vcxproj] S:\Public\Documents\Git\darknet\src\image_opencv.cpp(81,39): message : このメンバーは、既定のコンストラクターまたはコピー/移動代入演算子により無視されます [S:\ Public\Documents\Git\darknet\build_win_release\dark.vcxproj] S:\Public\Documents\Git\darknet\src\image_opencv.cpp(82,48): warning C4200: 非標準の拡張機能が使用されています: 構造体 または共用体中にサイズが 0 の配列があ ります。 [S:\Public\Documents\Git\darknet\build_win_release\dark.vcxproj] S:\Public\Documents\Git\darknet\src\image_opencv.cpp(82,48): message : このメンバーは、既定のコンストラクターまたはコピー/移動代入演算子により無視されます [S:\ Public\Documents\Git\darknet\build_win_release\dark.vcxproj] S:\Public\Documents\Git\darknet\src\image_opencv.cpp(83,49): warning C4200: 非標準の拡張機能が使用されています: 構造体 または共用体中にサイズが 0 の配列があ ります。 [S:\Public\Documents\Git\darknet\build_win_release\dark.vcxproj] コードを生成中... S:\Public\Documents\Git\darknet\src\image_opencv.cpp(83,49): message : このメンバーは、既定のコンストラクターまたはコピー/移動代入演算子により無視されます [S:\ Public\Documents\Git\darknet\build_win_release\dark.vcxproj] activation_layer.c activations.c art.c avgpool_layer.c batchnorm_layer.c blas.c box.c captcha.c cifar.c classifier.c coco.c col2im.c compare.c connected_layer.c conv_lstm_layer.c convolutional_layer.c cost_layer.c cpu_gemm.c crnn_layer.c crop_layer.c コードを生成中... コンパイル中... dark_cuda.c data.c deconvolutional_layer.c demo.c detection_layer.c detector.c dice.c dropout_layer.c gemm.c getopt.c gettimeofday.c go.c gru_layer.c im2col.c image.c layer.c list.c local_layer.c lstm_layer.c matrix.c コードを生成中... コンパイル中... maxpool_layer.c network.c nightmare.c normalization_layer.c option_list.c parser.c region_layer.c reorg_layer.c reorg_old_layer.c rnn.c rnn_layer.c rnn_vid.c route_layer.c scale_channels_layer.c shortcut_layer.c softmax_layer.c super.c swag.c tag.c tree.c コードを生成中... コンパイル中... upsample_layer.c utils.c voxel.c writing.c yolo.c yolo_layer.c コードを生成中... ライブラリ S:/Public/Documents/Git/darknet/build_win_release/Release/dark.lib とオブジェクト S:/Public/Documents/Git/darknet/b uild_win_release/Release/dark.exp を作成中 dark.vcxproj -> S:\Public\Documents\Git\darknet\build_win_release\Release\dark.dll Building Custom Rule S:/Public/Documents/Git/darknet/CMakeLists.txt darknet.c activation_layer.c activations.c art.c avgpool_layer.c batchnorm_layer.c blas.c box.c captcha.c cifar.c classifier.c coco.c col2im.c compare.c connected_layer.c conv_lstm_layer.c convolutional_layer.c cost_layer.c cpu_gemm.c crnn_layer.c コードを生成中... コンパイル中... crop_layer.c dark_cuda.c data.c deconvolutional_layer.c demo.c detection_layer.c detector.c dice.c dropout_layer.c gemm.c getopt.c gettimeofday.c go.c gru_layer.c im2col.c image.c layer.c list.c local_layer.c lstm_layer.c コードを生成中... コンパイル中... matrix.c maxpool_layer.c network.c nightmare.c normalization_layer.c option_list.c parser.c region_layer.c reorg_layer.c reorg_old_layer.c rnn.c rnn_layer.c rnn_vid.c route_layer.c scale_channels_layer.c shortcut_layer.c softmax_layer.c super.c swag.c tag.c コードを生成中... コンパイル中... tree.c upsample_layer.c utils.c voxel.c writing.c yolo.c yolo_layer.c コードを生成中... http_stream.cpp S:\Public\Documents\Git\darknet\src\http_stream.cpp(494,35): warning C4200: 非標準の拡張機能が使用されています: 構造体 または共用体中にサイズが 0 の配列があ ります。 [S:\Public\Documents\Git\darknet\build_win_release\darknet.vcxproj] image_opencv.cpp S:\Public\Documents\Git\darknet\src\http_stream.cpp(494,35): message : このメンバーは、既定のコンストラクターまたはコピー/移動代入演算子により無視されます [S:\ Public\Documents\Git\darknet\build_win_release\darknet.vcxproj] S:\Public\Documents\Git\darknet\src\image_opencv.cpp(81,39): warning C4200: 非標準の拡張機能が使用されています: 構造体 または共用体中にサイズが 0 の配列があ ります。 [S:\Public\Documents\Git\darknet\build_win_release\darknet.vcxproj] S:\Public\Documents\Git\darknet\src\image_opencv.cpp(81,39): message : このメンバーは、既定のコンストラクターまたはコピー/移動代入演算子により無視されます [S:\ Public\Documents\Git\darknet\build_win_release\darknet.vcxproj] S:\Public\Documents\Git\darknet\src\image_opencv.cpp(82,48): warning C4200: 非標準の拡張機能が使用されています: 構造体 または共用体中にサイズが 0 の配列があ ります。 [S:\Public\Documents\Git\darknet\build_win_release\darknet.vcxproj] S:\Public\Documents\Git\darknet\src\image_opencv.cpp(82,48): message : このメンバーは、既定のコンストラクターまたはコピー/移動代入演算子により無視されます [S:\ Public\Documents\Git\darknet\build_win_release\darknet.vcxproj] S:\Public\Documents\Git\darknet\src\image_opencv.cpp(83,49): warning C4200: 非標準の拡張機能が使用されています: 構造体 または共用体中にサイズが 0 の配列があ ります。 [S:\Public\Documents\Git\darknet\build_win_release\darknet.vcxproj] コードを生成中... S:\Public\Documents\Git\darknet\src\image_opencv.cpp(83,49): message : このメンバーは、既定のコンストラクターまたはコピー/移動代入演算子により無視されます [S:\ Public\Documents\Git\darknet\build_win_release\darknet.vcxproj] darknet.vcxproj -> S:\Public\Documents\Git\darknet\build_win_release\Release\darknet.exe Building Custom Rule S:/Public/Documents/Git/darknet/CMakeLists.txt yolo_console_dll.cpp uselib.vcxproj -> S:\Public\Documents\Git\darknet\build_win_release\Release\uselib.exe Building Custom Rule S:/Public/Documents/Git/darknet/CMakeLists.txt yolo_console_dll.cpp uselib_track.vcxproj -> S:\Public\Documents\Git\darknet\build_win_release\Release\uselib_track.exe Building Custom Rule S:/Public/Documents/Git/darknet/CMakeLists.txt -- Install configuration: "Release" -- Installing: S:/Public/Documents/Git/darknet/dark.lib -- Installing: S:/Public/Documents/Git/darknet/dark.dll -- Installing: S:/Public/Documents/Git/darknet/include/darknet/darknet.h -- Installing: S:/Public/Documents/Git/darknet/include/darknet/yolo_v2_class.hpp -- Installing: S:/Public/Documents/Git/darknet/uselib.exe -- Installing: S:/Public/Documents/Git/darknet/darknet.exe -- Installing: S:/Public/Documents/Git/darknet/uselib_track.exe -- Installing: S:/Public/Documents/Git/darknet/share/darknet/DarknetTargets.cmake -- Installing: S:/Public/Documents/Git/darknet/share/darknet/DarknetTargets-release.cmake -- Installing: S:/Public/Documents/Git/darknet/share/darknet/DarknetConfig.cmake -- Installing: S:/Public/Documents/Git/darknet/share/darknet/DarknetConfigVersion.cmake