使用 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:
https://openvinotoolkit.github.io/cvat/about/
安装 CVAT:
https://openvinotoolkit.github.io/cvat/docs/administration/basics/installation/
部署架构介绍
CVAT 主体开发使用了 Python Django Web 应用框架,并大量使用了缓存技术提升系统的稳定性和降低应用的延迟,数据库使用了开源的 PostgreSQL,最为重要的 AI 推理引擎也使用了数据科学界开源的 nuclio 作为基础无服务器(Serverless)的架构层。由于上文提及 CVAT 官方提供的部署方案需要把所有的技术组建容器化后部署在一台物理机或者虚拟机中,通过 Docker Compose 的集群方式部署。官方的推荐架构明显较于目前云原生或 Serverless 的架构趋势有很大的区别,因此我们在将 CVAT 部署到亚马逊云科技云上的时候将架构进行改造。
Nuclio:
具体的架构图如下:
其中改造的点如下:
首先我们可以将整套架构运行在安全的 Amazon VPC 中,通常情况下我们把需要通过公网访问的 CVAT 用户界面的 ALB 放在公有子网,同时我们的 Amazon Fargate(一种适用于容器的无服务器计算引擎)到公网拉取 Docker 镜像需要的 Amazon NAT Gateway 也放在公有子网,其余所有 Amazon Fargate 容器、Amazon RDS/ElastiCache、Amazon EFS 甚至 Amazon SageMaker 的 Endpoint 都通过私有网络进行访问,如有必要甚至可以将整个 Amazon VPC 与互联网进行隔离,满足客户企业级安全的要求;
Amazon Fragate:
将 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 控制台界面(宁夏区)进行整个方案架构的部署,对于部署的源代码大家可以参考这个链接。
链接:
https://github.com/aws-samples/cvat-on-aws-china
快速启动
方案架构快速部署有很多配置选项可以修改,但是如果是基于测试或者全新快速部署使用的目的可以全部使用默认的值,只有两个是必须输入的:一个是给整个架构堆栈起一个名称,另外一个就是对创建 IAM 资源影响的确认项。
额外灵活的配置
如果你想对整个 CVAT 有更为深入灵活的配置,可以通过修改 Amazon CloudFormation 参数来实现,这些参数主要分为以下几种类型:
CVAT 用户相关的参数
与数据库相关的参数
Amazon VPC 网络相关的参数
模版的输出
经过 15 到 20 分钟的等待,我们 CVAT 的模版将创建完成。
点击“输出”的页面,模版输出了在亚马逊云科技创建的各种资源的 ID,其中最为重要的 URL,这个输出是部署好的 CVAT 链接地址,可以直接点击这个链接登录新创建好的 CVAT 系统。
使用 CVAT AI 图像自动标签系统
登录 CVAT 的链接会需要使用 CVAT 的用户名密码登录,就是我们在创建 Amazon CloudFormation 时使用到 CVATUser 和 CVATPassword 参数,默认为 admin/cvat123456。
登录后点击 Models 链接,可以查看我们已经在 Amazon SageMaker 五个模型推理的端点(Endpoint)。
点击 Tasks 链接,并点击 Create new task 按钮
在 Create a new task 页面需要填入如下信息:Name 可以填入 handball,增加一个标签 person,并点击 Connected file share 链接。
在 Connected file share 这个页面中所有的媒资文件都是存放在我们 Amazon CloudFormation 创建的 Amazon EFS 共享存储中,实现我们通过 Amazon Fargate Task 已经将 Amazon S3 上的 Demo 数据复制到共享存储上了,点击展开 root 节点,选择 handball 文件夹,这里包含了 400 张图片,是一段视频经过抽帧的结果,点击 Submit 按钮。
很快页面就会反馈后台已经把 CVAT Task 已经创建好,会有一个浮动窗口提示我们,这里可以点击 Open task 按钮或者点击页面上方的 Tasks 链接进入 Tasks 页面。
现在我们已经创建好了一个 CVAT Task,可以选择用手工的方式给每一帧分别打标签,这里我们使用 AI 标注的功能来提升打标签的效率。在 Tasks 页面点击 Actions 链接中的菜单,并点击 Automatic annotation 链接。
这时会弹出一个浮动窗口让我们选择一个模型,这里我们选择使用 pth-faster-rcnn 模型。
这时 CVAT 会帮助我们自动将模型里能够识别的标签与我们在任务中定义个标签进行匹配,点击 Annotate,CVAT 就会通过 Amazon SageMaker 的 Endpoint 进行推理,对任务里所有的图片帧中的人物进行标注。
这个过程会持续一段时间,在 Task 页面我们可以监控到后台推理的进度。
经过 10 分钟左右我们就可以用过 Amazon SageMaker 将 400 张图片全部标注完成,现在可以通过点击下面 Job 的链接查看结果。
打开 Job 页面以后我们就能看到 AI 标注的结果,所有在每帧图片中的人物都用标注框标注出来了,我们可以点击播放按钮看到以下效果。
如果大家感兴趣还可以继续尝试其他 AI 标注方式,比如 interactor 方式可以自动识别物体边界多边形式标注,tracker 方式可以通过自动语义分割的方式在视频中追踪标记目标标注物,reid 方式可以使用业界流行的行人重识别(reidentification)算法对所有标注的行人人物进行标签合并。
结论
使用将 CVAT 通过无服务器化改造的方式,特别是将 AI 标注推理功能运行在 Amazon SageMaker 上,可以大大提升开源 CVAT 单机部署的性能以及稳定性,可以非常好的支撑企业内部图像 AI 项目的标注任务。
本篇作者
黄德滨
亚马逊云科技资深解决方案架构师
服务于全球客户销售团队,负责技术架构设计和咨询,致力于企业级应用在亚马逊云科技中的运用和部署,对于大型企业级应用开发和实施拥有近二十年的丰富经验,在云计算领域工作多年,拥有大量帮助各种类型企业上云的经验,在加入亚马逊云科技之前先后服务于百度、甲骨文等国内外知名 IT 企业。
评论