diff options
author | Narumol Prangnawarat <narumol.prangnawarat@arm.com> | 2020-07-21 10:21:19 +0100 |
---|---|---|
committer | Narumol Prangnawarat <narumol.prangnawarat@arm.com> | 2020-07-21 11:57:16 +0100 |
commit | 2adf5f07081719e27870c5d461698e3153e0e74a (patch) | |
tree | 32b642d7dbb17d3708fe5c3ffb8ef2e76ce06f73 | |
parent | 82262f58f0b880073ff46a4e63c7bb7b17aaaa95 (diff) | |
download | armnn-2adf5f07081719e27870c5d461698e3153e0e74a.tar.gz |
IVGCVSW-5078 Fix segmentation fault on Yolo v3 big app
Signed-off-by: Narumol Prangnawarat <narumol.prangnawarat@arm.com>
Change-Id: I6ec9bbc22f26dcb55f7424da5bb1d21c66a7bf01
-rw-r--r-- | tests/TfLiteYoloV3Big-Armnn/TfLiteYoloV3Big-Armnn.cpp | 43 |
1 files changed, 23 insertions, 20 deletions
diff --git a/tests/TfLiteYoloV3Big-Armnn/TfLiteYoloV3Big-Armnn.cpp b/tests/TfLiteYoloV3Big-Armnn/TfLiteYoloV3Big-Armnn.cpp index 4610675237..bf3578c37e 100644 --- a/tests/TfLiteYoloV3Big-Armnn/TfLiteYoloV3Big-Armnn.cpp +++ b/tests/TfLiteYoloV3Big-Armnn/TfLiteYoloV3Big-Armnn.cpp @@ -48,7 +48,7 @@ static const int GENERAL_ERROR = -100; template<typename TContainer> inline armnn::InputTensors MakeInputTensors(const std::vector<armnn::BindingPointInfo>& inputBindings, - const std::vector<TContainer>& inputDataContainers) + const std::vector<std::reference_wrapper<TContainer>>& inputDataContainers) { armnn::InputTensors inputTensors; @@ -61,7 +61,7 @@ inline armnn::InputTensors MakeInputTensors(const std::vector<armnn::BindingPoin for (size_t i = 0; i < numInputs; i++) { const armnn::BindingPointInfo& inputBinding = inputBindings[i]; - const TContainer& inputData = inputDataContainers[i]; + const TContainer& inputData = inputDataContainers[i].get(); armnn::ConstTensor inputTensor(inputBinding.second, inputData.data()); inputTensors.push_back(std::make_pair(inputBinding.first, inputTensor)); @@ -71,8 +71,9 @@ inline armnn::InputTensors MakeInputTensors(const std::vector<armnn::BindingPoin } template<typename TContainer> -inline armnn::OutputTensors MakeOutputTensors(const std::vector<armnn::BindingPointInfo>& outputBindings, - const std::vector<TContainer>& outputDataContainers) +inline armnn::OutputTensors MakeOutputTensors( + const std::vector<armnn::BindingPointInfo>& outputBindings, + const std::vector<std::reference_wrapper<TContainer>>& outputDataContainers) { armnn::OutputTensors outputTensors; @@ -82,10 +83,12 @@ inline armnn::OutputTensors MakeOutputTensors(const std::vector<armnn::BindingPo throw armnn::Exception("Mismatching vectors"); } + outputTensors.reserve(numOutputs); + for (size_t i = 0; i < numOutputs; i++) { const armnn::BindingPointInfo& outputBinding = outputBindings[i]; - const TContainer& outputData = outputDataContainers[i]; + const TContainer& outputData = outputDataContainers[i].get(); armnn::Tensor outputTensor(outputBinding.second, const_cast<float*>(outputData.data())); outputTensors.push_back(std::make_pair(outputBinding.first, outputTensor)); @@ -366,22 +369,22 @@ int main(int argc, char* argv[]) // Setup inputs and outputs using BindingInfos = std::vector<armnn::BindingPointInfo>; - using FloatTensors = std::vector<std::vector<float>>; - - InputTensors bbInputTensors = MakeInputTensors(BindingInfos{inputId}, - FloatTensors{std::move(image)}); - OutputTensors bbOutputTensors = MakeOutputTensors(BindingInfos{bbOut0Id, bbOut1Id, bbOut2Id}, - FloatTensors{intermediateMem0, - intermediateMem1, - intermediateMem2}); - InputTensors detectInputTensors = MakeInputTensors(BindingInfos{detectIn0Id, - detectIn1Id, - detectIn2Id}, - FloatTensors{intermediateMem0, + using FloatTensors = std::vector<std::reference_wrapper<std::vector<float>>>; + + InputTensors bbInputTensors = MakeInputTensors(BindingInfos{ inputId }, + FloatTensors{ image }); + OutputTensors bbOutputTensors = MakeOutputTensors(BindingInfos{ bbOut0Id, bbOut1Id, bbOut2Id }, + FloatTensors{ intermediateMem0, intermediateMem1, - intermediateMem2}); - OutputTensors detectOutputTensors = MakeOutputTensors(BindingInfos{outputBoxesId}, - FloatTensors{intermediateMem3}); + intermediateMem2 }); + InputTensors detectInputTensors = MakeInputTensors(BindingInfos{ detectIn0Id, + detectIn1Id, + detectIn2Id } , + FloatTensors{ intermediateMem0, + intermediateMem1, + intermediateMem2 }); + OutputTensors detectOutputTensors = MakeOutputTensors(BindingInfos{ outputBoxesId }, + FloatTensors{ intermediateMem3 }); static const int numIterations=2; using DurationUS = std::chrono::duration<double, std::micro>; |