class TensorboardLogs: def __init__(self, filepath: Union[Path, str], num_scalars=0, num_images=0): size_guidance = { SCALARS: num_scalars, IMAGES: num_images, } self._event_acc = EventAccumulator(str(filepath), size_guidance=size_guidance) self._event_acc.Reload() self.tags = self._event_acc.Tags() self.all_tags = [ tag for _, some_tags in self.tags.items() if isinstance(some_tags, list) for tag in some_tags ] if len(self.all_tags) == 0: warnings.warn( 'No tags detected, the path might not contain any logs') def images(self, tag: str) -> List[Image.Image]: return [ Image.open(io.BytesIO(img_event.encoded_image_string)) for img_event in self._event_acc.Images(tag) ] def scalars(self, tag: str) -> torch.Tensor: return torch.tensor([ scalar_event.value for scalar_event in self._event_acc.Scalars(tag) ])
def extract_data(summary_path: os.PathLike, logs_path: os.PathLike) -> Tuple[List[float], Dict, str]: config = Config.load(summary_path).config events_acc = EventAccumulator(logs_path) events_acc.Reload() _, _, val_acc_diffs = zip(*events_acc.Scalars('diff/val/acc')) hp = config.hp.to_dict() hp['n_conv_layers'] = len(config.hp.conv_model_config.conv_sizes) if 'Minimum_test' in events_acc.images.Keys(): image_test = events_acc.Images('Minimum_test')[0].encoded_image_string image_train = events_acc.Images( 'Minimum_train')[0].encoded_image_string else: image_test = None image_train = None return val_acc_diffs, hp, image_test, image_train
def plot_alignment(log_dir, save_dir): tf_event = glob.glob(os.path.join(log_dir, "events.*"))[0] event_acc = EventAccumulator(tf_event, size_guidance=SIZE_GUIDANCE) event_acc.Reload() alignments = event_acc.Images('alignment') for alignment in alignments: img_str = alignment.encoded_image_string step = alignment.step f = io.BytesIO(img_str) img = plt.imread(f) plt.imshow(img) plt.axis('off') plt.title('step {:0>5d}'.format(step)) plt.tight_layout() plt.savefig('{}/{:0>5d}.png'.format(save_dir, step)) plt.clf()
import os import glob import numpy as np from scipy import misc from tensorboard.backend.event_processing.event_accumulator import EventAccumulator EVAL_DIR = './tmp/20170906-17:26:07/eval' IMAGE_SHAPE = [256, 256] event_acc = EventAccumulator(EVAL_DIR) event_acc.Reload() image_tags = event_acc.Tags()['images'] total = len(image_tags) for i, tag in enumerate(image_tags): encoded_image_string = event_acc.Images(tag)[0].encoded_image_string ty = tag.split('/')[0] index = tag.split('/')[2] output_dir = os.path.join(EVAL_DIR, ty) if not os.path.exists(output_dir): os.makedirs(output_dir) with open('%s/%s.png' % (output_dir, index), 'wb') as f: f.write(encoded_image_string) print '%d/%d exporting done.' % (i, total) types = [ name for name in os.listdir(EVAL_DIR) if os.path.isdir(os.path.join(EVAL_DIR, name)) ] n_row = 8
'/mnt/fs2/2019/Takamuro/m2_research/weather_transfer/results/c_UNet/tensorboard' ) parser.add_argument( '--log_path', type=str, default= 'runs/Apr11_20-10-29_DLBOX2_lr-0.0001_bs-16_ne-50_name-cUNet_w-e-res101-0408_train-D1T1_adam-b1-09_wloss-mse_train200k-test500' ) args = parser.parse_args() sys.path.append(os.getcwd()) output_path = os.path.join(args.output_dir, args.log_path.split('/')[-1]) os.makedirs(output_path, exist_ok=True) path = args.log_path # Tensorboard ログファイル event_acc = EventAccumulator(path, size_guidance={'images': 0}) event_acc.Reload() # ログファイルのサイズによっては非常に時間がかかる for tag in event_acc.Tags()['images']: events = event_acc.Images(tag) tag_name = tag.replace('/', '_') for index, event in enumerate(events): # 画像はエンコードされているので戻す s = np.frombuffer(event.encoded_image_string, dtype=np.uint8) image = cv2.imdecode(s, cv2.IMREAD_COLOR) # カラー画像の場合 # 保存 output_path_ = os.path.join(output_path, '{}_{:04}.jpg'.format(tag_name, index)) cv2.imwrite(output_path_, image)