模型
以下页面提供了ClearML模型的基本Python接口的概述。
ClearML 提供了以下类来处理模型:
Model
- 表示一个ClearML模型,无论是否与任何任务相关联。使用此类以编程方式访问和管理ClearML模型存储。InputModel
- 表示要在实验中使用的ClearML模型。使用此类从ClearML的模型存储中加载模型,或从外部资源导入预训练模型,作为实验的初始起点。OutputModel
- 表示实验的输出模型(训练结果)。一个OutputModel总是与一个task相关联,因此这些模型可以追溯到实验。
输出模型
手动记录模型
要手动记录模型,请创建 OutputModel 类的实例。
from clearml import OutputModel, Task
# Instantiate a Task
task = Task.init(project_name="myProject", task_name="myTask")
# Create an output model for the PyTorch framework
output_model = OutputModel(task=task, framework="PyTorch")
您可以设置模型将被上传到的目的地及其标签枚举,分别使用
OutputModel.set_upload_destination
和
OutputModel.update_labels
方法。
# Set the URI of the storage destination for uploaded model weight files
output_model.set_upload_destination(uri=models_upload_destination)
# Set the label numeration
output_model.update_labels({'background': 0, 'label': 255})
更新模型
ClearML 不会自动记录手动记录的模型的快照。要更新实验的模型,请使用 OutputModel.update_weights 方法。
# If validation shows this network is the best so far, update the output model
if val_log['iou'] > best_iou:
output_model.update_weights(weights_filename='models/model.pth')
- 指定要上传的本地权重文件的路径(
weights_filename
),或远程权重文件的网络位置(registered_uri
)。 - 使用
upload_uri
参数明确指定权重文件的上传目标。 - 模型元数据
update_comment
- 更新模型的描述iteration
- 输入迭代次数
或者,通过其关联的任务更新模型,使用 Task.update_output_model
方法。
输入模型
使用注册模型
要使用ClearML模型作为输入模型,创建一个InputModel对象并将其连接到一个任务。
# Create an input model using the ClearML ID of a model already registered in the ClearML platform
input_model = InputModel(model_id="fd8b402e874549d6944eebd49e37eb7b")
# Connect the input model to the task
task.connect(input_model)
导入模型
要导入现有模型,请使用 InputModel.import_model
类方法,并指定 weights_url
- 导入模型的URL。如果该URL已存在于ClearML服务器中,则会被重复使用。否则,将注册一个新模型。
然后connect将模型连接到任务。
# Instantiate a Task
task = Task.init(project_name="examples", task_name="example task")
input_model = InputModel.import_model(
# Name for model in ClearML
name='Input Model with Network Design',
# Import the model using a URL
weights_url='https://s3/models/model.pth',
# Set label enumeration values
label_enumeration={'person' : 1, 'car' : 2, 'truck' : 3, 'bus' : 4,
'motorcycle' : 5, 'bicycle' : 6, 'ignore': -1},
framework='PyTorch'
)
# Connect the input model to the task
task.connect(input_model)
访问模型
查询模型
通过使用Model.query_models
和/或InputModel.query_models
类方法,通过模型名称、项目、标签等查询系统来检索模型对象列表。这些方法返回与查询匹配的模型对象列表。列表根据模型的最后更新时间排序。
model_list = Model.query_models(
# Only models from `examples` project
project_name='examples',
# Only models with input name
model_name=None,
# Only models with `demo` tag or models without `TF` tag
tags=['demo', '-TF'],
# If `True`, only published models
only_published=False,
# If `True`, include archived models
include_archived=True,
# Maximum number of models returned
max_results=5,
# Only models with matching metadata
metadata={"key":"value"}
)
标签过滤器
tags
字段支持通过将标签名称和运算符组合成列表来进行高级查询。
支持的运算符有:
not
and
or
按照以下格式输入操作符:"__$
。要排除一个标签,你也可以在标签名前使用-
前缀,除非标签名以破折号字符(-
)开头,在这种情况下你可以使用"__$not"
。
or
和 and
运算符适用于它们之后的所有标签,直到指定另一个运算符为止。not
运算符仅适用于紧随其后的标签。
查询的默认操作符是or
,除非在查询的开头放置and
。
示例
-
以下查询将返回至少具有提供标签之一的模型,因为默认操作符是
or
("a" OR "b" OR "c"
)model_list = Model.query_models(tags=["a", "b", "c"])
-
以下查询将返回具有所有三个提供标签的模型,因为
and
操作符被放置在列表的开头,使其成为默认操作符("a" AND "b" AND "c"
)。model_list = Model.query_models(tags=["__$and", "a", "b", "c"])
-
以下查询将返回既没有标签
a
也没有标签c
,但有标签b
的模型 (NOT "a" AND "b" AND NOT "c"
)。model_list = Model.query_models(tags=["__$not", "a", "b", "__$not" "c"])
-
以下查询将返回带有标签
a
或标签b
或同时带有标签c
和d
的模型 ("a" OR "b" OR ("c" AND "d")
)。model_list = Model.query_models(tags=["a", "b", "__$and", "c", "d"])
-
以下查询将返回具有标签
a
或标签b
以及同时具有标签c
和标签d
的模型 (("a" OR "b") AND "c" AND "d"
)。model_list = Model.query_models(
tags=["__$and", "__$or", "a", "b", "__$and", "c", "d"]
)
检索模型
通过Model
/InputModel
对象的get_local_copy()
方法检索ClearML模型的本地副本。
该方法返回模型缓存本地副本的路径。如果模型已经缓存,您可以设置
force_download
为True
以下载新版本。
记录指标和图表
使用以下方法将附加信息显式记录到您的模型中。
这些方法可以用于Model
、InputModel
和/或OutputModel
对象:
- 标量
- 标量系列图 -
report_scalar
- 单一指标值 -
report_single_value
- 标量系列图 -
- 图表
- 二维图表
- 直方图 -
report_histogram
- 向量直方图 -
report_vector
- 表格 -
report_table
- 折线图 -
report_line_plot
- 散点图 -
report_scatter2d
- 混淆矩阵(热图) -
report_confusion_matrix
- 直方图 -
- 三维图表
- 散点图 -
report_scatter3d
- 曲面图 -
report_surface
- 散点图 -
- 二维图表
SDK 参考
有关所有模型方法的信息,请参阅以下SDK参考页面: