mirror of
https://github.com/opencv/opencv.git
synced 2026-07-29 07:13:02 +04:00
Merge pull request #16724 from liqi-c:3.4-tengine
* Add Tengine support . * Modify printf to CV_LOG_WARNING * a few minor fixes in the code * Renew Tengine version * Add header file for CV_LOG_WARNING * Add #ifdef HAVE_TENGINE in tengine_graph_convolution.cpp * remove trailing whitespace * Remove trailing whitespace * Modify for compile problem * Modify some code style error * remove whitespace * Move some code style problem * test * add ios limit and build problem * Modified as alalek suggested * Add cmake 2.8 support * modify cmake 3.5.1 problem * test and set BUILD_ANDROID_PROJECTS OFF * remove some compile error * remove some extra code in tengine * close test. * Test again * disable android. * delete ndk version judgement * Remove setenv() call . and add License information * Set tengine default OFF. Close test . Co-authored-by: Vadim Pisarevsky <vadim.pisarevsky@gmail.com>
This commit is contained in:
@@ -55,6 +55,9 @@
|
||||
#include "opencl_kernels_dnn.hpp"
|
||||
using namespace cv::dnn::ocl4dnn;
|
||||
#endif
|
||||
#ifdef HAVE_TENGINE
|
||||
#include "../tengine4dnn/include/tengine_graph_convolution.hpp"
|
||||
#endif
|
||||
|
||||
namespace cv
|
||||
{
|
||||
@@ -1272,10 +1275,43 @@ public:
|
||||
}
|
||||
}
|
||||
|
||||
int nstripes = std::max(getNumThreads(), 1);
|
||||
#ifdef HAVE_TENGINE
|
||||
int inch = inputs[0].size[1]; // inch
|
||||
int in_h = inputs[0].size[2]; // in_h
|
||||
int in_w = inputs[0].size[3]; // in_w
|
||||
|
||||
ParallelConv::run(inputs[0], outputs[0], weightsMat, biasvec, reluslope,
|
||||
kernel_size, strides, pads_begin, pads_end, dilations, activ.get(), ngroups, nstripes);
|
||||
int out_b = outputs[0].size[0]; // out batch size
|
||||
int outch = outputs[0].size[1]; // outch
|
||||
int out_h = outputs[0].size[2]; // out_h
|
||||
int out_w = outputs[0].size[3]; // out_w
|
||||
|
||||
float *input_ = inputs[0].ptr<float>();
|
||||
float *output_ = outputs[0].ptr<float>();
|
||||
float *kernel_ = weightsMat.ptr<float>();
|
||||
float *teg_bias = &biasvec[0];
|
||||
|
||||
bool tengine_ret = tengine_forward(input_, inch, ngroups, in_h, in_w,
|
||||
output_, out_b, outch, out_h, out_w,
|
||||
kernel_, kernel_size.size(), kernel.height, kernel.width,
|
||||
teg_bias, stride.height, stride.width,
|
||||
pad.height, pad.width, dilation.height, dilation.width,
|
||||
weightsMat.step1(), padMode);
|
||||
/* activation */
|
||||
if((true == tengine_ret) && activ )
|
||||
{
|
||||
int out_cstep = out_h * out_w; // out_cstep
|
||||
|
||||
ActivationLayer* activ_ = activ.get();
|
||||
activ_->forwardSlice(output_, output_, out_cstep, out_cstep, 0, outch);
|
||||
}
|
||||
if(false == tengine_ret)
|
||||
#endif
|
||||
{
|
||||
int nstripes = std::max(getNumThreads(), 1);
|
||||
|
||||
ParallelConv::run(inputs[0], outputs[0], weightsMat, biasvec, reluslope,
|
||||
kernel_size, strides, pads_begin, pads_end, dilations, activ.get(), ngroups, nstripes);
|
||||
}
|
||||
}
|
||||
|
||||
virtual int64 getFLOPS(const std::vector<MatShape> &inputs,
|
||||
|
||||
Reference in New Issue
Block a user