作者 | 臨在、謙言
一、導讀
近年來,自監(jiān)督學習和Transformer在視覺領(lǐng)域大放異彩。圖像自監(jiān)督預訓練極大降低了圖像任務(wù)繁重的標注工作,節(jié)省大量人力成本,而transormer技術(shù)在NLP領(lǐng)域的巨大成功也為CV模型效果進一步提升提供了非常大的想象空間。為推進自監(jiān)督學習和視覺Transformer在阿里集團、阿里云上的落地,阿里云機器學習平臺PAI 打造了 EasyCV all-in-one視覺建模工具,搭建了豐富完善的自監(jiān)督算法體系,提供了效果SOTA的視覺Transformer預訓練模型,modelzoo覆蓋圖像自監(jiān)督訓練、圖像分類、度量學習、物體檢測、關(guān)鍵點檢測等領(lǐng)域,并且面向開發(fā)者提供開箱即用的訓練、推理能力,同時在訓練/推理效率上也做了深度優(yōu)化。此外,EasyCV對阿里靈杰系統(tǒng)做了全面兼容,用戶可以非常方便的在阿里云環(huán)境下使用EasyCV的全部功能。
在經(jīng)過阿里內(nèi)部業(yè)務(wù)充分打磨以后,我們希望把EasyCV框架推向社區(qū),進一步服務(wù)廣大的CV算法開發(fā)者以及愛好者們,使其能夠非??焖俜奖愕捏w驗最新的圖像自監(jiān)督以及transformer技術(shù),并落地到自己的業(yè)務(wù)生產(chǎn)當中。
EasyCV背后的算法框架如何設(shè)計?開發(fā)者可以怎么使用?未來有哪些規(guī)劃?今天一起來深入了解。
二、什么是EasyCV
EasyCV是阿里巴巴開源的基于Pytorch,以自監(jiān)督學習和Transformer技術(shù)為核心的 all-in-one 視覺算法建模工具。EasyCV在阿里巴巴集團內(nèi)支撐了搜索、淘系、優(yōu)酷、飛豬等多個BU業(yè)務(wù),同時也在阿里云上服務(wù)了若干企業(yè)客戶,通過平臺化組件的形式,滿足客戶自定定制化模型、解決業(yè)務(wù)問題的需求。
項目開源地址:https://github.com/alibaba/EasyCV
1.項目背景
近兩年,基于無標注訓練數(shù)據(jù)的圖像自監(jiān)督預訓練技術(shù)發(fā)展迅猛,在各個視覺任務(wù)的效果上已經(jīng)媲美甚至超過需大量標注的有監(jiān)督訓練的效果;另一方面,在NLP領(lǐng)域大獲成功的Transformer技術(shù)在各個圖像任務(wù)上進一步刷新SOTA效果,其應(yīng)用呈現(xiàn)出井噴式的爆發(fā)。作為二者的結(jié)合,自監(jiān)督視覺Transformer的預訓練也應(yīng)運而生。
業(yè)界自監(jiān)督學習和視覺Transformer算法技術(shù)更新迭代非??欤瑫r也給CV算法開發(fā)者帶來了諸多困擾,比如相關(guān)開源代碼零散,實現(xiàn)方式和風格參差不齊導致學習和復現(xiàn)成本過高,訓練、推理性能低下等等。阿里云PAI團隊通過搭建靈活易用的算法框架EasyCV,體系化地沉淀SOTA的自監(jiān)督算法和Transformer預訓練模型,封裝統(tǒng)一、簡潔易用的接口,針對自監(jiān)督大數(shù)據(jù)訓練方面進行性能優(yōu)化,方便用戶嘗試最新的自監(jiān)督預訓練技術(shù)和Transformer模型,推動在業(yè)務(wù)上的應(yīng)用和落地。
此外,基于PAI團隊多年積累的深度學習訓練、推理加速技術(shù),在EasyCV中也集成了IO優(yōu)化,模型訓練加速、量化裁剪等功能,在性能上具備自己的優(yōu)勢?;诎⒗镌频腜AI產(chǎn)品生態(tài),用戶可以方便地進行模型管理、在線服務(wù)部署、大規(guī)模離線推理任務(wù)。
2.主要特性
豐富完善的自監(jiān)督算法體系:囊括業(yè)界有代表性的圖像自監(jiān)督算法SimCLR, MoCO, Swav, Moby, DINO等,以及基于mask圖像預訓練方法MAE,同時提供了詳細的benchmark工具及復現(xiàn)結(jié)果。
豐富的預訓練模型庫:提供豐富的預訓練模型,在以transformer模型為主的基礎(chǔ)上,也包含了主流的CNN 模型, 支持ImageNet預訓練和自監(jiān)督預訓練。兼容PytorchImageModels支持更為豐富的視覺Transformer backbone。
易用性和可擴展性 :支持配置方式、API調(diào)用方式進行訓練、評估、模型導出;框架采用主流的模塊化設(shè)計,靈活可擴展。
高性能 :支持多機多卡訓練和評估,fp16訓練加速。針對自監(jiān)督場景數(shù)據(jù)量大的特點,利用DALI和TFRecord文件進行IO方面的加速。對接阿里云機器學習PAI平臺訓練加速、模型推理優(yōu)化。
三、主要技術(shù)特點
1.技術(shù)架構(gòu)
EasyCV 架構(gòu)圖
EasyCV 底層引擎基于Pytorch,接入Pytorch訓練加速器進行訓練加速。算法框架部分主要分為如下幾層:
- 框架層:框架層復用目前開源領(lǐng)域使用較為廣泛的openmmlab/mmcv 接口,通過Trainer控制訓練的主要流程,自定義Hooks進行學習率控制、日志打印、梯度更新、模型保存、評估等操作,支持分布式訓練、評估。Evaluators模塊提供了不同任務(wù)的評估指標,支持多數(shù)據(jù)集評估,最優(yōu)ckpt保存,同時支持用戶自定義評估指標??梢暬С诸A測結(jié)果可視化、輸入圖像可視化。
- 數(shù)據(jù)層:提供了不同數(shù)據(jù)源(data_source)的抽象,支持多種開源數(shù)據(jù)集例如Cifar、ImageNet、CoCo等,支持raw圖片文件格式和TFrecord格式,TFrecord格式數(shù)據(jù)支持使用DALI進行數(shù)據(jù)處理加速,raw格式圖片支持通過緩存機制加速數(shù)據(jù)讀取。數(shù)據(jù)預處理(數(shù)據(jù)增強)過程抽象成若干個獨立的pipeline,支持配置文件方式靈活配置不同的預處理流程。
- 模型層:模型層分為模塊和算法,模塊提供基礎(chǔ)的backbone,常用的loss,neck和各種下游任務(wù)的head,模型ModelZoo涵蓋了自監(jiān)督學習算法、圖像分類、度量學習、目標檢測和關(guān)鍵點檢測算法,后續(xù)會繼續(xù)擴充支持更多的high-level算法。
- 推理:EasyCV提供了端到端的推理API接口,支持PAI-Blade進行推理優(yōu)化,并在云上產(chǎn)品支持離在線推理。
- API層:提供了統(tǒng)一的訓練、評估、模型導出、預測的API。
- EasyCV支持在本地環(huán)境方便的運行和調(diào)試,同時,如果用戶想跑大規(guī)模生產(chǎn)任務(wù),我們也支持在aliyun PAI產(chǎn)品中方便的進行部署。
2.完善的自監(jiān)督算法體系
自監(jiān)督學習無需數(shù)據(jù)標注,對比學習的引入使其效果逐步逼近監(jiān)督學習,成為近年來學術(shù)界和工業(yè)界關(guān)注的重點之一。EasyCV囊括了主流的基于對比學習的自監(jiān)督算法,包括SimCLR、MoCo v1/v2、Swav, Moby, DINO。也復現(xiàn)了基于mask image modeling的MAE算法。此外,我們提供了完善的benchmark工具,進行自監(jiān)督預訓練模型在ImageNet上效果的評估。
基于體系化的自監(jiān)督算法和benchmark工具,用戶可以方便的進行模型改進,效果對比,進行模型創(chuàng)新。同時也可以基于自己的大量無標注的數(shù)據(jù),訓練適合自己業(yè)務(wù)領(lǐng)域的更好的預訓練模型。
下表展示了已有自監(jiān)督算法基于ImageNet數(shù)據(jù)預訓練的速度和在ImageNet驗證集上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.豐富的預訓練模型庫
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等。隨著視覺Transformer的發(fā)展,Transformer在越來越多的領(lǐng)域替代CNN,成為表達能力更強的主干網(wǎng)絡(luò)??蚣軐崿F(xiàn)了常用的ViT、SwinTransformer等, 同時引入了PytorchImageModel(Timm) 用于支持更為全面的Transformer結(jié)構(gòu)。
結(jié)合自監(jiān)督算法,所有的模型支持自監(jiān)督預訓練和ImageNet數(shù)據(jù)監(jiān)督訓練,為用戶提供了豐富的預訓練backbone,用戶可以在框架預置的下游任務(wù)中簡單配置進行使用,同時也可以接入自定義的下游任務(wù)中。
4.易用性
(1)框架提供參數(shù)化方式和python api接口啟動訓練、評估、模型導出,并且提供了完備的預測接口支持端到端推理。
# 配置文件方式
python tools/train.py configs/classification/cifar10/r50.py --work_dir work_dirs/classification/cifar10/r50 --fp16
# 簡易傳參方式
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視覺任務(wù),針對分類檢測分割三大任務(wù),基于內(nèi)容風控、智能零售、智能監(jiān)控、同圖匹配、商品類目預測、商品檢測、商品屬性識別、工業(yè)質(zhì)檢等應(yīng)用場景,基于阿里巴巴內(nèi)部的業(yè)務(wù)實踐和服務(wù)阿里云外部客戶的經(jīng)驗,篩選復現(xiàn)效果SOTA算法,提供預訓練模型,打通訓練、推理以及端側(cè)部署流程, 方便用戶進行各個場景應(yīng)用的定制化開發(fā)。例如在檢測領(lǐng)域,我們復現(xiàn)了YOLOX算法,集成了PAI-Blade的剪枝、量化等模型壓縮功能,并能導出MNN模型進行端側(cè)部署,詳細可以參考模型壓縮量化tutorial。
5.可擴展性
(1)如技術(shù)架構(gòu)圖右側(cè)所示,所有的模塊都支持注冊、通過配置文件配置使用Builder自動創(chuàng)建,這就使得各個模塊可以通過配置進行靈活的組合、替換。下面以model和evaluator配置為例,用戶可以簡單的通過配置文件修改切換不同的backbone,不同的分類head進行模型結(jié)構(gòu)調(diào)整。在評估方面支持用戶指定多個數(shù)據(jù)集,使用不同evaluator進行多指標評估。
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)基于注冊機制,用戶可以自行編寫定制化的neck、head、data pipeline, evaluator等模塊,快速注冊到框架內(nèi),通過配置文件指定type字段進行創(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.高性能
訓練方面,支持多機多卡、fp16加速訓練、評估。
此外,針對特定任務(wù),框架會做針對性優(yōu)化,例如自監(jiān)督訓練需要使用大量小圖片進行預訓練,EasyCV使用tfrecord格式數(shù)據(jù)對小文件進行封裝,使用DALI對預處理進行GPU加速,提升訓練優(yōu)化性能。下圖是使用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 |
四、應(yīng)用場景
如開篇所述,EasyCV支撐了阿里巴巴集團內(nèi)10+BU20+業(yè)務(wù),同時通過平臺化組件的方式滿足了云上客戶定制化模型、解決業(yè)務(wù)問題的需求。
例如某BU使用業(yè)務(wù)圖庫100w圖片進行自監(jiān)督預訓練, 在預訓練模型基礎(chǔ)上進行下游任務(wù)finetune,達到最佳效果,比baseline模型效果提升1%。多位BU的同學使用自監(jiān)督預訓練模型進行特征抽取,利用對比學習的特性,使用圖像特征進行同圖匹配的任務(wù),與此同時,我們在公有云上也推出了相似圖匹配的解決方案。
針對公有云用戶,對于入門級用戶,打通數(shù)據(jù)標注、模型訓練、服務(wù)部署鏈路,打造順滑的開箱即用的用戶體驗,涵蓋圖像分類、物體檢測、實例分割、語義分割、關(guān)鍵點檢測等領(lǐng)域的算法,用戶只需要指定數(shù)據(jù),簡單調(diào)參即可完成模型訓練,通過一鍵部署即可完成在線服務(wù)拉起。針對高級開發(fā)者,提供了notebook開發(fā)環(huán)境,云原生集群訓練調(diào)度的支持,支持用戶使用框架進行定制化算法開發(fā),使用預置的預訓練模型進行finetune。
- 公有云某客戶利用物體檢測組件定制化模型訓練,完成其業(yè)務(wù)場景工人安裝是否合格的智能審核。
- 某推薦用戶使用自監(jiān)督訓練組件,使用其大量的無標注廣告圖片,訓練圖像表征模型,進而把圖像特征接入推薦模型,結(jié)合推薦模型優(yōu)化,ctr提升10+%。
- 某面板研發(fā)廠商基于EasyCV定制化瑕疵檢測模型,完成云端訓練、端側(cè)部署推理。
五、Roadmap
后續(xù)我們計劃每個月發(fā)布Release版本。近期的Roadmap如下:
- Transformer 分類任務(wù)訓練性能優(yōu)化 & benchmark
- 自監(jiān)督學習增加檢測&分割benchmark
- 開發(fā)更多基于Transformer的下游任務(wù),檢測 & 分割
- 常用圖像任務(wù)數(shù)據(jù)集下載、訓練訪問接口支持
- 模型推理優(yōu)化功能接入
- 更多領(lǐng)域模型的端側(cè)部署支持
此外,在中長期,我們在下面幾個探索性的方向上會持續(xù)投入精力,也歡迎各種維度的反饋和改進建議以及技術(shù)討論,同時我們十分歡迎和期待對開源社區(qū)建設(shè)感興趣的同行一起參與共建。
- 自監(jiān)督技術(shù)和Transformer結(jié)合,探索更高效的預訓練模型
- 輕量化Transformer,基于訓練推理的聯(lián)合優(yōu)化,推動Transformer在實際業(yè)務(wù)場景落地
- 基于多模態(tài)預訓練,探索統(tǒng)一的transformer在視覺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)品頁面:https://www.aliyun.com/product/bigdata/learn?spm=5176.19720258.J_3207526240.78.e9392c4aJWW64C