[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:
Alexey Ershov 2020-10-23 15:19:20 +03:00 committed by GitHub
parent 46e8c12a5d
commit 8c97127aa7
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 21 additions and 10 deletions

View File

@ -19,7 +19,7 @@ set(VPU_SUPPORTED_FIRMWARES usb-ma2450 usb-ma2x8x pcie-ma248x)
# Default packages
#
set(FIRMWARE_PACKAGE_VERSION 1404)
set(FIRMWARE_PACKAGE_VERSION 1419)
set(VPU_CLC_MA2X8X_VERSION "movi-cltools-20.09.1")
#

View File

@ -40,6 +40,7 @@ private:
stridesInfo.setInput(inputEdge(1), StridesRequirement::compact());
stridesInfo.setInput(inputEdge(2), StridesRequirement::compact());
stridesInfo.setOutput(outputEdge(0), StridesRequirement::compact());
stridesInfo.setOutput(outputEdge(1), StridesRequirement::compact());
}
void finalizeDataLayoutImpl() override {
@ -49,7 +50,7 @@ private:
}
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 {
@ -107,10 +108,12 @@ private:
auto input0 = inputEdge(0)->input();
auto input1 = inputEdge(1)->input();
auto input2 = inputEdge(2)->input();
auto output = outputEdge(0)->output();
auto output0 = outputEdge(0)->output();
auto output1 = outputEdge(1)->output();
input0->serializeBuffer(serializer);
output->serializeBuffer(serializer);
output0->serializeBuffer(serializer);
output1->serializeBuffer(serializer);
input1->serializeBuffer(serializer);
input2->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 {
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:
// #-37327: Several models Failed to compile layer "proposals"
IE_ASSERT(outputs.size() == 1 || outputs.size() == 2);
DataVector tempOutputs(2);
tempOutputs[0] = outputs[0];
const DataVector outputs1 = { outputs[0] }; // ignore 2nd output
auto stage = model->addNewStage<ProposalStage>(layer->name, StageType::Proposal, layer, inputs, outputs1);
if (outputs.size() < 2)
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>("base_size", layer->GetParamAsInt("base_size", 16));