def test_logger(runner, by_epoch, eval_hook_priority): loader = DataLoader(EvalDataset()) model = Model() data_loader = DataLoader(EvalDataset()) eval_hook = EvalHook( data_loader, interval=1, by_epoch=by_epoch, save_best='acc') with tempfile.TemporaryDirectory() as tmpdir: logger = get_logger('test_logger') optimizer = optim.SGD(model.parameters(), lr=0.001, momentum=0.9) runner = EpochBasedRunner( model=model, optimizer=optimizer, work_dir=tmpdir, logger=logger) runner.register_logger_hooks( dict( interval=1, hooks=[dict(type='TextLoggerHook', by_epoch=by_epoch)])) runner.register_timer_hook(dict(type='IterTimerHook')) runner.register_hook(eval_hook, priority=eval_hook_priority) runner.run([loader], [('train', 1)], 1) path = osp.join(tmpdir, next(scandir(tmpdir, '.json'))) with open(path) as fr: fr.readline() # skip first line which is hook_msg train_log = json.loads(fr.readline()) assert train_log['mode'] == 'train' and 'time' in train_log val_log = json.loads(fr.readline()) assert val_log['mode'] == 'val' and 'time' not in val_log
def after_run(self, runner): if self.log_artifact: wandb_artifact = self.wandb.Artifact(name='artifacts', type='model') for filename in scandir(runner.work_dir, self.out_suffix, True): local_filepath = osp.join(runner.work_dir, filename) wandb_artifact.add_file(local_filepath) self.wandb.log_artifact(wandb_artifact) self.wandb.join()
def _find_allowed_files(self, root, folder_name): """find all the allowed files in a folder, including sub folder if recursion_subdir is true.""" _dir = os.path.join(root, folder_name) infos_pre_class = [] for path in scandir(_dir, self.IMG_EXTENSIONS, self.recursion_subdir): path = os.path.join(folder_name, path) item = ImageInfo(path, self.folder_to_idx[folder_name]) infos_pre_class.append(item) return infos_pre_class
def frames2video(frame_dir, video_file, fps=30, fourcc='XVID', filename_tmpl='{:06d}.jpg', start=0, end=0, show_progress=True): """Read the frame images from a directory and join them as a video Args: frame_dir (str): The directory containing video frames. video_file (str): Output filename. fps (float): FPS of the output video. fourcc (str): Fourcc of the output video, this should be compatible with the output file type. filename_tmpl (str): Filename template with the index as the variable. start (int): Starting frame index. end (int): Ending frame index. show_progress (bool): Whether to show a progress bar. """ if end == 0: ext = filename_tmpl.split('.')[-1] end = len([name for name in scandir(frame_dir, ext)]) first_file = osp.join(frame_dir, filename_tmpl.format(start)) check_file_exist(first_file, 'The start frame not found: ' + first_file) img = cv2.imread(first_file) height, width = img.shape[:2] resolution = (width, height) vwriter = cv2.VideoWriter(video_file, VideoWriter_fourcc(*fourcc), fps, resolution) def write_frame(file_idx): filename = osp.join(frame_dir, filename_tmpl.format(file_idx)) img = cv2.imread(filename) vwriter.write(img) if show_progress: track_progress(write_frame, range(start, end)) else: for i in range(start, end): filename = osp.join(frame_dir, filename_tmpl.format(i)) img = cv2.imread(filename) vwriter.write(img) vwriter.release()
def after_run(self, runner): # copy or upload logs to self.out_dir if self.out_dir is not None: for filename in scandir(runner.work_dir, self.out_suffix, True): local_filepath = osp.join(runner.work_dir, filename) out_filepath = self.file_client.join_path( self.out_dir, filename) with open(local_filepath, 'r') as f: self.file_client.put_text(f.read(), out_filepath) runner.logger.info( (f'The file {local_filepath} has been uploaded to ' f'{out_filepath}.')) if not self.keep_local: os.remove(local_filepath) runner.logger.info( (f'{local_filepath} was removed due to the ' '`self.keep_local=False`'))