EasyCV開源|開箱即用的視覺自監督+Transformer演算法庫
作者:謙言、臨在
一 導讀
近年來,自監督學習和Transformer在視覺領域大放異彩。影像自監督預訓練極大降低了影像任務繁重的標註工作,節省大量人力成本,而transormer技術在NLP領域的巨大成功也為CV模型效果進一步提升提供了非常大的想象空間。為推進自監督學習和視覺Transformer在阿里集團、阿里雲上的落地,阿里雲機器學習平臺PAI 打造了 EasyCV all-in-one視覺建模工具,搭建了豐富完善的自監督演算法體系,提供了效果SO他的視覺Transformer預訓練模型,modelzoo覆蓋影像自監督訓練、影像分類、度量學習、物體檢測、關鍵點檢測等領域,並且面向開發者提供開箱即用的訓練、推理能力,同時在訓練/推理效率上也做了深度最佳化。此外,EasyCV對阿里靈傑系統做了全面相容,使用者可以非常方便的在阿里雲環境下使用EasyCV的全部功能。
在經過阿里內部業務充分打磨以後,我們希望把EasyCV框架推向社群,進一步服務廣大的CV演算法開發者以及愛好者們,使其能夠非常快速方便的體驗最新的影像自監督以及transformer技術,並落地到自己的業務生產當中。
EasyCV背後的演算法框架如何設計?開發者可以怎麼使用?未來有哪些規劃?今天一起來深入瞭解。
二 什麼是EasyCV
EasyCV是阿里巴巴開源的基於Pytorch,以自監督學習和Transformer技術為核心的 all-in-one 視覺演算法建模工具。EasyCV在阿里巴巴集團內支撐了搜尋、淘系、優酷、飛豬等多個BU業務,同時也在阿里雲上服務了若干企業客戶,透過平臺化元件的形式,滿足客戶自定定製化模型、解決業務問題的需求。
專案開源地址: https:// github.com/alibaba/Easy CV
1 專案背景
近兩年,基於無標註訓練資料的影像自監督預訓練技術發展迅猛,在各個視覺任務的效果上已經媲美甚至超過需大量標註的有監督訓練的效果;另一方面,在NLP領域大獲成功的Transformer技術在各個影像任務上進一步重新整理SOTA效果,其應用呈現出井噴式的爆發。作為二者的結合,自監督視覺Transformer的預訓練也應運而生。
業界自監督學習和視覺Transformer演算法技術更新迭代非常快,同時也給CV演算法開發者帶來了諸多困擾,比如相關開原始碼零散,實現方式和風格參差不齊導致學習和復現成本過高,訓練、推理效能低下等等。阿里雲PAI團隊透過搭建靈活易用的演算法框架EasyCV,體系化地沉澱SO他的自監督演算法和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 底層引擎基於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支援在本地環境方便的執行和除錯,同時,如果使用者想跑大規模生產任務,我們也支援在aliyun PAI產品中方便的進行部署。
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=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 |
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 易用性
1. 框架提供引數化方式和python api介面啟動訓練、評估、模型匯出,並且提供了完備的預測介面支援端到端推理。
1.# 配置檔案方式
2.python tools/train.py configs/classification/cifar10/r50.py --work_dir work_dirs/classification/cifar10/r50 --fp16
3.
4.
5.# 簡易傳參方式
6.python tools/train.py --model_type Classification --model.num_classes 10 --data.data_source.type ClsSourceImageList --data.data_source.list data/train.txt
API方式
1.import easycv.tools
2.config_path = 'configs/classification/cifar10/r50.py'
3.easycv.tools.train(config_path, gpus=8, fp16=False, master_port=29527)
推理示例
1.import cv2
2.from easycv.predictors.classifier import TorchClassifier
3.
4.output_ckpt = 'work_dirs/classification/cifar10/r50/epoch_350_export.pth'
5.tcls = TorchClassifier(output_ckpt)
6.
7.img = cv2.imread('aeroplane_s_000004.png')
8.# input image should be RGB order
9.img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
10.output = tcls.predict([img])
11.print(output)
2. 框架目前focus在high-level視覺任務,針對分類檢測分割三大任務,基於內容風控、智慧零售、智慧監控、同圖匹配、商品類目預測、商品檢測、商品屬性識別、工業質檢等應用場景,基於阿里巴巴內部的業務實踐和服務阿里雲外部客戶的經驗,篩選復現效果SOTA演算法,提供預訓練模型,打通訓練、推理以及端側部署流程, 方便使用者進行各個場景應用的定製化開發。例如在檢測領域,我們復現了YOLOX演算法,整合了PAI-Blade的剪枝、量化等模型壓縮功能,並能匯出MNN模型進行端側部署,詳細可以參考模型壓縮量化tutorial。
5 可擴充套件性
1、如技術架構圖右側所示,所有的模組都支援註冊、透過配置檔案配置使用Builder自動建立,這就使得各個模組可以透過配置進行靈活的組合、替換。下面以model和evaluator配置為例,使用者可以簡單的透過配置檔案修改切換不同的backbone,不同的分類head進行模型結構調整。在評估方面支援使用者指定多個資料集,使用不同evaluator進行多指標評估。
1.model = dict(
2. type='Classification',
3. pretrained=None,
4. backbone=dict(
5. type='ResNet',
6. depth=50,
7. out_indices=[4], # 0: conv-1, x: stage-x
8. norm_cfg=dict(type='SyncBN')),
9. head=dict(
10. type='ClsHead', with_avg_pool=True, in_channels=2048,
11. num_classes=1000))
12.
13.eval_config = dict(initial=True, interval=1, gpu_collect=True)
14.eval_pipelines = [
15. dict(
16. mode='test',
17. data=data['val1'],
18. dist_eval=True,
19. evaluators=[dict(type='ClsEvaluator', topk=(1, 5))],
20. ),
21. dict(
22. mode='test',
23. data=data['val2'],
24. dist_eval=True,
25. evaluators=[dict(type='RetrivalEvaluator', topk=(1, 5))],
26. )
27.]
2、基於序號產生器制,使用者可以自行編寫定製化的neck、head、data pipeline, evaluator等模組,快速註冊到框架內,透過配置檔案指定type欄位進行建立和呼叫。
1.@NECKS.register_module()
2.class Projection(nn.Module):
3. """Customized neck."""
4. def __init__(self, input_size, output_size):
5. self.proj = nn.Linear(input_size, output_size)
6.
7. def forward(self, input):
8. return self.proj(input)
配置檔案如下
1.model = dict(
2. type='Classification',
3. backbone=dict(...),
4. neck=dict(
5. type='Projection',
6. input_size=2048,
7. output_size=512
8. ),
9. head=dict(
10. type='ClsHead',
11. embedding_size=512,
12. 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=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 |
測試機型: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/Easy
參考連結:
1、模型壓縮量化tutorial :
2、PAI-Blade:
3、相似圖匹配解決方案:
https://help.aliyun.com/document_detail/313270.html
4、PAI產品頁面:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70004426/viewspace-2888805/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- MAE自監督演算法介紹和基於EasyCV的復現演算法
- 開箱即用的SpringBoot模板Spring Boot
- 開箱即用的 SQL Server DockerSQLServerDocker
- “開箱即用” 的 Kubernetes 叢集
- 開源|螞蟻金服開源AntV F2:一個專注於移動,開箱即用的可視
- Spring Cloud Alibaba, 開箱即用SpringCloud
- 開箱即用,Hexo部落格的github+server自動部署HexoGithubServer
- 填鴨表單!開箱即用的開源問卷調查系統!
- 3.6 萬顆星!開源 Web 伺服器後起之秀,自帶免費 HTTPS 開箱即用Web伺服器HTTP
- HAOS Hyper-v 開箱即用版
- 【微服務】開源PaaS Rainbond v3.6.0正式釋出,Service Mesh開箱即用微服務AI
- go-zero:開箱即用的微服務框架Go微服務框架
- 開箱即用的 Vue Webpack 腳手架模版VueWeb
- 開源視覺大模型視覺大模型
- 監督學習,無監督學習常用演算法集合總結,引用scikit-learn庫(監督篇)演算法
- WPF DataGrid開箱即用支援全部勾選的DataGridCheckBoxColumn
- 開箱即用的多頁面webpack腳手架Web
- 機器學習演算法的開源視覺化工具: MLDemos機器學習演算法視覺化
- 4款開源免費的資料視覺化JavaScript庫視覺化JavaScript
- 自監督學習
- [OpenGL]未來視覺-MagicCamera3實用開源庫視覺
- 開箱即用的基礎設施連線選項
- 開箱即用的Vite-Vue3工程化模板ViteVue
- 開箱即用的JS乾貨助力金三銀四JS
- OpenAI開源了:Transformer自動debug工具上線GitHubOpenAIORMGithub
- NeurIPS 2018 | 基於自監督學習的視聽覺資訊同一性判斷
- Gitee GVP 頂級專案!一款開箱即用的國產開源協同辦公系統Gitee
- EsParser 1.0 釋出:潛心之作,完全開箱即用
- Kornia開源可微分計算機視覺庫,基於Pytorch計算機視覺PyTorch
- ExcelPatternTool 開箱即用的Excel工具包現已釋出!Excel
- java 實現開箱即用基於 redis 的分散式鎖JavaRedis分散式
- v1.9.0 進行中:開箱即用的 MQTT bench 工具MQQT
- 開箱即用,Knative 給您極致的容器 Serverless 體驗Server
- 開箱即用的微服務框架 Go-zero(進階篇)微服務框架Go
- re-editor -- 開箱即用的react富文字編輯器React
- ICCV2021 | Swin Transformer: 使用移位視窗的分層視覺TransformerORM視覺
- 自監督學習概述
- ICCV2021 | 簡單有效的長尾視覺識別新方案:蒸餾自監督(SSD)視覺