[IE][VPU]: Proposal: Implemented support for optional 2nd output (scores) (#2762)
* Proposal stage: added support for optional 2nd output * firmware updated
This commit is contained in:
parent
46e8c12a5d
commit
8c97127aa7
@ -19,7 +19,7 @@ set(VPU_SUPPORTED_FIRMWARES usb-ma2450 usb-ma2x8x pcie-ma248x)
|
|||||||
# Default packages
|
# Default packages
|
||||||
#
|
#
|
||||||
|
|
||||||
set(FIRMWARE_PACKAGE_VERSION 1404)
|
set(FIRMWARE_PACKAGE_VERSION 1419)
|
||||||
set(VPU_CLC_MA2X8X_VERSION "movi-cltools-20.09.1")
|
set(VPU_CLC_MA2X8X_VERSION "movi-cltools-20.09.1")
|
||||||
|
|
||||||
#
|
#
|
||||||
|
@ -40,6 +40,7 @@ private:
|
|||||||
stridesInfo.setInput(inputEdge(1), StridesRequirement::compact());
|
stridesInfo.setInput(inputEdge(1), StridesRequirement::compact());
|
||||||
stridesInfo.setInput(inputEdge(2), StridesRequirement::compact());
|
stridesInfo.setInput(inputEdge(2), StridesRequirement::compact());
|
||||||
stridesInfo.setOutput(outputEdge(0), StridesRequirement::compact());
|
stridesInfo.setOutput(outputEdge(0), StridesRequirement::compact());
|
||||||
|
stridesInfo.setOutput(outputEdge(1), StridesRequirement::compact());
|
||||||
}
|
}
|
||||||
|
|
||||||
void finalizeDataLayoutImpl() override {
|
void finalizeDataLayoutImpl() override {
|
||||||
@ -49,7 +50,7 @@ private:
|
|||||||
}
|
}
|
||||||
|
|
||||||
void initialCheckImpl() const override {
|
void initialCheckImpl() const override {
|
||||||
assertInputsOutputsTypes(this, {{DataType::FP16}, {DataType::FP16}, {DataType::FP16}}, {{DataType::FP16}});
|
assertInputsOutputsTypes(this, {{DataType::FP16}, {DataType::FP16}, {DataType::FP16}}, {{DataType::FP16}, {DataType::FP16}});
|
||||||
}
|
}
|
||||||
|
|
||||||
void serializeParamsImpl(BlobSerializer& serializer) const override {
|
void serializeParamsImpl(BlobSerializer& serializer) const override {
|
||||||
@ -107,10 +108,12 @@ private:
|
|||||||
auto input0 = inputEdge(0)->input();
|
auto input0 = inputEdge(0)->input();
|
||||||
auto input1 = inputEdge(1)->input();
|
auto input1 = inputEdge(1)->input();
|
||||||
auto input2 = inputEdge(2)->input();
|
auto input2 = inputEdge(2)->input();
|
||||||
auto output = outputEdge(0)->output();
|
auto output0 = outputEdge(0)->output();
|
||||||
|
auto output1 = outputEdge(1)->output();
|
||||||
|
|
||||||
input0->serializeBuffer(serializer);
|
input0->serializeBuffer(serializer);
|
||||||
output->serializeBuffer(serializer);
|
output0->serializeBuffer(serializer);
|
||||||
|
output1->serializeBuffer(serializer);
|
||||||
input1->serializeBuffer(serializer);
|
input1->serializeBuffer(serializer);
|
||||||
input2->serializeBuffer(serializer);
|
input2->serializeBuffer(serializer);
|
||||||
tempBuffer(0)->serializeBuffer(serializer);
|
tempBuffer(0)->serializeBuffer(serializer);
|
||||||
@ -122,14 +125,22 @@ private:
|
|||||||
void FrontEnd::parseProposal(const Model& model, const ie::CNNLayerPtr& layer, const DataVector& inputs, const DataVector& outputs) const {
|
void FrontEnd::parseProposal(const Model& model, const ie::CNNLayerPtr& layer, const DataVector& inputs, const DataVector& outputs) const {
|
||||||
ie::details::CaselessEq<std::string> cmp;
|
ie::details::CaselessEq<std::string> cmp;
|
||||||
|
|
||||||
IE_ASSERT(inputs.size() == 3);
|
VPU_THROW_UNLESS((inputs.size() == 3),
|
||||||
|
"Proposal stage with name %s must have 3 inputs, "
|
||||||
|
"actually provided %d", layer->name, inputs.size());
|
||||||
|
VPU_THROW_UNLESS((outputs.size() == 1) || (outputs.size() == 2),
|
||||||
|
"Proposal stage with name %s must have only 1 or 2 outputs, "
|
||||||
|
"actually provided %d", layer->name, outputs.size());
|
||||||
|
|
||||||
// TODO: implement 2nd output, see:
|
DataVector tempOutputs(2);
|
||||||
// #-37327: Several models Failed to compile layer "proposals"
|
tempOutputs[0] = outputs[0];
|
||||||
IE_ASSERT(outputs.size() == 1 || outputs.size() == 2);
|
|
||||||
|
|
||||||
const DataVector outputs1 = { outputs[0] }; // ignore 2nd output
|
if (outputs.size() < 2)
|
||||||
auto stage = model->addNewStage<ProposalStage>(layer->name, StageType::Proposal, layer, inputs, outputs1);
|
tempOutputs[1] = model->addFakeData();
|
||||||
|
else
|
||||||
|
tempOutputs[1] = outputs[1];
|
||||||
|
|
||||||
|
auto stage = model->addNewStage<ProposalStage>(layer->name, StageType::Proposal, layer, inputs, tempOutputs);
|
||||||
|
|
||||||
stage->attrs().set<int>("feat_stride", layer->GetParamAsInt("feat_stride", 16));
|
stage->attrs().set<int>("feat_stride", layer->GetParamAsInt("feat_stride", 16));
|
||||||
stage->attrs().set<int>("base_size", layer->GetParamAsInt("base_size", 16));
|
stage->attrs().set<int>("base_size", layer->GetParamAsInt("base_size", 16));
|
||||||
|
Loading…
Reference in New Issue
Block a user