MONAI
如果您尚未使用ClearML,请参阅入门指南以获取设置说明。
MONAI 是一个基于 PyTorch 的开源框架,用于医疗影像的深度学习。你可以使用 MONAI 的内置处理器将 ClearML 集成到你的代码中:ClearMLImageHandler
, ClearMLStatsHandler
,以及 ModelCheckpoint
。
ClearMLImageHandler 和 ClearMLStatsHandler
使用ClearMLImageHandler
和ClearMLStatsHandler
分别将图像和指标记录到ClearML。
ClearMLImageHandler
扩展了TensorBoardImageHandler
的所有功能,
用于可视化图像、标签和输出。ClearMLStatsHandler
扩展了TensorBoardStatsHandler
的所有功能,
用于定义一组用于TensorBoard逻辑的Ignite事件处理程序。ClearML自动捕获所有
TensorBoard输出。
例如,下面的代码将ClearML图像处理程序和统计处理程序附加到Ignite评估引擎上:
# ignite evaluator
evaluator = ignite.engine.create_supervised_evaluator(
net,
val_metrics,
device,
True,
output_transform=lambda x, y, y_pred: (
[post_pred(i) for i in decollate_batch(y_pred)],
[post_label(i) for i in decollate_batch(y)],
),
)
# add handler to draw the first image and the corresponding
# label and model output in the last batch
# here we draw the 3D output as GIF format along Depth
# axis, at every validation epoch
val_clearml_image_handler = ClearMLImageHandler(
task_name=task_name,
project_name=project_name,
log_dir=log_dir,
batch_transform=lambda batch: (batch[0], batch[1]),
output_transform=lambda output: output[0],
global_iter_transform=lambda x: trainer.state.epoch,
)
evaluator.add_event_handler(
event_name=ignite.engine.Events.EPOCH_COMPLETED,
handler=val_clearml_image_handler,
)
# add handler to record metrics to clearml at every validation epoch
val_clearml_stats_handler = ClearMLStatsHandler(
log_dir=log_dir,
# no need to plot loss value, so disable per iteration output
output_transform=lambda x: None,
# fetch global epoch number from trainer
global_epoch_transform=lambda x: trainer.state.epoch,
)
val_clearml_stats_handler.attach(evaluator)
当代码使用这些处理器运行时,它会在MONAI
项目中创建一个名为monai_experiment
的ClearML任务。要更改任务的名称或项目,请在实例化任一处理器时使用task_name
和project_name
参数。任务会捕获由图像处理器记录的图像、由统计处理器记录的指标,以及源代码、未提交的更改、安装的包、控制台输出等。
您可以在ClearML的WebApp任务页面查看所有捕获的数据。
在WebApp中查看记录的图像,位于实验的调试样本标签中。
在WebApp中查看记录的指标,位于实验的Scalars标签中。
模型检查点
ClearML 会自动记录使用 ModelCheckpoint
处理程序保存的模型。确保在你的脚本中实例化了一个 ClearML 任务。如果你已经在使用 ClearMLStatsHandler
或 ClearMLImageHandler
,你不需要添加任何代码。否则,你只需要添加两行代码来创建一个任务:
from clearml import Task
task = Task.init(task_name="<task name>", project_name="<project_name>")
下面的代码创建了一个用于保存模型的处理器。当脚本与ClearML任务一起运行时,任务会自动捕获保存的模型。
# adding checkpoint handler to save models (network
# params and optimizer stats) during training and log them to ClearML
log_dir = os.path.join(root_dir, "logs")
checkpoint_handler = ignite.handlers.ModelCheckpoint(log_dir, "net", n_saved=10, require_empty=False)
trainer.add_event_handler(
event_name=ignite.engine.Evclearents.EPOCH_COMPLETED,
handler=checkpoint_handler,
to_save={"net": net, "opt": opt},
)
在WebApp中查看捕获的模型,位于实验的Artifacts标签页中。