Пример #1
0
    def compute_score(self, gts, res):
        """
        Main function to compute CIDEr score
        :param  hypo_for_image (dict) : dictionary with key <image> and value <tokenized hypothesis / candidate sentence>
                ref_for_image (dict)  : dictionary with key <image> and value <tokenized reference sentence>
        :return: cider (float) : computed CIDEr score for the corpus 
        """

        assert(gts.keys() == res.keys())
        imgIds = gts.keys()

        cider_scorer = CiderScorer(n=self._n, sigma=self._sigma)

        for id in imgIds:
            hypo = res[id]
            ref = gts[id]

            # Sanity check.
            assert(type(hypo) is list)
            assert(len(hypo) == 1)
            assert(type(ref) is list)
            assert(len(ref) > 0)

            cider_scorer += (hypo[0], ref)

        (score, scores) = cider_scorer.compute_score()

        return score, scores
Пример #2
0
    def __init__(self, coco, useBleu=False, useCider=False):
        self.coco = coco
        self.useBleu = useBleu
        self.useCider = useCider
        self.params = {'image_id': coco.getImgIds()}

        imgIds = self.params['image_id']
        gts = {}
        for imgId in imgIds:
            gts[imgId] = self.coco.imgToAnns[imgId]

        if self.useBleu:
            self.b_scorer = BleuScorer()
        if self.useCider:
            self.c_scorer = CiderScorer()

        print('tokenization...')
        tokenizer = PTBTokenizer()
        gts = tokenizer.tokenize(gts)

        for imgId in imgIds:
            ref = gts[imgId]

            assert (type(ref) is list)
            assert (len(ref) > 0)

            if self.useCider:
                self.c_scorer += (None, ref)

        if self.useCider:
            self.c_scorer.compute_doc_freq()
            assert (len(self.c_scorer.ctest) >= max(
                self.c_scorer.document_frequency.values()))
Пример #3
0
    def compute_score(self, gts, res):
        """
        Main function to compute CIDEr score
        : param  gts (dict) : {image:tokenized reference sentence}
        : param res (dict)  : {image:tokenized candidate sentence}
        : return: cider (float) : computed CIDEr score for the corpus
        """

        cider_scorer = CiderScorer(n=self._n)

        for res_id in res:

            hypo = res_id['caption']
            ref = gts[res_id['image_id']]

            # Sanity check.
            assert(type(hypo) is list)
            assert(len(hypo) == 1)
            assert(type(ref) is list)
            assert(len(ref) > 0)
            cider_scorer += (hypo[0], ref)

        (score, scores) = cider_scorer.compute_score(self._df)

        return score, scores
Пример #4
0
 def __init__(self, n=4, df="corpus"):
     """
     Initialize the CIDEr scoring function
     : param n (int): n-gram size
     : param df (string): specifies where to get the IDF values from
                 takes values 'corpus', 'coco-train'
     : return: None
     """
     # set cider to sum over 1 to 4-grams
     self._n = n
     self._df = df
     self.cider_scorer = CiderScorer(n=self._n, df_mode=self._df)
Пример #5
0
 def setup(self, bottom, top):
   if len(bottom) != 2:
     raise Exception("Inputs 2 bottom blobs - image_ids and captions.")
   if len(top) != 4:
     raise Exception("Outputs 3 top blobs - score_weights, input_sentence, target_sentence, mean_score.")
   params = ast.literal_eval(self.param_str)
   self._end_of_sequence = params['end_of_sequence']
   self._ignore_label = params['ignore_label']
   # Load vocab
   self._vocab = []
   with open(params['vocab_path']) as vocab_file:
     for word in vocab_file:
       self._vocab.append(word.lower().strip())
   self._cider = CiderScorer(params['gt_caption_paths'])
Пример #6
0
    def compute_score(self, gts, res):
        """
        Main function to compute CIDEr score
        :param  hypo_for_image (dict) : dictionary with key <image> and value <tokenized hypothesis / candidate sentence>
                ref_for_image (dict)  : dictionary with key <image> and value <tokenized reference sentence>
        :return: cider (float) : computed CIDEr score for the corpus
        """

        cider_scorer = CiderScorer(n=self._n, sigma=self._sigma)

        for hypo,ref in zip(gts, res):

            cider_scorer += (hypo, ref)

        (score, scores) = cider_scorer.compute_score()

        return score