-
Notifications
You must be signed in to change notification settings - Fork 5.8k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
move darknet and caffe in opencv_contrib #3740
Open
LaurentBerger
wants to merge
5
commits into
opencv:5.x
Choose a base branch
from
LaurentBerger:dnnlegacy
base: 5.x
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Open
Changes from all commits
Commits
Show all changes
5 commits
Select commit
Hold shift + click to select a range
File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,233 @@ | ||
if(WINRT) | ||
ocv_module_disable(dnn) | ||
endif() | ||
|
||
set(the_description "Deep neural network legacy module. It allows to load models from frameworks caffe and darknet and to make forward pass using opencv5") | ||
|
||
|
||
ocv_add_module(dnnlegacy opencv_core opencv_imgproc opencv_dnn WRAP python java objc js) | ||
|
||
|
||
if(OPENCV_DNN_CUDA) | ||
if(HAVE_CUDA AND HAVE_CUBLAS AND HAVE_CUDNN) | ||
ocv_target_compile_definitions(${the_module} PRIVATE "CV_CUDA4DNN=1") | ||
else() | ||
if(NOT HAVE_CUDA) | ||
message(SEND_ERROR "DNN: CUDA backend requires CUDA Toolkit. Please resolve dependency or disable OPENCV_DNN_CUDA=OFF") | ||
elseif(NOT HAVE_CUBLAS) | ||
message(SEND_ERROR "DNN: CUDA backend requires cuBLAS. Please resolve dependency or disable OPENCV_DNN_CUDA=OFF") | ||
elseif(NOT HAVE_CUDNN) | ||
message(SEND_ERROR "DNN: CUDA backend requires cuDNN. Please resolve dependency or disable OPENCV_DNN_CUDA=OFF") | ||
endif() | ||
endif() | ||
endif() | ||
|
||
|
||
|
||
|
||
if(MSVC) | ||
add_definitions( -D_CRT_SECURE_NO_WARNINGS=1 ) | ||
ocv_target_compile_definitions(${the_module} PRIVATE cxx_std_17) | ||
ocv_warnings_disable(CMAKE_CXX_FLAGS /wd4244 /wd4267 /wd4018 /wd4355 /wd4800 /wd4251 /wd4996 /wd4146 | ||
/wd4305 /wd4127 /wd4100 /wd4512 /wd4125 /wd4389 /wd4510 /wd4610 | ||
/wd4702 /wd4456 /wd4457 /wd4065 /wd4310 /wd4661 /wd4506 | ||
) | ||
if(MSVC_VERSION LESS 1920) # MSVS 2015/2017, .pb.cc generated files | ||
ocv_warnings_disable(CMAKE_CXX_FLAGS /wd4309) # 'static_cast': truncation of constant value | ||
endif() | ||
if(MSVC_VERSION LESS 1920) # <MSVS2019, .pb.cc generated files | ||
ocv_warnings_disable(CMAKE_CXX_FLAGS /wd4189) # local variable is initialized but not referenced | ||
ocv_warnings_disable(CMAKE_CXX_FLAGS /wd4592) # symbol will be dynamically initialized (implementation limitation) | ||
endif() | ||
else() | ||
ocv_warnings_disable(CMAKE_CXX_FLAGS -Wno-deprecated -Wmissing-prototypes -Wmissing-declarations -Wshadow | ||
-Wunused-parameter -Wsign-compare | ||
) | ||
endif() | ||
if(HAVE_CUDA) | ||
ocv_warnings_disable(CMAKE_CXX_FLAGS -Wundef) | ||
endif() | ||
if(NOT HAVE_CXX11) | ||
ocv_warnings_disable(CMAKE_CXX_FLAGS -Wno-undef) # LANG_CXX11 from protobuf files | ||
endif() | ||
|
||
if(APPLE_FRAMEWORK) | ||
ocv_warnings_disable(CMAKE_CXX_FLAGS -Wshorten-64-to-32) | ||
endif() | ||
|
||
if(ANDROID) | ||
add_definitions(-DDISABLE_POSIX_MEMALIGN -DTH_DISABLE_HEAP_TRACKING) | ||
endif() | ||
if(NOT BUILD_PROTOBUF) | ||
ocv_target_compile_definitions(${the_module} PRIVATE "OPENCV_DNN_EXTERNAL_PROTOBUF=1") | ||
endif() | ||
|
||
#suppress warnings in autogenerated caffe.pb.* files | ||
ocv_warnings_disable(CMAKE_CXX_FLAGS | ||
/wd4125 /wd4267 /wd4127 /wd4244 /wd4512 /wd4702 | ||
/wd4456 /wd4510 /wd4610 /wd4800 | ||
/wd4701 /wd4703 # potentially uninitialized local/pointer variable 'value' used | ||
/wd4505 # unreferenced local function has been removed | ||
/wd4458 # declaration of 'x' hides class member. GCC still works, MSVC bug is here: https://developercommunity.visualstudio.com/content/problem/219311/c-c4458-declaration-hides-class-member-warning-iss.html | ||
-wd858 -wd2196 | ||
-Winvalid-offsetof # Apple Clang (attr_value.pb.cc) | ||
) | ||
|
||
set(include_dirs "") | ||
set(libs "") | ||
|
||
if(HAVE_PROTOBUF) | ||
ocv_target_compile_definitions(${the_module} PRIVATE "HAVE_PROTOBUF=1") | ||
|
||
if(PROTOBUF_UPDATE_FILES) | ||
file(GLOB proto_files "${CMAKE_CURRENT_LIST_DIR}/src/tensorflow/*.proto" "${CMAKE_CURRENT_LIST_DIR}/src/caffe/opencv-caffe.proto" "${CMAKE_CURRENT_LIST_DIR}/src/onnx/opencv-onnx.proto") | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. There is no TensorFlow There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. and onnx too |
||
set(PROTOBUF_GENERATE_CPP_APPEND_PATH ON) # required for tensorflow | ||
protobuf_generate_cpp(fw_srcs fw_hdrs ${proto_files}) | ||
else() | ||
file(GLOB fw_srcs "${CMAKE_CURRENT_LIST_DIR}/misc/caffe/opencv-caffe.pb.cc" "${CMAKE_CURRENT_LIST_DIR}/misc/onnx/opencv-onnx.pb.cc") | ||
file(GLOB fw_hdrs "${CMAKE_CURRENT_LIST_DIR}/misc/caffe/opencv-caffe.pb.h" "${CMAKE_CURRENT_LIST_DIR}/misc/onnx/opencv-onnx.pb.h") | ||
set(fw_inc "${CMAKE_CURRENT_LIST_DIR}/misc/caffe" "${CMAKE_CURRENT_LIST_DIR}/misc/onnx") | ||
endif() | ||
endif() | ||
|
||
|
||
list(APPEND include_dirs ${fw_inc}) | ||
list(APPEND libs ${Protobuf_LIBRARIES}) | ||
if(NOT BUILD_PROTOBUF) | ||
list(APPEND include_dirs ${Protobuf_INCLUDE_DIRS}) | ||
endif() | ||
|
||
set(sources_options "") | ||
|
||
list(APPEND libs ${LAPACK_LIBRARIES}) | ||
if(OPENCV_DNN_OPENCL AND HAVE_OPENCL) | ||
list(APPEND include_dirs ${OPENCL_INCLUDE_DIRS}) | ||
else() | ||
set(sources_options EXCLUDE_OPENCL) | ||
endif() | ||
|
||
if(OPENCV_DNN_CUDA AND HAVE_CUDA AND HAVE_CUBLAS AND HAVE_CUDNN) | ||
list(APPEND include_dirs ${CUDA_TOOLKIT_INCLUDE} ${CUDNN_INCLUDE_DIRS}) | ||
set(CC_LIST ${CUDA_ARCH_BIN}) | ||
separate_arguments(CC_LIST) | ||
foreach(cc ${CC_LIST}) | ||
if(cc VERSION_LESS 3.0) | ||
message(FATAL_ERROR "CUDA backend for DNN module requires CC 3.0 or higher. Please remove unsupported architectures from CUDA_ARCH_BIN option or disable OPENCV_DNN_CUDA=OFF.") | ||
endif() | ||
endforeach() | ||
unset(CC_LIST) | ||
if(ENABLE_CUDA_FIRST_CLASS_LANGUAGE) | ||
list(APPEND libs ${CUDNN_LIBRARIES} CUDA::cublas${CUDA_LIB_EXT}) | ||
if(NOT CUDA_VERSION VERSION_LESS 10.1) | ||
list(APPEND libs CUDA::cublasLt${CUDA_LIB_EXT}) | ||
endif() | ||
endif() | ||
else() | ||
set(sources_options ${sources_options} EXCLUDE_CUDA) | ||
endif() | ||
|
||
if(HAVE_TIMVX) | ||
list(APPEND include_dirs ${TIMVX_INCLUDE_DIR}) | ||
list(APPEND libs -Wl,--whole-archive ${TIMVX_LIBRARY} -Wl,--no-whole-archive) | ||
endif() | ||
|
||
if(HAVE_CANN) | ||
list(APPEND include_dirs ${CANN_INCLUDE_DIRS}) | ||
list(APPEND libs -Wl,--whole-archive ${CANN_LIBRARIES} -Wl,--no-whole-archive) | ||
endif() | ||
|
||
set(webnn_srcs "") | ||
if(NOT EMSCRIPTEN) | ||
if(HAVE_WEBNN) | ||
list(APPEND include_dirs ${WEBNN_HEADER_DIRS}) | ||
list(APPEND include_dirs ${WEBNN_INCLUDE_DIRS}) | ||
list(APPEND libs -Wl,--whole-archive ${WEBNN_LIBRARIES} -Wl,--no-whole-archive) | ||
list(APPEND webnn_srcs $ENV{WEBNN_NATIVE_DIR}/gen/src/webnn/webnn_cpp.cpp) | ||
endif() | ||
endif() | ||
|
||
ocv_module_include_directories(${include_dirs}) | ||
if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU") | ||
ocv_append_source_files_cxx_compiler_options(fw_srcs "-Wno-suggest-override") # GCC | ||
ocv_append_source_files_cxx_compiler_options(fw_srcs "-Wno-array-bounds") # GCC 9.3.0 (Ubuntu 20.04) | ||
elseif(CMAKE_CXX_COMPILER_ID STREQUAL "Clang") | ||
ocv_append_source_files_cxx_compiler_options(fw_srcs "-Wno-inconsistent-missing-override") # Clang | ||
endif() | ||
|
||
set(dnn_runtime_libs "") | ||
|
||
file(GLOB_RECURSE dnn_srcs | ||
"${CMAKE_CURRENT_LIST_DIR}/src/*.cpp" | ||
) | ||
file(GLOB_RECURSE dnn_int_hdrs | ||
"${CMAKE_CURRENT_LIST_DIR}/src/*.hpp" | ||
"${CMAKE_CURRENT_LIST_DIR}/src/*.h" | ||
) | ||
set(dnn_plugin_srcs ${dnn_srcs} ${dnn_int_hdrs}) | ||
ocv_list_filterout_ex(dnn_plugin_srcs | ||
# importers | ||
"/src/(caffe|darknet|onnx)/" | ||
) | ||
|
||
ocv_option(OPENCV_DNN_OPENVINO "Build with OpenVINO support (2021.4+)" (TARGET ocv.3rdparty.openvino)) | ||
if(TARGET ocv.3rdparty.openvino AND OPENCV_DNN_OPENVINO) | ||
if(NOT HAVE_OPENVINO AND NOT HAVE_NGRAPH) | ||
message(FATAL_ERROR "DNN: Inference Engine is not supported without enabled 'nGraph'. Check build configuration.") | ||
endif() | ||
if("openvino" IN_LIST DNN_PLUGIN_LIST OR DNN_PLUGIN_LIST STREQUAL "all") | ||
# plugin doesn't support PCH, separate directory scope is necessary | ||
# opencv_world requires absolute path | ||
add_subdirectory("${CMAKE_CURRENT_LIST_DIR}/misc/plugin/openvino" "${CMAKE_CURRENT_BINARY_DIR}/dnn_plugin_openvino") | ||
elseif(NOT OPENCV_DNN_BUILTIN_BACKEND) | ||
list(APPEND dnn_runtime_libs ocv.3rdparty.openvino) | ||
endif() | ||
endif() | ||
|
||
set(OPENCV_DNN_BACKEND_DEFAULT "" CACHE STRING "Default backend used by the DNN module (DNN_BACKEND_OPENCV if empty)") | ||
if(OPENCV_DNN_BACKEND_DEFAULT) | ||
ocv_append_source_file_compile_definitions("${CMAKE_CURRENT_LIST_DIR}/src/dnn_params.cpp" "OPENCV_DNN_BACKEND_DEFAULT=${OPENCV_DNN_BACKEND_DEFAULT}") | ||
endif() | ||
|
||
ocv_install_used_external_targets(${libs} ${dnn_runtime_libs}) | ||
|
||
ocv_glob_module_sources(${sources_options} SOURCES ${fw_srcs}) | ||
ocv_create_module(${libs} ${dnn_runtime_libs}) | ||
ocv_add_samples() | ||
ocv_add_accuracy_tests(${dnn_runtime_libs}) | ||
|
||
if(NOT BUILD_PROTOBUF) | ||
if(TARGET opencv_test_dnn) | ||
ocv_target_compile_definitions(opencv_test_dnn PRIVATE "OPENCV_DNN_EXTERNAL_PROTOBUF=1") | ||
endif() | ||
endif() | ||
|
||
set(perf_path "${CMAKE_CURRENT_LIST_DIR}/perf") | ||
file(GLOB_RECURSE perf_srcs "${perf_path}/*.cpp") | ||
file(GLOB_RECURSE perf_hdrs "${perf_path}/*.hpp" "${perf_path}/*.h") | ||
ocv_add_perf_tests(${dnn_runtime_libs} | ||
FILES test_common "${CMAKE_CURRENT_LIST_DIR}/test/test_common.hpp" "${CMAKE_CURRENT_LIST_DIR}/test/test_common.impl.hpp" | ||
FILES Src ${perf_srcs} | ||
FILES Include ${perf_hdrs} | ||
) | ||
|
||
ocv_option(OPENCV_DNN_PERF_CAFFE "Add performance tests of Caffe framework" OFF) | ||
ocv_option(OPENCV_DNN_PERF_CLCAFFE "Add performance tests of clCaffe framework" OFF) | ||
if(BUILD_PERF_TESTS) | ||
if (OPENCV_DNN_PERF_CAFFE | ||
OR ${the_module}_PERF_CAFFE # compatibility for deprecated option | ||
) | ||
find_package(Caffe QUIET) | ||
if (Caffe_FOUND) | ||
ocv_target_compile_definitions(opencv_perf_dnn PRIVATE "HAVE_CAFFE=1") | ||
ocv_target_link_libraries(opencv_perf_dnn caffe) | ||
endif() | ||
elseif(OPENCV_DNN_PERF_CLCAFFE | ||
OR ${the_module}_PERF_CAFFE # compatibility for deprecated option | ||
) | ||
find_package(Caffe QUIET) | ||
if (Caffe_FOUND) | ||
ocv_target_compile_definitions(opencv_perf_dnn PRIVATE "HAVE_CLCAFFE=1") | ||
ocv_target_link_libraries(opencv_perf_dnn caffe) | ||
endif() | ||
endif() | ||
endif() |
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Cannot disable dnn
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Ok