Пример #1
0
    def eval(self, data_in, **kwargs):
        batch_size = kwargs.get('batch_size', 0)
        print_str = kwargs.get('print_str', True)
        need_imgs = kwargs.get('need_imgs', False)
        print_all_results = kwargs.get(
            'print_all_results', False)  # to print each results and index
        if type(data_in) is dict:
            time_start = time.time()
            eval_dict = self.model.eval(data_in, **kwargs)
            time_cost = time.time() - time_start
            if print_str:
                print('Evaluation time cost is {:.1f}'.format(time_cost))
            return eval_dict

        data_provider = data_in
        ndata = data_provider.size
        m = ndata // batch_size
        n = ndata % batch_size
        eval_dict_str = {}
        eval_dict_img = {}
        time_start = time.time()
        for _ in range(m):
            data_dict = data_provider(batch_size)
            sub_eval_dict_str, sub_eval_dict_img = self.model.eval(
                data_dict, **kwargs)
            eval_dict_str = U.dict_concat(eval_dict_str, sub_eval_dict_str)
            if need_imgs:
                eval_dict_img = U.dict_append(eval_dict_img, sub_eval_dict_img)
        if n > 0:
            sub_eval_dict_str, sub_eval_dict_img = self.model.eval(
                data_provider(n), **kwargs)
            eval_dict_str = U.dict_concat(eval_dict_str, sub_eval_dict_str)
            if need_imgs:
                eval_dict_img = U.dict_append(eval_dict_img, sub_eval_dict_img)
        if print_str:
            time_cost = time.time() - time_start
            print('Evaluate {} data, time cost is {:.1f}'.format(
                ndata, time_cost))
            print('  {}'.format(U.dict_to_str(eval_dict_str)))
        if print_all_results:
            results_dict = {}
            for key in eval_dict_str:
                value = eval_dict_str.get(key)
                if value.shape[0] == ndata:
                    results_dict[key] = value
            for i in range(ndata):
                print_str = "Picture Index: {}\t".format(i)
                for key in results_dict:
                    print_str += "{}: ".format(key)
                    for k in results_dict[key][i]:
                        print_str += "{:.5f} ".format(k)
                    print_str += "\t"
                print(print_str)
        if need_imgs:
            return eval_dict_str, eval_dict_img
        else:
            return eval_dict_str
Пример #2
0
    def eval(self, data_in, **kwargs):
        batch_size = kwargs.get('batch_size', 1)
        print_str = kwargs.get('print_str', True)
        need_imgs = kwargs.get('need_imgs', False)
        max_save_batch = kwargs.get('max_save_batch', float('inf'))
        if type(data_in) is dict:
            time_start = time.time()
            eval_dict = self.model.eval(data_in, **kwargs)
            time_cost = time.time() - time_start
            if print_str:
                print('Evaluation time cost is {:.1f}'.format(time_cost))
            return eval_dict

        data_provider = data_in
        ndata = data_provider.size
        m = ndata // batch_size
        n = ndata % batch_size
        results = {}
        imgs = {}
        saved_batch_count = 0
        if print_str:
            print('Evaluating {} data...'.format(ndata), end='')
        time_start = time.time()
        for i in range(m):
            sub_results = self.model.eval(data_provider(batch_size), **kwargs)
            sub_imgs = sub_results.pop(
                'imgs') if 'imgs' in sub_results else None
            results = U.dict_concat(results, sub_results)
            if need_imgs and sub_imgs is not None and saved_batch_count < max_save_batch:
                imgs = U.dict_append(imgs, sub_imgs)
                saved_batch_count += 1
            if print_str:
                print('\r\tEvalated {}/{} data'.format(batch_size * (i + 1),
                                                       ndata),
                      end='')
        if n > 0:
            sub_results = self.model.eval(data_provider(n), **kwargs)
            sub_imgs = sub_results.pop(
                'imgs') if 'imgs' in sub_results else None
            results = U.dict_concat(results, sub_results)
            if need_imgs and sub_imgs is not None and saved_batch_count < max_save_batch:
                imgs = U.dict_append(imgs, sub_imgs)
                saved_batch_count += 1
        if print_str:
            print('\r\tEvalated {}/{} data'.format(ndata, ndata))
            time_cost = time.time() - time_start
            print('Time cost is {:.1f}'.format(time_cost))
            print('  {}'.format(U.dict_to_str(results)))
        if need_imgs:
            return results, imgs
        else:
            return results
Пример #3
0
 def _load_temp_file(self, n):
     assert self._temp_dir is not None, 'Temp dir is None'
     assert os.path.exists(self._temp_dir), 'Can\'t find temp directory \'{}\''.format(self._temp_dir)
     data_dict = {}
     for _ in range(n):
         temp_filename = self._file_list[self._cur_i]
         sub_data_dict = np.load(temp_filename, allow_pickle='TRUE').item()
         self._next_idx()
         data_dict = U.dict_concat(data_dict, sub_data_dict) 
     return data_dict