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
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
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