aboutsummaryrefslogtreecommitdiff
path: root/src/armnnQuantizer
diff options
context:
space:
mode:
authorJim Flynn <jim.flynn@arm.com>2020-03-19 17:03:14 +0000
committerJim Flynn <jim.flynn@arm.com>2020-03-19 17:03:14 +0000
commit0e2bab81442ee6cc2b94e4f7881ed0c5c6af65e7 (patch)
treeb0af08b5a0b74149fca422151127ac6310385399 /src/armnnQuantizer
parent8c3259fa007d43fcc5ea56fe6928526dbe79f3c0 (diff)
downloadarmnn-0e2bab81442ee6cc2b94e4f7881ed0c5c6af65e7.tar.gz
Creating gh-pages documentation for ArmNN
Signed-off-by: Jim Flynn <jim.flynn@arm.com>
Diffstat (limited to 'src/armnnQuantizer')
-rw-r--r--src/armnnQuantizer/ArmNNQuantizerMain.cpp89
-rw-r--r--src/armnnQuantizer/CommandLineProcessor.cpp178
-rw-r--r--src/armnnQuantizer/CommandLineProcessor.hpp52
-rw-r--r--src/armnnQuantizer/QuantizationDataSet.cpp167
-rw-r--r--src/armnnQuantizer/QuantizationDataSet.hpp55
-rw-r--r--src/armnnQuantizer/QuantizationInput.cpp103
-rw-r--r--src/armnnQuantizer/QuantizationInput.hpp54
-rw-r--r--src/armnnQuantizer/README.md18
-rw-r--r--src/armnnQuantizer/test/QuantizationDataSetTests.cpp144
9 files changed, 0 insertions, 860 deletions
diff --git a/src/armnnQuantizer/ArmNNQuantizerMain.cpp b/src/armnnQuantizer/ArmNNQuantizerMain.cpp
deleted file mode 100644
index 30167e73f2..0000000000
--- a/src/armnnQuantizer/ArmNNQuantizerMain.cpp
+++ /dev/null
@@ -1,89 +0,0 @@
-//
-// Copyright © 2017 Arm Ltd. All rights reserved.
-// SPDX-License-Identifier: MIT
-//
-
-#include "CommandLineProcessor.hpp"
-#include <armnnDeserializer/IDeserializer.hpp>
-#include <armnnQuantizer/INetworkQuantizer.hpp>
-#include <armnnSerializer/ISerializer.hpp>
-#include "QuantizationDataSet.hpp"
-#include "QuantizationInput.hpp"
-
-#include <algorithm>
-#include <fstream>
-#include <iostream>
-
-int main(int argc, char* argv[])
-{
- armnnQuantizer::CommandLineProcessor cmdline;
- if (!cmdline.ProcessCommandLine(argc, argv))
- {
- return -1;
- }
- armnnDeserializer::IDeserializerPtr parser = armnnDeserializer::IDeserializer::Create();
- std::ifstream inputFileStream(cmdline.GetInputFileName(), std::ios::binary);
- std::vector<std::uint8_t> binaryContent;
- while (inputFileStream)
- {
- char c;
- inputFileStream.get(c);
- if (inputFileStream)
- {
- binaryContent.push_back(static_cast<std::uint8_t>(c));
- }
- }
- inputFileStream.close();
-
- armnn::QuantizerOptions quantizerOptions;
- quantizerOptions.m_ActivationFormat = cmdline.GetQuantizationScheme() == "QSymm16"
- ? armnn::DataType::QSymmS16
- : armnn::DataType::QAsymmU8;
-
- quantizerOptions.m_PreserveType = cmdline.HasPreservedDataType();
-
- armnn::INetworkPtr network = parser->CreateNetworkFromBinary(binaryContent);
- armnn::INetworkQuantizerPtr quantizer = armnn::INetworkQuantizer::Create(network.get(), quantizerOptions);
-
- if (cmdline.HasQuantizationData())
- {
- armnnQuantizer::QuantizationDataSet dataSet = cmdline.GetQuantizationDataSet();
- if (!dataSet.IsEmpty())
- {
- // Get the Input Tensor Infos
- armnnQuantizer::InputLayerVisitor inputLayerVisitor;
- network->Accept(inputLayerVisitor);
-
- for (armnnQuantizer::QuantizationInput quantizationInput : dataSet)
- {
- armnn::InputTensors inputTensors;
- std::vector<std::vector<float>> inputData(quantizationInput.GetNumberOfInputs());
- std::vector<armnn::LayerBindingId> layerBindingIds = quantizationInput.GetLayerBindingIds();
- unsigned int count = 0;
- for (armnn::LayerBindingId layerBindingId : quantizationInput.GetLayerBindingIds())
- {
- armnn::TensorInfo tensorInfo = inputLayerVisitor.GetTensorInfo(layerBindingId);
- inputData[count] = quantizationInput.GetDataForEntry(layerBindingId);
- armnn::ConstTensor inputTensor(tensorInfo, inputData[count].data());
- inputTensors.push_back(std::make_pair(layerBindingId, inputTensor));
- count++;
- }
- quantizer->Refine(inputTensors);
- }
- }
- }
-
- armnn::INetworkPtr quantizedNetwork = quantizer->ExportNetwork();
- armnnSerializer::ISerializerPtr serializer = armnnSerializer::ISerializer::Create();
- serializer->Serialize(*quantizedNetwork);
-
- std::string output(cmdline.GetOutputDirectoryName());
- output.append(cmdline.GetOutputFileName());
- std::ofstream outputFileStream;
- outputFileStream.open(output);
- serializer->SaveSerializedToStream(outputFileStream);
- outputFileStream.flush();
- outputFileStream.close();
-
- return 0;
-} \ No newline at end of file
diff --git a/src/armnnQuantizer/CommandLineProcessor.cpp b/src/armnnQuantizer/CommandLineProcessor.cpp
deleted file mode 100644
index d2163c0869..0000000000
--- a/src/armnnQuantizer/CommandLineProcessor.cpp
+++ /dev/null
@@ -1,178 +0,0 @@
-//
-// Copyright © 2017 Arm Ltd. All rights reserved.
-// SPDX-License-Identifier: MIT
-//
-
-#include "CommandLineProcessor.hpp"
-
-#define BOOST_FILESYSTEM_NO_DEPRECATED
-
-#include <boost/program_options.hpp>
-#include <boost/filesystem/operations.hpp>
-#include <boost/filesystem/path.hpp>
-
-namespace armnnQuantizer
-{
-
-bool ValidateOutputDirectory(std::string& dir)
-{
- if (dir.empty())
- {
- std::cerr << "No output directory specified" << std::endl;
- return false;
- }
-
- if (dir[dir.length() - 1] != '/')
- {
- dir += "/";
- }
-
- if (!boost::filesystem::exists(dir))
- {
- std::cerr << "Output directory [" << dir << "] does not exist" << std::endl;
- return false;
- }
-
- if (!boost::filesystem::is_directory(dir))
- {
- std::cerr << "Given output directory [" << dir << "] is not a directory" << std::endl;
- return false;
- }
-
- return true;
-}
-
-bool ValidateProvidedFile(const std::string& inputFileName)
-{
- if (!boost::filesystem::exists(inputFileName))
- {
- std::cerr << "Provided file [" << inputFileName << "] does not exist" << std::endl;
- return false;
- }
-
- if (boost::filesystem::is_directory(inputFileName))
- {
- std::cerr << "Given file [" << inputFileName << "] is a directory" << std::endl;
- return false;
- }
-
- return true;
-}
-
-bool ValidateQuantizationScheme(const std::string& scheme)
-{
- if (scheme.empty())
- {
- std::cerr << "No Quantization Scheme specified" << std::endl;
- return false;
- }
-
- std::vector<std::string> supportedSchemes = {
- "QAsymm8",
- "QSymm16"
- };
-
- auto iterator = std::find(supportedSchemes.begin(), supportedSchemes.end(), scheme);
- if (iterator == supportedSchemes.end())
- {
- std::cerr << "Quantization Scheme [" << scheme << "] is not supported" << std::endl;
- return false;
- }
-
- return true;
-}
-
-bool CommandLineProcessor::ProcessCommandLine(int argc, char* argv[])
-{
- namespace po = boost::program_options;
-
- po::options_description desc("Options");
- try
- {
- desc.add_options()
- ("help,h", "Display help messages")
- ("infile,f", po::value<std::string>(&m_InputFileName)->required(),
- "Input file containing float 32 ArmNN Input Graph")
- ("scheme,s", po::value<std::string>(&m_QuantizationScheme)->default_value("QAsymm8"),
- "Quantization scheme, \"QAsymm8\" or \"QSymm16\", default value QAsymm8")
- ("csvfile,c", po::value<std::string>(&m_CsvFileName)->default_value(""),
- "CSV file containing paths for RAW input tensors")
- ("preserve-data-type,p", po::bool_switch(&m_PreserveDataType)->default_value(false),
- "Preserve the input and output data types")
- ("outdir,d", po::value<std::string>(&m_OutputDirectory)->required(),
- "Directory that output file will be written to")
- ("outfile,o", po::value<std::string>(&m_OutputFileName)->required(), "ArmNN output file name");
- }
- catch (const std::exception& e)
- {
- std::cerr << "Fatal internal error: [" << e.what() << "]" << std::endl;
- return false;
- }
-
- po::variables_map vm;
-
- try
- {
- po::store(po::parse_command_line(argc, argv, desc), vm);
-
- if (vm.count("help") || argc <= 1)
- {
- std::cout << "Convert a Fp32 ArmNN model to a quantized ArmNN model." << std::endl;
- std::cout << std::endl;
- std::cout << desc << std::endl;
- return false;
- }
-
- po::notify(vm);
- }
- catch (const po::error& e)
- {
- std::cerr << e.what() << std::endl << std::endl;
- std::cerr << desc << std::endl;
- return false;
- }
-
- if (!armnnQuantizer::ValidateProvidedFile(m_InputFileName))
- {
- return false;
- }
-
- if (!ValidateQuantizationScheme(m_QuantizationScheme))
- {
- return false;
- }
-
- if (m_CsvFileName != "")
- {
- if (!armnnQuantizer::ValidateProvidedFile(m_CsvFileName))
- {
- return false;
- }
- else
- {
- boost::filesystem::path csvFilePath(m_CsvFileName);
- m_CsvFileDirectory = csvFilePath.parent_path().c_str();
- }
-
- // If CSV file is defined, create a QuantizationDataSet for specified CSV file.
- m_QuantizationDataSet = QuantizationDataSet(m_CsvFileName);
- }
-
- if (!armnnQuantizer::ValidateOutputDirectory(m_OutputDirectory))
- {
- return false;
- }
-
- std::string output(m_OutputDirectory);
- output.append(m_OutputFileName);
-
- if (boost::filesystem::exists(output))
- {
- std::cerr << "Output file [" << output << "] already exists" << std::endl;
- return false;
- }
-
- return true;
-}
-
-} // namespace armnnQuantizer \ No newline at end of file
diff --git a/src/armnnQuantizer/CommandLineProcessor.hpp b/src/armnnQuantizer/CommandLineProcessor.hpp
deleted file mode 100644
index 9de03fb327..0000000000
--- a/src/armnnQuantizer/CommandLineProcessor.hpp
+++ /dev/null
@@ -1,52 +0,0 @@
-//
-// Copyright © 2017 Arm Ltd. All rights reserved.
-// SPDX-License-Identifier: MIT
-//
-#pragma once
-
-#include <string>
-#include <iostream>
-#include <vector>
-#include "QuantizationDataSet.hpp"
-
-namespace armnnQuantizer
-{
-
-// parses the command line to extract
-// * the input file -f containing the serialized fp32 ArmNN input graph (must exist...and be a input graph file)
-// * the csv file -c <optional> detailing the paths for RAW input tensors to use for refinement
-// * the directory -d to place the output file into (must already exist and be writable)
-// * the name of the file -o the quantized ArmNN input graph will be written to (must not already exist)
-// * LATER: the min and max overrides to be applied to the inputs
-// specified as -i <int> (input id) -n <float> (minimum) -x <float> (maximum)
-// multiple sets of -i, -n, -x can appear on the command line but they must match
-// in number i.e. a -n and -x for each -i and the id of the input must correspond
-// to an input layer in the fp32 graph when it is loaded.
-class CommandLineProcessor
-{
-public:
- bool ProcessCommandLine(int argc, char* argv[]);
-
- std::string GetInputFileName() {return m_InputFileName;}
- std::string GetCsvFileName() {return m_CsvFileName;}
- std::string GetCsvFileDirectory() {return m_CsvFileDirectory;}
- std::string GetOutputDirectoryName() {return m_OutputDirectory;}
- std::string GetOutputFileName() {return m_OutputFileName;}
- std::string GetQuantizationScheme() {return m_QuantizationScheme;}
- QuantizationDataSet GetQuantizationDataSet() {return m_QuantizationDataSet;}
- bool HasPreservedDataType() {return m_PreserveDataType;}
- bool HasQuantizationData() {return !m_QuantizationDataSet.IsEmpty();}
-
-protected:
- std::string m_InputFileName;
- std::string m_CsvFileName;
- std::string m_CsvFileDirectory;
- std::string m_OutputDirectory;
- std::string m_OutputFileName;
- std::string m_QuantizationScheme;
- QuantizationDataSet m_QuantizationDataSet;
- bool m_PreserveDataType;
-};
-
-} // namespace armnnQuantizer
-
diff --git a/src/armnnQuantizer/QuantizationDataSet.cpp b/src/armnnQuantizer/QuantizationDataSet.cpp
deleted file mode 100644
index 9694342fe8..0000000000
--- a/src/armnnQuantizer/QuantizationDataSet.cpp
+++ /dev/null
@@ -1,167 +0,0 @@
-//
-// Copyright © 2017 Arm Ltd. All rights reserved.
-// SPDX-License-Identifier: MIT
-//
-
-#include "QuantizationDataSet.hpp"
-#include "CsvReader.hpp"
-
-#define BOOST_FILESYSTEM_NO_DEPRECATED
-
-#include <boost/core/ignore_unused.hpp>
-#include <boost/filesystem/operations.hpp>
-#include <boost/filesystem/path.hpp>
-
-namespace armnnQuantizer
-{
-
-QuantizationDataSet::QuantizationDataSet()
-{
-}
-
-QuantizationDataSet::QuantizationDataSet(const std::string csvFilePath):
- m_QuantizationInputs(),
- m_CsvFilePath(csvFilePath)
-{
- ParseCsvFile();
-}
-
-void AddInputData(unsigned int passId,
- armnn::LayerBindingId bindingId,
- const std::string& inputFilePath,
- std::map<unsigned int, QuantizationInput>& passIdToQuantizationInput)
-{
- auto iterator = passIdToQuantizationInput.find(passId);
- if (iterator == passIdToQuantizationInput.end())
- {
- QuantizationInput input(passId, bindingId, inputFilePath);
- passIdToQuantizationInput.emplace(passId, input);
- }
- else
- {
- auto existingQuantizationInput = iterator->second;
- existingQuantizationInput.AddEntry(bindingId, inputFilePath);
- }
-}
-
-QuantizationDataSet::~QuantizationDataSet()
-{
-}
-
-void InputLayerVisitor::VisitInputLayer(const armnn::IConnectableLayer* layer,
- armnn::LayerBindingId id,
- const char* name)
-{
- boost::ignore_unused(name);
- m_TensorInfos.emplace(id, layer->GetOutputSlot(0).GetTensorInfo());
-}
-
-armnn::TensorInfo InputLayerVisitor::GetTensorInfo(armnn::LayerBindingId layerBindingId)
-{
- auto iterator = m_TensorInfos.find(layerBindingId);
- if (iterator != m_TensorInfos.end())
- {
- return m_TensorInfos.at(layerBindingId);
- }
- else
- {
- throw armnn::Exception("Could not retrieve tensor info for binding ID " + std::to_string(layerBindingId));
- }
-}
-
-
-unsigned int GetPassIdFromCsvRow(std::vector<armnnUtils::CsvRow> csvRows, unsigned int rowIndex)
-{
- unsigned int passId;
- try
- {
- passId = static_cast<unsigned int>(std::stoi(csvRows[rowIndex].values[0]));
- }
- catch (const std::invalid_argument&)
- {
- throw armnn::ParseException("Pass ID [" + csvRows[rowIndex].values[0] + "]" +
- " is not correct format on CSV row " + std::to_string(rowIndex));
- }
- return passId;
-}
-
-armnn::LayerBindingId GetBindingIdFromCsvRow(std::vector<armnnUtils::CsvRow> csvRows, unsigned int rowIndex)
-{
- armnn::LayerBindingId bindingId;
- try
- {
- bindingId = std::stoi(csvRows[rowIndex].values[1]);
- }
- catch (const std::invalid_argument&)
- {
- throw armnn::ParseException("Binding ID [" + csvRows[rowIndex].values[0] + "]" +
- " is not correct format on CSV row " + std::to_string(rowIndex));
- }
- return bindingId;
-}
-
-std::string GetFileNameFromCsvRow(std::vector<armnnUtils::CsvRow> csvRows, unsigned int rowIndex)
-{
- std::string fileName = csvRows[rowIndex].values[2];
-
- if (!boost::filesystem::exists(fileName))
- {
- throw armnn::ParseException("File [ " + fileName + "] provided on CSV row " + std::to_string(rowIndex) +
- " does not exist.");
- }
-
- if (fileName.empty())
- {
- throw armnn::ParseException("Filename cannot be empty on CSV row " + std::to_string(rowIndex));
- }
- return fileName;
-}
-
-
-void QuantizationDataSet::ParseCsvFile()
-{
- std::map<unsigned int, QuantizationInput> passIdToQuantizationInput;
- armnnUtils::CsvReader reader;
-
- if (m_CsvFilePath == "")
- {
- throw armnn::Exception("CSV file not specified.");
- }
-
- // Parse CSV file and extract data
- std::vector<armnnUtils::CsvRow> csvRows = reader.ParseFile(m_CsvFilePath);
- if (csvRows.empty())
- {
- throw armnn::Exception("CSV file [" + m_CsvFilePath + "] is empty.");
- }
-
- for (unsigned int i = 0; i < csvRows.size(); ++i)
- {
- if (csvRows[i].values.size() != 3)
- {
- throw armnn::Exception("CSV file [" + m_CsvFilePath + "] does not have correct number of entries " +
- "on line " + std::to_string(i) + ". Expected 3 entries " +
- "but was " + std::to_string(csvRows[i].values.size()));
- }
-
- unsigned int passId = GetPassIdFromCsvRow(csvRows, i);
- armnn::LayerBindingId bindingId = GetBindingIdFromCsvRow(csvRows, i);
- std::string rawFileName = GetFileNameFromCsvRow(csvRows, i);
-
- AddInputData(passId, bindingId, rawFileName, passIdToQuantizationInput);
- }
-
- if (passIdToQuantizationInput.empty())
- {
- throw armnn::Exception("Could not parse CSV file.");
- }
-
- // Once all entries in CSV file are parsed successfully and QuantizationInput map is populated, populate
- // QuantizationInputs iterator for easier access and clear the map
- for (auto itr = passIdToQuantizationInput.begin(); itr != passIdToQuantizationInput.end(); ++itr)
- {
- m_QuantizationInputs.emplace_back(itr->second);
- }
-}
-
-}
diff --git a/src/armnnQuantizer/QuantizationDataSet.hpp b/src/armnnQuantizer/QuantizationDataSet.hpp
deleted file mode 100644
index 3a97630ccf..0000000000
--- a/src/armnnQuantizer/QuantizationDataSet.hpp
+++ /dev/null
@@ -1,55 +0,0 @@
-//
-// Copyright © 2017 Arm Ltd. All rights reserved.
-// SPDX-License-Identifier: MIT
-//
-
-#pragma once
-
-#include <map>
-#include "QuantizationInput.hpp"
-#include "armnn/LayerVisitorBase.hpp"
-#include "armnn/Tensor.hpp"
-
-namespace armnnQuantizer
-{
-
-/// QuantizationDataSet is a structure which is created after parsing a quantization CSV file.
-/// It contains records of filenames which contain refinement data per pass ID for binding ID.
-class QuantizationDataSet
-{
- using QuantizationInputs = std::vector<armnnQuantizer::QuantizationInput>;
-public:
-
- using iterator = QuantizationInputs::iterator;
- using const_iterator = QuantizationInputs::const_iterator;
-
- QuantizationDataSet();
- QuantizationDataSet(std::string csvFilePath);
- ~QuantizationDataSet();
- bool IsEmpty() const {return m_QuantizationInputs.empty();}
-
- iterator begin() { return m_QuantizationInputs.begin(); }
- iterator end() { return m_QuantizationInputs.end(); }
- const_iterator begin() const { return m_QuantizationInputs.begin(); }
- const_iterator end() const { return m_QuantizationInputs.end(); }
- const_iterator cbegin() const { return m_QuantizationInputs.cbegin(); }
- const_iterator cend() const { return m_QuantizationInputs.cend(); }
-
-private:
- void ParseCsvFile();
-
- QuantizationInputs m_QuantizationInputs;
- std::string m_CsvFilePath;
-};
-
-/// Visitor class implementation to gather the TensorInfo for LayerBindingID for creation of ConstTensor for Refine.
-class InputLayerVisitor : public armnn::LayerVisitorBase<armnn::VisitorNoThrowPolicy>
-{
-public:
- void VisitInputLayer(const armnn::IConnectableLayer *layer, armnn::LayerBindingId id, const char* name);
- armnn::TensorInfo GetTensorInfo(armnn::LayerBindingId);
-private:
- std::map<armnn::LayerBindingId, armnn::TensorInfo> m_TensorInfos;
-};
-
-} // namespace armnnQuantizer \ No newline at end of file
diff --git a/src/armnnQuantizer/QuantizationInput.cpp b/src/armnnQuantizer/QuantizationInput.cpp
deleted file mode 100644
index bb7aff1c2c..0000000000
--- a/src/armnnQuantizer/QuantizationInput.cpp
+++ /dev/null
@@ -1,103 +0,0 @@
-//
-// Copyright © 2017 Arm Ltd. All rights reserved.
-// SPDX-License-Identifier: MIT
-//
-
-#include "QuantizationInput.hpp"
-
-#include <iostream>
-#include <fstream>
-#include <cstring>
-#include "armnn/Exceptions.hpp"
-
-namespace armnnQuantizer
-{
-
-QuantizationInput::QuantizationInput(const unsigned int passId,
- const armnn::LayerBindingId bindingId,
- const std::string fileName):
- m_PassId(passId)
-{
- m_LayerBindingIdToFileName.emplace(bindingId, fileName);
-}
-
-QuantizationInput::QuantizationInput(const QuantizationInput& other)
-{
- m_PassId = other.GetPassId();
- m_LayerBindingIdToFileName.clear();
- for (armnn::LayerBindingId bindingId : other.GetLayerBindingIds())
- {
- std::string filename = other.GetFileName(bindingId);
- AddEntry(bindingId, filename);
- }
-}
-
-void QuantizationInput::AddEntry(const armnn::LayerBindingId bindingId, const std::string fileName)
-{
- m_LayerBindingIdToFileName.emplace(bindingId, fileName);
-}
-
-std::vector<float> QuantizationInput::GetDataForEntry(const armnn::LayerBindingId bindingId) const
-{
- if (m_LayerBindingIdToFileName.at(bindingId).empty())
- {
- throw armnn::Exception("Layer binding ID not found");
- }
-
- std::string fileName = m_LayerBindingIdToFileName.at(bindingId);
- std::ifstream in(fileName.c_str(), std::ifstream::binary);
- if (!in.is_open())
- {
- throw armnn::Exception("Failed to open input tensor file " + fileName);
- }
-
- std::string line;
- std::vector<float> values;
- char* pEnd;
-
- while (std::getline(in, line, ' '))
- {
- values.emplace_back(std::strtof(line.c_str(), &pEnd));
- }
- return values;
-}
-
-std::vector<armnn::LayerBindingId> QuantizationInput::GetLayerBindingIds() const
-{
- std::vector<armnn::LayerBindingId> layerBindingIDs;
-
- for (auto iterator = m_LayerBindingIdToFileName.begin(); iterator != m_LayerBindingIdToFileName.end(); ++iterator)
- {
- layerBindingIDs.emplace_back(iterator->first);
- }
- return layerBindingIDs;
-}
-
-unsigned long QuantizationInput::GetNumberOfInputs() const
-{
- return m_LayerBindingIdToFileName.size();
-}
-
-unsigned int QuantizationInput::GetPassId() const
-{
- return m_PassId;
-}
-
-std::string QuantizationInput::GetFileName(const armnn::LayerBindingId bindingId) const
-{
- auto iterator = m_LayerBindingIdToFileName.find(bindingId);
- if (iterator != m_LayerBindingIdToFileName.end())
- {
- return m_LayerBindingIdToFileName.at(bindingId);
- }
- else
- {
- throw armnn::Exception("Could not retrieve filename for binding ID " + std::to_string(bindingId));
- }
-}
-
-QuantizationInput::~QuantizationInput() noexcept
-{
-}
-
-} \ No newline at end of file
diff --git a/src/armnnQuantizer/QuantizationInput.hpp b/src/armnnQuantizer/QuantizationInput.hpp
deleted file mode 100644
index 1bfe84bc19..0000000000
--- a/src/armnnQuantizer/QuantizationInput.hpp
+++ /dev/null
@@ -1,54 +0,0 @@
-//
-// Copyright © 2017 Arm Ltd. All rights reserved.
-// SPDX-License-Identifier: MIT
-//
-
-#pragma once
-
-#include <map>
-#include <armnn/Types.hpp>
-#include <armnnQuantizer/INetworkQuantizer.hpp>
-
-namespace armnnQuantizer
-{
-
-/// QuantizationInput for specific pass ID, can list a corresponding raw data file for each LayerBindingId.
-class QuantizationInput
-{
-public:
-
- /// Constructor for QuantizationInput
- QuantizationInput(const unsigned int passId,
- const armnn::LayerBindingId bindingId,
- const std::string fileName);
-
- QuantizationInput(const QuantizationInput& other);
-
- // Add binding ID to image tensor filepath entry
- void AddEntry(const armnn::LayerBindingId bindingId, const std::string fileName);
-
- // Retrieve tensor data for entry with provided binding ID
- std::vector<float> GetDataForEntry(const armnn::LayerBindingId bindingId) const;
-
- /// Retrieve Layer Binding IDs for this QuantizationInput.
- std::vector<armnn::LayerBindingId> GetLayerBindingIds() const;
-
- /// Get number of inputs for this QuantizationInput.
- unsigned long GetNumberOfInputs() const;
-
- /// Retrieve Pass ID for this QuantizationInput.
- unsigned int GetPassId() const;
-
- /// Retrieve filename path for specified Layer Binding ID.
- std::string GetFileName(const armnn::LayerBindingId bindingId) const;
-
- /// Destructor
- ~QuantizationInput() noexcept;
-
-private:
- unsigned int m_PassId;
- std::map<armnn::LayerBindingId, std::string> m_LayerBindingIdToFileName;
-
-};
-
-} \ No newline at end of file
diff --git a/src/armnnQuantizer/README.md b/src/armnnQuantizer/README.md
deleted file mode 100644
index 73b65e74b4..0000000000
--- a/src/armnnQuantizer/README.md
+++ /dev/null
@@ -1,18 +0,0 @@
-# The ArmnnQuantizer
-
-The `ArmnnQuantizer` is a program for loading a 32-bit float network into ArmNN and converting it into a quantized asymmetric 8-bit or quantized symmetric 16-bit network.
-It supports static quantization by default, dynamic quantization is enabled if CSV file of raw input tensors is provided. Run the program with no arguments to see command-line help.
-
-
-|Cmd:|||
-| ---|---|---|
-| -h | --help | Display help messages |
-| -f | --infile | Input file containing float 32 ArmNN Input Graph |
-| -s | --scheme | Quantization scheme, "QAsymm8" or "QSymm16". Default value: QAsymm8 |
-| -c | --csvfile | CSV file containing paths for raw input tensors for dynamic quantization. If unset, static quantization is used |
-| -p | --preserve-data-type | Preserve the input and output data types. If unset, input and output data types are not preserved |
-| -d | --outdir | Directory that output file will be written to |
-| -o | --outfile | ArmNN output file name |
-
-Example usage: <br>
-<code>./ArmnnQuantizer -f /path/to/armnn/input/graph/ -s "QSymm16" -c /path/to/csv/file -p 1 -d /path/to/output -o outputFileName</code>
diff --git a/src/armnnQuantizer/test/QuantizationDataSetTests.cpp b/src/armnnQuantizer/test/QuantizationDataSetTests.cpp
deleted file mode 100644
index 2b46aae26e..0000000000
--- a/src/armnnQuantizer/test/QuantizationDataSetTests.cpp
+++ /dev/null
@@ -1,144 +0,0 @@
-//
-// Copyright © 2017 Arm Ltd. All rights reserved.
-// SPDX-License-Identifier: MIT
-//
-
-#include <boost/test/unit_test.hpp>
-
-#include "../QuantizationDataSet.hpp"
-#include <iostream>
-#include <fstream>
-#include <vector>
-#include <map>
-
-#define BOOST_FILESYSTEM_NO_DEPRECATED
-
-#include <boost/filesystem/operations.hpp>
-#include <boost/filesystem/fstream.hpp>
-#include <boost/filesystem/path.hpp>
-#include <boost/optional/optional.hpp>
-
-
-using namespace armnnQuantizer;
-
-struct CsvTestHelper {
-
- CsvTestHelper()
- {
- BOOST_TEST_MESSAGE("setup fixture");
- }
-
- ~CsvTestHelper()
- {
- BOOST_TEST_MESSAGE("teardown fixture");
- TearDown();
- }
-
- std::string CreateTempCsvFile(std::map<int, std::vector<float>> csvData)
- {
- boost::filesystem::path fileDir = boost::filesystem::temp_directory_path();
- boost::filesystem::path p{fileDir / boost::filesystem::unique_path("%%%%-%%%%-%%%%.csv")};
-
- boost::filesystem::path tensorInput1{fileDir / boost::filesystem::unique_path("input_0_0.raw")};
- boost::filesystem::path tensorInput2{fileDir / boost::filesystem::unique_path("input_1_0.raw")};
- boost::filesystem::path tensorInput3{fileDir / boost::filesystem::unique_path("input_2_0.raw")};
-
- try
- {
- boost::filesystem::ofstream ofs{p};
-
- boost::filesystem::ofstream ofs1{tensorInput1};
- boost::filesystem::ofstream ofs2{tensorInput2};
- boost::filesystem::ofstream ofs3{tensorInput3};
-
-
- for(auto entry : csvData.at(0))
- {
- ofs1 << entry << " ";
- }
- for(auto entry : csvData.at(1))
- {
- ofs2 << entry << " ";
- }
- for(auto entry : csvData.at(2))
- {
- ofs3 << entry << " ";
- }
-
- ofs << "0, 0, " << tensorInput1.c_str() << std::endl;
- ofs << "2, 0, " << tensorInput3.c_str() << std::endl;
- ofs << "1, 0, " << tensorInput2.c_str() << std::endl;
-
- ofs.close();
- ofs1.close();
- ofs2.close();
- ofs3.close();
- }
- catch (std::exception &e)
- {
- std::cerr << "Unable to write to file at location [" << p.c_str() << "] : " << e.what() << std::endl;
- BOOST_TEST(false);
- }
-
- m_CsvFile = p;
- return p.string();
- }
-
- void TearDown()
- {
- RemoveCsvFile();
- }
-
- void RemoveCsvFile()
- {
- if (m_CsvFile)
- {
- try
- {
- boost::filesystem::remove(*m_CsvFile);
- }
- catch (std::exception &e)
- {
- std::cerr << "Unable to delete file [" << *m_CsvFile << "] : " << e.what() << std::endl;
- BOOST_TEST(false);
- }
- }
- }
-
- boost::optional<boost::filesystem::path> m_CsvFile;
-};
-
-
-BOOST_AUTO_TEST_SUITE(QuantizationDataSetTests)
-
-BOOST_FIXTURE_TEST_CASE(CheckDataSet, CsvTestHelper)
-{
-
- std::map<int, std::vector<float>> csvData;
- csvData.insert(std::pair<int, std::vector<float>>(0, { 0.111111f, 0.222222f, 0.333333f }));
- csvData.insert(std::pair<int, std::vector<float>>(1, { 0.444444f, 0.555555f, 0.666666f }));
- csvData.insert(std::pair<int, std::vector<float>>(2, { 0.777777f, 0.888888f, 0.999999f }));
-
- std::string myCsvFile = CsvTestHelper::CreateTempCsvFile(csvData);
- QuantizationDataSet dataSet(myCsvFile);
- BOOST_TEST(!dataSet.IsEmpty());
-
- int csvRow = 0;
- for(armnnQuantizer::QuantizationInput input : dataSet)
- {
- BOOST_TEST(input.GetPassId() == csvRow);
-
- BOOST_TEST(input.GetLayerBindingIds().size() == 1);
- BOOST_TEST(input.GetLayerBindingIds()[0] == 0);
- BOOST_TEST(input.GetDataForEntry(0).size() == 3);
-
- // Check that QuantizationInput data for binding ID 0 corresponds to float values
- // used for populating the CSV file using by QuantizationDataSet
- BOOST_TEST(input.GetDataForEntry(0).at(0) == csvData.at(csvRow).at(0));
- BOOST_TEST(input.GetDataForEntry(0).at(1) == csvData.at(csvRow).at(1));
- BOOST_TEST(input.GetDataForEntry(0).at(2) == csvData.at(csvRow).at(2));
- ++csvRow;
- }
-}
-
-BOOST_AUTO_TEST_SUITE_END(); \ No newline at end of file