mirror of
https://github.com/opencv/opencv.git
synced 2026-07-31 00:03:03 +04:00
Merge pull request #11351 from dkurt:dnn_enable_inf_engine_tests
This commit is contained in:
@@ -1255,6 +1255,15 @@ struct Net::Impl
|
||||
if (weightableLayer->_biases)
|
||||
weightableLayer->_biases = convertFp16(weightableLayer->_biases);
|
||||
}
|
||||
else
|
||||
{
|
||||
for (const auto& weights : {"weights", "biases"})
|
||||
{
|
||||
auto it = ieNode->layer->blobs.find(weights);
|
||||
if (it != ieNode->layer->blobs.end())
|
||||
it->second = convertFp16(it->second);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
ieNode->connect(ld.inputBlobsWrappers, ld.outputBlobsWrappers);
|
||||
|
||||
@@ -295,6 +295,19 @@ public:
|
||||
return false;
|
||||
}
|
||||
|
||||
void finalize(const std::vector<Mat*> &inputs, std::vector<Mat> &outputs) CV_OVERRIDE
|
||||
{
|
||||
CV_Assert(inputs.size() > 1, inputs[0]->dims == 4, inputs[1]->dims == 4);
|
||||
int layerWidth = inputs[0]->size[3];
|
||||
int layerHeight = inputs[0]->size[2];
|
||||
|
||||
int imageWidth = inputs[1]->size[3];
|
||||
int imageHeight = inputs[1]->size[2];
|
||||
|
||||
_stepY = _stepY == 0 ? (static_cast<float>(imageHeight) / layerHeight) : _stepY;
|
||||
_stepX = _stepX == 0 ? (static_cast<float>(imageWidth) / layerWidth) : _stepX;
|
||||
}
|
||||
|
||||
#ifdef HAVE_OPENCL
|
||||
bool forward_ocl(InputArrayOfArrays inps, OutputArrayOfArrays outs, OutputArrayOfArrays internals)
|
||||
{
|
||||
@@ -310,16 +323,6 @@ public:
|
||||
int _imageWidth = inputs[1].size[3];
|
||||
int _imageHeight = inputs[1].size[2];
|
||||
|
||||
float stepX, stepY;
|
||||
if (_stepX == 0 || _stepY == 0)
|
||||
{
|
||||
stepX = static_cast<float>(_imageWidth) / _layerWidth;
|
||||
stepY = static_cast<float>(_imageHeight) / _layerHeight;
|
||||
} else {
|
||||
stepX = _stepX;
|
||||
stepY = _stepY;
|
||||
}
|
||||
|
||||
if (umat_offsetsX.empty())
|
||||
{
|
||||
Mat offsetsX(1, _offsetsX.size(), CV_32FC1, &_offsetsX[0]);
|
||||
@@ -339,8 +342,8 @@ public:
|
||||
|
||||
ocl::Kernel kernel("prior_box", ocl::dnn::prior_box_oclsrc);
|
||||
kernel.set(0, (int)nthreads);
|
||||
kernel.set(1, (float)stepX);
|
||||
kernel.set(2, (float)stepY);
|
||||
kernel.set(1, (float)_stepX);
|
||||
kernel.set(2, (float)_stepY);
|
||||
kernel.set(3, ocl::KernelArg::PtrReadOnly(umat_offsetsX));
|
||||
kernel.set(4, ocl::KernelArg::PtrReadOnly(umat_offsetsY));
|
||||
kernel.set(5, (int)_offsetsX.size());
|
||||
@@ -410,15 +413,6 @@ public:
|
||||
int _imageWidth = inputs[1]->size[3];
|
||||
int _imageHeight = inputs[1]->size[2];
|
||||
|
||||
float stepX, stepY;
|
||||
if (_stepX == 0 || _stepY == 0) {
|
||||
stepX = static_cast<float>(_imageWidth) / _layerWidth;
|
||||
stepY = static_cast<float>(_imageHeight) / _layerHeight;
|
||||
} else {
|
||||
stepX = _stepX;
|
||||
stepY = _stepY;
|
||||
}
|
||||
|
||||
float* outputPtr = outputs[0].ptr<float>();
|
||||
float _boxWidth, _boxHeight;
|
||||
for (size_t h = 0; h < _layerHeight; ++h)
|
||||
@@ -431,8 +425,8 @@ public:
|
||||
_boxHeight = _boxHeights[i];
|
||||
for (int j = 0; j < _offsetsX.size(); ++j)
|
||||
{
|
||||
float center_x = (w + _offsetsX[j]) * stepX;
|
||||
float center_y = (h + _offsetsY[j]) * stepY;
|
||||
float center_x = (w + _offsetsX[j]) * _stepX;
|
||||
float center_y = (h + _offsetsY[j]) * _stepY;
|
||||
outputPtr = addPrior(center_x, center_y, _boxWidth, _boxHeight, _imageWidth,
|
||||
_imageHeight, _bboxesNormalized, outputPtr);
|
||||
}
|
||||
@@ -495,7 +489,7 @@ public:
|
||||
ieLayer->params["aspect_ratio"] += format(",%f", _aspectRatios[i]);
|
||||
}
|
||||
|
||||
ieLayer->params["flip"] = _flip ? "1" : "0";
|
||||
ieLayer->params["flip"] = "0"; // We already flipped aspect ratios.
|
||||
ieLayer->params["clip"] = _clip ? "1" : "0";
|
||||
|
||||
CV_Assert(!_variance.empty());
|
||||
@@ -503,12 +497,20 @@ public:
|
||||
for (int i = 1; i < _variance.size(); ++i)
|
||||
ieLayer->params["variance"] += format(",%f", _variance[i]);
|
||||
|
||||
ieLayer->params["step"] = _stepX == _stepY ? format("%f", _stepX) : "0";
|
||||
ieLayer->params["step_h"] = _stepY;
|
||||
ieLayer->params["step_w"] = _stepX;
|
||||
|
||||
if (_stepX == _stepY)
|
||||
{
|
||||
ieLayer->params["step"] = format("%f", _stepX);
|
||||
ieLayer->params["step_h"] = "0.0";
|
||||
ieLayer->params["step_w"] = "0.0";
|
||||
}
|
||||
else
|
||||
{
|
||||
ieLayer->params["step"] = "0.0";
|
||||
ieLayer->params["step_h"] = format("%f", _stepY);
|
||||
ieLayer->params["step_w"] = format("%f", _stepX);
|
||||
}
|
||||
CV_Assert(_offsetsX.size() == 1, _offsetsY.size() == 1, _offsetsX[0] == _offsetsY[0]);
|
||||
ieLayer->params["offset"] = format("%f", _offsetsX[0]);;
|
||||
ieLayer->params["offset"] = format("%f", _offsetsX[0]);
|
||||
|
||||
return Ptr<BackendNode>(new InfEngineBackendNode(ieLayer));
|
||||
#endif // HAVE_INF_ENGINE
|
||||
|
||||
@@ -233,8 +233,16 @@ InferenceEngine::StatusCode
|
||||
InfEngineBackendNet::getLayerByName(const char *layerName, InferenceEngine::CNNLayerPtr &out,
|
||||
InferenceEngine::ResponseDesc *resp) noexcept
|
||||
{
|
||||
CV_Error(Error::StsNotImplemented, "");
|
||||
return InferenceEngine::StatusCode::OK;
|
||||
for (auto& l : layers)
|
||||
{
|
||||
if (l->name == layerName)
|
||||
{
|
||||
out = l;
|
||||
return InferenceEngine::StatusCode::OK;
|
||||
}
|
||||
}
|
||||
CV_Error(Error::StsObjectNotFound, cv::format("Cannot find a layer %s", layerName));
|
||||
return InferenceEngine::StatusCode::NOT_FOUND;
|
||||
}
|
||||
|
||||
void InfEngineBackendNet::setTargetDevice(InferenceEngine::TargetDevice device) noexcept
|
||||
|
||||
Reference in New Issue
Block a user