一 導讀
近年來,自監督學習和Transformer在視覺領域大放異彩。圖像自監督預訓練極大降低了圖像任務繁重的標注工作,節省大量人力成本,而transormer技術在NLP領域的巨大成功也為CV模型效果進一步提升提供了非常大的想象空間。為推進自監督學習和視覺Transformer在阿里集團、阿里云上的落地,阿里云機器學習平臺PAI 打造了 EasyCV all-in-one視覺建模工具,搭建了豐富完善的自監督算法體系,提供了效果SOTA的視覺Transformer預訓練模型,modelzoo覆蓋圖像自監督訓練、圖像分類、度量學習、物體檢測、關鍵點檢測等領域,并且面向開發者提供開箱即用的訓練、推理能力,同時在訓練/推理效率上也做了深度優化。此外,EasyCV對阿里靈杰系統做了全面兼容,用戶可以非常方便的在阿里云環境下使用EasyCV的全部功能。
在經過阿里內部業務充分打磨以后,我們希望把EasyCV框架推向社區,進一步服務廣大的CV算法開發者以及愛好者們,使其能夠非常快速方便的體驗最新的圖像自監督以及transformer技術,并落地到自己的業務生產當中。
EasyCV背后的算法框架如何設計?開發者可以怎么使用?未來有哪些規劃?今天一起來深入了解。
二 什么是EasyCV
EasyCV是阿里巴巴開源的基于Pytorch,以自監督學習和Transformer技術為核心的 all-in-one 視覺算法建模工具。EasyCV在阿里巴巴集團內支撐了搜索、淘系、優酷、飛豬等多個BU業務,同時也在阿里云上服務了若干企業客戶,通過平臺化組件的形式,滿足客戶自定定制化模型、解決業務問題的需求。
項目開源地址:https://github.com/alibaba/EasyCV
1 項目背景


近兩年,基于無標注訓練數據的圖像自監督預訓練技術發展迅猛,在各個視覺任務的效果上已經媲美甚至超過需大量標注的有監督訓練的效果;另一方面,在NLP領域大獲成功的Transformer技術在各個圖像任務上進一步刷新SOTA效果,其應用呈現出井噴式的爆發。作為二者的結合,自監督視覺Transformer的預訓練也應運而生。
業界自監督學習和視覺Transformer算法技術更新迭代非常快,同時也給CV算法開發者帶來了諸多困擾,比如相關開源代碼零散,實現方式和風格參差不齊導致學習和復現成本過高,訓練、推理性能低下等等。阿里云PAI團隊通過搭建靈活易用的算法框架EasyCV,體系化地沉淀SOTA的自監督算法和Transformer預訓練模型,封裝統一、簡潔易用的接口,針對自監督大數據訓練方面進行性能優化,方便用戶嘗試最新的自監督預訓練技術和Transformer模型,推動在業務上的應用和落地。
此外,基于PAI團隊多年積累的深度學習訓練、推理加速技術,在EasyCV中也集成了IO優化,模型訓練加速、量化裁剪等功能,在性能上具備自己的優勢。基于阿里云的PAI產品生態,用戶可以方便地進行模型管理、在線服務部署、大規模離線推理任務。
2 主要特性
? 豐富完善的自監督算法體系:囊括業界有代表性的圖像自監督算法SimCLR, MoCO, Swav, Moby, DINO等,以及基于mask圖像預訓練方法MAE,同時提供了詳細的benchmark工具及復現結果。
? 豐富的預訓練模型庫:提供豐富的預訓練模型,在以transformer模型為主的基礎上,也包含了主流的CNN 模型, 支持ImageNet預訓練和自監督預訓練。兼容PytorchImageModels支持更為豐富的視覺Transformer backbone。
? 易用性和可擴展性 :支持配置方式、API調用方式進行訓練、評估、模型導出;框架采用主流的模塊化設計,靈活可擴展。
? 高性能 :支持多機多卡訓練和評估,fp16訓練加速。針對自監督場景數據量大的特點,利用DALI和TFRecord文件進行IO方面的加速。對接阿里云機器學習PAI平臺訓練加速、模型推理優化。
三 主要技術特點
1 技術架構

EasyCV 架構圖
EasyCV 底層引擎基于Pytorch,接入Pytorch訓練加速器進行訓練加速。算法框架部分主要分為如下幾層:
框架層:框架層復用目前開源領域使用較為廣泛的openmmlab/mmcv接口,通過Trainer控制訓練的主要流程,自定義Hooks進行學習率控制、日志打印、梯度更新、模型保存、評估等操作,支持分布式訓練、評估。Evaluators模塊提供了不同任務的評估指標,支持多數據集評估,最優ckpt保存,同時支持用戶自定義評估指標。可視化支持預測結果可視化、輸入圖像可視化。
數據層:提供了不同數據源(data_source)的抽象,支持多種開源數據集例如Cifar、ImageNet、CoCo等,支持raw圖片文件格式和TFrecord格式,TFrecord格式數據支持使用DALI進行數據處理加速,raw格式圖片支持通過緩存機制加速數據讀取。數據預處理(數據增強)過程抽象成若干個獨立的pipeline,支持配置文件方式靈活配置不同的預處理流程。
模型層:模型層分為模塊和算法,模塊提供基礎的backbone,常用的loss,neck和各種下游任務的head,模型ModelZoo涵蓋了自監督學習算法、圖像分類、度量學習、目標檢測和關鍵點檢測算法,后續會繼續擴充支持更多的high-level算法。
推理:EasyCV提供了端到端的推理API接口,支持PAI-Blade進行推理優化,并在云上產品支持離在線推理。
API層:提供了統一的訓練、評估、模型導出、預測的API。
EasyCV支持在本地環境方便的運行和調試,同時,如果用戶想跑大規模生產任務,我們也支持在aliyunPAI產品中方便的進行部署。
2 完善的自監督算法體系
自監督學習無需數據標注,對比學習的引入使其效果逐步逼近監督學習,成為近年來學術界和工業界關注的重點之一。EasyCV囊括了主流的基于對比學習的自監督算法,包括SimCLR、MoCo v1/v2、Swav, Moby, DINO。也復現了基于mask image modeling的MAE算法。此外,我們提供了完善的benchmark工具,進行自監督預訓練模型在ImageNet上效果的評估。

基于體系化的自監督算法和benchmark工具,用戶可以方便的進行模型改進,效果對比,進行模型創新。同時也可以基于自己的大量無標注的數據,訓練適合自己業務領域的更好的預訓練模型。
下表展示了已有自監督算法基于ImageNet數據預訓練的速度和在ImageNet驗證集上linear eval/finetune的效果。
| 模型 | DALITFRecord(samples/s) | JPG(samples/s) | 性能提升 | 備注 |
| dino_deit_small_p16 | 492.3 | 204.8 | 140% | fp16 batch_size=32×8 |
| moby_deit_small_p16 | 1312.8 | 1089.3 | 20.5% | fp16batch_size=128×8 |
| mocov2_resnet50 | 2164.9 | 1365.3 | 58.56% | fp16batch_size=128×8 |
| swav_resnet50 | 1024.0 | 853.3 | 20% | fp16batch_size=128×8 |
3 豐富的預訓練模型庫
CNN作為主干網絡,配合各種下游任務的head,是CV模型常用的結構。EasyCV提供了多種傳統的CNN網絡結構,包括resnet、resnext、hrNet、darknet、inception、mobilenet、genet、mnasnet等。隨著視覺Transformer的發展,Transformer在越來越多的領域替代CNN,成為表達能力更強的主干網絡。框架實現了常用的ViT、SwinTransformer等, 同時引入了PytorchImageModel(Timm) 用于支持更為全面的Transformer結構。
結合自監督算法,所有的模型支持自監督預訓練和ImageNet數據監督訓練,為用戶提供了豐富的預訓練backbone,用戶可以在框架預置的下游任務中簡單配置進行使用,同時也可以接入自定義的下游任務中。

4 易用性
框架提供參數化方式和python api接口啟動訓練、評估、模型導出,并且提供了完備的預測接口支持端到端推理。
#配置文件方式pythontools/train.pyconfigs/classification/cifar10/r50.py–work_dirwork_dirs/classification/cifar10/r50–fp16#簡易傳參方式pythontools/train.py–model_typeClassification–model.num_classes10–data.data_source.typeClsSourceImageList–data.data_source.listdata/train.txt
API方式
importeasycv.toolsconfig_path=’configs/classification/cifar10/r50.py’easycv.tools.train(config_path,gpus=8,fp16=False,master_port=29527)
推理示例
importcv2fromeasycv.predictors.classifierimportTorchClassifieroutput_ckpt=’work_dirs/classification/cifar10/r50/epoch_350_export.pth’tcls=TorchClassifier(output_ckpt)img=cv2.imread(‘aeroplane_s_000004.png’)#inputimageshouldbeRGBorderimg=cv2.cvtColor(img,cv2.COLOR_BGR2RGB)output=tcls.predict([img])print(output)
框架目前focus在high-level視覺任務,針對分類檢測分割三大任務,基于內容風控、智能零售、智能監控、同圖匹配、商品類目預測、商品檢測、商品屬性識別、工業質檢等應用場景,基于阿里巴巴內部的業務實踐和服務阿里云外部客戶的經驗,篩選復現效果SOTA算法,提供預訓練模型,打通訓練、推理以及端側部署流程, 方便用戶進行各個場景應用的定制化開發。例如在檢測領域,我們復現了YOLOX算法,集成了PAI-Blade的剪枝、量化等模型壓縮功能,并能導出MNN模型進行端側部署,詳細可以參考模型壓縮量化tutorial。
5 可擴展性
1、如技術架構圖右側所示,所有的模塊都支持注冊、通過配置文件配置使用Builder自動創建,這就使得各個模塊可以通過配置進行靈活的組合、替換。下面以model和evaluator配置為例,用戶可以簡單的通過配置文件修改切換不同的backbone,不同的分類head進行模型結構調整。在評估方面支持用戶指定多個數據集,使用不同evaluator進行多指標評估。
model=dict(type=’Classification’,pretrained=None,backbone=dict(type=’ResNet’,depth=50,out_indices=[4],#0:conv-1,x:stage-xnorm_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、基于注冊機制,用戶可以自行編寫定制化的neck、head、data pipeline, evaluator等模塊,快速注冊到框架內,通過配置文件指定type字段進行創建和調用。
@NECKS.register_module()classProjection(nn.Module):”””Customizedneck.”””def__init__(self,input_size,output_size):self.proj=nn.Linear(input_size,output_size)defforward(self,input):returnself.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 高性能
訓練方面,支持多機多卡、fp16加速訓練、評估。
此外,針對特定任務,框架會做針對性優化,例如自監督訓練需要使用大量小圖片進行預訓練,EasyCV使用tfrecord格式數據對小文件進行封裝,使用DALI對預處理進行GPU加速,提升訓練優化性能。下圖是使用DALI+TFrecord格式進行訓練,和原始圖片訓練的性能對比。
| 模型 | DALITFRecord(samples/s) | JPG(samples/s) | 性能提升 | 備注 |
| dino_deit_small_p16 | 492.3 | 204.8 | 140% | fp16 batch_size=32×8 |
| moby_deit_small_p16 | 1312.8 | 1089.3 | 20.5% | fp16batch_size=128×8 |
| mocov2_resnet50 | 2164.9 | 1365.3 | 58.56% | fp16batch_size=128×8 |
| swav_resnet50 | 1024.0 | 853.3 | 20% | fp16batch_size=128×8 |
測試機型:V100 16GB*8
四 應用場景
如開篇所述,EasyCV支撐了阿里巴巴集團內10+BU20+業務,同時通過平臺化組件的方式滿足了云上客戶定制化模型、解決業務問題的需求。
例如某BU使用業務圖庫100w圖片進行自監督預訓練, 在預訓練模型基礎上進行下游任務finetune,達到最佳效果,比baseline模型效果提升1%。多位BU的同學使用自監督預訓練模型進行特征抽取,利用對比學習的特性,使用圖像特征進行同圖匹配的任務,與此同時,我們在公有云上也推出了相似圖匹配的解決方案。
針對公有云用戶,對于入門級用戶,打通數據標注、模型訓練、服務部署鏈路,打造順滑的開箱即用的用戶體驗,涵蓋圖像分類、物體檢測、實例分割、語義分割、關鍵點檢測等領域的算法,用戶只需要指定數據,簡單調參即可完成模型訓練,通過一鍵部署即可完成在線服務拉起。針對高級開發者,提供了notebook開發環境,云原生集群訓練調度的支持,支持用戶使用框架進行定制化算法開發,使用預置的預訓練模型進行finetune。
公有云某客戶利用物體檢測組件定制化模型訓練,完成其業務場景工人安裝是否合格的智能審核。
某推薦用戶使用自監督訓練組件,使用其大量的無標注廣告圖片,訓練圖像表征模型,進而把圖像特征接入推薦模型,結合推薦模型優化,ctr提升10+%。
某面板研發廠商基于EasyCV定制化瑕疵檢測模型,完成云端訓練、端側部署推理。
五 Roadmap
后續我們計劃每個月發布Release版本。近期的Roadmap如下:
Transformer 分類任務訓練性能優化 & benchmark自監督學習增加檢測&分割benchmark開發更多基于Transformer的下游任務,檢測 & 分割常用圖像任務數據集下載、訓練訪問接口支持模型推理優化功能接入 更多領域模型的端側部署支持
此外,在中長期,我們在下面幾個探索性的方向上會持續投入精力,也歡迎各種維度的反饋和改進建議以及技術討論,同時我們十分歡迎和期待對開源社區建設感興趣的同行一起參與共建。
自監督技術和Transformer結合,探索更高效的預訓練模型
輕量化Transformer,基于訓練推理的聯合優化,推動Transformer在實際業務場景落地
基于多模態預訓練,探索統一的transformer在視覺high-level 多任務上的應用
項目開源地址:https://github.com/alibaba/EasyCV