6 #include "../TfLiteParser.hpp" 8 #include <boost/test/unit_test.hpp> 21 explicit DetectionPostProcessFixture(
const std::string& custom_options)
42 "builtin_code": "CUSTOM", 43 "custom_code": "TFLite_Detection_PostProcess" 50 "name": "box_encodings", 85 "name": "detection_boxes", 91 "name": "detection_classes", 97 "name": "detection_scores", 103 "name": "num_detections", 108 "outputs": [3, 4, 5, 6], 112 "outputs": [3, 4, 5, 6], 113 "builtin_options_type": 0, 114 "custom_options": [)" + custom_options + R"(], 115 "custom_options_format": "FLEXBUFFERS" 120 { "data": [ 1, 1, 2, 2, 136 struct ParseDetectionPostProcessCustomOptions : DetectionPostProcessFixture
158 ParseDetectionPostProcessCustomOptions()
159 : DetectionPostProcessFixture(
160 GenerateDetectionPostProcessJsonString(GenerateDescriptor()))
169 using UnquantizedContainer = std::vector<float>;
172 0.0f, 0.0f, 0.0f, 0.0f,
173 0.0f, 1.0f, 0.0f, 0.0f,
174 0.0f, -1.0f, 0.0f, 0.0f,
175 0.0f, 0.0f, 0.0f, 0.0f,
176 0.0f, 1.0f, 0.0f, 0.0f,
177 0.0f, 0.0f, 0.0f, 0.0f
180 UnquantizedContainer
scores =
191 UnquantizedContainer detectionBoxes =
193 0.0f, 10.0f, 1.0f, 11.0f,
194 0.0f, 10.0f, 1.0f, 11.0f,
195 0.0f, 0.0f, 0.0f, 0.0f
198 UnquantizedContainer detectionClasses = { 1.0f, 0.0f, 0.0f };
199 UnquantizedContainer detectionScores = { 0.95f, 0.93f, 0.0f };
201 UnquantizedContainer numDetections = { 2.0f };
204 using QuantizedContainer = std::vector<uint8_t>;
206 QuantizedContainer quantBoxEncodings = armnnUtils::QuantizedVector<uint8_t>(
boxEncodings, 1.00f, 1);
207 QuantizedContainer quantScores = armnnUtils::QuantizedVector<uint8_t>(
scores, 0.01f, 0);
209 std::map<std::string, QuantizedContainer> input =
211 {
"box_encodings", quantBoxEncodings },
212 {
"scores", quantScores }
215 std::map<std::string, UnquantizedContainer> output =
217 {
"detection_boxes", detectionBoxes},
218 {
"detection_classes", detectionClasses},
219 {
"detection_scores", detectionScores},
220 {
"num_detections", numDetections}
223 RunTest<armnn::DataType::QAsymmU8, armnn::DataType::Float32>(0, input, output);
238 ReadStringToBinary();
244 auto optimizedNetwork = boost::polymorphic_downcast<armnn::OptimizedNetwork*>(optimized.get());
245 auto graph = optimizedNetwork->GetGraph();
248 BOOST_TEST((graph.GetNumInputs() == 2));
249 BOOST_TEST((graph.GetNumOutputs() == 4));
250 BOOST_TEST((graph.GetNumLayers() == 7));
300 BOOST_TEST(
IsConnected(boxEncodingLayer, detectionPostProcessLayer, 0, 0, boxEncodingTensor));
301 BOOST_TEST(
IsConnected(scoresLayer, detectionPostProcessLayer, 0, 1, scoresTensor));
302 BOOST_TEST(
IsConnected(detectionPostProcessLayer, detectionBoxesLayer, 0, 0, detectionBoxesTensor));
303 BOOST_TEST(
IsConnected(detectionPostProcessLayer, detectionClassesLayer, 1, 0, detectionClassesTensor));
304 BOOST_TEST(
IsConnected(detectionPostProcessLayer, detectionScoresLayer, 2, 0, detectionScoresTensor));
305 BOOST_TEST(
IsConnected(detectionPostProcessLayer, numDetectionsLayer, 3, 0, numDetectionsTensor));
BOOST_AUTO_TEST_SUITE(TensorflowLiteParser)
float m_ScaleW
Center size encoding scale weight.
CPU Execution: Reference C++ kernels.
armnn::Layer * GetFirstLayerWithName(armnn::Graph &graph, const std::string &name)
float m_ScaleX
Center size encoding scale x.
uint32_t m_DetectionsPerClass
Detections per classes, used in Regular NMS.
std::vector< float > boxEncodings({ 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, -1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f })
uint32_t m_MaxClassesPerDetection
Maximum numbers of classes per detection, used in Fast NMS.
uint32_t m_MaxDetections
Maximum numbers of detections.
float m_NmsIouThreshold
Intersection over union threshold.
IOptimizedNetworkPtr Optimize(const INetwork &network, const std::vector< BackendId > &backendPreferences, const IDeviceSpec &deviceSpec, const OptimizerOptions &options=OptimizerOptions(), Optional< std::vector< std::string > &> messages=EmptyOptional())
Create an optimized version of the network.
uint32_t m_NumClasses
Number of classes.
bool m_UseRegularNms
Use Regular NMS.
bool IsConnected(armnn::Layer *srcLayer, armnn::Layer *destLayer, unsigned int srcSlot, unsigned int destSlot, const armnn::TensorInfo &expectedTensorInfo)
float m_ScaleH
Center size encoding scale height.
BOOST_AUTO_TEST_SUITE_END()
std::vector< float > scores({ 0.0f, 0.9f, 0.8f, 0.0f, 0.75f, 0.72f, 0.0f, 0.6f, 0.5f, 0.0f, 0.93f, 0.95f, 0.0f, 0.5f, 0.4f, 0.0f, 0.3f, 0.2f })
LayerType GetType() const
bool CheckNumberOfInputSlot(armnn::Layer *layer, unsigned int num)
BOOST_FIXTURE_TEST_CASE(ParseDetectionPostProcess, ParseDetectionPostProcessCustomOptions)
bool CheckNumberOfOutputSlot(armnn::Layer *layer, unsigned int num)
float m_ScaleY
Center size encoding scale y.
float m_NmsScoreThreshold
NMS score threshold.
std::unique_ptr< INetwork, void(*)(INetwork *network)> INetworkPtr