Пример #1
0
class VideoTop1Metric(Metric):
    def __init__(self):
        self.am = AverageMeter()

    def update(self, prediction, target):
        if target.dim() == 3:
            target = target.max(dim=1)[0]
        prediction_video = prediction.max(dim=0, keepdim=True)[0]
        target_video = target.max(dim=0, keepdim=True)[0]
        prec1, = accuracy(prediction_video, target_video, topk=(1, ))
        self.am.update(prec1.item())

    def __repr__(self):
        return 'VideoPrec@1 {am.val:.3f} ({am.avg:.3f})'.format(am=self.am)

    def compute(self):
        return ('videotop1', self.am.avg)
Пример #2
0
class Top1Metric(Metric):
    def __init__(self):
        self.am = AverageMeter()

    def update(self, prediction, target):
        if isinstance(prediction, dict):
            prediction = prediction['class_prediction']
        if isinstance(target, dict):
            target = target['class_target']
        if len(target) > 0:
            prec1, = accuracy(prediction, target, topk=(1, ))
            self.am.update(prec1.item())

    def __repr__(self):
        return 'Prec@1 {am.val:.3f} ({am.avg:.3f})'.format(am=self.am)

    def compute(self):
        return ('top1', self.am.avg)
Пример #3
0
 def __init__(self):
     self.am = AverageMeter()
     self.predictions = []
     self.targets = []
     this_dir = os.path.dirname(__file__)
     top60path = '../external/ActivityNet/Evaluation/ava/ava_action_list_v2.1_for_activitynet_2018.pbtxt.txt'
     top60path = os.path.join(this_dir, top60path)
     with open(top60path) as f:
         self.top60 = [int(x) for x in re.findall('[0-9]+', f.read())]
Пример #4
0
class TripletAccuracyMetric(Metric):
    def __init__(self):
        self.am = AverageMeter()

    def update(self, prediction, target):
        if isinstance(prediction, dict):
            prediction = prediction['triplet_prediction']
        if isinstance(target, dict):
            target = target['triplet_target']
        if len(target) > 0:
            prec1 = self.triplet_accuracy(prediction, target)
            self.am.update(prec1.item())

    def __repr__(self):
        return 'triplet_accuracy_metric {am.val:.3f} ({am.avg:.3f})'.format(
            am=self.am)

    def compute(self):
        return ('triplet_accuracy_metric', self.am.avg)

    def triplet_accuracy(self, output, target, weights=None):
        """
           if target>0 then first output should be smaller than right output
           optional weighted average
        """
        if type(output) is not list:
            output = [(x.item(), y.item()) for x, y in zip(*output)]
        correct = [
            x < y if t > 0 else y < x for (x, y), t in zip(output, target)
        ]
        if weights is None:
            return np.mean(correct)
        else:
            weights = weights.numpy()
            weights = weights / (1e-5 + np.sum(weights))
            return np.sum(np.array(correct).astype(float) * weights)
Пример #5
0
 def __init__(self):
     self.am = AverageMeter()
Пример #6
0
 def __init__(self):
     self.am = AverageMeter()
     self.predictions = []
     self.targets = []