Yuantao Feng
Decoupling dataloader and benchmark runner (#16)
0199e9f
raw
history blame
1.48 kB
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._reduction = kwargs.pop('reduction', 'median')
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 _calcGMean(self, records, drop_largest=3):
''' Return the geometric mean of records after drop the first 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 _getResult(self):
records = self._timer.getRecords()
if self._reduction == 'median':
return self._calcMedian(records)
elif self._reduction == 'gmean':
return self._calcGMean(records)
else:
raise NotImplementedError('Reduction {} is not supported'.format(self._reduction))
def getReduction(self):
return self._reduction
def forward(self, model, *args, **kwargs):
raise NotImplementedError('Not implemented')