Publishing 2019 R3 content
[platform/upstream/dldt.git] / tools / calibration / calibration_configuration.py
1 import shutil
2 from ..utils.network_info import NetworkInfo
3
4
5 class CalibrationConfiguration:
6     """
7     Class for parsing input config
8     """
9     def __init__(
10         self,
11         config: str,
12         precision: str,
13         model: str,
14         weights: str,
15         tmp_directory: str,
16         output_model: str,
17         output_weights: str,
18         cpu_extension: str,
19         gpu_extension: str,
20         device: str,
21         batch_size: int,
22         threshold: float,
23         ignore_layer_types: list,
24         ignore_layer_types_path: str,
25         ignore_layer_names: list,
26         ignore_layer_names_path: str,
27         benchmark_iterations_count: int,
28         progress: str,
29         threshold_step: float,
30         threshold_boundary: float,
31         simplified_mode: bool = False
32     ):
33
34         self._config = config
35         self._precision = precision.upper()
36         self._model = model
37         self._weights = weights
38         self._tmp_directory = tmp_directory
39         self._output_model = output_model
40         self._output_weights = output_weights
41         self._cpu_extension = cpu_extension
42         self._gpu_extension = gpu_extension
43         self._device = device
44         self._batch_size = batch_size
45         self._threshold = threshold
46         self._ignore_layer_types = ignore_layer_types
47         self._ignore_layer_types_path = ignore_layer_types_path
48         self._ignore_layer_names = ignore_layer_names
49         self._ignore_layer_names_path = ignore_layer_names_path
50         self._benchmark_iterations_count = benchmark_iterations_count
51         self._progress = progress
52         self._threshold_step = threshold_step
53         self._threshold_boundary = threshold_boundary
54         self._simplified_mode = simplified_mode
55
56     def __enter__(self):
57         return self
58
59     def __exit__(self, type, value, traceback):
60         self.release()
61
62     def release(self):
63         if self.tmp_directory:
64             shutil.rmtree(self.tmp_directory)
65             self._tmp_directory = None
66
67     @property
68     def config(self) -> list:
69         return self._config
70
71     @property
72     def precision(self) -> str:
73         return self._precision
74
75     @property
76     def model(self) -> str:
77         return self._model
78
79     @property
80     def weights(self) -> str:
81         return self._weights
82
83     @property
84     def tmp_directory(self) -> str:
85         return self._tmp_directory
86
87     @property
88     def output_model(self) -> str:
89         return self._output_model
90
91     @property
92     def output_weights(self) -> str:
93         return self._output_weights
94
95     @property
96     def cpu_extension(self) -> str:
97         return self._cpu_extension
98
99     @property
100     def gpu_extension(self) -> str:
101         return self._gpu_extension
102
103     @property
104     def device(self) -> str:
105         return self._device
106
107     @property
108     def batch_size(self) -> int:
109         return self._batch_size
110
111     @property
112     def threshold(self) -> int:
113         return self._threshold
114
115     @property
116     def ignore_layer_types(self):
117         return self._ignore_layer_types
118
119     @property
120     def ignore_layer_types_path(self) -> str:
121         return self._ignore_layer_types_path
122
123     @property
124     def ignore_layer_names(self):
125         return self._ignore_layer_names
126
127     @property
128     def ignore_layer_names_path(self) -> str:
129         return self._ignore_layer_names_path
130
131     @property
132     def benchmark_iterations_count(self) -> int:
133         return self._benchmark_iterations_count
134
135     @property
136     def progress(self) -> str:
137         return self._progress
138
139     @property
140     def threshold_step(self) -> float:
141         return self._threshold_step
142
143     @property
144     def threshold_boundary(self) -> float:
145         return self._threshold_boundary
146
147     @property
148     def simplified_mode(self) -> bool:
149         return self._simplified_mode
150
151 class CalibrationConfigurationHelper:
152     @staticmethod
153     def read_ignore_layer_names(configuration: CalibrationConfiguration):
154         ignore_layer_types = configuration.ignore_layer_types
155
156         if configuration.ignore_layer_types_path:
157             ignore_layer_types_file = open(configuration.ignore_layer_types_path, 'r')
158             ignore_layer_types_from_file = [line.strip() for line in ignore_layer_types_file.readlines()]
159             ignore_layer_types.extend(ignore_layer_types_from_file)
160
161         ignore_layer_names = NetworkInfo(configuration.model).get_layer_names_by_types(layer_types=ignore_layer_types)
162
163         if configuration.ignore_layer_names_path:
164             ignore_layer_names_file = open(configuration.ignore_layer_names_path, 'r')
165             ignore_layer_names_from_file = [line.strip() for line in ignore_layer_names_file.readlines()]
166             ignore_layer_names.extend(ignore_layer_names_from_file)
167
168         return ignore_layer_names