[GPU] Impelement ExperimentalDetectronPriorGridGenerator-6 gpu implementation (#11632)
* Implement experimental_detectron_prior_grid_generator kernel * register experimental_detectron_prior_grid_generator operation * implement single layer tests * add unit tests to detectron
This commit is contained in:
1 parent
320531def0
commit
eb36b891eb
17 files changed
+798
-5
No files matched your search
@@ -206,6 +206,7 @@ REGISTER_FACTORY(v5, Loop);
|
||||
REGISTER_FACTORY(v6, CTCGreedyDecoderSeqLen);
|
||||
REGISTER_FACTORY(v6, MVN);
|
||||
REGISTER_FACTORY(v6, GatherElements);
|
||||
REGISTER_FACTORY(v6, ExperimentalDetectronPriorGridGenerator);
|
||||
REGISTER_FACTORY(v6, ExperimentalDetectronROIFeatureExtractor);
|
||||
REGISTER_FACTORY(v6, ExperimentalDetectronTopKROIs)
|
||||
REGISTER_FACTORY(v6, ExperimentalDetectronGenerateProposalsSingleImage);
|
||||
|
||||
+57
@@ -0,0 +1,57 @@
|
||||
// Copyright (C) 2022 Intel Corporation
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
//
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "primitive.hpp"
|
||||
|
||||
namespace cldnn {
|
||||
|
||||
/// @addtogroup cpp_api C++ API
|
||||
/// @{
|
||||
/// @addtogroup cpp_topology Network Topology
|
||||
/// @{
|
||||
/// @addtogroup cpp_primitives Primitives
|
||||
/// @{
|
||||
|
||||
/// @brief Constructs experimental_detectron_prior_grid_generator primitive.
|
||||
struct experimental_detectron_prior_grid_generator
|
||||
: public primitive_base<experimental_detectron_prior_grid_generator> {
|
||||
CLDNN_DECLARE_PRIMITIVE(experimental_detectron_prior_grid_generator)
|
||||
|
||||
experimental_detectron_prior_grid_generator(const primitive_id& id,
|
||||
const std::vector<primitive_id>& input,
|
||||
bool flatten,
|
||||
uint64_t h,
|
||||
uint64_t w,
|
||||
float stride_x,
|
||||
float stride_y,
|
||||
uint64_t featmap_height,
|
||||
uint64_t featmap_width,
|
||||
uint64_t image_height,
|
||||
uint64_t image_width,
|
||||
const primitive_id& ext_prim_id = {})
|
||||
: primitive_base{id, input, ext_prim_id},
|
||||
flatten{flatten},
|
||||
h{h},
|
||||
w{w},
|
||||
stride_x{stride_x},
|
||||
stride_y{stride_y},
|
||||
featmap_height{featmap_height},
|
||||
featmap_width{featmap_width},
|
||||
image_height{image_height},
|
||||
image_width{image_width} {}
|
||||
|
||||
bool flatten;
|
||||
uint64_t h;
|
||||
uint64_t w;
|
||||
float stride_x;
|
||||
float stride_y;
|
||||
uint64_t featmap_height;
|
||||
uint64_t featmap_width;
|
||||
uint64_t image_height;
|
||||
uint64_t image_width;
|
||||
};
|
||||
|
||||
} // namespace cldnn
|
||||
@@ -0,0 +1,51 @@
|
||||
// Copyright (C) 2022 Intel Corporation
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
//
|
||||
|
||||
#include <experimental_detectron_prior_grid_generator_inst.h>
|
||||
#include <primitive_type_base.h>
|
||||
|
||||
#include "json_object.h"
|
||||
|
||||
namespace cldnn {
|
||||
|
||||
primitive_type_id experimental_detectron_prior_grid_generator::type_id() {
|
||||
static primitive_type_base<experimental_detectron_prior_grid_generator> instance;
|
||||
return &instance;
|
||||
}
|
||||
|
||||
layout experimental_detectron_prior_grid_generator_inst::calc_output_layout(
|
||||
const experimental_detectron_prior_grid_generator_node& node) {
|
||||
const layout data_layout = node.input().get_output_layout();
|
||||
auto desc = node.get_primitive();
|
||||
if (desc->flatten) {
|
||||
return layout(data_layout.data_type,
|
||||
format::bfyx,
|
||||
{static_cast<int>(desc->featmap_width * desc->featmap_height * data_layout.batch()), 4, 1, 1});
|
||||
} else {
|
||||
return layout(data_layout.data_type,
|
||||
format::bfyx,
|
||||
{static_cast<int>(desc->featmap_height),
|
||||
static_cast<int>(desc->featmap_width),
|
||||
4,
|
||||
static_cast<int>(data_layout.batch())});
|
||||
}
|
||||
}
|
||||
|
||||
std::string experimental_detectron_prior_grid_generator_inst::to_string(
|
||||
experimental_detectron_prior_grid_generator_node const& node) {
|
||||
auto node_info = node.desc_to_json();
|
||||
json_composite experimental_detectron_prior_grid_generator_info;
|
||||
experimental_detectron_prior_grid_generator_info.add("flatten", node.get_primitive()->flatten);
|
||||
experimental_detectron_prior_grid_generator_info.add("h", node.get_primitive()->h);
|
||||
experimental_detectron_prior_grid_generator_info.add("w", node.get_primitive()->w);
|
||||
experimental_detectron_prior_grid_generator_info.add("stride_x", node.get_primitive()->stride_x);
|
||||
experimental_detectron_prior_grid_generator_info.add("stride_y", node.get_primitive()->stride_y);
|
||||
node_info->add("experimental_detectron_prior_grid_generator_info",
|
||||
experimental_detectron_prior_grid_generator_info);
|
||||
std::stringstream primitive_description;
|
||||
node_info->dump(primitive_description);
|
||||
return primitive_description.str();
|
||||
}
|
||||
|
||||
} // namespace cldnn
|
||||
+70
@@ -0,0 +1,70 @@
|
||||
// Copyright (C) 2022 Intel Corporation
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
//
|
||||
|
||||
#include "intel_gpu/primitives/experimental_detectron_prior_grid_generator.hpp"
|
||||
|
||||
#include <edpgg/experimental_detectron_prior_grid_generator_kernel_ref.h>
|
||||
#include <edpgg/experimental_detectron_prior_grid_generator_kernel_selector.h>
|
||||
#include <experimental_detectron_prior_grid_generator_inst.h>
|
||||
#include <kernel_selector_helper.h>
|
||||
|
||||
#include <impls/implementation_map.hpp>
|
||||
#include <intel_gpu/runtime/error_handler.hpp>
|
||||
|
||||
#include "primitive_base.hpp"
|
||||
|
||||
namespace cldnn {
|
||||
namespace ocl {
|
||||
|
||||
struct experimental_detectron_prior_grid_generator_impl
|
||||
: typed_primitive_impl_ocl<experimental_detectron_prior_grid_generator> {
|
||||
using parent = typed_primitive_impl_ocl<experimental_detectron_prior_grid_generator>;
|
||||
using parent::parent;
|
||||
|
||||
std::unique_ptr<primitive_impl> clone() const override {
|
||||
return make_unique<experimental_detectron_prior_grid_generator_impl>(*this);
|
||||
}
|
||||
|
||||
static primitive_impl* create(const experimental_detectron_prior_grid_generator_node& arg) {
|
||||
auto params = get_default_params<kernel_selector::experimental_detectron_prior_grid_generator_params>(arg);
|
||||
auto primPtr = arg.get_primitive();
|
||||
auto& prim = *primPtr;
|
||||
|
||||
params.flatten = prim.flatten;
|
||||
params.layer_height = prim.h ? prim.h : prim.featmap_height;
|
||||
params.layer_width = prim.w ? prim.w : prim.featmap_width;
|
||||
params.step_x = prim.stride_x ? prim.stride_x : static_cast<float>(prim.image_width) / params.layer_width;
|
||||
params.step_y = prim.stride_y ? prim.stride_y : static_cast<float>(prim.image_height) / params.layer_height;
|
||||
|
||||
auto optional_params =
|
||||
get_default_optional_params<kernel_selector::experimental_detectron_prior_grid_generator_optional_params>(
|
||||
arg.get_program());
|
||||
|
||||
auto& kernel_selector = kernel_selector::experimental_detectron_prior_grid_generator_instance();
|
||||
auto best_kernels = kernel_selector.GetBestKernels(params, optional_params);
|
||||
|
||||
CLDNN_ERROR_BOOL(arg.id(),
|
||||
"Best_kernel.empty()",
|
||||
best_kernels.empty(),
|
||||
"Cannot find a proper kernel with this arguments");
|
||||
|
||||
return new experimental_detectron_prior_grid_generator_impl{arg, best_kernels.front()};
|
||||
}
|
||||
};
|
||||
|
||||
namespace detail {
|
||||
|
||||
attach_experimental_detectron_prior_grid_generator_impl::attach_experimental_detectron_prior_grid_generator_impl() {
|
||||
implementation_map<experimental_detectron_prior_grid_generator>::add(
|
||||
impl_types::ocl,
|
||||
experimental_detectron_prior_grid_generator_impl::create,
|
||||
{
|
||||
std::make_tuple(data_types::f16, format::bfyx),
|
||||
std::make_tuple(data_types::f32, format::bfyx),
|
||||
});
|
||||
}
|
||||
|
||||
} // namespace detail
|
||||
} // namespace ocl
|
||||
} // namespace cldnn
|
||||
@@ -31,6 +31,7 @@ void register_implementations() {
|
||||
REGISTER_OCL(dft);
|
||||
REGISTER_OCL(batch_to_space);
|
||||
REGISTER_OCL(experimental_detectron_generate_proposals_single_image);
|
||||
REGISTER_OCL(experimental_detectron_prior_grid_generator);
|
||||
REGISTER_OCL(experimental_detectron_roi_feature_extractor);
|
||||
REGISTER_OCL(experimental_detectron_topk_rois);
|
||||
REGISTER_OCL(eltwise);
|
||||
|
||||
@@ -20,6 +20,7 @@
|
||||
#include "intel_gpu/primitives/depth_to_space.hpp"
|
||||
#include "intel_gpu/primitives/detection_output.hpp"
|
||||
#include "intel_gpu/primitives/eltwise.hpp"
|
||||
#include "intel_gpu/primitives/experimental_detectron_prior_grid_generator.hpp"
|
||||
#include "intel_gpu/primitives/experimental_detectron_roi_feature_extractor.hpp"
|
||||
#include "intel_gpu/primitives/experimental_detectron_topk_rois.hpp"
|
||||
#include "intel_gpu/primitives/fully_connected.hpp"
|
||||
@@ -103,6 +104,7 @@ REGISTER_OCL(depth_to_space);
|
||||
REGISTER_OCL(detection_output);
|
||||
REGISTER_OCL(dft);
|
||||
REGISTER_OCL(experimental_detectron_generate_proposals_single_image);
|
||||
REGISTER_OCL(experimental_detectron_prior_grid_generator);
|
||||
REGISTER_OCL(experimental_detectron_roi_feature_extractor);
|
||||
REGISTER_OCL(experimental_detectron_topk_rois);
|
||||
REGISTER_OCL(eltwise);
|
||||
|
||||
+38
@@ -0,0 +1,38 @@
|
||||
// Copyright (C) 2022 Intel Corporation
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
//
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <intel_gpu/primitives/experimental_detectron_prior_grid_generator.hpp>
|
||||
|
||||
#include "primitive_inst.h"
|
||||
|
||||
namespace cldnn {
|
||||
template <>
|
||||
struct typed_program_node<experimental_detectron_prior_grid_generator>
|
||||
: public typed_program_node_base<experimental_detectron_prior_grid_generator> {
|
||||
using typed_program_node_base::typed_program_node_base;
|
||||
|
||||
program_node& input(std::size_t i = 0) const {
|
||||
return get_dependency(i);
|
||||
}
|
||||
};
|
||||
using experimental_detectron_prior_grid_generator_node =
|
||||
typed_program_node<experimental_detectron_prior_grid_generator>;
|
||||
|
||||
template <>
|
||||
class typed_primitive_inst<experimental_detectron_prior_grid_generator>
|
||||
: public typed_primitive_inst_base<experimental_detectron_prior_grid_generator> {
|
||||
public:
|
||||
using typed_primitive_inst_base::typed_primitive_inst_base;
|
||||
|
||||
static layout calc_output_layout(experimental_detectron_prior_grid_generator_node const& node);
|
||||
|
||||
static std::string to_string(experimental_detectron_prior_grid_generator_node const& node);
|
||||
};
|
||||
|
||||
using experimental_detectron_prior_grid_generator_inst =
|
||||
typed_primitive_inst<experimental_detectron_prior_grid_generator>;
|
||||
|
||||
} // namespace cldnn
|
||||
@@ -78,6 +78,7 @@ enum class KernelType {
|
||||
NON_MAX_SUPPRESSION,
|
||||
DETECTION_OUTPUT,
|
||||
EXPERIMENTAL_DETECTRON_GENERATE_PROPOSALS_SINGLE_IMAGE,
|
||||
EXPERIMENTAL_DETECTRON_PRIOR_GRID_GENERATOR,
|
||||
EXPERIMENTAL_DETECTRON_ROI_FEATURE_EXTRACTOR,
|
||||
EXPERIMENTAL_DETECTRON_TOPK_ROIS,
|
||||
CONVERT_COLOR,
|
||||
|
||||
+77
@@ -0,0 +1,77 @@
|
||||
// Copyright (C) 2022 Intel Corporation
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
//
|
||||
|
||||
#include "experimental_detectron_prior_grid_generator_kernel_ref.h"
|
||||
|
||||
#include <kernel_selector_utils.h>
|
||||
|
||||
namespace kernel_selector {
|
||||
|
||||
namespace {
|
||||
|
||||
CommonDispatchData SetDefault(const experimental_detectron_prior_grid_generator_params ¶ms) {
|
||||
CommonDispatchData dispatchData;
|
||||
|
||||
dispatchData.gws = { params.layer_height, params.layer_width, params.inputs[0].Batch().v };
|
||||
dispatchData.lws = GetOptimalLocalWorkGroupSizes(dispatchData.gws, params.engineInfo);
|
||||
|
||||
return dispatchData;
|
||||
}
|
||||
|
||||
} // namespace
|
||||
|
||||
KernelsData ExperimentalDetectronPriorGridGeneratorKernelRef::GetKernelsData(const Params ¶ms, const optional_params &options) const {
|
||||
KernelsData kernels_data;
|
||||
if (!Validate(params, options))
|
||||
return kernels_data;
|
||||
kernels_data.push_back(KernelData::Default<experimental_detectron_prior_grid_generator_params>(params));
|
||||
KernelData &kernel_data = kernels_data.front();
|
||||
auto &derived_params = dynamic_cast<experimental_detectron_prior_grid_generator_params&>(*kernel_data.params.get());
|
||||
auto dispatch_data = SetDefault(derived_params);
|
||||
auto entry_point = GetEntryPoint(kernelName, derived_params.layerID, params, options);
|
||||
auto jit_constants = GetJitConstants(derived_params);
|
||||
auto jit = CreateJit(kernelName, jit_constants, entry_point);
|
||||
auto &clKernelData = kernel_data.kernels[0];
|
||||
FillCLKernelData(clKernelData, dispatch_data, params.engineInfo, kernelName, jit, entry_point);
|
||||
return kernels_data;
|
||||
}
|
||||
|
||||
KernelsPriority ExperimentalDetectronPriorGridGeneratorKernelRef::GetKernelsPriority(const Params& /*params*/, const optional_params& /*options*/) const {
|
||||
return DONT_USE_IF_HAVE_SOMETHING_ELSE;
|
||||
}
|
||||
|
||||
ParamsKey ExperimentalDetectronPriorGridGeneratorKernelRef::GetSupportedKey() const {
|
||||
ParamsKey k;
|
||||
k.EnableInputDataType(Datatype::F16);
|
||||
k.EnableInputDataType(Datatype::F32);
|
||||
k.EnableOutputDataType(Datatype::F16);
|
||||
k.EnableOutputDataType(Datatype::F32);
|
||||
k.EnableInputLayout(DataLayout::bfyx);
|
||||
k.EnableOutputLayout(DataLayout::bfyx);
|
||||
k.EnableBatching();
|
||||
return k;
|
||||
}
|
||||
|
||||
bool ExperimentalDetectronPriorGridGeneratorKernelRef::Validate(const Params &p, const optional_params &o) const {
|
||||
if (p.GetType() != KernelType::EXPERIMENTAL_DETECTRON_PRIOR_GRID_GENERATOR || o.GetType() != KernelType::EXPERIMENTAL_DETECTRON_PRIOR_GRID_GENERATOR)
|
||||
return false;
|
||||
|
||||
auto ¶ms = dynamic_cast<const experimental_detectron_prior_grid_generator_params&>(p);
|
||||
if (params.inputs.size() != 1)
|
||||
return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
JitConstants ExperimentalDetectronPriorGridGeneratorKernelRef::GetJitConstants(const experimental_detectron_prior_grid_generator_params& params) const {
|
||||
auto jit_constants = MakeBaseParamsJitConstants(params);
|
||||
jit_constants.AddConstant(MakeJitConstant("LAYER_WIDTH", params.layer_width));
|
||||
jit_constants.AddConstant(MakeJitConstant("STEP_X", params.step_x));
|
||||
jit_constants.AddConstant(MakeJitConstant("STEP_Y", params.step_y));
|
||||
if (params.flatten) {
|
||||
jit_constants.AddConstant(MakeJitConstant("FLATTEN", 1));
|
||||
}
|
||||
return jit_constants;
|
||||
}
|
||||
} // namespace kernel_selector
|
||||
+53
@@ -0,0 +1,53 @@
|
||||
// Copyright (C) 2022 Intel Corporation
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
//
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "kernel_base_opencl.h"
|
||||
|
||||
namespace kernel_selector {
|
||||
|
||||
/**
|
||||
* ExperimentalDetectronPriorGridGenerator reference kernel parameters
|
||||
*/
|
||||
struct experimental_detectron_prior_grid_generator_params : public base_params {
|
||||
experimental_detectron_prior_grid_generator_params()
|
||||
: base_params{KernelType::EXPERIMENTAL_DETECTRON_PRIOR_GRID_GENERATOR} {}
|
||||
|
||||
bool flatten = false;
|
||||
size_t layer_height = 0;
|
||||
size_t layer_width = 0;
|
||||
float step_x = 0;
|
||||
float step_y = 0;
|
||||
};
|
||||
|
||||
/**
|
||||
* ExperimentalDetectronPriorGridGenerator reference kernel optional parameters
|
||||
*/
|
||||
struct experimental_detectron_prior_grid_generator_optional_params : optional_params {
|
||||
experimental_detectron_prior_grid_generator_optional_params()
|
||||
: optional_params{KernelType::EXPERIMENTAL_DETECTRON_PRIOR_GRID_GENERATOR} {}
|
||||
};
|
||||
|
||||
/**
|
||||
* Reference kernel for ExperimentalDetectronPriorGridGenerator
|
||||
*/
|
||||
class ExperimentalDetectronPriorGridGeneratorKernelRef : public KernelBaseOpenCL {
|
||||
public:
|
||||
ExperimentalDetectronPriorGridGeneratorKernelRef()
|
||||
: KernelBaseOpenCL{"experimental_detectron_prior_grid_generator_ref"} {}
|
||||
|
||||
private:
|
||||
KernelsData GetKernelsData(const Params ¶ms, const optional_params &options) const override;
|
||||
|
||||
KernelsPriority GetKernelsPriority(const Params ¶ms, const optional_params &options) const override;
|
||||
|
||||
ParamsKey GetSupportedKey() const override;
|
||||
|
||||
bool Validate(const Params &p, const optional_params &o) const override;
|
||||
|
||||
JitConstants GetJitConstants(const experimental_detectron_prior_grid_generator_params ¶ms) const;
|
||||
};
|
||||
|
||||
} // namespace kernel_selector
|
||||
+28
@@ -0,0 +1,28 @@
|
||||
// Copyright (C) 2022 Intel Corporation
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
//
|
||||
|
||||
#include "experimental_detectron_prior_grid_generator_kernel_selector.h"
|
||||
#include "experimental_detectron_prior_grid_generator_kernel_ref.h"
|
||||
|
||||
namespace kernel_selector {
|
||||
namespace {
|
||||
|
||||
class experimental_detectron_prior_grid_generator_kernel_selector : public kernel_selector_base {
|
||||
KernelsData GetBestKernels(const Params ¶ms, const optional_params &options) const override {
|
||||
return GetNaiveBestKernel(params, options, KernelType::EXPERIMENTAL_DETECTRON_PRIOR_GRID_GENERATOR);
|
||||
}
|
||||
public:
|
||||
experimental_detectron_prior_grid_generator_kernel_selector() {
|
||||
Attach<ExperimentalDetectronPriorGridGeneratorKernelRef>();
|
||||
}
|
||||
};
|
||||
|
||||
} // namespace
|
||||
|
||||
kernel_selector_base& experimental_detectron_prior_grid_generator_instance() {
|
||||
static experimental_detectron_prior_grid_generator_kernel_selector instance;
|
||||
return instance;
|
||||
}
|
||||
|
||||
} // namespace kernel_selector
|
||||
+16
@@ -0,0 +1,16 @@
|
||||
// Copyright (C) 2022 Intel Corporation
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
//
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <kernel_selector.h>
|
||||
|
||||
namespace kernel_selector {
|
||||
|
||||
/*
|
||||
* ExperimentalDetectronPriorGridGenerator kernel selector
|
||||
*/
|
||||
kernel_selector_base& experimental_detectron_prior_grid_generator_instance();
|
||||
|
||||
} // namespace kernel_selector
|
||||
+30
@@ -0,0 +1,30 @@
|
||||
// Copyright (C) 2022 Intel Corporation
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
//
|
||||
|
||||
#if OUTPUT_TYPE_SIZE == 2 //f16
|
||||
#define HALF_ONE 0.5h
|
||||
#else
|
||||
#define HALF_ONE 0.5f
|
||||
#endif
|
||||
|
||||
KERNEL (experimental_detectron_prior_grid_generator_ref)(const __global INPUT0_TYPE *input, __global OUTPUT_TYPE *output)
|
||||
{
|
||||
const size_t y = get_global_id(0);
|
||||
const size_t x = get_global_id(1);
|
||||
const size_t prior = get_global_id(2);
|
||||
const ptrdiff_t inputOffset = INPUT0_GET_INDEX(prior, 0, 0, 0);
|
||||
const OUTPUT_TYPE stepX = STEP_X * ( x + HALF_ONE );
|
||||
const OUTPUT_TYPE stepY = STEP_Y * ( y + HALF_ONE );
|
||||
#ifdef FLATTEN
|
||||
const ptrdiff_t outputOffset = OUTPUT_GET_INDEX(LAYER_WIDTH * INPUT0_BATCH_NUM * y + INPUT0_BATCH_NUM * x + prior, 0, 0, 0);
|
||||
#else
|
||||
const ptrdiff_t outputOffset = OUTPUT_OFFSET + OUTPUT_PITCHES[1] * ( LAYER_WIDTH * INPUT0_BATCH_NUM * y + INPUT0_BATCH_NUM * x + prior);
|
||||
#endif
|
||||
output[outputOffset] = input[inputOffset] + stepX;
|
||||
output[outputOffset + 1] = input[inputOffset + 1] + stepY;
|
||||
output[outputOffset + 2] = input[inputOffset + 2] + stepX;
|
||||
output[outputOffset + 3] = input[inputOffset + 3] + stepY;
|
||||
}
|
||||
|
||||
#undef HALF_ONE
|
||||
@@ -0,0 +1,54 @@
|
||||
// Copyright (C) 2022 Intel Corporation
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
//
|
||||
|
||||
#include <intel_gpu/plugin/common_utils.hpp>
|
||||
#include <intel_gpu/plugin/program.hpp>
|
||||
#include <intel_gpu/primitives/experimental_detectron_prior_grid_generator.hpp>
|
||||
#include <ngraph/op/experimental_detectron_prior_grid_generator.hpp>
|
||||
|
||||
namespace ov {
|
||||
namespace runtime {
|
||||
namespace intel_gpu {
|
||||
namespace {
|
||||
cldnn::tensor mkTensor(const ov::Shape& shape) {
|
||||
if (shape.size() == 4)
|
||||
return cldnn::tensor{cldnn::batch(shape[0]), cldnn::feature(shape[1]), cldnn::spatial(4, shape[2])};
|
||||
else
|
||||
return cldnn::tensor{cldnn::spatial(4, shape[0])};
|
||||
}
|
||||
|
||||
static void CreateExperimentalDetectronPriorGridGeneratorOp(
|
||||
Program& p,
|
||||
const std::shared_ptr<ngraph::op::v6::ExperimentalDetectronPriorGridGenerator>& op) {
|
||||
p.ValidateInputs(op, {3});
|
||||
cldnn::tensor outTensor = mkTensor(op->get_output_shape(0));
|
||||
auto outDataType = DataTypeFromPrecision(op->get_output_element_type(0));
|
||||
cldnn::layout outLayout{outDataType, cldnn::format::bfyx, outTensor};
|
||||
auto& attrs = op->get_attrs();
|
||||
auto& featmap_shape = op->get_input_shape(1);
|
||||
auto& image_shape = op->get_input_shape(2);
|
||||
auto inputPrimitives = p.GetInputPrimitiveIDs(op);
|
||||
inputPrimitives.resize(1); // only priors is read
|
||||
cldnn::experimental_detectron_prior_grid_generator prim{layer_type_name_ID(op),
|
||||
inputPrimitives,
|
||||
attrs.flatten,
|
||||
static_cast<uint64_t>(attrs.h),
|
||||
static_cast<uint64_t>(attrs.w),
|
||||
attrs.stride_x,
|
||||
attrs.stride_y,
|
||||
featmap_shape[2],
|
||||
featmap_shape[3],
|
||||
image_shape[2],
|
||||
image_shape[3],
|
||||
op->get_friendly_name()};
|
||||
p.AddPrimitive(prim);
|
||||
p.AddPrimitiveToProfiler(op);
|
||||
}
|
||||
} // namespace
|
||||
|
||||
REGISTER_FACTORY_IMPL(v6, ExperimentalDetectronPriorGridGenerator);
|
||||
|
||||
} // namespace intel_gpu
|
||||
} // namespace runtime
|
||||
} // namespace ov
|
||||
+230
@@ -0,0 +1,230 @@
|
||||
// Copyright (C) 2022 Intel Corporation
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
//
|
||||
|
||||
#include <cstddef>
|
||||
#include <intel_gpu/primitives/activation.hpp>
|
||||
#include <intel_gpu/primitives/experimental_detectron_prior_grid_generator.hpp>
|
||||
#include <intel_gpu/primitives/input_layout.hpp>
|
||||
#include <string>
|
||||
|
||||
#include "test_utils.h"
|
||||
|
||||
using namespace cldnn;
|
||||
using namespace ::tests;
|
||||
|
||||
template <typename T>
|
||||
struct ExperimentalDetectronPriorGridGeneratorParams {
|
||||
std::vector<T> priors;
|
||||
tensor priorsTensor;
|
||||
int h;
|
||||
int w;
|
||||
float strideX;
|
||||
float strideY;
|
||||
bool flatten;
|
||||
std::pair<int, int> featureShape;
|
||||
std::pair<int, int> imageShape;
|
||||
tensor outputTensor;
|
||||
std::vector<T> expectedOutput;
|
||||
};
|
||||
|
||||
template <typename T>
|
||||
struct experimental_detectron_prior_grid_generator_test
|
||||
: public ::testing::TestWithParam<ExperimentalDetectronPriorGridGeneratorParams<T>> {
|
||||
public:
|
||||
void test() {
|
||||
auto data_type = type_to_data_type<T>::value;
|
||||
ExperimentalDetectronPriorGridGeneratorParams<T> params =
|
||||
testing::TestWithParam<ExperimentalDetectronPriorGridGeneratorParams<T>>::GetParam();
|
||||
auto& engine = get_test_engine();
|
||||
|
||||
auto prior_input = engine.allocate_memory({data_type, format::bfyx, params.priorsTensor});
|
||||
|
||||
set_values(prior_input, params.priors);
|
||||
|
||||
const std::string priors_id = "priors";
|
||||
const std::string experimental_detectron_prior_grid_generator_id =
|
||||
"experimental_detectron_prior_grid_generator";
|
||||
topology topology;
|
||||
topology.add(input_layout(priors_id, prior_input->get_layout()));
|
||||
|
||||
cldnn::layout outLayout{data_type, cldnn::format::bfyx, params.outputTensor};
|
||||
topology.add(experimental_detectron_prior_grid_generator(experimental_detectron_prior_grid_generator_id,
|
||||
{priors_id},
|
||||
params.flatten,
|
||||
params.h,
|
||||
params.w,
|
||||
params.strideX,
|
||||
params.strideY,
|
||||
params.featureShape.first,
|
||||
params.featureShape.second,
|
||||
params.imageShape.first,
|
||||
params.imageShape.second));
|
||||
|
||||
network network(engine, topology);
|
||||
|
||||
network.set_input_data(priors_id, prior_input);
|
||||
|
||||
auto result = network.execute();
|
||||
|
||||
auto out_mem = result.at(experimental_detectron_prior_grid_generator_id).get_memory();
|
||||
cldnn::mem_lock<T> out_ptr(out_mem, get_test_stream());
|
||||
|
||||
ASSERT_EQ(params.outputTensor.count(), out_ptr.size());
|
||||
for (size_t i = 0; i < params.expectedOutput.size(); ++i) {
|
||||
EXPECT_NEAR(params.expectedOutput[i], out_ptr[i], 0.0001) << "at i = " << i;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
template <typename T>
|
||||
std::vector<T> getValues(const std::vector<float>& values) {
|
||||
std::vector<T> result(values.begin(), values.end());
|
||||
return result;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
std::vector<ExperimentalDetectronPriorGridGeneratorParams<T>> generateExperimentalPGGParams() {
|
||||
std::vector<ExperimentalDetectronPriorGridGeneratorParams<T>> experimentalPGGParams{
|
||||
{getValues<T>({-24.5, -12.5, 24.5, 12.5, -16.5, -16.5, 16.5, 16.5, -12.5, -24.5, 12.5, 24.5}),
|
||||
tensor(batch(3), feature(4)),
|
||||
0,
|
||||
0,
|
||||
4.0,
|
||||
4.0,
|
||||
true,
|
||||
{4, 5},
|
||||
{100, 200},
|
||||
tensor(1, 1, 4, 60),
|
||||
getValues<T>(
|
||||
{-22.5, -10.5, 26.5, 14.5, -14.5, -14.5, 18.5, 18.5, -10.5, -22.5, 14.5, 26.5, -18.5, -10.5, 30.5, 14.5,
|
||||
-10.5, -14.5, 22.5, 18.5, -6.5, -22.5, 18.5, 26.5, -14.5, -10.5, 34.5, 14.5, -6.5, -14.5, 26.5, 18.5,
|
||||
-2.5, -22.5, 22.5, 26.5, -10.5, -10.5, 38.5, 14.5, -2.5, -14.5, 30.5, 18.5, 1.5, -22.5, 26.5, 26.5,
|
||||
-6.5, -10.5, 42.5, 14.5, 1.5, -14.5, 34.5, 18.5, 5.5, -22.5, 30.5, 26.5, -22.5, -6.5, 26.5, 18.5,
|
||||
-14.5, -10.5, 18.5, 22.5, -10.5, -18.5, 14.5, 30.5, -18.5, -6.5, 30.5, 18.5, -10.5, -10.5, 22.5, 22.5,
|
||||
-6.5, -18.5, 18.5, 30.5, -14.5, -6.5, 34.5, 18.5, -6.5, -10.5, 26.5, 22.5, -2.5, -18.5, 22.5, 30.5,
|
||||
-10.5, -6.5, 38.5, 18.5, -2.5, -10.5, 30.5, 22.5, 1.5, -18.5, 26.5, 30.5, -6.5, -6.5, 42.5, 18.5,
|
||||
1.5, -10.5, 34.5, 22.5, 5.5, -18.5, 30.5, 30.5, -22.5, -2.5, 26.5, 22.5, -14.5, -6.5, 18.5, 26.5,
|
||||
-10.5, -14.5, 14.5, 34.5, -18.5, -2.5, 30.5, 22.5, -10.5, -6.5, 22.5, 26.5, -6.5, -14.5, 18.5, 34.5,
|
||||
-14.5, -2.5, 34.5, 22.5, -6.5, -6.5, 26.5, 26.5, -2.5, -14.5, 22.5, 34.5, -10.5, -2.5, 38.5, 22.5,
|
||||
-2.5, -6.5, 30.5, 26.5, 1.5, -14.5, 26.5, 34.5, -6.5, -2.5, 42.5, 22.5, 1.5, -6.5, 34.5, 26.5,
|
||||
5.5, -14.5, 30.5, 34.5, -22.5, 1.5, 26.5, 26.5, -14.5, -2.5, 18.5, 30.5, -10.5, -10.5, 14.5, 38.5,
|
||||
-18.5, 1.5, 30.5, 26.5, -10.5, -2.5, 22.5, 30.5, -6.5, -10.5, 18.5, 38.5, -14.5, 1.5, 34.5, 26.5,
|
||||
-6.5, -2.5, 26.5, 30.5, -2.5, -10.5, 22.5, 38.5, -10.5, 1.5, 38.5, 26.5, -2.5, -2.5, 30.5, 30.5,
|
||||
1.5, -10.5, 26.5, 38.5, -6.5, 1.5, 42.5, 26.5, 1.5, -2.5, 34.5, 30.5, 5.5, -10.5, 30.5, 38.5})},
|
||||
{getValues<T>({-44.5, -24.5, 44.5, 24.5, -32.5, -32.5, 32.5, 32.5, -24.5, -44.5, 24.5, 44.5}),
|
||||
tensor(batch(3), feature(4)),
|
||||
0,
|
||||
0,
|
||||
8.0,
|
||||
8.0,
|
||||
false,
|
||||
{3, 7},
|
||||
{100, 200},
|
||||
tensor(3, 7, 4, 3),
|
||||
getValues<T>(
|
||||
{-40.5, -20.5, 48.5, 28.5, -28.5, -28.5, 36.5, 36.5, -20.5, -40.5, 28.5, 48.5, -32.5, -20.5, 56.5, 28.5,
|
||||
-20.5, -28.5, 44.5, 36.5, -12.5, -40.5, 36.5, 48.5, -24.5, -20.5, 64.5, 28.5, -12.5, -28.5, 52.5, 36.5,
|
||||
-4.5, -40.5, 44.5, 48.5, -16.5, -20.5, 72.5, 28.5, -4.5, -28.5, 60.5, 36.5, 3.5, -40.5, 52.5, 48.5,
|
||||
-8.5, -20.5, 80.5, 28.5, 3.5, -28.5, 68.5, 36.5, 11.5, -40.5, 60.5, 48.5, -0.5, -20.5, 88.5, 28.5,
|
||||
11.5, -28.5, 76.5, 36.5, 19.5, -40.5, 68.5, 48.5, 7.5, -20.5, 96.5, 28.5, 19.5, -28.5, 84.5, 36.5,
|
||||
27.5, -40.5, 76.5, 48.5, -40.5, -12.5, 48.5, 36.5, -28.5, -20.5, 36.5, 44.5, -20.5, -32.5, 28.5, 56.5,
|
||||
-32.5, -12.5, 56.5, 36.5, -20.5, -20.5, 44.5, 44.5, -12.5, -32.5, 36.5, 56.5, -24.5, -12.5, 64.5, 36.5,
|
||||
-12.5, -20.5, 52.5, 44.5, -4.5, -32.5, 44.5, 56.5, -16.5, -12.5, 72.5, 36.5, -4.5, -20.5, 60.5, 44.5,
|
||||
3.5, -32.5, 52.5, 56.5, -8.5, -12.5, 80.5, 36.5, 3.5, -20.5, 68.5, 44.5, 11.5, -32.5, 60.5, 56.5,
|
||||
-0.5, -12.5, 88.5, 36.5, 11.5, -20.5, 76.5, 44.5, 19.5, -32.5, 68.5, 56.5, 7.5, -12.5, 96.5, 36.5,
|
||||
19.5, -20.5, 84.5, 44.5, 27.5, -32.5, 76.5, 56.5, -40.5, -4.5, 48.5, 44.5, -28.5, -12.5, 36.5, 52.5,
|
||||
-20.5, -24.5, 28.5, 64.5, -32.5, -4.5, 56.5, 44.5, -20.5, -12.5, 44.5, 52.5, -12.5, -24.5, 36.5, 64.5,
|
||||
-24.5, -4.5, 64.5, 44.5, -12.5, -12.5, 52.5, 52.5, -4.5, -24.5, 44.5, 64.5, -16.5, -4.5, 72.5, 44.5,
|
||||
-4.5, -12.5, 60.5, 52.5, 3.5, -24.5, 52.5, 64.5, -8.5, -4.5, 80.5, 44.5, 3.5, -12.5, 68.5, 52.5,
|
||||
11.5, -24.5, 60.5, 64.5, -0.5, -4.5, 88.5, 44.5, 11.5, -12.5, 76.5, 52.5, 19.5, -24.5, 68.5, 64.5,
|
||||
7.5, -4.5, 96.5, 44.5, 19.5, -12.5, 84.5, 52.5, 27.5, -24.5, 76.5, 64.5})
|
||||
|
||||
},
|
||||
{getValues<T>({-364.5, -184.5, 364.5, 184.5, -256.5, -256.5, 256.5, 256.5, -180.5, -360.5, 180.5, 360.5}),
|
||||
tensor(batch(3), feature(4)),
|
||||
3,
|
||||
6,
|
||||
64.0,
|
||||
64.0,
|
||||
true,
|
||||
{100, 100},
|
||||
{100, 200},
|
||||
tensor(1, 1, 4, 30000),
|
||||
getValues<T>({-332.5, -152.5, 396.5, 216.5, -224.5, -224.5, 288.5, 288.5, -148.5, -328.5, 212.5, 392.5,
|
||||
-268.5, -152.5, 460.5, 216.5, -160.5, -224.5, 352.5, 288.5, -84.5, -328.5, 276.5, 392.5,
|
||||
-204.5, -152.5, 524.5, 216.5, -96.5, -224.5, 416.5, 288.5, -20.5, -328.5, 340.5, 392.5,
|
||||
-140.5, -152.5, 588.5, 216.5, -32.5, -224.5, 480.5, 288.5, 43.5, -328.5, 404.5, 392.5,
|
||||
-76.5, -152.5, 652.5, 216.5, 31.5, -224.5, 544.5, 288.5, 107.5, -328.5, 468.5, 392.5,
|
||||
-12.5, -152.5, 716.5, 216.5, 95.5, -224.5, 608.5, 288.5, 171.5, -328.5, 532.5, 392.5,
|
||||
-332.5, -88.5, 396.5, 280.5, -224.5, -160.5, 288.5, 352.5, -148.5, -264.5, 212.5, 456.5,
|
||||
-268.5, -88.5, 460.5, 280.5, -160.5, -160.5, 352.5, 352.5, -84.5, -264.5, 276.5, 456.5,
|
||||
-204.5, -88.5, 524.5, 280.5, -96.5, -160.5, 416.5, 352.5, -20.5, -264.5, 340.5, 456.5,
|
||||
-140.5, -88.5, 588.5, 280.5, -32.5, -160.5, 480.5, 352.5, 43.5, -264.5, 404.5, 456.5,
|
||||
-76.5, -88.5, 652.5, 280.5, 31.5, -160.5, 544.5, 352.5, 107.5, -264.5, 468.5, 456.5,
|
||||
-12.5, -88.5, 716.5, 280.5, 95.5, -160.5, 608.5, 352.5, 171.5, -264.5, 532.5, 456.5,
|
||||
-332.5, -24.5, 396.5, 344.5, -224.5, -96.5, 288.5, 416.5, -148.5, -200.5, 212.5, 520.5,
|
||||
-268.5, -24.5, 460.5, 344.5, -160.5, -96.5, 352.5, 416.5, -84.5, -200.5, 276.5, 520.5,
|
||||
-204.5, -24.5, 524.5, 344.5, -96.5, -96.5, 416.5, 416.5, -20.5, -200.5, 340.5, 520.5,
|
||||
-140.5, -24.5, 588.5, 344.5, -32.5, -96.5, 480.5, 416.5, 43.5, -200.5, 404.5, 520.5,
|
||||
-76.5, -24.5, 652.5, 344.5, 31.5, -96.5, 544.5, 416.5, 107.5, -200.5, 468.5, 520.5,
|
||||
-12.5, -24.5, 716.5, 344.5, 95.5, -96.5, 608.5, 416.5, 171.5, -200.5, 532.5, 520.5})},
|
||||
{getValues<T>({-180.5, -88.5, 180.5, 88.5, -128.5, -128.5, 128.5, 128.5, -92.5, -184.5, 92.5, 184.5}),
|
||||
tensor(batch(3), feature(4)),
|
||||
5,
|
||||
3,
|
||||
32.0,
|
||||
32.0,
|
||||
false,
|
||||
{100, 100},
|
||||
{100, 200},
|
||||
tensor(100, 100, 4, 3),
|
||||
getValues<T>({-164.5, -72.5, 196.5, 104.5, -112.5, -112.5, 144.5, 144.5, -76.5, -168.5, 108.5, 200.5,
|
||||
-132.5, -72.5, 228.5, 104.5, -80.5, -112.5, 176.5, 144.5, -44.5, -168.5, 140.5, 200.5,
|
||||
-100.5, -72.5, 260.5, 104.5, -48.5, -112.5, 208.5, 144.5, -12.5, -168.5, 172.5, 200.5,
|
||||
-164.5, -40.5, 196.5, 136.5, -112.5, -80.5, 144.5, 176.5, -76.5, -136.5, 108.5, 232.5,
|
||||
-132.5, -40.5, 228.5, 136.5, -80.5, -80.5, 176.5, 176.5, -44.5, -136.5, 140.5, 232.5,
|
||||
-100.5, -40.5, 260.5, 136.5, -48.5, -80.5, 208.5, 176.5, -12.5, -136.5, 172.5, 232.5,
|
||||
-164.5, -8.5, 196.5, 168.5, -112.5, -48.5, 144.5, 208.5, -76.5, -104.5, 108.5, 264.5,
|
||||
-132.5, -8.5, 228.5, 168.5, -80.5, -48.5, 176.5, 208.5, -44.5, -104.5, 140.5, 264.5,
|
||||
-100.5, -8.5, 260.5, 168.5, -48.5, -48.5, 208.5, 208.5, -12.5, -104.5, 172.5, 264.5,
|
||||
-164.5, 23.5, 196.5, 200.5, -112.5, -16.5, 144.5, 240.5, -76.5, -72.5, 108.5, 296.5,
|
||||
-132.5, 23.5, 228.5, 200.5, -80.5, -16.5, 176.5, 240.5, -44.5, -72.5, 140.5, 296.5,
|
||||
-100.5, 23.5, 260.5, 200.5, -48.5, -16.5, 208.5, 240.5, -12.5, -72.5, 172.5, 296.5,
|
||||
-164.5, 55.5, 196.5, 232.5, -112.5, 15.5, 144.5, 272.5, -76.5, -40.5, 108.5, 328.5,
|
||||
-132.5, 55.5, 228.5, 232.5, -80.5, 15.5, 176.5, 272.5, -44.5, -40.5, 140.5, 328.5,
|
||||
-100.5, 55.5, 260.5, 232.5, -48.5, 15.5, 208.5, 272.5, -12.5, -40.5, 172.5, 328.5})}};
|
||||
return experimentalPGGParams;
|
||||
}
|
||||
|
||||
struct PrintToStringParamName {
|
||||
template <class T>
|
||||
std::string operator()(const testing::TestParamInfo<ExperimentalDetectronPriorGridGeneratorParams<T>>& param) {
|
||||
std::stringstream buf;
|
||||
buf << " priors tensor " << param.param.priorsTensor.to_string() << " h " << param.param.h << " w "
|
||||
<< param.param.w << " strideX " << param.param.strideX << " strideY " << param.param.strideY << " flatten "
|
||||
<< param.param.flatten;
|
||||
return buf.str();
|
||||
}
|
||||
};
|
||||
|
||||
using experimental_detectron_prior_grid_generator_test_f32 = experimental_detectron_prior_grid_generator_test<float>;
|
||||
using experimental_detectron_prior_grid_generator_test_f16 = experimental_detectron_prior_grid_generator_test<half_t>;
|
||||
|
||||
TEST_P(experimental_detectron_prior_grid_generator_test_f32, experimental_detectron_prior_grid_generator_test_f32) {
|
||||
ASSERT_NO_FATAL_FAILURE(test());
|
||||
}
|
||||
|
||||
TEST_P(experimental_detectron_prior_grid_generator_test_f16, experimental_detectron_prior_grid_generator_test_f16) {
|
||||
ASSERT_NO_FATAL_FAILURE(test());
|
||||
}
|
||||
|
||||
INSTANTIATE_TEST_SUITE_P(smoke_experimental_detectron_prior_grid_generator_test_f32,
|
||||
experimental_detectron_prior_grid_generator_test_f32,
|
||||
::testing::ValuesIn(generateExperimentalPGGParams<float>()),
|
||||
PrintToStringParamName());
|
||||
|
||||
INSTANTIATE_TEST_SUITE_P(smoke_experimental_detectron_prior_grid_generator_test_f16,
|
||||
experimental_detectron_prior_grid_generator_test_f16,
|
||||
::testing::ValuesIn(generateExperimentalPGGParams<half_t>()),
|
||||
PrintToStringParamName());
|
||||
+74
@@ -0,0 +1,74 @@
|
||||
// Copyright (C) 2022 Intel Corporation
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
//
|
||||
|
||||
#include <common_test_utils/data_utils.hpp>
|
||||
#include <common_test_utils/ov_tensor_utils.hpp>
|
||||
#include <single_layer_tests/experimental_detectron_prior_grid_generator.hpp>
|
||||
|
||||
namespace {
|
||||
|
||||
const std::initializer_list<ov::test::subgraph::ExperimentalDetectronPriorGridGeneratorTestParam> params{
|
||||
// flatten = true (output tensor is 2D)
|
||||
{{true, 0, 0, 4.0f, 4.0f},
|
||||
ov::test::static_shapes_to_test_representation({{3, 4}, {1, 16, 4, 5}, {1, 3, 100, 200}})},
|
||||
// task #72587
|
||||
//{
|
||||
// {true, 3, 6, 64.0f, 64.0f},
|
||||
// ov::test::static_shapes_to_test_representation({{3, 4}, {1, 16, 100, 100}, {1, 3, 100, 200}})
|
||||
//},
|
||||
//// flatten = false (output tensor is 4D)
|
||||
{{false, 0, 0, 8.0f, 8.0f},
|
||||
ov::test::static_shapes_to_test_representation({{3, 4}, {1, 16, 3, 7}, {1, 3, 100, 200}})},
|
||||
// task #72587
|
||||
//{
|
||||
// {false, 5, 3, 32.0f, 32.0f},
|
||||
// ov::test::static_shapes_to_test_representation({{3, 4}, {1, 16, 100, 100}, {1, 3, 100, 200}})
|
||||
//},
|
||||
};
|
||||
|
||||
template <typename T>
|
||||
std::vector<std::pair<std::string, std::vector<ov::Tensor>>> getInputTensors() {
|
||||
std::vector<std::pair<std::string, std::vector<ov::Tensor>>> tensors{
|
||||
{"test#1",
|
||||
{ov::test::utils::create_tensor<T>(
|
||||
ov::element::from<T>(),
|
||||
{3, 4},
|
||||
std::vector<T>{-24.5, -12.5, 24.5, 12.5, -16.5, -16.5, 16.5, 16.5, -12.5, -24.5, 12.5, 24.5})}},
|
||||
{"test#2",
|
||||
{ov::test::utils::create_tensor<T>(
|
||||
ov::element::from<T>(),
|
||||
{3, 4},
|
||||
std::vector<T>{-44.5, -24.5, 44.5, 24.5, -32.5, -32.5, 32.5, 32.5, -24.5, -44.5, 24.5, 44.5})}},
|
||||
{"test#3",
|
||||
{ov::test::utils::create_tensor<T>(
|
||||
ov::element::from<T>(),
|
||||
{3, 4},
|
||||
std::
|
||||
vector<T>{-364.5, -184.5, 364.5, 184.5, -256.5, -256.5, 256.5, 256.5, -180.5, -360.5, 180.5, 360.5})}},
|
||||
{"test#4",
|
||||
{ov::test::utils::create_tensor<T>(
|
||||
ov::element::from<T>(),
|
||||
{3, 4},
|
||||
std::vector<T>{-180.5, -88.5, 180.5, 88.5, -128.5, -128.5, 128.5, 128.5, -92.5, -184.5, 92.5, 184.5})}}};
|
||||
return tensors;
|
||||
}
|
||||
|
||||
using ov::test::subgraph::ExperimentalDetectronPriorGridGeneratorLayerTest;
|
||||
|
||||
INSTANTIATE_TEST_SUITE_P(smoke_ExperimentalDetectronPriorGridGenerator_f32,
|
||||
ExperimentalDetectronPriorGridGeneratorLayerTest,
|
||||
testing::Combine(testing::ValuesIn(params),
|
||||
testing::ValuesIn(getInputTensors<float>()),
|
||||
testing::ValuesIn({ov::element::Type_t::f32}),
|
||||
testing::Values(CommonTestUtils::DEVICE_GPU)),
|
||||
ExperimentalDetectronPriorGridGeneratorLayerTest::getTestCaseName);
|
||||
|
||||
INSTANTIATE_TEST_SUITE_P(smoke_ExperimentalDetectronPriorGridGenerator_f16,
|
||||
ExperimentalDetectronPriorGridGeneratorLayerTest,
|
||||
testing::Combine(testing::ValuesIn(params),
|
||||
testing::ValuesIn(getInputTensors<ov::float16>()),
|
||||
testing::ValuesIn({ov::element::Type_t::f16}),
|
||||
testing::Values(CommonTestUtils::DEVICE_GPU)),
|
||||
ExperimentalDetectronPriorGridGeneratorLayerTest::getTestCaseName);
|
||||
} // namespace
|
||||
+15
-5
@@ -70,8 +70,19 @@ void ExperimentalDetectronPriorGridGeneratorLayerTest::SetUp() {
|
||||
"ExperimentalDetectronPriorGridGenerator");
|
||||
}
|
||||
|
||||
namespace {
|
||||
template<typename T>
|
||||
ov::runtime::Tensor generateTensorByShape(const Shape &shape) {
|
||||
return ov::test::utils::create_tensor<T>(
|
||||
ov::element::from<T>(),
|
||||
shape,
|
||||
std::vector<T>(0., shape_size(shape)));
|
||||
}
|
||||
}
|
||||
|
||||
void ExperimentalDetectronPriorGridGeneratorLayerTest::generate_inputs(const std::vector<ngraph::Shape>& targetInputStaticShapes) {
|
||||
auto inputTensors = std::get<1>(GetParam());
|
||||
auto netPrecision = std::get<2>(GetParam());
|
||||
|
||||
inputs.clear();
|
||||
const auto& funcInputs = function->inputs();
|
||||
@@ -84,12 +95,11 @@ void ExperimentalDetectronPriorGridGeneratorLayerTest::generate_inputs(const std
|
||||
|
||||
inputs.insert({funcInputs[i].get_node_shared_ptr(), inputTensors.second[i]});
|
||||
}
|
||||
|
||||
for (auto j = i; j < funcInputs.size(); ++j) {
|
||||
ov::runtime::Tensor inputTensor = ov::test::utils::create_tensor<float>(
|
||||
ov::element::f32,
|
||||
targetInputStaticShapes[j],
|
||||
std::vector<float>(0.f, shape_size(targetInputStaticShapes[j])));
|
||||
ov::runtime::Tensor inputTensor = (netPrecision == element::f16)
|
||||
? generateTensorByShape<ov::float16>(targetInputStaticShapes[j])
|
||||
: generateTensorByShape<float>(
|
||||
targetInputStaticShapes[j]);
|
||||
|
||||
inputs.insert({funcInputs[j].get_node_shared_ptr(), inputTensor});
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user