乐趣区

关于算法:EasyCV开源|开箱即用的视觉自监督Transformer算法库

简介:EasyCV 是阿里巴巴开源的基于 Pytorch,以自监督学习和 Transformer 技术为外围的 all-in-one 视觉算法建模工具。EasyCV 在阿里巴巴团体内撑持了搜寻、淘系、优酷、飞猪等多个 BU 业务,同时也在阿里云上服务了若干企业客户,通过平台化组件的模式,满足客户自定定制化模型、解决业务问题的需要。

作者 | 临在、谦言
起源 | 阿里开发者公众号

一 导读

近年来,自监督学习和 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/Ea…

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 反对在本地环境不便的运行和调试,同时,如果用户想跑大规模生产工作,咱们也反对在 aliyun PAI 产品中不便的进行部署。

2 欠缺的自监督算法体系

自监督学习无需数据标注,比照学习的引入使其成果逐渐迫近监督学习,成为近年来学术界和工业界关注的重点之一。EasyCV 囊括了支流的基于比照学习的自监督算法,包含 SimCLR、MoCo v1/v2、Swav, Moby, DINO。也复现了基于 mask image modeling 的 MAE 算法。此外,咱们提供了欠缺的 benchmark 工具,进行自监督预训练模型在 ImageNet 上成果的评估。

基于体系化的自监督算法和 benchmark 工具,用户能够不便的进行模型改良,成果比照,进行模型翻新。同时也能够基于本人的大量无标注的数据,训练适宜本人业务畛域的更好的预训练模型。

下表展现了已有自监督算法基于 ImageNet 数据预训练的速度和在 ImageNet 验证集上 linear eval/finetune 的成果。

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 接口启动训练、评估、模型导出,并且提供了齐备的预测接口反对端到端推理。

# 配置文件形式
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 视觉工作,针对分类检测宰割三大工作,基于内容风控、智能批发、智能监控、同图匹配、商品类目预测、商品检测、商品属性辨认、工业质检等利用场景,基于阿里巴巴外部的业务实际和服务阿里云内部客户的教训,筛选复现成果 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-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 等模块,疾速注册到框架内,通过配置文件指定 type 字段进行创立和调用。

@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 减速训练、评估。

此外,针对特定工作,框架会做针对性优化,例如自监督训练须要应用大量小图片进行预训练,EasyCV 应用 tfrecord 格局数据对小文件进行封装,应用 DALI 对预处理进行 GPU 减速,晋升训练优化性能。下图是应用 DALI+TFrecord 格局进行训练,和原始图片训练的性能比照。

测试机型: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 多任务上的利用

参考链接:

1、模型压缩量化 tutorial:https://github.com/alibaba/Ea…

2、PAI-Blade:

https://www.aliyun.com/activi…

3、类似图匹配解决方案:

https://help.aliyun.com/docum…

4、PAI 产品页面:

https://www.aliyun.com/produc…

原文链接
本文为阿里云原创内容,未经容许不得转载。

退出移动版