作者 | 臨在、謙言
一、導(dǎo)讀
近年來(lái),自監(jiān)督學(xué)習(xí)和Transformer在視覺(jué)領(lǐng)域大放異彩。圖像自監(jiān)督預(yù)訓(xùn)練極大降低了圖像任務(wù)繁重的標(biāo)注工作,節(jié)省大量人力成本,而transormer技術(shù)在NLP領(lǐng)域的巨大成功也為CV模型效果進(jìn)一步提升提供了非常大的想象空間。為推進(jìn)自監(jiān)督學(xué)習(xí)和視覺(jué)Transformer在阿里集團(tuán)、阿里云上的落地,阿里云機(jī)器學(xué)習(xí)平臺(tái)PAI 打造了 EasyCV all-in-one視覺(jué)建模工具,搭建了豐富完善的自監(jiān)督算法體系,提供了效果SOTA的視覺(jué)Transformer預(yù)訓(xùn)練模型,modelzoo覆蓋圖像自監(jiān)督訓(xùn)練、圖像分類(lèi)、度量學(xué)習(xí)、物體檢測(cè)、關(guān)鍵點(diǎn)檢測(cè)等領(lǐng)域,并且面向開(kāi)發(fā)者提供開(kāi)箱即用的訓(xùn)練、推理能力,同時(shí)在訓(xùn)練/推理效率上也做了深度優(yōu)化。此外,EasyCV對(duì)阿里靈杰系統(tǒng)做了全面兼容,用戶可以非常方便的在阿里云環(huán)境下使用EasyCV的全部功能。
在經(jīng)過(guò)阿里內(nèi)部業(yè)務(wù)充分打磨以后,我們希望把EasyCV框架推向社區(qū),進(jìn)一步服務(wù)廣大的CV算法開(kāi)發(fā)者以及愛(ài)好者們,使其能夠非??焖俜奖愕捏w驗(yàn)最新的圖像自監(jiān)督以及transformer技術(shù),并落地到自己的業(yè)務(wù)生產(chǎn)當(dāng)中。
EasyCV背后的算法框架如何設(shè)計(jì)?開(kāi)發(fā)者可以怎么使用?未來(lái)有哪些規(guī)劃?今天一起來(lái)深入了解。
二、什么是EasyCV
EasyCV是阿里巴巴開(kāi)源的基于Pytorch,以自監(jiān)督學(xué)習(xí)和Transformer技術(shù)為核心的 all-in-one 視覺(jué)算法建模工具。EasyCV在阿里巴巴集團(tuán)內(nèi)支撐了搜索、淘系、優(yōu)酷、飛豬等多個(gè)BU業(yè)務(wù),同時(shí)也在阿里云上服務(wù)了若干企業(yè)客戶,通過(guò)平臺(tái)化組件的形式,滿足客戶自定定制化模型、解決業(yè)務(wù)問(wèn)題的需求。
項(xiàng)目開(kāi)源地址:https://github.com/alibaba/EasyCV
1.項(xiàng)目背景
近兩年,基于無(wú)標(biāo)注訓(xùn)練數(shù)據(jù)的圖像自監(jiān)督預(yù)訓(xùn)練技術(shù)發(fā)展迅猛,在各個(gè)視覺(jué)任務(wù)的效果上已經(jīng)媲美甚至超過(guò)需大量標(biāo)注的有監(jiān)督訓(xùn)練的效果;另一方面,在NLP領(lǐng)域大獲成功的Transformer技術(shù)在各個(gè)圖像任務(wù)上進(jìn)一步刷新SOTA效果,其應(yīng)用呈現(xiàn)出井噴式的爆發(fā)。作為二者的結(jié)合,自監(jiān)督視覺(jué)Transformer的預(yù)訓(xùn)練也應(yīng)運(yùn)而生。
業(yè)界自監(jiān)督學(xué)習(xí)和視覺(jué)Transformer算法技術(shù)更新迭代非??欤瑫r(shí)也給CV算法開(kāi)發(fā)者帶來(lái)了諸多困擾,比如相關(guān)開(kāi)源代碼零散,實(shí)現(xiàn)方式和風(fēng)格參差不齊導(dǎo)致學(xué)習(xí)和復(fù)現(xiàn)成本過(guò)高,訓(xùn)練、推理性能低下等等。阿里云PAI團(tuán)隊(duì)通過(guò)搭建靈活易用的算法框架EasyCV,體系化地沉淀SOTA的自監(jiān)督算法和Transformer預(yù)訓(xùn)練模型,封裝統(tǒng)一、簡(jiǎn)潔易用的接口,針對(duì)自監(jiān)督大數(shù)據(jù)訓(xùn)練方面進(jìn)行性能優(yōu)化,方便用戶嘗試最新的自監(jiān)督預(yù)訓(xùn)練技術(shù)和Transformer模型,推動(dòng)在業(yè)務(wù)上的應(yīng)用和落地。
此外,基于PAI團(tuán)隊(duì)多年積累的深度學(xué)習(xí)訓(xùn)練、推理加速技術(shù),在EasyCV中也集成了IO優(yōu)化,模型訓(xùn)練加速、量化裁剪等功能,在性能上具備自己的優(yōu)勢(shì)。基于阿里云的PAI產(chǎn)品生態(tài),用戶可以方便地進(jìn)行模型管理、在線服務(wù)部署、大規(guī)模離線推理任務(wù)。
2.主要特性
豐富完善的自監(jiān)督算法體系:囊括業(yè)界有代表性的圖像自監(jiān)督算法SimCLR, MoCO, Swav, Moby, DINO等,以及基于mask圖像預(yù)訓(xùn)練方法MAE,同時(shí)提供了詳細(xì)的benchmark工具及復(fù)現(xiàn)結(jié)果。
豐富的預(yù)訓(xùn)練模型庫(kù):提供豐富的預(yù)訓(xùn)練模型,在以transformer模型為主的基礎(chǔ)上,也包含了主流的CNN 模型, 支持ImageNet預(yù)訓(xùn)練和自監(jiān)督預(yù)訓(xùn)練。兼容PytorchImageModels支持更為豐富的視覺(jué)Transformer backbone。
易用性和可擴(kuò)展性 :支持配置方式、API調(diào)用方式進(jìn)行訓(xùn)練、評(píng)估、模型導(dǎo)出;框架采用主流的模塊化設(shè)計(jì),靈活可擴(kuò)展。
高性能 :支持多機(jī)多卡訓(xùn)練和評(píng)估,fp16訓(xùn)練加速。針對(duì)自監(jiān)督場(chǎng)景數(shù)據(jù)量大的特點(diǎn),利用DALI和TFRecord文件進(jìn)行IO方面的加速。對(duì)接阿里云機(jī)器學(xué)習(xí)PAI平臺(tái)訓(xùn)練加速、模型推理優(yōu)化。
三、主要技術(shù)特點(diǎn)
1.技術(shù)架構(gòu)
EasyCV 架構(gòu)圖
EasyCV 底層引擎基于Pytorch,接入Pytorch訓(xùn)練加速器進(jìn)行訓(xùn)練加速。算法框架部分主要分為如下幾層:
- 框架層:框架層復(fù)用目前開(kāi)源領(lǐng)域使用較為廣泛的openmmlab/mmcv 接口,通過(guò)Trainer控制訓(xùn)練的主要流程,自定義Hooks進(jìn)行學(xué)習(xí)率控制、日志打印、梯度更新、模型保存、評(píng)估等操作,支持分布式訓(xùn)練、評(píng)估。Evaluators模塊提供了不同任務(wù)的評(píng)估指標(biāo),支持多數(shù)據(jù)集評(píng)估,最優(yōu)ckpt保存,同時(shí)支持用戶自定義評(píng)估指標(biāo)。可視化支持預(yù)測(cè)結(jié)果可視化、輸入圖像可視化。
- 數(shù)據(jù)層:提供了不同數(shù)據(jù)源(data_source)的抽象,支持多種開(kāi)源數(shù)據(jù)集例如Cifar、ImageNet、CoCo等,支持raw圖片文件格式和TFrecord格式,TFrecord格式數(shù)據(jù)支持使用DALI進(jìn)行數(shù)據(jù)處理加速,raw格式圖片支持通過(guò)緩存機(jī)制加速數(shù)據(jù)讀取。數(shù)據(jù)預(yù)處理(數(shù)據(jù)增強(qiáng))過(guò)程抽象成若干個(gè)獨(dú)立的pipeline,支持配置文件方式靈活配置不同的預(yù)處理流程。
- 模型層:模型層分為模塊和算法,模塊提供基礎(chǔ)的backbone,常用的loss,neck和各種下游任務(wù)的head,模型ModelZoo涵蓋了自監(jiān)督學(xué)習(xí)算法、圖像分類(lèi)、度量學(xué)習(xí)、目標(biāo)檢測(cè)和關(guān)鍵點(diǎn)檢測(cè)算法,后續(xù)會(huì)繼續(xù)擴(kuò)充支持更多的high-level算法。
- 推理:EasyCV提供了端到端的推理API接口,支持PAI-Blade進(jìn)行推理優(yōu)化,并在云上產(chǎn)品支持離在線推理。
- API層:提供了統(tǒng)一的訓(xùn)練、評(píng)估、模型導(dǎo)出、預(yù)測(cè)的API。
- EasyCV支持在本地環(huán)境方便的運(yùn)行和調(diào)試,同時(shí),如果用戶想跑大規(guī)模生產(chǎn)任務(wù),我們也支持在aliyun PAI產(chǎn)品中方便的進(jìn)行部署。
2.完善的自監(jiān)督算法體系
自監(jiān)督學(xué)習(xí)無(wú)需數(shù)據(jù)標(biāo)注,對(duì)比學(xué)習(xí)的引入使其效果逐步逼近監(jiān)督學(xué)習(xí),成為近年來(lái)學(xué)術(shù)界和工業(yè)界關(guān)注的重點(diǎn)之一。EasyCV囊括了主流的基于對(duì)比學(xué)習(xí)的自監(jiān)督算法,包括SimCLR、MoCo v1/v2、Swav, Moby, DINO。也復(fù)現(xiàn)了基于mask image modeling的MAE算法。此外,我們提供了完善的benchmark工具,進(jìn)行自監(jiān)督預(yù)訓(xùn)練模型在ImageNet上效果的評(píng)估。
基于體系化的自監(jiān)督算法和benchmark工具,用戶可以方便的進(jìn)行模型改進(jìn),效果對(duì)比,進(jìn)行模型創(chuàng)新。同時(shí)也可以基于自己的大量無(wú)標(biāo)注的數(shù)據(jù),訓(xùn)練適合自己業(yè)務(wù)領(lǐng)域的更好的預(yù)訓(xùn)練模型。
下表展示了已有自監(jiān)督算法基于ImageNet數(shù)據(jù)預(yù)訓(xùn)練的速度和在ImageNet驗(yàn)證集上linear eval/finetune的效果。
Algorithm | Linear Eval /Finetune Config | Pretrained Config | Top-1 (%) |
MoCo-v2 | mocov2_resnet50_8xb2048_40e_feature | mocov2_resnet50_8xb32_200e | 66.8 |
DINO | dino_deit_small_p16_8xb2048_20e_feature | dino_deit_small_p16_8xb32_100e | 71.248 |
MoBY | moby_deit_small_p16_8xb2048_30e_feature | moby_deit_small_p16_4xb128_300e | 72.214 |
SwAV | swav_resnet50_8xb2048_20e_feature | swav_resnet50_8xb32_200e | 73.618 |
MAE (finetune) | mae_vit_base_patch16_8xb64_100e_lrdecay075_fintune | mae_vit_base_patch16_8xb64_400e | 83.13 |
MAE (finetune) | mae_vit_large_patch16_8xb16_50e_lrdecay075_fintune | mae_vit_large_patch16_8xb32_1600e | 85.49 |
3.豐富的預(yù)訓(xùn)練模型庫(kù)
CNN作為主干網(wǎng)絡(luò),配合各種下游任務(wù)的head,是CV模型常用的結(jié)構(gòu)。EasyCV提供了多種傳統(tǒng)的CNN網(wǎng)絡(luò)結(jié)構(gòu),包括resnet、resnext、hrNet、darknet、inception、mobilenet、genet、mnasnet等。隨著視覺(jué)Transformer的發(fā)展,Transformer在越來(lái)越多的領(lǐng)域替代CNN,成為表達(dá)能力更強(qiáng)的主干網(wǎng)絡(luò)。框架實(shí)現(xiàn)了常用的ViT、SwinTransformer等, 同時(shí)引入了PytorchImageModel(Timm) 用于支持更為全面的Transformer結(jié)構(gòu)。
結(jié)合自監(jiān)督算法,所有的模型支持自監(jiān)督預(yù)訓(xùn)練和ImageNet數(shù)據(jù)監(jiān)督訓(xùn)練,為用戶提供了豐富的預(yù)訓(xùn)練backbone,用戶可以在框架預(yù)置的下游任務(wù)中簡(jiǎn)單配置進(jìn)行使用,同時(shí)也可以接入自定義的下游任務(wù)中。
4.易用性
(1)框架提供參數(shù)化方式和python api接口啟動(dòng)訓(xùn)練、評(píng)估、模型導(dǎo)出,并且提供了完備的預(yù)測(cè)接口支持端到端推理。
# 配置文件方式
python tools/train.py configs/classification/cifar10/r50.py --work_dir work_dirs/classification/cifar10/r50 --fp16
# 簡(jiǎn)易傳參方式
python tools/train.py --model_type Classification --model.num_classes 10 --data.data_source.type ClsSourceImageList --data.data_source.list data/train.txt
API方式
import easycv.tools
config_path = 'configs/classification/cifar10/r50.py'
easycv.tools.train(config_path, gpus=8, fp16=False, master_port=29527)
推理示例
import cv2
from easycv.predictors.classifier import TorchClassifier
output_ckpt = 'work_dirs/classification/cifar10/r50/epoch_350_export.pth'
tcls = TorchClassifier(output_ckpt)
img = cv2.imread('aeroplane_s_000004.png')
# input image should be RGB order
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
output = tcls.predict([img])
print(output)
(2)框架目前focus在high-level視覺(jué)任務(wù),針對(duì)分類(lèi)檢測(cè)分割三大任務(wù),基于內(nèi)容風(fēng)控、智能零售、智能監(jiān)控、同圖匹配、商品類(lèi)目預(yù)測(cè)、商品檢測(cè)、商品屬性識(shí)別、工業(yè)質(zhì)檢等應(yīng)用場(chǎng)景,基于阿里巴巴內(nèi)部的業(yè)務(wù)實(shí)踐和服務(wù)阿里云外部客戶的經(jīng)驗(yàn),篩選復(fù)現(xiàn)效果SOTA算法,提供預(yù)訓(xùn)練模型,打通訓(xùn)練、推理以及端側(cè)部署流程, 方便用戶進(jìn)行各個(gè)場(chǎng)景應(yīng)用的定制化開(kāi)發(fā)。例如在檢測(cè)領(lǐng)域,我們復(fù)現(xiàn)了YOLOX算法,集成了PAI-Blade的剪枝、量化等模型壓縮功能,并能導(dǎo)出MNN模型進(jìn)行端側(cè)部署,詳細(xì)可以參考模型壓縮量化tutorial。
5.可擴(kuò)展性
(1)如技術(shù)架構(gòu)圖右側(cè)所示,所有的模塊都支持注冊(cè)、通過(guò)配置文件配置使用Builder自動(dòng)創(chuàng)建,這就使得各個(gè)模塊可以通過(guò)配置進(jìn)行靈活的組合、替換。下面以model和evaluator配置為例,用戶可以簡(jiǎn)單的通過(guò)配置文件修改切換不同的backbone,不同的分類(lèi)head進(jìn)行模型結(jié)構(gòu)調(diào)整。在評(píng)估方面支持用戶指定多個(gè)數(shù)據(jù)集,使用不同evaluator進(jìn)行多指標(biāo)評(píng)估。
model = dict(
type='Classification',
pretrained=None,
backbone=dict(
type='ResNet',
depth=50,
out_indices=[4], # 0: conv-1, x: stage-x
norm_cfg=dict(type='SyncBN')),
head=dict(
type='ClsHead', with_avg_pool=True, in_channels=2048,
num_classes=1000))
eval_config = dict(initial=True, interval=1, gpu_collect=True)
eval_pipelines = [
dict(
mode='test',
data=data['val1'],
dist_eval=True,
evaluators=[dict(type='ClsEvaluator', topk=(1, 5))],
),
dict(
mode='test',
data=data['val2'],
dist_eval=True,
evaluators=[dict(type='RetrivalEvaluator', topk=(1, 5))],
)
]
(2)基于注冊(cè)機(jī)制,用戶可以自行編寫(xiě)定制化的neck、head、data pipeline, evaluator等模塊,快速注冊(cè)到框架內(nèi),通過(guò)配置文件指定type字段進(jìn)行創(chuàng)建和調(diào)用。
@NECKS.register_module()
class Projection(nn.Module):
"""Customized neck."""
def __init__(self, input_size, output_size):
self.proj = nn.Linear(input_size, output_size)
def forward(self, input):
return self.proj(input)
配置文件如下:
model = dict(
type='Classification',
backbone=dict(...),
neck=dict(
type='Projection',
input_size=2048,
output_size=512
),
head=dict(
type='ClsHead',
embedding_size=512,
num_classes=1000)
6.高性能
訓(xùn)練方面,支持多機(jī)多卡、fp16加速訓(xùn)練、評(píng)估。
此外,針對(duì)特定任務(wù),框架會(huì)做針對(duì)性優(yōu)化,例如自監(jiān)督訓(xùn)練需要使用大量小圖片進(jìn)行預(yù)訓(xùn)練,EasyCV使用tfrecord格式數(shù)據(jù)對(duì)小文件進(jìn)行封裝,使用DALI對(duì)預(yù)處理進(jìn)行GPU加速,提升訓(xùn)練優(yōu)化性能。下圖是使用DALI+TFrecord格式進(jìn)行訓(xùn)練,和原始圖片訓(xùn)練的性能對(duì)比。
模型 | DALITFRecord(samples/s) | JPG(samples/s) | 性能提升 | 備注 |
dino_deit_small_p16 | 492.3 | 204.8 | 140% | fp16 batch_size=32x8 |
moby_deit_small_p16 | 1312.8 | 1089.3 | 20.5% | fp16 batch_size=128x8 |
mocov2_resnet50 | 2164.9 | 1365.3 | 58.56% | fp16 batch_size=128x8 |
swav_resnet50 | 1024.0 | 853.3 | 20% | fp16 batch_size=128x8 |
四、應(yīng)用場(chǎng)景
如開(kāi)篇所述,EasyCV支撐了阿里巴巴集團(tuán)內(nèi)10+BU20+業(yè)務(wù),同時(shí)通過(guò)平臺(tái)化組件的方式滿足了云上客戶定制化模型、解決業(yè)務(wù)問(wèn)題的需求。
例如某BU使用業(yè)務(wù)圖庫(kù)100w圖片進(jìn)行自監(jiān)督預(yù)訓(xùn)練, 在預(yù)訓(xùn)練模型基礎(chǔ)上進(jìn)行下游任務(wù)finetune,達(dá)到最佳效果,比baseline模型效果提升1%。多位BU的同學(xué)使用自監(jiān)督預(yù)訓(xùn)練模型進(jìn)行特征抽取,利用對(duì)比學(xué)習(xí)的特性,使用圖像特征進(jìn)行同圖匹配的任務(wù),與此同時(shí),我們?cè)诠性粕弦餐瞥隽讼嗨茍D匹配的解決方案。
針對(duì)公有云用戶,對(duì)于入門(mén)級(jí)用戶,打通數(shù)據(jù)標(biāo)注、模型訓(xùn)練、服務(wù)部署鏈路,打造順滑的開(kāi)箱即用的用戶體驗(yàn),涵蓋圖像分類(lèi)、物體檢測(cè)、實(shí)例分割、語(yǔ)義分割、關(guān)鍵點(diǎn)檢測(cè)等領(lǐng)域的算法,用戶只需要指定數(shù)據(jù),簡(jiǎn)單調(diào)參即可完成模型訓(xùn)練,通過(guò)一鍵部署即可完成在線服務(wù)拉起。針對(duì)高級(jí)開(kāi)發(fā)者,提供了notebook開(kāi)發(fā)環(huán)境,云原生集群訓(xùn)練調(diào)度的支持,支持用戶使用框架進(jìn)行定制化算法開(kāi)發(fā),使用預(yù)置的預(yù)訓(xùn)練模型進(jìn)行finetune。
- 公有云某客戶利用物體檢測(cè)組件定制化模型訓(xùn)練,完成其業(yè)務(wù)場(chǎng)景工人安裝是否合格的智能審核。
- 某推薦用戶使用自監(jiān)督訓(xùn)練組件,使用其大量的無(wú)標(biāo)注廣告圖片,訓(xùn)練圖像表征模型,進(jìn)而把圖像特征接入推薦模型,結(jié)合推薦模型優(yōu)化,ctr提升10+%。
- 某面板研發(fā)廠商基于EasyCV定制化瑕疵檢測(cè)模型,完成云端訓(xùn)練、端側(cè)部署推理。
五、Roadmap
后續(xù)我們計(jì)劃每個(gè)月發(fā)布Release版本。近期的Roadmap如下:
- Transformer 分類(lèi)任務(wù)訓(xùn)練性能優(yōu)化 & benchmark
- 自監(jiān)督學(xué)習(xí)增加檢測(cè)&分割benchmark
- 開(kāi)發(fā)更多基于Transformer的下游任務(wù),檢測(cè) & 分割
- 常用圖像任務(wù)數(shù)據(jù)集下載、訓(xùn)練訪問(wèn)接口支持
- 模型推理優(yōu)化功能接入
- 更多領(lǐng)域模型的端側(cè)部署支持
此外,在中長(zhǎng)期,我們?cè)谙旅鎺讉€(gè)探索性的方向上會(huì)持續(xù)投入精力,也歡迎各種維度的反饋和改進(jìn)建議以及技術(shù)討論,同時(shí)我們十分歡迎和期待對(duì)開(kāi)源社區(qū)建設(shè)感興趣的同行一起參與共建。
- 自監(jiān)督技術(shù)和Transformer結(jié)合,探索更高效的預(yù)訓(xùn)練模型
- 輕量化Transformer,基于訓(xùn)練推理的聯(lián)合優(yōu)化,推動(dòng)Transformer在實(shí)際業(yè)務(wù)場(chǎng)景落地
- 基于多模態(tài)預(yù)訓(xùn)練,探索統(tǒng)一的transformer在視覺(jué)high-level 多任務(wù)上的應(yīng)用
參考鏈接:
(1)模型壓縮量化tutorial :https://github.com/alibaba/EasyCV/blob/master/docs/source/tutorials/compression.md
(2)PAI-Blade:https://www.aliyun.com/activity/bigdata/blade
(3)相似圖匹配解決方案:https://help.aliyun.com/document_detail/313270.html
(4)PAI產(chǎn)品頁(yè)面:https://www.aliyun.com/product/bigdata/learn?spm=5176.19720258.J_3207526240.78.e9392c4aJWW64C