ArmNN
 20.08
armnnQuantizer Namespace Reference

Classes

class  CommandLineProcessor
 
class  InputLayerVisitor
 Visitor class implementation to gather the TensorInfo for LayerBindingID for creation of ConstTensor for Refine. More...
 
class  QuantizationDataSet
 QuantizationDataSet is a structure which is created after parsing a quantization CSV file. More...
 
class  QuantizationInput
 QuantizationInput for specific pass ID, can list a corresponding raw data file for each LayerBindingId. More...
 

Functions

bool ValidateOutputDirectory (std::string &dir)
 
bool ValidateProvidedFile (const std::string &inputFileName)
 
bool ValidateQuantizationScheme (const std::string &scheme)
 
void AddInputData (unsigned int passId, armnn::LayerBindingId bindingId, const std::string &inputFilePath, std::map< unsigned int, QuantizationInput > &passIdToQuantizationInput)
 
unsigned int GetPassIdFromCsvRow (std::vector< armnnUtils::CsvRow > csvRows, unsigned int rowIndex)
 
armnn::LayerBindingId GetBindingIdFromCsvRow (std::vector< armnnUtils::CsvRow > csvRows, unsigned int rowIndex)
 
std::string GetFileNameFromCsvRow (std::vector< armnnUtils::CsvRow > csvRows, unsigned int rowIndex)
 

Function Documentation

◆ AddInputData()

void armnnQuantizer::AddInputData ( unsigned int  passId,
armnn::LayerBindingId  bindingId,
const std::string &  inputFilePath,
std::map< unsigned int, QuantizationInput > &  passIdToQuantizationInput 
)

Definition at line 26 of file QuantizationDataSet.cpp.

Referenced by GetFileNameFromCsvRow().

30 {
31  auto iterator = passIdToQuantizationInput.find(passId);
32  if (iterator == passIdToQuantizationInput.end())
33  {
34  QuantizationInput input(passId, bindingId, inputFilePath);
35  passIdToQuantizationInput.emplace(passId, input);
36  }
37  else
38  {
39  auto existingQuantizationInput = iterator->second;
40  existingQuantizationInput.AddEntry(bindingId, inputFilePath);
41  }
42 }

◆ GetBindingIdFromCsvRow()

armnn::LayerBindingId armnnQuantizer::GetBindingIdFromCsvRow ( std::vector< armnnUtils::CsvRow csvRows,
unsigned int  rowIndex 
)

Definition at line 85 of file QuantizationDataSet.cpp.

Referenced by GetFileNameFromCsvRow().

86 {
87  armnn::LayerBindingId bindingId;
88  try
89  {
90  bindingId = std::stoi(csvRows[rowIndex].values[1]);
91  }
92  catch (const std::invalid_argument&)
93  {
94  throw armnn::ParseException("Binding ID [" + csvRows[rowIndex].values[0] + "]" +
95  " is not correct format on CSV row " + std::to_string(rowIndex));
96  }
97  return bindingId;
98 }
int LayerBindingId
Type of identifiers for bindable layers (inputs, outputs).
Definition: Types.hpp:194

◆ GetFileNameFromCsvRow()

std::string armnnQuantizer::GetFileNameFromCsvRow ( std::vector< armnnUtils::CsvRow csvRows,
unsigned int  rowIndex 
)

Definition at line 100 of file QuantizationDataSet.cpp.

References AddInputData(), GetBindingIdFromCsvRow(), GetPassIdFromCsvRow(), and CsvReader::ParseFile().

101 {
102  std::string fileName = csvRows[rowIndex].values[2];
103 
104  if (!fs::exists(fileName))
105  {
106  throw armnn::ParseException("File [ " + fileName + "] provided on CSV row " + std::to_string(rowIndex) +
107  " does not exist.");
108  }
109 
110  if (fileName.empty())
111  {
112  throw armnn::ParseException("Filename cannot be empty on CSV row " + std::to_string(rowIndex));
113  }
114  return fileName;
115 }

◆ GetPassIdFromCsvRow()

unsigned int armnnQuantizer::GetPassIdFromCsvRow ( std::vector< armnnUtils::CsvRow csvRows,
unsigned int  rowIndex 
)

Definition at line 70 of file QuantizationDataSet.cpp.

Referenced by GetFileNameFromCsvRow().

71 {
72  unsigned int passId;
73  try
74  {
75  passId = static_cast<unsigned int>(std::stoi(csvRows[rowIndex].values[0]));
76  }
77  catch (const std::invalid_argument&)
78  {
79  throw armnn::ParseException("Pass ID [" + csvRows[rowIndex].values[0] + "]" +
80  " is not correct format on CSV row " + std::to_string(rowIndex));
81  }
82  return passId;
83 }

◆ ValidateOutputDirectory()

bool armnnQuantizer::ValidateOutputDirectory ( std::string &  dir)

Definition at line 14 of file CommandLineProcessor.cpp.

Referenced by CommandLineProcessor::ProcessCommandLine().

15 {
16  if (dir.empty())
17  {
18  std::cerr << "No output directory specified" << std::endl;
19  return false;
20  }
21 
22  if (dir[dir.length() - 1] != '/')
23  {
24  dir += "/";
25  }
26 
27  if (!fs::exists(dir))
28  {
29  std::cerr << "Output directory [" << dir << "] does not exist" << std::endl;
30  return false;
31  }
32 
33  if (!fs::is_directory(dir))
34  {
35  std::cerr << "Given output directory [" << dir << "] is not a directory" << std::endl;
36  return false;
37  }
38 
39  return true;
40 }

◆ ValidateProvidedFile()

bool armnnQuantizer::ValidateProvidedFile ( const std::string &  inputFileName)

Definition at line 42 of file CommandLineProcessor.cpp.

Referenced by CommandLineProcessor::ProcessCommandLine().

43 {
44  if (!fs::exists(inputFileName))
45  {
46  std::cerr << "Provided file [" << inputFileName << "] does not exist" << std::endl;
47  return false;
48  }
49 
50  if (fs::is_directory(inputFileName))
51  {
52  std::cerr << "Given file [" << inputFileName << "] is a directory" << std::endl;
53  return false;
54  }
55 
56  return true;
57 }

◆ ValidateQuantizationScheme()

bool armnnQuantizer::ValidateQuantizationScheme ( const std::string &  scheme)

Definition at line 59 of file CommandLineProcessor.cpp.

Referenced by CommandLineProcessor::ProcessCommandLine().

60 {
61  if (scheme.empty())
62  {
63  std::cerr << "No Quantization Scheme specified" << std::endl;
64  return false;
65  }
66 
67  std::vector<std::string> supportedSchemes =
68  {
69  "QAsymmS8",
70  "QAsymmU8",
71  "QSymm16"
72  };
73 
74  auto iterator = std::find(supportedSchemes.begin(), supportedSchemes.end(), scheme);
75  if (iterator == supportedSchemes.end())
76  {
77  std::cerr << "Quantization Scheme [" << scheme << "] is not supported" << std::endl;
78  return false;
79  }
80 
81  return true;
82 }