使用Amazon SageMaker部署CVAT AI自动图像标注系统

背景介绍

Amazon SageMaker可以帮助开发人员和数据科学家快速准备构建、训练和部署机器学习(Amazon ML)模型的完全托管的云服务。特别Amazon SageMaker提供了一种可扩展且经济高效的方法来部署大量的预先训练好的机器学习模型,借助Amazon SageMaker多容器多模型的部署可以使用单个端点访问的模式提供多种类型的推理服务。

而我们都知道在机器学习领域,训练数据集的重要性不言而喻,特别是目前应用最为广泛的监督式计算机视觉领域中的深度学习,往往一个这种项目最开始的工作就是标注各种媒资数据。而CVAT就是为用户提供一套完整的工具平台,方便用户标注数字图像和视频。CVAT 支持与对象检测、图像分类、图像分割和3D数据标注有关的监督机器学习任务,CVAT自2018年在GitHub上开源以来已经发展成为业界中最为流行的视觉领域标注工具,特别是AI自动标注功能非常受用户欢迎。

官方文档中安装CVAT的推荐方式为单机部署模式,无论应用层、数据库层还是缓存层以及AI推理层都是通过Docker的方式部署在一台物理机或者虚拟机中,这种方式无论从资源利用、安全性、部署架构的高可用性上都难以满足企业级应用部署的规范。本文作者拥有多次大型企业在亚马逊云科技上通过无服务器化(Serverless)部署CVAT的经验,特别是对最为受欢迎的AI自动标注功能使用Amazon SageMaker模型部署推理层改造的经验,通过Amazon CloudFormation一键部署模式,将整个CVAT平台系统部署在亚马逊云的Serverless的架构之上。

部署架构介绍

CVAT主体开发使用了Python Django Web应用框架,并大量使用了缓存技术提升系统的稳定性和降低应用的延迟,数据库使用了开源的PostgreSQL,最为重要的AI推理引擎也使用了数据科学界开源的nuclio作为基础无服务器(Serverless)的架构层。由于上文提及CVAT官方提供的部署方案需要把所有的技术组建容器化后部署在一台物理机或者虚拟机中,通过Docker Compose的集群方式部署。官方的推荐架构明显较于目前云原生或Serverless的架构趋势有很大的区别,因此我们在将CVAT部署到亚马逊云科技云上的时候将架构进行改造。

具体的架构图如下:

使用Amazon SageMaker部署CVAT AI自动图像标注系统_第1张图片

其中改造的点如下:

  • 首先我们可以将整套架构运行在安全的Amazon VPC中,通常情况下我们把需要通过公网访问的CVAT用户界面的ALB放在公有子网,同时我们的Amazon Fargate(一种适用于容器的无服务器计算引擎)到公网拉取Docker镜像需要的Amazon NAT Gateway也放在公有子网,其余所有Amazon Fargate容器、Amazon RDS/ElastiCache、Amazon EFS甚至Amazon SageMaker的Endpoint都通过私有网络进行访问,如有必要甚至可以将整个Amazon VPC与互联网进行隔离,满足客户企业级安全的要求;

Amazon Fragate:
https://aws.amazon.com/cn/far...

  • 将CVAT的Server和UI两个服务的容器运行到Amazon ECS的Fargate Serverless上,并通过ALB替换掉traefik容器将用户的流量分别发送到这两个Amazon ECS的服务上,实现Amazon Fargate容器多节点和冗余;
  • 将CVAT的缓存层从原来的Docker容器中剥离出来运行在ElastiCache的Redis上,实现缓存层的全托管;
  • 将CVAT的数据库层从原来的Docker容器中剥离出来运行在Amazon RDS的PostgreSQL上,实现数据库层的全托管;
  • 将CVAT存放媒资的本地Docker卷剥离出来存放在Amazon EFS的共享存储上,方便CVAT Server的容器在Amazon Fargate上的漂移和多节点扩展;
  • 最为重要的是对AI推理层的改造,新增CVAT Serverless服务替换原有nuclio无服务器服务,主要原因是nuclio对底层物理机或虚拟机的侵入性太强,需要开放大量的底层权限才能使用(比如运行Docker的UNIX Socket接口),无法在亚马逊云科技上真正实现Serverless,同时Amazon SageMaker为我们提供了强大的推理端点(Endpoint)部署的功能,因此我们通过新增的CVAT Serverless服务与Amazon SageMaker进行对接,将推理服务运行在Amazon SageMaker Host Endpoint上,并将CVAT Serverless服务运行在Amazon Fargate上;
  • 另外为了初始化CVAT数据库,及一些Amazon S3上的Demo媒资复制到创建好的Amazon EFS上,我们使用了一个Amazon Fargate ECS的Task来完成一次性初始化的动作;
  • 最后我们还会使用一些其他亚马逊云科技的服务来帮助我们实现整个CVAT架构的无服务器化,包括使用Amazon S3存储AI推理模型、媒资,使用Cloud Map作为微服务的发现机制,使用ECR来托管所有Docker镜像(包括Amazon ECS和Amazon SageMaker都会使用)。

相比较于CVAT社区官方版本的部署方案,运行在亚马逊云上CVAT具有非常明显的优势:

  • 所有技术模块实现了高可用;
  • 真正全解偶并实现无服务器化,用户无需再关心底层资源调度;
  • 可以支持大量用户同时使用CVAT系统进行协作标注,实现了CVAT内部协作功能架构基础;
  • AI推理模块可扩展性更强,更为灵活。

方案部署步骤

本方案所有的技术模块可以通过预先定义好的Amazon CloudFormation服务创建,点击下面的按键就可以跳转到Amazon CloudFormation控制台界面(宁夏区)进行整个方案架构的部署,对于部署的源代码大家可以参考这个链接

使用Amazon SageMaker部署CVAT AI自动图像标注系统_第2张图片

快速启动

方案架构快速部署有很多配置选项可以修改,但是如果是基于测试或者全新快速部署使用的目的可以全部使用默认的值,只有两个是必须输入的:一个是给整个架构堆栈起一个名称,另外一个就是对创建IAM资源影响的确认项。

使用Amazon SageMaker部署CVAT AI自动图像标注系统_第3张图片

使用Amazon SageMaker部署CVAT AI自动图像标注系统_第4张图片

额外灵活的配置

如果你想对整个CVAT有更为深入灵活的配置,可以通过修改Amazon CloudFormation参数来实现,这些参数主要分为以下几种类型:

  • CVAT用户相关的参数
  • 与数据库相关的参数
  • Amazon VPC网络相关的参数

模版的输出

经过15到20分钟的等待,我们CVAT的模版将创建完成。

使用Amazon SageMaker部署CVAT AI自动图像标注系统_第5张图片

点击“输出”的页面,模版输出了在亚马逊云科技创建的各种资源的ID,其中最为重要的URL,这个输出是部署好的CVAT链接地址,可以直接点击这个链接登录新创建好的CVAT系统。

使用CVAT AI图像自动标签系统

登录CVAT的链接会需要使用CVAT的用户名密码登录,就是我们在创建Amazon CloudFormation时使用到CVATUser和CVATPassword参数,默认为admin/cvat123456。

使用Amazon SageMaker部署CVAT AI自动图像标注系统_第6张图片

登录后点击Models链接,可以查看我们已经在Amazon SageMaker五个模型推理的端点(Endpoint)。

使用Amazon SageMaker部署CVAT AI自动图像标注系统_第7张图片

点击Tasks链接,并点击Create new task按钮

image.png

在Create a new task页面需要填入如下信息:Name可以填入handball,增加一个标签person,并点击Connected file share链接。

使用Amazon SageMaker部署CVAT AI自动图像标注系统_第8张图片

在Connected file share这个页面中所有的媒资文件都是存放在我们Amazon CloudFormation创建的Amazon EFS共享存储中,实现我们通过Amazon Fargate Task已经将Amazon S3上的Demo数据复制到共享存储上了,点击展开root节点,选择handball文件夹,这里包含了400张图片,是一段视频经过抽帧的结果,点击Submit按钮。

使用Amazon SageMaker部署CVAT AI自动图像标注系统_第9张图片

很快页面就会反馈后台已经把CVAT Task已经创建好,会有一个浮动窗口提示我们,这里可以点击Open task按钮或者点击页面上方的Tasks链接进入Tasks页面。

使用Amazon SageMaker部署CVAT AI自动图像标注系统_第10张图片

现在我们已经创建好了一个CVAT Task,可以选择用手工的方式给每一帧分别打标签,这里我们使用AI标注的功能来提升打标签的效率。在Tasks页面点击Actions链接中的菜单,并点击Automatic annotation链接。

使用Amazon SageMaker部署CVAT AI自动图像标注系统_第11张图片

这时会弹出一个浮动窗口让我们选择一个模型,这里我们选择使用pth-faster-rcnn模型。

使用Amazon SageMaker部署CVAT AI自动图像标注系统_第12张图片

这时CVAT会帮助我们自动将模型里能够识别的标签与我们在任务中定义个标签进行匹配,点击Annotate,CVAT就会通过Amazon SageMaker的Endpoint进行推理,对任务里所有的图片帧中的人物进行标注。

使用Amazon SageMaker部署CVAT AI自动图像标注系统_第13张图片

这个过程会持续一段时间,在Task页面我们可以监控到后台推理的进度。

使用Amazon SageMaker部署CVAT AI自动图像标注系统_第14张图片

经过10分钟左右我们就可以用过Amazon SageMaker将400张图片全部标注完成,现在可以通过点击下面Job的链接查看结果。

使用Amazon SageMaker部署CVAT AI自动图像标注系统_第15张图片

打开Job页面以后我们就能看到AI标注的结果,所有在每帧图片中的人物都用标注框标注出来了,我们可以点击播放按钮看到以下效果。

使用Amazon SageMaker部署CVAT AI自动图像标注系统_第16张图片

如果大家感兴趣还可以继续尝试其他AI标注方式,比如interactor方式可以自动识别物体边界多边形式标注,tracker方式可以通过自动语义分割的方式在视频中追踪标记目标标注物,reid方式可以使用业界流行的行人重识别(reidentification)算法对所有标注的行人人物进行标签合并。

结论

使用将CVAT通过无服务器化改造的方式,特别是将AI标注推理功能运行在Amazon SageMaker上,可以大大提升开源CVAT单机部署的性能以及稳定性,可以非常好的支撑企业内部图像AI项目的标注任务。

本篇作者

使用Amazon SageMaker部署CVAT AI自动图像标注系统_第17张图片
黄德滨
亚马逊云科技资深解决方案架构师
服务于全球客户销售团队,负责技术架构设计和咨询,致力于企业级应用在亚马逊云科技中的运用和部署,对于大型企业级应用开发和实施拥有近二十年的丰富经验,在云计算领域工作多年,拥有大量帮助各种类型企业上云的经验,在加入亚马逊云科技之前先后服务于百度、甲骨文等国内外知名IT企业。

你可能感兴趣的