Merge pull request #14827 from YashasSamaga:cuda4dnn-csl-low
authorYashas Samaga B L <yashas_2010@yahoo.com>
Mon, 21 Oct 2019 11:28:00 +0000 (16:58 +0530)
committerAlexander Alekhin <alexander.a.alekhin@gmail.com>
Mon, 21 Oct 2019 11:28:00 +0000 (14:28 +0300)
commit613c12e59015f4bd7909916ceee195edd7ef88d0
tree22e28c0ea42a486fffa662ebfafe20d85664ce68
parent8ec654462483de095da6622fcff7c0c3803f1709
Merge pull request #14827 from YashasSamaga:cuda4dnn-csl-low

CUDA backend for the DNN module

* stub cuda4dnn design

* minor fixes for tests and doxygen

* add csl public api directory to module headers

* add low-level CSL components

* add high-level CSL components

* integrate csl::Tensor into backbone code

* switch to CPU iff unsupported; otherwise, fail on error

* add fully connected layer

* add softmax layer

* add activation layers

* support arbitary rank TensorDescriptor

* pass input wrappers to `initCUDA()`

* add 1d/2d/3d-convolution

* add pooling layer

* reorganize and refactor code

* fixes for gcc, clang and doxygen; remove cxx14/17 code

* add blank_layer

* add LRN layer

* add rounding modes for pooling layer

* split tensor.hpp into tensor.hpp and tensor_ops.hpp

* add concat layer

* add scale layer

* add batch normalization layer

* split math.cu into activations.cu and math.hpp

* add eltwise layer

* add flatten layer

* add tensor transform api

* add asymmetric padding support for convolution layer

* add reshape layer

* fix rebase issues

* add permute layer

* add padding support for concat layer

* refactor and reorganize code

* add normalize layer

* optimize bias addition in scale layer

* add prior box layer

* fix and optimize normalize layer

* add asymmetric padding support for pooling layer

* add event API

* improve pooling performance for some padding scenarios

* avoid over-allocation of compute resources to kernels

* improve prior box performance

* enable layer fusion

* add const layer

* add resize layer

* add slice layer

* add padding layer

* add deconvolution layer

* fix channelwise  ReLU initialization

* add vector traits

* add vectorized versions of relu, clipped_relu, power

* add vectorized concat kernels

* improve concat_with_offsets performance

* vectorize scale and bias kernels

* add support for multi-billion element tensors

* vectorize prior box kernels

* fix address alignment check

* improve bias addition performance of conv/deconv/fc layers

* restructure code for supporting multiple targets

* add DNN_TARGET_CUDA_FP64

* add DNN_TARGET_FP16

* improve vectorization

* add region layer

* improve tensor API, add dynamic ranks

1. use ManagedPtr instead of a Tensor in backend wrapper
2. add new methods to tensor classes
  - size_range: computes the combined size of for a given axis range
  - tensor span/view can be constructed from a raw pointer and shape
3. the tensor classes can change their rank at runtime (previously rank was fixed at compile-time)
4. remove device code from tensor classes (as they are unused)
5. enforce strict conditions on tensor class APIs to improve debugging ability

* fix parametric relu activation

* add squeeze/unsqueeze tensor API

* add reorg layer

* optimize permute and enable 2d permute

* enable 1d and 2d slice

* add split layer

* add shuffle channel layer

* allow tensors of different ranks in reshape primitive

* patch SliceOp to allow Crop Layer

* allow extra shape inputs in reshape layer

* use `std::move_backward` instead of `std::move` for insert in resizable_static_array

* improve workspace management

* add spatial LRN

* add nms (cpu) to region layer

* add max pooling with argmax ( and a fix to limits.hpp)

* add max unpooling layer

* rename DNN_TARGET_CUDA_FP32 to DNN_TARGET_CUDA

* update supportBackend to be more rigorous

* remove stray include from preventing non-cuda build

* include op_cuda.hpp outside condition #if

* refactoring, fixes and many optimizations

* drop DNN_TARGET_CUDA_FP64

* fix gcc errors

* increase max. tensor rank limit to six

* add Interp layer

* drop custom layers; use BackendNode

* vectorize activation kernels

* fixes for gcc

* remove wrong assertion

* fix broken assertion in unpooling primitive

* fix build errors in non-CUDA build

* completely remove workspace from public API

* fix permute layer

* enable accuracy and perf. tests for DNN_TARGET_CUDA

* add asynchronous forward

* vectorize eltwise ops

* vectorize fill kernel

* fixes for gcc

* remove CSL headers from public API

* remove csl header source group from cmake

* update min. cudnn version in cmake

* add numerically stable FP32 log1pexp

* refactor code

* add FP16 specialization to cudnn based tensor addition

* vectorize scale1 and bias1 + minor refactoring

* fix doxygen build

* fix invalid alignment assertion

* clear backend wrappers before allocateLayers

* ignore memory lock failures

* do not allocate internal blobs

* integrate NVTX

* add numerically stable half precision log1pexp

* fix indentation, following coding style,  improve docs

* remove accidental modification of IE code

* Revert "add asynchronous forward"

This reverts commit 1154b9da9da07e9b52f8a81bdcea48cf31c56f70.

* [cmake] throw error for unsupported CC versions

* fix rebase issues

* add more docs, refactor code, fix bugs

* minor refactoring and fixes

* resolve warnings/errors from clang

* remove haveCUDA() checks from supportBackend()

* remove NVTX integration

* changes based on review comments

* avoid exception when no CUDA device is present

* add color code for CUDA in Net::dump
122 files changed:
cmake/OpenCVMinDepVersions.cmake
modules/dnn/CMakeLists.txt
modules/dnn/include/opencv2/dnn/dnn.hpp
modules/dnn/perf/perf_convolution3d.cpp
modules/dnn/src/cuda/activations.cu [new file with mode: 0644]
modules/dnn/src/cuda/array.hpp [new file with mode: 0644]
modules/dnn/src/cuda/atomics.hpp [new file with mode: 0644]
modules/dnn/src/cuda/concat.cu [new file with mode: 0644]
modules/dnn/src/cuda/eltwise_ops.cu [new file with mode: 0644]
modules/dnn/src/cuda/execution.hpp [new file with mode: 0644]
modules/dnn/src/cuda/fill.cu [new file with mode: 0644]
modules/dnn/src/cuda/grid_stride_range.hpp [new file with mode: 0644]
modules/dnn/src/cuda/kernel_dispatcher.hpp [new file with mode: 0644]
modules/dnn/src/cuda/limits.hpp [new file with mode: 0644]
modules/dnn/src/cuda/math.hpp [new file with mode: 0644]
modules/dnn/src/cuda/max_unpooling.cu [new file with mode: 0644]
modules/dnn/src/cuda/normalize.cu [new file with mode: 0644]
modules/dnn/src/cuda/padding.cu [new file with mode: 0644]
modules/dnn/src/cuda/permute.cu [new file with mode: 0644]
modules/dnn/src/cuda/prior_box.cu [new file with mode: 0644]
modules/dnn/src/cuda/region.cu [new file with mode: 0644]
modules/dnn/src/cuda/resize.cu [new file with mode: 0644]
modules/dnn/src/cuda/scale_shift.cu [new file with mode: 0644]
modules/dnn/src/cuda/slice.cu [new file with mode: 0644]
modules/dnn/src/cuda/test.cu [deleted file]
modules/dnn/src/cuda/types.hpp [new file with mode: 0644]
modules/dnn/src/cuda/vector_traits.hpp [new file with mode: 0644]
modules/dnn/src/cuda4dnn/csl/cublas.hpp [new file with mode: 0644]
modules/dnn/src/cuda4dnn/csl/cudnn.hpp [new file with mode: 0644]
modules/dnn/src/cuda4dnn/csl/cudnn/convolution.hpp [new file with mode: 0644]
modules/dnn/src/cuda4dnn/csl/cudnn/cudnn.hpp [new file with mode: 0644]
modules/dnn/src/cuda4dnn/csl/cudnn/lrn.hpp [new file with mode: 0644]
modules/dnn/src/cuda4dnn/csl/cudnn/pooling.hpp [new file with mode: 0644]
modules/dnn/src/cuda4dnn/csl/cudnn/softmax.hpp [new file with mode: 0644]
modules/dnn/src/cuda4dnn/csl/cudnn/transform.hpp [new file with mode: 0644]
modules/dnn/src/cuda4dnn/csl/cudnn/transpose_convolution.hpp [new file with mode: 0644]
modules/dnn/src/cuda4dnn/csl/error.hpp [new file with mode: 0644]
modules/dnn/src/cuda4dnn/csl/event.hpp [new file with mode: 0644]
modules/dnn/src/cuda4dnn/csl/fp16.hpp [new file with mode: 0644]
modules/dnn/src/cuda4dnn/csl/memory.hpp [new file with mode: 0644]
modules/dnn/src/cuda4dnn/csl/nvcc_defs.hpp [new file with mode: 0644]
modules/dnn/src/cuda4dnn/csl/pointer.hpp [new file with mode: 0644]
modules/dnn/src/cuda4dnn/csl/span.hpp [new file with mode: 0644]
modules/dnn/src/cuda4dnn/csl/stream.hpp [new file with mode: 0644]
modules/dnn/src/cuda4dnn/csl/tensor.hpp [new file with mode: 0644]
modules/dnn/src/cuda4dnn/csl/tensor_ops.hpp [new file with mode: 0644]
modules/dnn/src/cuda4dnn/csl/workspace.hpp [new file with mode: 0644]
modules/dnn/src/cuda4dnn/cxx_utils/is_iterator.hpp [new file with mode: 0644]
modules/dnn/src/cuda4dnn/cxx_utils/resizable_static_array.hpp [new file with mode: 0644]
modules/dnn/src/cuda4dnn/kernels/activations.hpp [new file with mode: 0644]
modules/dnn/src/cuda4dnn/kernels/concat.hpp [new file with mode: 0644]
modules/dnn/src/cuda4dnn/kernels/eltwise_ops.hpp [new file with mode: 0644]
modules/dnn/src/cuda4dnn/kernels/fill.hpp [new file with mode: 0644]
modules/dnn/src/cuda4dnn/kernels/max_unpooling.hpp [new file with mode: 0644]
modules/dnn/src/cuda4dnn/kernels/normalize.hpp [new file with mode: 0644]
modules/dnn/src/cuda4dnn/kernels/padding.hpp [new file with mode: 0644]
modules/dnn/src/cuda4dnn/kernels/permute.hpp [new file with mode: 0644]
modules/dnn/src/cuda4dnn/kernels/prior_box.hpp [new file with mode: 0644]
modules/dnn/src/cuda4dnn/kernels/region.hpp [new file with mode: 0644]
modules/dnn/src/cuda4dnn/kernels/resize.hpp [new file with mode: 0644]
modules/dnn/src/cuda4dnn/kernels/scale_shift.hpp [new file with mode: 0644]
modules/dnn/src/cuda4dnn/kernels/slice.hpp [new file with mode: 0644]
modules/dnn/src/cuda4dnn/primitives/activation.hpp [new file with mode: 0644]
modules/dnn/src/cuda4dnn/primitives/batch_norm.hpp [new file with mode: 0644]
modules/dnn/src/cuda4dnn/primitives/concat.hpp [new file with mode: 0644]
modules/dnn/src/cuda4dnn/primitives/const.hpp [new file with mode: 0644]
modules/dnn/src/cuda4dnn/primitives/convolution.hpp [new file with mode: 0644]
modules/dnn/src/cuda4dnn/primitives/eltwise.hpp [new file with mode: 0644]
modules/dnn/src/cuda4dnn/primitives/inner_product.hpp [new file with mode: 0644]
modules/dnn/src/cuda4dnn/primitives/lrn.hpp [new file with mode: 0644]
modules/dnn/src/cuda4dnn/primitives/max_unpooling.hpp [new file with mode: 0644]
modules/dnn/src/cuda4dnn/primitives/normalize_bbox.hpp [new file with mode: 0644]
modules/dnn/src/cuda4dnn/primitives/padding.hpp [new file with mode: 0644]
modules/dnn/src/cuda4dnn/primitives/permute.hpp [new file with mode: 0644]
modules/dnn/src/cuda4dnn/primitives/pooling.hpp [new file with mode: 0644]
modules/dnn/src/cuda4dnn/primitives/prior_box.hpp [new file with mode: 0644]
modules/dnn/src/cuda4dnn/primitives/region.hpp [new file with mode: 0644]
modules/dnn/src/cuda4dnn/primitives/reorg.hpp [new file with mode: 0644]
modules/dnn/src/cuda4dnn/primitives/reshape.hpp [new file with mode: 0644]
modules/dnn/src/cuda4dnn/primitives/resize.hpp [new file with mode: 0644]
modules/dnn/src/cuda4dnn/primitives/scale_shift.hpp [new file with mode: 0644]
modules/dnn/src/cuda4dnn/primitives/shuffle_channel.hpp [new file with mode: 0644]
modules/dnn/src/cuda4dnn/primitives/slice.hpp [new file with mode: 0644]
modules/dnn/src/cuda4dnn/primitives/softmax.hpp [new file with mode: 0644]
modules/dnn/src/cuda4dnn/primitives/split.hpp [new file with mode: 0644]
modules/dnn/src/cuda4dnn/primitives/transpose_convolution.hpp [new file with mode: 0644]
modules/dnn/src/cuda4dnn/test.cpp [deleted file]
modules/dnn/src/dnn.cpp
modules/dnn/src/layers/batch_norm_layer.cpp
modules/dnn/src/layers/blank_layer.cpp
modules/dnn/src/layers/concat_layer.cpp
modules/dnn/src/layers/const_layer.cpp
modules/dnn/src/layers/convolution_layer.cpp
modules/dnn/src/layers/elementwise_layers.cpp
modules/dnn/src/layers/eltwise_layer.cpp
modules/dnn/src/layers/flatten_layer.cpp
modules/dnn/src/layers/fully_connected_layer.cpp
modules/dnn/src/layers/lrn_layer.cpp
modules/dnn/src/layers/max_unpooling_layer.cpp
modules/dnn/src/layers/normalize_bbox_layer.cpp
modules/dnn/src/layers/padding_layer.cpp
modules/dnn/src/layers/permute_layer.cpp
modules/dnn/src/layers/pooling_layer.cpp
modules/dnn/src/layers/prior_box_layer.cpp
modules/dnn/src/layers/region_layer.cpp
modules/dnn/src/layers/reorg_layer.cpp
modules/dnn/src/layers/reshape_layer.cpp
modules/dnn/src/layers/resize_layer.cpp
modules/dnn/src/layers/scale_layer.cpp
modules/dnn/src/layers/shuffle_channel_layer.cpp
modules/dnn/src/layers/slice_layer.cpp
modules/dnn/src/layers/softmax_layer.cpp
modules/dnn/src/layers/split_layer.cpp
modules/dnn/src/op_cuda.hpp [new file with mode: 0644]
modules/dnn/test/test_backends.cpp
modules/dnn/test/test_common.hpp
modules/dnn/test/test_common.impl.hpp
modules/dnn/test/test_layers.cpp
modules/dnn/test/test_misc.cpp
modules/dnn/test/test_onnx_importer.cpp
modules/dnn/test/test_tf_importer.cpp
modules/dnn/test/test_torch_importer.cpp