Spaces:
Running
Running
# Ultralytics YOLO 🚀, AGPL-3.0 license | |
from ultralytics.utils import LOGGER, SETTINGS, TESTS_RUNNING, colorstr | |
try: | |
from torch.utils.tensorboard import SummaryWriter | |
assert not TESTS_RUNNING # do not log pytest | |
assert SETTINGS['tensorboard'] is True # verify integration is enabled | |
# TypeError for handling 'Descriptors cannot not be created directly.' protobuf errors in Windows | |
except (ImportError, AssertionError, TypeError): | |
SummaryWriter = None | |
writer = None # TensorBoard SummaryWriter instance | |
def _log_scalars(scalars, step=0): | |
"""Logs scalar values to TensorBoard.""" | |
if writer: | |
for k, v in scalars.items(): | |
writer.add_scalar(k, v, step) | |
def on_pretrain_routine_start(trainer): | |
"""Initialize TensorBoard logging with SummaryWriter.""" | |
if SummaryWriter: | |
try: | |
global writer | |
writer = SummaryWriter(str(trainer.save_dir)) | |
prefix = colorstr('TensorBoard: ') | |
LOGGER.info(f"{prefix}Start with 'tensorboard --logdir {trainer.save_dir}', view at http://localhost:6006/") | |
except Exception as e: | |
LOGGER.warning(f'WARNING ⚠️ TensorBoard not initialized correctly, not logging this run. {e}') | |
def on_batch_end(trainer): | |
"""Logs scalar statistics at the end of a training batch.""" | |
_log_scalars(trainer.label_loss_items(trainer.tloss, prefix='train'), trainer.epoch + 1) | |
def on_fit_epoch_end(trainer): | |
"""Logs epoch metrics at end of training epoch.""" | |
_log_scalars(trainer.metrics, trainer.epoch + 1) | |
callbacks = { | |
'on_pretrain_routine_start': on_pretrain_routine_start, | |
'on_fit_epoch_end': on_fit_epoch_end, | |
'on_batch_end': on_batch_end} | |