(self, imgId, catId, hRng, vRng, maxDet)
return {
                'image_id':     imgId,
                'category_id':  catId,
                'hRng':         hRng,
                'vRng':         vRng,
                'maxDet':       maxDet,
                'dtIds':        [d['id'] for d in dt],
                'gtIds':        [g['id'] for g in gt],
                'dtMatches':    dtm,
                'gtMatches':    gtm,
                'dtScores':     [d['score'] for d in dt],
                'gtIgnore':     gtIg,
                'dtIgnore':     dtIg,
            }
perform evaluation for single category and image
        :return: dict (single image results)
perform evaluation for single category and image
        :return: dict (single image results)
perform evaluation for single category and image : return : dict ( single image results )
def evaluateImg(self, imgId, catId, hRng, vRng, maxDet):
        '''
        perform evaluation for single category and image
        :return: dict (single image results)
        '''
        # if imgId==273:
        #     pass
        p = self.params
        if p.useCats:
            gt = self._gts[imgId,catId]
            dt = self._dts[imgId,catId]
        else:
            gt = [_ for cId in p.catIds for _ in self._gts[imgId,cId]]
            dt = [_ for cId in p.catIds for _ in self._dts[imgId,cId]]
        if len(gt) == 0 and len(dt) ==0:
            return None

        for g in gt:
            if g['ignore']:
                g['_ignore'] = 1
            else:
                g['_ignore'] = 0
        # sort dt highest score first, sort gt ignore last
        gtind = np.argsort([g['_ignore'] for g in gt], kind='mergesort')
        gt = [gt[i] for i in gtind]
        dtind = np.argsort([-d['score'] for d in dt], kind='mergesort')
        # dtind = np.argsort([-d['score'] for d in dt])
        dt = [dt[i] for i in dtind[0:maxDet]]
        # exclude dt out of height range
        # dt = [d for d in dt if d['height'] >= hRng[0] / self.params.expFilter and d['height'] < hRng[1] * self.params.expFilter]
        # dtind = np.array([int(d['id'] - dt[0]['id']) for d in dt])
        dtind = [i for i in range(len(dt))]
#         dtind = [i for i in range(len(dt)) if dt[i]['bbox'][3] >= hRng[0] / self.params.expFilter and dt[i]['bbox'][3] < hRng[1] * self.params.expFilter]
#         dt = [d for d in dt if d['bbox'][3] >= hRng[0] / self.params.expFilter and d['bbox'][3] < hRng[1] * self.params.expFilter]
        # if np.max(dtind)>1000:
        #     pass

        # load computed ious
        if len(dtind) > 0:
            ious = self.ious[imgId, catId][dtind, :] if len(self.ious[imgId, catId]) > 0 else self.ious[imgId, catId]
            ious = ious[:, gtind]
        else:
            ious = []

        T = len(p.iouThrs)
        G = len(gt)
        D = len(dt)
        gtm  = np.zeros((T,G))
        dtm  = np.zeros((T,D))
        gtIg = np.array([g['_ignore'] for g in gt])
        dtIg = np.zeros((T,D))
        if not len(ious)==0:
            for tind, t in enumerate(p.iouThrs):
                for dind, d in enumerate(dt):
                    # information about best match so far (m=-1 -> unmatched)
                    iou = min([t,1-1e-10])
                    bstOa = iou
                    bstg = -2
                    bstm = -2
                    for gind, g in enumerate(gt):
                        m = gtm[tind,gind]
                        # if this gt already matched, and not a crowd, continue
                        if m>0:
                            continue
                        # if dt matched to reg gt, and on ignore gt, stop
                        if bstm!=-2 and gtIg[gind] == 1:
                            break
                        # continue to next gt unless better match made
                        if ious[dind,gind] < bstOa:
                            continue
                        # if match successful and best so far, store appropriately
                        bstOa=ious[dind,gind]
                        bstg = gind
                        if gtIg[gind] == 0:
                            bstm = 1
                        else:
                            bstm = -1

                    # if match made store id of match for both dt and gt
                    if bstg ==-2:
                        continue
                    dtIg[tind,dind] = gtIg[bstg]
                    dtm[tind,dind]  = gt[bstg]['id']
                    if bstm == 1:
                        gtm[tind,bstg]     = d['id']

        # store results for given image and category
        return {
                'image_id':     imgId,
                'category_id':  catId,
                'hRng':         hRng,
                'vRng':         vRng,
                'maxDet':       maxDet,
                'dtIds':        [d['id'] for d in dt],
                'gtIds':        [g['id'] for g in gt],
                'dtMatches':    dtm,
                'gtMatches':    gtm,
                'dtScores':     [d['score'] for d in dt],
                'gtIgnore':     gtIg,
                'dtIgnore':     dtIg,
            }
def evaluateImg ( self , imgId , catId , hRng , vRng , maxDet ) : # if imgId==273: #     pass p = self . params if p . useCats : gt = self . _gts [ imgId , catId ] dt = self . _dts [ imgId , catId ] else : gt = [ _ for cId in p . catIds for _ in self . _gts [ imgId , cId ] ] dt = [ _ for cId in p . catIds for _ in self . _dts [ imgId , cId ] ] if len ( gt ) == 0 and len ( dt ) == 0 : return None for g in gt : if g [ 'ignore' ] : g [ '_ignore' ] = 1 else : g [ '_ignore' ] = 0 # sort dt highest score first, sort gt ignore last gtind = np . argsort ( [ g [ '_ignore' ] for g in gt ] , kind = 'mergesort' ) gt = [ gt [ i ] for i in gtind ] dtind = np . argsort ( [ - d [ 'score' ] for d in dt ] , kind = 'mergesort' ) # dtind = np.argsort([-d['score'] for d in dt]) dt = [ dt [ i ] for i in dtind [ 0 : maxDet ] ] # exclude dt out of height range # dt = [d for d in dt if d['height'] >= hRng[0] / self.params.expFilter and d['height'] < hRng[1] * self.params.expFilter] # dtind = np.array([int(d['id'] - dt[0]['id']) for d in dt]) dtind = [ i for i in range ( len ( dt ) ) ] #         dtind = [i for i in range(len(dt)) if dt[i]['bbox'][3] >= hRng[0] / self.params.expFilter and dt[i]['bbox'][3] < hRng[1] * self.params.expFilter] #         dt = [d for d in dt if d['bbox'][3] >= hRng[0] / self.params.expFilter and d['bbox'][3] < hRng[1] * self.params.expFilter] # if np.max(dtind)>1000: #     pass # load computed ious if len ( dtind ) > 0 : ious = self . ious [ imgId , catId ] [ dtind , : ] if len ( self . ious [ imgId , catId ] ) > 0 else self . ious [ imgId , catId ] ious = ious [ : , gtind ] else : ious = [ ] T = len ( p . iouThrs ) G = len ( gt ) D = len ( dt ) gtm = np . zeros ( ( T , G ) ) dtm = np . zeros ( ( T , D ) ) gtIg = np . array ( [ g [ '_ignore' ] for g in gt ] ) dtIg = np . zeros ( ( T , D ) ) if not len ( ious ) == 0 : for tind , t in enumerate ( p . iouThrs ) : for dind , d in enumerate ( dt ) : # information about best match so far (m=-1 -> unmatched) iou = min ( [ t , 1 - 1e-10 ] ) bstOa = iou bstg = - 2 bstm = - 2 for gind , g in enumerate ( gt ) : m = gtm [ tind , gind ] # if this gt already matched, and not a crowd, continue if m > 0 : continue # if dt matched to reg gt, and on ignore gt, stop if bstm != - 2 and gtIg [ gind ] == 1 : break # continue to next gt unless better match made if ious [ dind , gind ] < bstOa : continue # if match successful and best so far, store appropriately bstOa = ious [ dind , gind ] bstg = gind if gtIg [ gind ] == 0 : bstm = 1 else : bstm = - 1 # if match made store id of match for both dt and gt if bstg == - 2 : continue dtIg [ tind , dind ] = gtIg [ bstg ] dtm [ tind , dind ] = gt [ bstg ] [ 'id' ] if bstm == 1 : gtm [ tind , bstg ] = d [ 'id' ] # store results for given image and category return { 'image_id' : imgId , 'category_id' : catId , 'hRng' : hRng , 'vRng' : vRng , 'maxDet' : maxDet , 'dtIds' : [ d [ 'id' ] for d in dt ] , 'gtIds' : [ g [ 'id' ] for g in gt ] , 'dtMatches' : dtm , 'gtMatches' : gtm , 'dtScores' : [ d [ 'score' ] for d in dt ] , 'gtIgnore' : gtIg , 'dtIgnore' : dtIg , }