#!/usr/bin/env python import sys,os class AnnoFile: def __init__(self): self.anno={} def load(self, filename): f=open(filename) for l in f: tok=l.split() self.anno[tok[0]]=map(lambda x: float(x), tok[1:]) f.close() class Classes: def __init__(self): self.no2name={} self.name2no={} def load(self, filename): f=open(filename) first=True for l in f: if first: first=False else: tok=l.split() self.no2name[int(tok[0])]=tok[1] self.name2no[tok[1]]=int(tok[0]) # get the EER for a pair of classes def EERcls(toEval, GT, cls): ranking=[] Npos=0 Nneg=0 EERfound=False for img in toEval.anno: # get the right columns, and count number of positive and negative images in groudtruth ranking+=[(toEval.anno[img][cls], GT.anno[img][cls])] if GT.anno[img][cls]==1: Npos+=1 else: Nneg+=1 # sort the ranking ranking.sort() eer=-1 pos=0 neg=0 # determine TPR and FPR oldtp=0 roc=[] for i in ranking: if i[1]==1: pos+=1 else: neg+=1 fpr=float(neg)/float(Nneg) tpr=float(pos)/float(Npos) roc+=[(tpr,fpr)] # find the crossing point=EER if not EERfound and ( (abs(tpr-(1-fpr))<=0.05) or (1-tpr)>f,j[0],j[1] f=open("plot-%s.gpl"%fname,'w') print >>f,"set title \"%s\""%fname first=True for i in classes.no2name: if first: print>>f, "plot \\" print>>f, "\"roc-%s-%i.txt\" title \"%s\" with lines \\"%(fname,i,classes.no2name[i]) first=False else: print>>f, ",\"roc-%s-%i.txt\" title \"%s\" with lines \\"%(fname,i,classes.no2name[i]) print >>f print >>f,"pause(-1)" trainGT=AnnoFile() #trainGT.load("test.anno.txt") trainGT.load("train.anno.txt") cls=Classes() cls.load("classes.txt") if "-roc" in sys.argv: writeROCs=True sys.argv.pop(sys.argv.index("-roc")) for evalf in sys.argv[1:]: toEval=AnnoFile() toEval.load(evalf) print evalf EERall(toEval, trainGT,cls,writeROCs,os.path.basename(evalf))