MMEval的架构
和已有一些开源的算法评测库相比,MMEval对计算机视觉领域评测指标的支持更全面,并能提供跨框架评测。目前,MMEval提供了20多种评测指标,涵盖分类、目标检测、图像分割、点云分割、关键点检测和光流估计等任务。可在文档中查看已支持的评测指标:mmeval.readthedocs.io/zh_CN/latest/get_started/support_matrix.html
【MMEval的安装与使用】
MMEval依赖Python 3.6+,可以通过pip来安装MMEval:pip install mmeval。其评测指标提供两种使用方式,以Accuracy为例:
同时,MMEval还支持分布式评测功能,使用方式可参考教程:mmeval.readthedocs.io/zh_CN/latest/tutorials/dist_evaluation.html
【多分布式通信后端支持】
在评测过程中,通常会以数据并行的形式,在每张卡上推理部分数据集的结果,以加快评测速度。而在每个数据子集上计算得到的结果,往往不能通过简单的求平均与整个数据集的评测结果进行等价。因此,常见的做法是在分布式评测过程中,将每张卡得到的推理结果或指标计算中间结果保存下来,在所有进程中进行all-gather操作,最后再计算整个评测数据集的指标结果。
MMEval所需的分布式通信需求主要有以下两个:
• 将各个进程中保存的评测指标计算中间结果all-gather。
• 将rank 0进程计算得到的指标结果broadcast给所有进程。
为了能够灵活地支持多种分布式通信库,MMEval将上述分布式通信需求抽象定义了一个分布式通信接口BaseDistBackend,其接口设计如下图所示:
MMEval中已经预置实现了一些分布式通信后端,如下表所示:
【多机器学习框架支持】
由于所有机器学习框架的Tensor数据类型都能转为NumPy的数组,因此,MMEval能够支持多种机器学习框架最为简单的方案,就是令所有评测指标的计算都支持NumPy。但是在某些情况中可能存在问题:• NumPy有一些常用算子尚未实现,如topk,会影响评测指标的计算速度。
• 大量的Tensor从CUDA设备搬运到CPU内存耗时较多。
• 如果希望评测指标的计算过程可导,就需要用各自机器学习框架的Tensor数据类型进行计算。
为应对上述问题,MMEval提供了一些特定机器学习框架的指标计算实现。同时,为了应对不同指标计算方式的分发问题,MMEval采用了基于类型注释的动态多分派机制,可根据输入的数据类型,动态选择不同的计算方式。
一个基于类型注释的多分派简单示例如下:
【愿景】
在机器学习模型实验和生产过程中,训练和评测是其中的两个重要阶段。MMEngine已经提供了灵活强大的训练架构,而MMEval则希望提供统一开放的模型评测库。统一,体现在不同领域、不同任务的模型评测需求都能够满足;开放,体现为与机器学习框架解耦,以更加开放的方式为不同的机器学习框架生态提供评测功能。
目前,MMEval仍处于早期阶段,很多评测指标还在添加当中。接下来,MMEval将不断补充添加评测指标,逐步扩展到NLP、语音、推荐系统等更多任务领域,并努力支持更多机器学习框架,探索多机器学习框架支持的新方式。
*GitHub主页:github.com/open-mmlab/mmeval
*中文文档:mmeval.readthedocs.io/zh_CN/latest
关注OpenMMLab,了解MMEval最新动态