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