import cv2 as cv from ..timer import Timer class BaseMetric: def __init__(self, **kwargs): self._warmup = kwargs.pop('warmup', 3) self._repeat = kwargs.pop('repeat', 10) self._timer = Timer() def _calcMedian(self, records): ''' Return the median of records ''' l = len(records) mid = int(l / 2) if l % 2 == 0: return (records[mid] + records[mid - 1]) / 2 else: return records[mid] def _calcMean(self, records, drop_largest=1): ''' Return the mean of records after dropping drop_largest ''' l = len(records) if l <= drop_largest: print('len(records)({}) <= drop_largest({}), stop dropping.'.format(l, drop_largest)) records_sorted = sorted(records, reverse=True) return sum(records_sorted[drop_largest:]) / (l - drop_largest) def _calcMin(self, records): return min(records) def getPerfStats(self, records): mean = self._calcMean(records, int(len(records) / 10)) median = self._calcMedian(records) minimum = self._calcMin(records) return [mean, median, minimum] def forward(self, model, *args, **kwargs): raise NotImplementedError('Not implemented')