From 850799285565c784db3f1422b237718e2ca0bea0 Mon Sep 17 00:00:00 2001 From: lltcggie Date: Fri, 4 Dec 2015 00:48:55 +0900 Subject: [PATCH] =?UTF-8?q?Caffe=E3=82=92caffe-builder=E3=81=A7=E3=83=93?= =?UTF-8?q?=E3=83=AB=E3=83=89=E3=81=97=E3=81=9F=E6=9C=80=E6=96=B0=E7=89=88?= =?UTF-8?q?=E3=81=AB=E5=A4=89=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- common/waifu2x.cpp | 82 +++++++++++++++++++-- common/waifu2x.h | 5 ++ waifu2x-caffe-dll/waifu2x-caffe-dll.vcxproj | 16 ++-- waifu2x-caffe-dll/waifu2x.cpp | 57 ++++++++++++-- waifu2x-caffe-gui/Source.cpp | 9 ++- waifu2x-caffe-gui/waifu2x-caffe-gui.vcxproj | 16 ++-- waifu2x-caffe/Source.cpp | 4 + waifu2x-caffe/waifu2x-caffe.vcxproj | 16 ++-- 8 files changed, 174 insertions(+), 31 deletions(-) diff --git a/common/waifu2x.cpp b/common/waifu2x.cpp index c45fc4d..325086a 100644 --- a/common/waifu2x.cpp +++ b/common/waifu2x.cpp @@ -19,15 +19,62 @@ #include #endif -#ifdef _MSC_VER #ifdef _DEBUG -#pragma comment(lib, "libcaffed.lib") +#pragma comment(lib, "caffe-d.lib") +#pragma comment(lib, "proto-d.lib") +#pragma comment(lib, "libboost_system-vc120-mt-sgd-1_59.lib") +#pragma comment(lib, "libboost_thread-vc120-mt-sgd-1_59.lib") +#pragma comment(lib, "libboost_filesystem-vc120-mt-sgd-1_59.lib") +#pragma comment(lib, "glogd.lib") +#pragma comment(lib, "gflagsd.lib") #pragma comment(lib, "libprotobufd.lib") +#pragma comment(lib, "libhdf5_hl_D.lib") +#pragma comment(lib, "libhdf5_D.lib") +#pragma comment(lib, "zlibstaticd.lib") +#pragma comment(lib, "libopenblasd.lib") +#pragma comment(lib, "cudart.lib") +#pragma comment(lib, "curand.lib") +#pragma comment(lib, "cublas.lib") +#pragma comment(lib, "cudnn.lib") + +#pragma comment(lib, "IlmImfd.lib") +#pragma comment(lib, "libjasperd.lib") +#pragma comment(lib, "libjpegd.lib") +#pragma comment(lib, "libpngd.lib") +#pragma comment(lib, "libtiffd.lib") +#pragma comment(lib, "opencv_calib3d249d.lib") +#pragma comment(lib, "opencv_contrib249d.lib") +#pragma comment(lib, "opencv_core249d.lib") +#pragma comment(lib, "opencv_highgui249d.lib") +#pragma comment(lib, "opencv_imgproc249d.lib") #else -#pragma comment(lib, "libcaffe.lib") +#pragma comment(lib, "caffe.lib") +#pragma comment(lib, "proto.lib") +#pragma comment(lib, "libboost_system-vc120-mt-s-1_59.lib") +#pragma comment(lib, "libboost_thread-vc120-mt-s-1_59.lib") +#pragma comment(lib, "libboost_filesystem-vc120-mt-s-1_59.lib") +#pragma comment(lib, "glog.lib") +#pragma comment(lib, "gflags.lib") #pragma comment(lib, "libprotobuf.lib") -#endif -#pragma comment(lib, "libprotoc.lib") +#pragma comment(lib, "libhdf5_hl.lib") +#pragma comment(lib, "libhdf5.lib") +#pragma comment(lib, "zlibstatic.lib") +#pragma comment(lib, "libopenblas.lib") +#pragma comment(lib, "cudart.lib") +#pragma comment(lib, "curand.lib") +#pragma comment(lib, "cublas.lib") +#pragma comment(lib, "cudnn.lib") + +#pragma comment(lib, "IlmImf.lib") +#pragma comment(lib, "libjasper.lib") +#pragma comment(lib, "libjpeg.lib") +#pragma comment(lib, "libpng.lib") +#pragma comment(lib, "libtiff.lib") +#pragma comment(lib, "opencv_calib3d249.lib") +#pragma comment(lib, "opencv_contrib249.lib") +#pragma comment(lib, "opencv_core249.lib") +#pragma comment(lib, "opencv_highgui249.lib") +#pragma comment(lib, "opencv_imgproc249.lib") #endif // 入力画像のオフセット @@ -45,6 +92,15 @@ static std::once_flag waifu2x_once_flag; static std::once_flag waifu2x_cudnn_once_flag; static std::once_flag waifu2x_cuda_once_flag; +#ifdef _MSC_VER +// OpenBLASの初期化、終了関数 +extern "C" +{ + void __cdecl gotoblas_init(void); + void __cdecl gotoblas_quit(void); +} +#endif + #ifndef CUDA_CHECK_WAIFU2X #define CUDA_CHECK_WAIFU2X(condition) \ do { \ @@ -107,7 +163,7 @@ Waifu2x::eWaifu2xcuDNNError Waifu2x::can_use_cuDNN() std::call_once(waifu2x_cudnn_once_flag, [&]() { #if defined(WIN32) || defined(WIN64) - HMODULE hModule = LoadLibrary(TEXT("cudnn64_65.dll")); + HMODULE hModule = LoadLibrary(TEXT(CUDNN_DLL_NAME)); if (hModule != NULL) { typedef cudnnStatus_t(__stdcall * cudnnCreateType)(cudnnHandle_t *); @@ -178,6 +234,20 @@ Waifu2x::eWaifu2xCudaError Waifu2x::can_use_CUDA() return CudaFlag; } +void Waifu2x::init_liblary() +{ +#ifdef _MSC_VER + gotoblas_init(); +#endif +} + +void Waifu2x::quit_liblary() +{ +#ifdef _MSC_VER + gotoblas_quit(); +#endif +} + cv::Mat Waifu2x::LoadMat(const std::string &path) { cv::Mat mat; diff --git a/common/waifu2x.h b/common/waifu2x.h index f5e9fad..ae0a5ec 100644 --- a/common/waifu2x.h +++ b/common/waifu2x.h @@ -8,6 +8,8 @@ #include #include +#define CUDNN_DLL_NAME "cudnn64_70" + namespace caffe { @@ -116,6 +118,9 @@ public: static eWaifu2xcuDNNError can_use_cuDNN(); static eWaifu2xCudaError can_use_CUDA(); + static void init_liblary(); + static void quit_liblary(); + // mode: noise or scale or noise_scale or auto_scale // process: cpu or gpu or cudnn eWaifu2xError init(int argc, char** argv, const std::string &mode, const int noise_level, const double scale_ratio, const std::string &model_dir, const std::string &process, diff --git a/waifu2x-caffe-dll/waifu2x-caffe-dll.vcxproj b/waifu2x-caffe-dll/waifu2x-caffe-dll.vcxproj index 530214f..75602cf 100644 --- a/waifu2x-caffe-dll/waifu2x-caffe-dll.vcxproj +++ b/waifu2x-caffe-dll/waifu2x-caffe-dll.vcxproj @@ -41,14 +41,14 @@ true - $(SolutionDir)caffe\build\include;$(SolutionDir)caffe\3rdparty\include;C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v7.0\include;C:\boost_1_56_0;C:\opencv249\build\include;$(SolutionDir)rapidjson\include;$(SolutionDir)stb;$(SolutionDir)include;$(IncludePath) - $(SolutionDir)caffe\build\lib;$(SolutionDir)caffe\3rdparty\lib;C:\boost_1_56_0\lib64-msvc-12.0;$(LibraryPath) + D:\caffe-build\install\include;D:\caffe-build\install\include\boost-1_59;$(CUDA_PATH_V7_5)\include;C:\opencv249\build\include;$(SolutionDir)rapidjson\include;$(SolutionDir)stb;$(SolutionDir)include;$(IncludePath) + D:\caffe-build\install\lib;$(CUDA_PATH_V7_5)\lib\$(PlatformName);C:\opencv249\build\$(PlatformShortName)\vc12\staticlib;$(LibraryPath) waifu2x-caffe false - $(SolutionDir)caffe\build\include;$(SolutionDir)caffe\3rdparty\include;C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v7.0\include;C:\boost_1_56_0;C:\opencv249\build\include;$(SolutionDir)rapidjson\include;$(SolutionDir)stb;$(SolutionDir)include;$(IncludePath) - $(SolutionDir)caffe\build\lib;$(SolutionDir)caffe\3rdparty\lib;C:\boost_1_56_0\lib64-msvc-12.0;$(LibraryPath) + D:\caffe-build\install\include;D:\caffe-build\install\include\boost-1_59;$(CUDA_PATH_V7_5)\include;C:\opencv249\build\include;$(SolutionDir)rapidjson\include;$(SolutionDir)stb;$(SolutionDir)include;$(IncludePath) + D:\caffe-build\install\lib;$(CUDA_PATH_V7_5)\lib\$(PlatformName);C:\opencv249\build\$(PlatformShortName)\vc12\staticlib;$(LibraryPath) waifu2x-caffe @@ -58,11 +58,13 @@ Level3 Disabled WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDebug Console true - cudnn64_65.dll;%(DelayLoadDLLs) + cudnn64_70.dll;%(DelayLoadDLLs) + Shlwapi.lib;%(AdditionalDependencies) @@ -74,13 +76,15 @@ true true WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreaded Console true true true - cudnn64_65.dll;%(DelayLoadDLLs) + cudnn64_70.dll;%(DelayLoadDLLs) + Shlwapi.lib;%(AdditionalDependencies) diff --git a/waifu2x-caffe-dll/waifu2x.cpp b/waifu2x-caffe-dll/waifu2x.cpp index cbf9858..b2dc2b7 100644 --- a/waifu2x-caffe-dll/waifu2x.cpp +++ b/waifu2x-caffe-dll/waifu2x.cpp @@ -9,15 +9,62 @@ #include -#ifdef _MSC_VER #ifdef _DEBUG -#pragma comment(lib, "libcaffed.lib") +#pragma comment(lib, "caffe-d.lib") +#pragma comment(lib, "proto-d.lib") +#pragma comment(lib, "libboost_system-vc120-mt-sgd-1_59.lib") +#pragma comment(lib, "libboost_thread-vc120-mt-sgd-1_59.lib") +#pragma comment(lib, "libboost_filesystem-vc120-mt-sgd-1_59.lib") +#pragma comment(lib, "glogd.lib") +#pragma comment(lib, "gflagsd.lib") #pragma comment(lib, "libprotobufd.lib") +#pragma comment(lib, "libhdf5_hl_D.lib") +#pragma comment(lib, "libhdf5_D.lib") +#pragma comment(lib, "zlibstaticd.lib") +#pragma comment(lib, "libopenblasd.lib") +#pragma comment(lib, "cudart.lib") +#pragma comment(lib, "curand.lib") +#pragma comment(lib, "cublas.lib") +#pragma comment(lib, "cudnn.lib") + +#pragma comment(lib, "IlmImfd.lib") +#pragma comment(lib, "libjasperd.lib") +#pragma comment(lib, "libjpegd.lib") +#pragma comment(lib, "libpngd.lib") +#pragma comment(lib, "libtiffd.lib") +#pragma comment(lib, "opencv_calib3d249d.lib") +#pragma comment(lib, "opencv_contrib249d.lib") +#pragma comment(lib, "opencv_core249d.lib") +#pragma comment(lib, "opencv_highgui249d.lib") +#pragma comment(lib, "opencv_imgproc249d.lib") #else -#pragma comment(lib, "libcaffe.lib") +#pragma comment(lib, "caffe.lib") +#pragma comment(lib, "proto.lib") +#pragma comment(lib, "libboost_system-vc120-mt-s-1_59.lib") +#pragma comment(lib, "libboost_thread-vc120-mt-s-1_59.lib") +#pragma comment(lib, "libboost_filesystem-vc120-mt-s-1_59.lib") +#pragma comment(lib, "glog.lib") +#pragma comment(lib, "gflags.lib") #pragma comment(lib, "libprotobuf.lib") -#endif -#pragma comment(lib, "libprotoc.lib") +#pragma comment(lib, "libhdf5_hl.lib") +#pragma comment(lib, "libhdf5.lib") +#pragma comment(lib, "zlibstatic.lib") +#pragma comment(lib, "libopenblas.lib") +#pragma comment(lib, "cudart.lib") +#pragma comment(lib, "curand.lib") +#pragma comment(lib, "cublas.lib") +#pragma comment(lib, "cudnn.lib") + +#pragma comment(lib, "IlmImf.lib") +#pragma comment(lib, "libjasper.lib") +#pragma comment(lib, "libjpeg.lib") +#pragma comment(lib, "libpng.lib") +#pragma comment(lib, "libtiff.lib") +#pragma comment(lib, "opencv_calib3d249.lib") +#pragma comment(lib, "opencv_contrib249.lib") +#pragma comment(lib, "opencv_core249.lib") +#pragma comment(lib, "opencv_highgui249.lib") +#pragma comment(lib, "opencv_imgproc249.lib") #endif // 入力画像のオフセット diff --git a/waifu2x-caffe-gui/Source.cpp b/waifu2x-caffe-gui/Source.cpp index bca8558..67ffd99 100644 --- a/waifu2x-caffe-gui/Source.cpp +++ b/waifu2x-caffe-gui/Source.cpp @@ -15,6 +15,7 @@ #include #include #include +#include #include "resource.h" #include "../common/waifu2x.h" @@ -830,10 +831,10 @@ public: MessageBox(dh, TEXT("cuDNNが使えます。"), TEXT("結果"), MB_OK | MB_ICONINFORMATION); break; case Waifu2x::eWaifu2xcuDNNError_NotFind: - MessageBox(dh, TEXT("cuDNNは使えません。\r\n「cudnn64_65.dll」が見つかりません。"), TEXT("結果"), MB_OK | MB_ICONERROR); + MessageBox(dh, TEXT("cuDNNは使えません。\r\n「") TEXT(CUDNN_DLL_NAME) TEXT("」が見つかりません。"), TEXT("結果"), MB_OK | MB_ICONERROR); break; case Waifu2x::eWaifu2xcuDNNError_OldVersion: - MessageBox(dh, TEXT("cuDNNは使えません。\r\n「cudnn64_65.dll」のバージョンが古いです。v2を使って下さい。"), TEXT("結果"), MB_OK | MB_ICONERROR); + MessageBox(dh, TEXT("cuDNNは使えません。\r\n「") TEXT(CUDNN_DLL_NAME) TEXT("」のバージョンが古いです。v2を使って下さい。"), TEXT("結果"), MB_OK | MB_ICONERROR); break; case Waifu2x::eWaifu2xcuDNNError_CannotCreate: MessageBox(dh, TEXT("cuDNNは使えません。\r\ncuDNNを初期化出来ません。"), TEXT("結果"), MB_OK | MB_ICONERROR); @@ -934,6 +935,8 @@ int WINAPI WinMain(HINSTANCE hInstance, LPSTR lpCmdLine, int nCmdShow) { + Waifu2x::init_liblary(); + // CDialogクラスでダイアログを作成する CDialog cDialog; CDialog cDialog2; @@ -992,5 +995,7 @@ int WINAPI WinMain(HINSTANCE hInstance, // ダイアログを表示 cDialog.DoModal(hInstance, IDD_DIALOG); + Waifu2x::quit_liblary(); + return 0; } diff --git a/waifu2x-caffe-gui/waifu2x-caffe-gui.vcxproj b/waifu2x-caffe-gui/waifu2x-caffe-gui.vcxproj index 00e3124..534f623 100644 --- a/waifu2x-caffe-gui/waifu2x-caffe-gui.vcxproj +++ b/waifu2x-caffe-gui/waifu2x-caffe-gui.vcxproj @@ -41,13 +41,13 @@ true - $(SolutionDir)caffe\build\include;$(SolutionDir)caffe\3rdparty\include;C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v7.0\include;C:\boost_1_56_0;C:\opencv249\build\include;$(SolutionDir)rapidjson\include;$(SolutionDir)stb;$(SolutionDir)include;$(IncludePath) - $(SolutionDir)caffe\build\lib;$(SolutionDir)caffe\3rdparty\lib;C:\boost_1_56_0\lib64-msvc-12.0;$(LibraryPath) + D:\caffe-build\install\include;D:\caffe-build\install\include\boost-1_59;$(CUDA_PATH_V7_5)\include;C:\opencv249\build\include;$(SolutionDir)rapidjson\include;$(SolutionDir)stb;$(SolutionDir)include;$(IncludePath) + D:\caffe-build\install\lib;$(CUDA_PATH_V7_5)\lib\$(PlatformName);C:\opencv249\build\$(PlatformShortName)\vc12\staticlib;$(LibraryPath) false - $(SolutionDir)caffe\build\include;$(SolutionDir)caffe\3rdparty\include;C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v7.0\include;C:\boost_1_56_0;C:\opencv249\build\include;$(SolutionDir)rapidjson\include;$(SolutionDir)stb;$(SolutionDir)include;$(IncludePath) - $(SolutionDir)caffe\build\lib;$(SolutionDir)caffe\3rdparty\lib;C:\boost_1_56_0\lib64-msvc-12.0;$(LibraryPath) + D:\caffe-build\install\include;D:\caffe-build\install\include\boost-1_59;$(CUDA_PATH_V7_5)\include;C:\opencv249\build\include;$(SolutionDir)rapidjson\include;$(SolutionDir)stb;$(SolutionDir)include;$(IncludePath) + D:\caffe-build\install\lib;$(CUDA_PATH_V7_5)\lib\$(PlatformName);C:\opencv249\build\$(PlatformShortName)\vc12\staticlib;$(LibraryPath) @@ -56,11 +56,13 @@ Level3 Disabled WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDebug Windows true - cudnn64_65.dll;%(DelayLoadDLLs) + cudnn64_70.dll;%(DelayLoadDLLs) + Shlwapi.lib;%(AdditionalDependencies) manifest.manifest @@ -75,13 +77,15 @@ true true WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) + MultiThreaded Windows true true true - cudnn64_65.dll;%(DelayLoadDLLs) + cudnn64_70.dll;%(DelayLoadDLLs) + Shlwapi.lib;%(AdditionalDependencies) manifest.manifest diff --git a/waifu2x-caffe/Source.cpp b/waifu2x-caffe/Source.cpp index bcb27a8..aa9ee3c 100644 --- a/waifu2x-caffe/Source.cpp +++ b/waifu2x-caffe/Source.cpp @@ -50,6 +50,8 @@ boost::filesystem::path relativePath(const boost::filesystem::path &path, const int main(int argc, char** argv) { + Waifu2x::init_liblary(); + // definition of command line arguments TCLAP::CmdLine cmd("waifu2x reimplementation using Caffe", ' ', "1.0.0"); @@ -312,5 +314,7 @@ int main(int argc, char** argv) printf("変換に成功しました\n"); + Waifu2x::quit_liblary(); + return 0; } diff --git a/waifu2x-caffe/waifu2x-caffe.vcxproj b/waifu2x-caffe/waifu2x-caffe.vcxproj index c826a36..50ac69e 100644 --- a/waifu2x-caffe/waifu2x-caffe.vcxproj +++ b/waifu2x-caffe/waifu2x-caffe.vcxproj @@ -41,13 +41,13 @@ true - $(SolutionDir)caffe\build\include;$(SolutionDir)caffe\3rdparty\include;C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v7.0\include;C:\boost_1_56_0;C:\opencv249\build\include;$(SolutionDir)rapidjson\include;$(SolutionDir)stb;$(SolutionDir)include;$(IncludePath) - $(SolutionDir)caffe\build\lib;$(SolutionDir)caffe\3rdparty\lib;C:\boost_1_56_0\lib64-msvc-12.0;$(LibraryPath) + D:\caffe-build\install\include;D:\caffe-build\install\include\boost-1_59;$(CUDA_PATH_V7_5)\include;C:\opencv249\build\include;$(SolutionDir)rapidjson\include;$(SolutionDir)stb;$(SolutionDir)include;$(IncludePath) + D:\caffe-build\install\lib;$(CUDA_PATH_V7_5)\lib\$(PlatformName);C:\opencv249\build\$(PlatformShortName)\vc12\staticlib;$(LibraryPath) false - $(SolutionDir)caffe\build\include;$(SolutionDir)caffe\3rdparty\include;C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v7.0\include;C:\boost_1_56_0;C:\opencv249\build\include;$(SolutionDir)rapidjson\include;$(SolutionDir)stb;$(SolutionDir)include;$(IncludePath) - $(SolutionDir)caffe\build\lib;$(SolutionDir)caffe\3rdparty\lib;C:\boost_1_56_0\lib64-msvc-12.0;$(LibraryPath) + D:\caffe-build\install\include;D:\caffe-build\install\include\boost-1_59;$(CUDA_PATH_V7_5)\include;C:\opencv249\build\include;$(SolutionDir)rapidjson\include;$(SolutionDir)stb;$(SolutionDir)include;$(IncludePath) + D:\caffe-build\install\lib;$(CUDA_PATH_V7_5)\lib\$(PlatformName);C:\opencv249\build\$(PlatformShortName)\vc12\staticlib;$(LibraryPath) @@ -56,11 +56,13 @@ Level3 Disabled WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreadedDebug Console true - cudnn64_65.dll;%(DelayLoadDLLs) + cudnn64_70.dll;%(DelayLoadDLLs) + Shlwapi.lib;%(AdditionalDependencies) @@ -72,13 +74,15 @@ true true WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + MultiThreaded Console true true true - cudnn64_65.dll;%(DelayLoadDLLs) + cudnn64_70.dll;%(DelayLoadDLLs) + Shlwapi.lib;%(AdditionalDependencies)