在前段時間 2022 世界人工智能大會(WAIC)上, OpenMMLab 基于新一代訓練架構 MMEngine ,發布了全新的 OpenMMLab 2.0 視覺算法體系,詳細見上一期內容。
MMEngine 提供了強大靈活的訓練引擎,以及常見的訓練技術,以滿足用戶多樣的模型訓練需求。對于模型評測的需求,MMEngine 也提供了評測指標(Metric)和評測器(Evaluator)模塊,下游算法庫基于 MMEngine 提供的評測指標基類,實現對應任務所需的評測指標。
OpenMMLab 是深度學習時代最完整的計算機視覺開源算法體系,目前已涵蓋 30+ 研究領域,這些研究領域都有各自任務的評測指標。我們希望能夠將這些評測指標統一起來,以更加易用和開放的方式服務于更多用戶。因此,我們在 MMEngine 中的評測指標模塊基礎上,將原 OpenMMLab 各算法庫的評測指標集成進來,開發了一個統一開放的跨框架算法評測庫:MMEval。
GitHub 主頁:
https://github.com/open-mmlab/mmeval
(文末點擊閱讀原文可直達)
歡迎大家來 star~
中文文檔:
https://mmeval.readthedocs.io/zh_CN/latest
MMEval 簡介
MMEval 是一個跨框架的機器學習算法評測庫,提供高效準確的分布式評測以及多種機器學習框架后端支持,具有以下特點:
提供豐富的計算機視覺各細分方向評測指標(自然語言處理方向的評測指標正在支持中)
支持多種分布式通信庫,實現高效準確的分布式評測
支持多種機器學習框架,根據輸入自動分發對應實現
MMEval 的架構如下圖所示:
和已有一些開源的算法評測庫相比,比如 Lightning-AI/metrics,huggingface/evaluate,以及近日開源的 pytorch/torcheval,MMEval 的區別主要在于對計算機視覺領域評測指標的更全面支持,以及提供跨框架評測的能力。
MMEval 目前提供了 20+ 評測指標,涵蓋了分類,目標檢測,圖像分割,點云分割,關鍵點檢測和光流估計等任務,MMEval 已支持的評測指標可以在文檔中的支持矩陣中查看:https://mmeval.readthedocs.io/zh_CN/latest/get_started/support_matrix.html
MMEval 安裝與使用
MMEval 依賴 Python 3.6+,可以通過 pip 來安裝 MMEval:pip install mmeval
MMEval 中的評測指標提供兩種使用方式,以 Accuracy 為例:
from mmeval import Accuracy import numpy as np accuracy = Accuracy() # 第一種是直接調用實例化的 Accuracy 對象,計算評測指標。 labels = np.asarray([0, 1, 2, 3]) preds = np.asarray([0, 2, 1, 3]) accuracy(preds, labels) # {'top1': 0.5} # 第二種是累積多個批次的數據后,計算評測指標。 for i in range(10): labels = np.random.randint(0, 4, size=(100, )) predicts = np.random.randint(0, 4, size=(100, )) # 調用 `add` 方法,保存指標計算中間結果。 accuracy.add(predicts, labels) # 調用 compute 方法計算評測指標 accuracy.compute() # {'top1': ...} # 調用 reset 方法,清除保存的中間結果。 accuracy.reset()
MMEval 中的評測指標還支持分布式評測功能,關于分布式評測的使用方式可以參考教程:https://mmeval.readthedocs.io/zh_CN/latest/tutorials/dist_evaluation.html
多分布式通信后端支持
在評測過程中,通常會以數據并行的形式,在每張卡上推理部分數據集的結果,以加快評測速度。而在每個數據子集上計算得到的評測結果,通常不能通過簡單的求平均來與整個數據集的評測結果進行等價。因此,通常的做法是在分布式評測過程中,將每張卡得到的推理結果或者指標計算中間結果保存下來,在所有進程中進行 all-gather 操作,最后再計算整個評測數據集的指標結果。
MMEval 在分布式評測過程中所需的分布式通信需求,主要有以下兩個:
將各個進程中保存的評測指標計算中間結果 all-gather
將 rank 0 進程計算得到的指標結果 broadcast 給所有進程
為了能夠靈活的支持多種分布式通信庫,MMEval 將上述分布式通信需求抽象定義了一個分布式通信接口 BaseDistBackend,其接口設計如下圖所示:
MMEval 中已經預置實現了一些分布式通信后端,如下表所示:
MPI4Py | torch.distributed | Horovod | paddle.distributed |
MPI4PyDist | TorchCPUDist & TorchCUDADist | TFHorovodDist | PaddleDist |
多機器學習框架支持
MMEval 希望能夠支持多種機器學習框架,一個最為簡單的方案是讓所有評測指標的計算都支持 NumPy 即可。這樣做可以實現大部分評測需求,因為所有機器學習框架的 Tensor 數據類型都可以轉為 NumPy 的數組。
但是在某些情況下可能會存在一些問題:
NumPy 有一些常用算子尚未實現,如 topk,會影響評測指標的計算速度
大量的 Tensor 從 CUDA 設備搬運到 CPU 內存會比較耗時
如果希望評測指標的計算過程是可導的,那么就需要用各自機器學習框架的 Tensor 數據類型進行計算
為了應對上述問題,MMEval 的評測指標提供了一些特定機器學習框架的指標計算實現。同時,為了應對不同指標計算方式的分發問題,MMEval 采用了基于類型注釋的動態多分派機制,可以根據輸入的數據類型,動態的選擇不同的計算方式。
一個基于類型注釋的多分派簡單示例如下:
from mmeval.core import dispatch @dispatch def compute(x: int, y: int): print('this is int') @dispatch def compute(x: str, y: str): print('this is str') compute(1, 1) # this is int compute('1', '1') # this is str
愿景
在機器學習模型實驗和生產過程中,訓練和評測是其中兩個非常重要的階段。
MMEngine 已經提供了一個靈活強大的訓練架構,而 MMEval 則希望能夠提供一個統一開放的模型評測庫。其中,統一體現在不同領域不同任務的模型評測需求都能夠滿足,開放則體現為與機器學習框架解耦,以更加開放的方式為不同的機器學習框架生態提供評測功能。
目前 MMEval 仍處于早期階段,有很多評測指標仍在添加當中,有一些架構設計可能不夠成熟。在之后的一段時間里,MMEval 將主要圍繞以下兩個方向去持續迭代完善:
持續的補充添加評測指標,不斷擴展到 NLP、語音、推薦系統等更多的任務領域
支持更多機器學習框架,并且探索多機器學習框架支持的新方式
-
模型
+關注
關注
1文章
3178瀏覽量
48730 -
計算機視覺
+關注
關注
8文章
1696瀏覽量
45930 -
算法庫
+關注
關注
0文章
4瀏覽量
1523
原文標題:支持跨框架評測,這個是你想要的算法評測庫嗎?
文章出處:【微信號:GiantPandaCV,微信公眾號:GiantPandaCV】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論