模型评测过程会分别在 ValLoop 和 TestLoop 中被执行,用户可以在训练期间或使用配置文件中简单设置的测试脚本进行模型性能评估。ValLoop
和 TestLoop
属于 Runner,它们会在第一次被调用时构建。由于 dataloader
与 evaluator
是必需的参数,所以要成功构建 ValLoop
,在构建 Runner
时必须设置 val_dataloader
和 val_evaluator
,TestLoop
亦然。有关 Runner 设计的更多信息,请参阅 MMEngine 的文档。
在 MMSegmentation 中,默认情况下,我们将 dataloader 和 metrics 的设置写在数据集配置文件中,并将 evaluation loop 的配置写在 schedule_x
配置文件中。
例如,在 ADE20K 配置文件 configs/_base_/dataset/ADE20K.py
中,在第37到48行,我们配置了 val_dataloader
,在第51行,我们选择 IoUMetric
作为 evaluator,并设置 mIoU
作为指标:
val_dataloader = dict(
batch_size=1,
num_workers=4,
persistent_workers=True,
sampler=dict(type='DefaultSampler', shuffle=False),
dataset=dict(
type=dataset_type,
data_root=data_root,
data_prefix=dict(
img_path='images/validation',
seg_map_path='annotations/validation'),
pipeline=test_pipeline))
val_evaluator = dict(type='IoUMetric', iou_metrics=['mIoU'])
为了能够在训练期间进行评估模型,我们将评估配置添加到了 configs/schedules/schedule_40k.py
文件的第15至16行:
train_cfg = dict(type='IterBasedTrainLoop', max_iters=40000, val_interval=4000)
val_cfg = dict(type='ValLoop')
使用以上两种设置,MMSegmentation 在 40K 迭代训练期间,每 4000 次迭代进行一次模型 mIoU 指标的评估。
如果我们希望在训练后测试模型,则需要将 test_dataloader
、test_evaluator
和 test_cfg
配置添加到配置文件中。
test_dataloader = dict(
batch_size=1,
num_workers=4,
persistent_workers=True,
sampler=dict(type='DefaultSampler', shuffle=False),
dataset=dict(
type=dataset_type,
data_root=data_root,
data_prefix=dict(
img_path='images/validation',
seg_map_path='annotations/validation'),
pipeline=test_pipeline))
test_evaluator = dict(type='IoUMetric', iou_metrics=['mIoU'])
test_cfg = dict(type='TestLoop')
在 MMSegmentation 中,默认情况下,test_dataloader
和 test_evaluator
的设置与 ValLoop
的 dataloader 和 evaluator 相同,我们可以修改这些设置以满足我们的需要。
MMSegmentation 基于 MMEngine 提供的 BaseMetric 实现 IoUMetric 和 CityscapesMetric,以评估模型的性能。有关统一评估接口的更多详细信息,请参阅文档。
这里我们简要介绍 IoUMetric
的参数和两种主要方法。
除了 collect_device
和 prefix
之外,IoUMetric
的构建还包含一些其他参数。
构造函数的参数:
IoUMetric
实现 IoU 指标的计算,IoUMetric
的两个核心方法是 process
和 compute_metrics
。
process
方法处理一批 data 和 data_samples。compute_metrics
方法根据处理的结果计算指标。参数:
返回值:
此方法没有返回值,因为处理的结果将存储在 self.results
中,以在处理完所有批次后进行指标的计算。
参数:
返回值:
CityscapesMetric
使用由 Cityscapes 官方提供的 CityscapesScripts 进行模型性能的评估。
在使用之前,请先安装 cityscapesscripts
包:
pip install cityscapesscripts
由于 IoUMetric
在 MMSegmentation 中作为默认的 evaluator 使用,如果您想使用 CityscapesMetric
,则需要自定义配置文件。在自定义配置文件中,应按如下方式替换默认 evaluator。
val_evaluator = dict(type='CityscapesMetric', output_dir='tmp')
test_evaluator = val_evaluator
构造函数的参数:
format_only
为 True 时,keep_results
必须为 True。默认为 False。该方法将在图像上绘制 mask,并将绘制的图像保存到 work_dir
中。
参数:
返回值:
此方法没有返回值,因为处理的结果将存储在 self.results
中,以在处理完所有批次后进行指标的计算。
此方法将调用 cityscapessscripts.evaluation.evalPixelLevelSemanticLabeling
工具来计算指标。
参数:
返回值:
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。