diff --git a/.gitignore b/.gitignore index c648b06ae4c0f67b1c45141a14fcf373553ea7f7..35ccdd41a638eba9674ab1921659232c8cc06a70 100644 --- a/.gitignore +++ b/.gitignore @@ -102,6 +102,7 @@ distribute/ 3rdparty/caffe/.github 3rdparty/eigen/ 3rdparty/windows/caffe/ +3rdparty/windows/caffe_cpu/ 3rdparty/windows/caffe_opencl/ 3rdparty/windows/caffe3rdparty/ 3rdparty/windows/opencv/ diff --git a/CMakeLists.txt b/CMakeLists.txt index 90240168401900110fbf005fc49668ac7024ba11..9a3266be5f6c1f5964cba9ce9c0bc05e758a37f3 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -301,7 +301,7 @@ if (UNIX AND NOT APPLE) elseif (OpenCV_INCLUDE_DIRS AND OpenCV_LIBS_DIR) file(GLOB_RECURSE OpenCV_LIBS "${OpenCV_LIBS_DIR}*.so") set(OpenCV_FOUND 1) - else () + else (OpenCV_CONFIG_FILE) find_package(OpenCV) endif (OpenCV_CONFIG_FILE) @@ -386,6 +386,8 @@ if (WIN32) download_zip("caffe3rdparty_2018_02_13.zip" ${OP_WIN_URL} ${FIND_LIB_PREFIX} 6653E07E3D2D7226D64FAD2DF0B407FB) if (${GPU_MODE} MATCHES "OPENCL") download_zip("caffe_opencl_2018_02_13.zip" ${OP_WIN_URL} ${FIND_LIB_PREFIX} 3ac3e1acf5ee6a4e57920be73053067a) + elseif (${GPU_MODE} MATCHES "CPU_ONLY") + download_zip("caffe_cpu_2018_05_27.zip" ${OP_WIN_URL} ${FIND_LIB_PREFIX} 87E8401B6DFBAC5B8E909DD20E3B3390) else (${GPU_MODE} MATCHES "OPENCL") download_zip("caffe_2018_01_18.zip" ${OP_WIN_URL} ${FIND_LIB_PREFIX} 4b8e548cc7ea20abea472950dd5301bd) endif (${GPU_MODE} MATCHES "OPENCL") @@ -401,22 +403,30 @@ if (WIN32) find_library(GLOG_LIBRARY_DEBUG glogd HINTS ${FIND_LIB_PREFIX}/caffe3rdparty/lib) find_library(OpenCV_LIBS opencv_world310 HINTS ${FIND_LIB_PREFIX}/opencv/x64/vc14/lib) - if (${GPU_MODE} MATCHES "OPENCL") - SET(CAFFE_CL_CHECKED True CACHE BOOL "") + # If OpenPose builds it + if (BUILD_CAFFE) + unset(Caffe_INCLUDE_DIRS CACHE) unset(Caffe_LIB CACHE) unset(Caffe_Proto_LIB CACHE) - set(CL "_CL") + endif (BUILD_CAFFE) + # OpenCL + if (${GPU_MODE} MATCHES "OPENCL") + set(VCXPROJ_FILE_GPU_MODE "_CL") find_library(Caffe_LIB caffe HINTS ${FIND_LIB_PREFIX}/caffe_opencl/lib) find_library(Caffe_Proto_LIB caffeproto HINTS ${FIND_LIB_PREFIX}/caffe_opencl/lib) + # CPU & CUDA else (${GPU_MODE} MATCHES "OPENCL") - if (CAFFE_CL_CHECKED) - unset(Caffe_LIB CACHE) - unset(Caffe_Proto_LIB CACHE) - endif (CAFFE_CL_CHECKED) - set(CAFFE_CL_CHECKED 0) - set(CL "") - find_library(Caffe_LIB caffe HINTS ${FIND_LIB_PREFIX}/caffe/lib) - find_library(Caffe_Proto_LIB caffeproto HINTS ${FIND_LIB_PREFIX}/caffe/lib) + # CPU + if (${GPU_MODE} MATCHES "CPU_ONLY") + set(VCXPROJ_FILE_GPU_MODE "_CPU") + find_library(Caffe_LIB caffe HINTS ${FIND_LIB_PREFIX}/caffe_cpu/lib) + find_library(Caffe_Proto_LIB caffeproto HINTS ${FIND_LIB_PREFIX}/caffe_cpu/lib) + # CUDA + else (${GPU_MODE} MATCHES "CPU_ONLY") + set(VCXPROJ_FILE_GPU_MODE "") + find_library(Caffe_LIB caffe HINTS ${FIND_LIB_PREFIX}/caffe/lib) + find_library(Caffe_Proto_LIB caffeproto HINTS ${FIND_LIB_PREFIX}/caffe/lib) + endif (${GPU_MODE} MATCHES "CPU_ONLY") endif (${GPU_MODE} MATCHES "OPENCL") if (${GPU_MODE} MATCHES "OPENCL") @@ -435,16 +445,19 @@ if (WIN32) endif (WITH_FLIR_CAMERA) set(Caffe_LIBS ${Caffe_LIB};${Caffe_Proto_LIB}) set(OpenCV_INCLUDE_DIRS "3rdparty/windows/opencv/include") + # OpenCL if (${GPU_MODE} MATCHES "OPENCL") - SET(CAFFE_CL_CHECKED2 True CACHE BOOL "") unset(Caffe_INCLUDE_DIRS CACHE) set(Caffe_INCLUDE_DIRS "3rdparty/windows/caffe_opencl/include;3rdparty/windows/caffe_opencl/include2" CACHE FILEPATH "Caffe_INCLUDE_DIRS") + # CUDA and CPU else (${GPU_MODE} MATCHES "OPENCL") - if (CAFFE_CL_CHECKED2) - unset(Caffe_INCLUDE_DIRS CACHE) - endif (CAFFE_CL_CHECKED2) - set(CAFFE_CL_CHECKED2 0) - set(Caffe_INCLUDE_DIRS "3rdparty/windows/caffe/include;3rdparty/windows/caffe/include2" CACHE FILEPATH "Caffe_INCLUDE_DIRS") + # CPU + if (${GPU_MODE} MATCHES "CPU_ONLY") + set(Caffe_INCLUDE_DIRS "3rdparty/windows/caffe_cpu/include;3rdparty/windows/caffe_cpu/include2" CACHE FILEPATH "Caffe_INCLUDE_DIRS") + # CUDA + else (${GPU_MODE} MATCHES "CPU_ONLY") + set(Caffe_INCLUDE_DIRS "3rdparty/windows/caffe/include;3rdparty/windows/caffe/include2" CACHE FILEPATH "Caffe_INCLUDE_DIRS") + endif (${GPU_MODE} MATCHES "CPU_ONLY") endif (${GPU_MODE} MATCHES "OPENCL") set(Boost_INCLUDE_DIRS "3rdparty/windows/caffe3rdparty/include/boost-1_61") set(WINDOWS_INCLUDE_DIRS "3rdparty/windows/caffe3rdparty/include") diff --git a/cmake/OpenPose_CPU.vcxproj.user b/cmake/OpenPose_CPU.vcxproj.user new file mode 100644 index 0000000000000000000000000000000000000000..50d900ffff41ced6ed0c0757a77ff2a876e6c011 --- /dev/null +++ b/cmake/OpenPose_CPU.vcxproj.user @@ -0,0 +1,16 @@ + + + + + PATH=%PATH%;3rdparty\windows\caffe_cpu\bin\;3rdparty\windows\opencv\x64\vc14\bin;3rdparty\windows\freeglut\bin\;3rdparty\windows\spinnaker\bin\ + WindowsLocalDebugger + ..\..\.. + + + + PATH=%PATH%;3rdparty\windows\caffe_cpu\bin\;3rdparty\windows\opencv\x64\vc14\bin;3rdparty\windows\freeglut\bin\;3rdparty\windows\spinnaker\bin\ + WindowsLocalDebugger + ..\..\.. + + + \ No newline at end of file diff --git a/examples/openpose/CMakeLists.txt b/examples/openpose/CMakeLists.txt index 859d87e6aaa5635b4450ef238fa787f99e7c9d4e..7c35b8f192243d33a686b9da2d3042f40a02b2f5 100644 --- a/examples/openpose/CMakeLists.txt +++ b/examples/openpose/CMakeLists.txt @@ -17,7 +17,7 @@ foreach(EXAMPLE_FILE ${EXAMPLE_FILES}) if (WIN32) set_property(TARGET ${EXE_NAME} PROPERTY FOLDER "Examples") - configure_file(${CMAKE_SOURCE_DIR}/cmake/OpenPose${CL}.vcxproj.user + configure_file(${CMAKE_SOURCE_DIR}/cmake/OpenPose${VCXPROJ_FILE_GPU_MODE}.vcxproj.user ${CMAKE_CURRENT_BINARY_DIR}/${EXE_NAME}.vcxproj.user @ONLY) # Properties->General->Output Directory set_property(TARGET ${EXE_NAME} PROPERTY RUNTIME_OUTPUT_DIRECTORY_RELEASE ${PROJECT_BINARY_DIR}/$(Platform)/$(Configuration)) diff --git a/examples/tests/CMakeLists.txt b/examples/tests/CMakeLists.txt index a9327b028b5f19af8681f360f119340b1724891f..793ed26747ec507850af5de01c9111c834d96b02 100644 --- a/examples/tests/CMakeLists.txt +++ b/examples/tests/CMakeLists.txt @@ -18,7 +18,7 @@ foreach(EXAMPLE_FILE ${EXAMPLE_FILES}) if (WIN32) set_property(TARGET ${EXE_NAME} PROPERTY FOLDER "Examples/Tutorial/Tests") - configure_file(${CMAKE_SOURCE_DIR}/cmake/OpenPose${CL}.vcxproj.user + configure_file(${CMAKE_SOURCE_DIR}/cmake/OpenPose${VCXPROJ_FILE_GPU_MODE}.vcxproj.user ${CMAKE_CURRENT_BINARY_DIR}/${EXE_NAME}.vcxproj.user @ONLY) # Properties->General->Output Directory set_property(TARGET ${EXE_NAME} PROPERTY RUNTIME_OUTPUT_DIRECTORY_RELEASE ${PROJECT_BINARY_DIR}/$(Platform)/$(Configuration)) diff --git a/examples/tutorial_add_module/CMakeLists.txt b/examples/tutorial_add_module/CMakeLists.txt index 4cd9a62931bf89dd32086cbfe385651cf820f7a3..29bf32235d9c71a504028826c087659aa80ccdc0 100644 --- a/examples/tutorial_add_module/CMakeLists.txt +++ b/examples/tutorial_add_module/CMakeLists.txt @@ -19,7 +19,7 @@ foreach(EXAMPLE_FILE ${EXAMPLE_FILES}) if (WIN32) set_property(TARGET ${EXE_NAME} PROPERTY FOLDER "Examples/Tutorial/AddModule") - configure_file(${CMAKE_SOURCE_DIR}/cmake/OpenPose${CL}.vcxproj.user + configure_file(${CMAKE_SOURCE_DIR}/cmake/OpenPose${VCXPROJ_FILE_GPU_MODE}.vcxproj.user ${CMAKE_CURRENT_BINARY_DIR}/${EXE_NAME}.vcxproj.user @ONLY) # Properties->General->Output Directory set_property(TARGET ${EXE_NAME} PROPERTY RUNTIME_OUTPUT_DIRECTORY_RELEASE ${PROJECT_BINARY_DIR}/$(Platform)/$(Configuration)) diff --git a/examples/tutorial_pose/CMakeLists.txt b/examples/tutorial_pose/CMakeLists.txt index 5770362540ccd9794ac0ff8b6ca704f29d96a907..1398ec3a09922c8f19bf74c1edb0eaddbfea48b0 100644 --- a/examples/tutorial_pose/CMakeLists.txt +++ b/examples/tutorial_pose/CMakeLists.txt @@ -18,7 +18,7 @@ foreach(EXAMPLE_FILE ${EXAMPLE_FILES}) if (WIN32) set_property(TARGET ${EXE_NAME} PROPERTY FOLDER "Examples/Tutorial/Pose") - configure_file(${CMAKE_SOURCE_DIR}/cmake/OpenPose${CL}.vcxproj.user + configure_file(${CMAKE_SOURCE_DIR}/cmake/OpenPose${VCXPROJ_FILE_GPU_MODE}.vcxproj.user ${CMAKE_CURRENT_BINARY_DIR}/${EXE_NAME}.vcxproj.user @ONLY) # Properties->General->Output Directory set_property(TARGET ${EXE_NAME} PROPERTY RUNTIME_OUTPUT_DIRECTORY_RELEASE ${PROJECT_BINARY_DIR}/$(Platform)/$(Configuration)) diff --git a/examples/tutorial_thread/CMakeLists.txt b/examples/tutorial_thread/CMakeLists.txt index 60f6dd20970e353a50ad3d1c4fdfeecb876d0b46..717fc663c4b7a62b0144e462db70cf19518a9a32 100644 --- a/examples/tutorial_thread/CMakeLists.txt +++ b/examples/tutorial_thread/CMakeLists.txt @@ -20,7 +20,7 @@ foreach(EXAMPLE_FILE ${EXAMPLE_FILES}) if (WIN32) set_property(TARGET ${EXE_NAME} PROPERTY FOLDER "Examples/Tutorial/Thread") - configure_file(${CMAKE_SOURCE_DIR}/cmake/OpenPose${CL}.vcxproj.user + configure_file(${CMAKE_SOURCE_DIR}/cmake/OpenPose${VCXPROJ_FILE_GPU_MODE}.vcxproj.user ${CMAKE_CURRENT_BINARY_DIR}/${EXE_NAME}.vcxproj.user @ONLY) # Properties->General->Output Directory set_property(TARGET ${EXE_NAME} PROPERTY RUNTIME_OUTPUT_DIRECTORY_RELEASE ${PROJECT_BINARY_DIR}/$(Platform)/$(Configuration)) diff --git a/examples/tutorial_wrapper/CMakeLists.txt b/examples/tutorial_wrapper/CMakeLists.txt index 74aadfeae0b27d9c1eb37901d10a570b8825f595..a2e093537fbf04621c385fd05b0492e32e55dd67 100644 --- a/examples/tutorial_wrapper/CMakeLists.txt +++ b/examples/tutorial_wrapper/CMakeLists.txt @@ -24,7 +24,7 @@ foreach(EXAMPLE_FILE ${EXAMPLE_FILES}) if (WIN32) set_property(TARGET ${EXE_NAME} PROPERTY FOLDER "Examples/Tutorial/Wrapper") - configure_file(${CMAKE_SOURCE_DIR}/cmake/OpenPose${CL}.vcxproj.user + configure_file(${CMAKE_SOURCE_DIR}/cmake/OpenPose${VCXPROJ_FILE_GPU_MODE}.vcxproj.user ${CMAKE_CURRENT_BINARY_DIR}/${EXE_NAME}.vcxproj.user @ONLY) # Properties->General->Output Directory set_property(TARGET ${EXE_NAME} PROPERTY RUNTIME_OUTPUT_DIRECTORY_RELEASE ${PROJECT_BINARY_DIR}/$(Platform)/$(Configuration)) diff --git a/src/openpose/net/netCaffe.cpp b/src/openpose/net/netCaffe.cpp index 7118866de97f56b37c643f65fabf68357a0644cc..b9ffa449ce88078b544f516b5ed26bf10c88b90f 100644 --- a/src/openpose/net/netCaffe.cpp +++ b/src/openpose/net/netCaffe.cpp @@ -149,10 +149,16 @@ namespace op #ifdef USE_CUDA caffe::Caffe::set_mode(caffe::Caffe::GPU); caffe::Caffe::SetDevice(upImpl->mGpuId); + upImpl->upCaffeNet.reset(new caffe::Net{upImpl->mCaffeProto, caffe::TEST}); #else caffe::Caffe::set_mode(caffe::Caffe::CPU); + #ifdef _WIN32 + upImpl->upCaffeNet.reset(new caffe::Net{upImpl->mCaffeProto, caffe::TEST, + caffe::Caffe::GetCPUDevice()}); + #else + upImpl->upCaffeNet.reset(new caffe::Net{upImpl->mCaffeProto, caffe::TEST}); + #endif #endif - upImpl->upCaffeNet.reset(new caffe::Net{upImpl->mCaffeProto, caffe::TEST}); upImpl->upCaffeNet->CopyTrainedLayersFrom(upImpl->mCaffeTrainedModel); #ifdef USE_CUDA cudaCheck(__LINE__, __FUNCTION__, __FILE__);