基于微服务架构的众包图像数据集标注系统①
袁晓晨1, 张卫山1, 高绍姝1, 时 斌2, 赵永俊2, 王 冶3, 安云云4
1
(中国石油大学(华东) 计算机科学与技术学院, 青岛 266580)2(青岛海尔空调电子有限公司 电控模块开发部, 青岛 266101)3
(解放军9144部队, 青岛 266102)4
(国网山东省电力公司 青岛市黄岛区供电公司, 青岛 266500)通讯作者: 张卫山摘 要: 深度学习在图像识别领域凸显出了优势, 而在深度学习图像识别模型训练的准备阶段, 制备图像数据集需要人工将图片上的信息进行标注. 这一准备过程往往需要耗费大量人力成本与时间成本. 为了提升数据制备阶段的工作效率, 从而加速深度学习模型的生成与迭代, 提出了一种基于微服务架构的多人协作众包式图像数据集标注系统. 通过将繁重的标注任务划分为不同的小任务, 使更多的人能够参与并协同完成数据标定. 通过引入对象存储机制并采用微服务架构, 提升了系统性能, 在开发阶段使用了基于Gitlab 的持续集成与持续部署, 实现了系统的快速迭代与部署, 提升了微服务系统在开发过程中的集成效率.关键词: 微服务; Spring Cloud; 持续集成; 持续部署; 图像标注
引用格式: 袁晓晨,张卫山,高绍姝,时斌,赵永俊,王冶,安云云.基于微服务架构的众包图像数据集标注系统.计算机系统应用,2021,30(5):83–91./1003-3254/7900.html
Image Dataset Annotation System in Crowdsourcing Based on Microservice Architecture
YUAN Xiao-Chen 1, ZHANG Wei-Shan 1, GAO Shao-Shu 1, SHI Bin 2, ZHAO Yong-Jun 2, WANG Ye 3, AN Yun-Yun 4
1(College of Computer Science and Technology, China University of Petroleum, Qingdao 266580, China)
2
(Electronic Control Module Development Department, Haier Air Conditioning Electronic Ltd. (Qingdao), Qingdao 266101, China)3
(No. 9144 Troops of PLA, Qingdao 266102, China)4
(Qingdao Huangdao District Power Supply Company, State Grid Shandong Electric Power Company, Qingdao 266500, China)
Abstract : Deep learning has shown visible advantages in the artificial intelligence-based image classification. It usually costs plenty of time on manual information annotation for preparing image datasets. Then this study proposes an online collaborative system for image dataset annotation based on microservice architecture to improve the efficiency of annotating datasets and thus to accelerate the generation and iteration of deep learning models and applications. More users can join for image annotation after the heavy annotation task is divided into smaller ones. Besides, the system performance has been improved by introducing an object storage system and microservice architecture, and the integration efficiency of the system in the development progress has been enhanced by continuous integration and deployment.Key words : microservice; Spring Cloud; contin
uous integration; continuous deployment; image annotation
计算机系统应用 ISSN 1003-3254, CODEN CSAOBN
E-mail: Computer Systems & Applications,2021,30(5):83−91 [doi: 10.15888/jki.csa.007900] ©中国科学院软件研究所版权所有.
Tel: +86-10-62661041
① 基金项目: 国家自然科学基金(62072469); 国家重点科研计划(2018YFE0116700); 山东省自然科学基金(ZR2019MF049); 中央高校基础研究基金(2015020031); 西海岸人工智能技术创新中心建设专项(2019-1-5, 2019-1-6); 上海可信工业控制平台开放项目(TICPSH202003015-ZC)
Foundation item: National Natural Science Foundation of China (62072469); National Key R&D Program (2018yfe0116700); Shandong Natural Science Foundation (ZR2019MF049); Basic Research Fund of Central University (2015020031); West Coast Artificial Intelligence Technology Innovation Center (2019-1-5, 2019-1-6); the Opening Project of Shanghai Trusted Industrial Control Platform (TICPSH202003015-ZC)收稿时间: 2020-09-10; 修改时间: 2020-10-09; 采用时间: 2020-10-13; csa 在线出版时间: 2021-04-28
计算机视觉图像识别是人工智能的重要应用, 广泛应用在工业、医学、军事、教育、商业、体育、安防检测等行业与领域中. 机器学习, 尤其是深度学习展现出了针对图像识别领域优秀的识别性能. 而机器学习本身需要建立在大量的带有指导意义的既有数据集基础之上. 在进行深度学习模型训练流程中, 往往需要针对海量图片进行人工数据标注, 繁重的图像标注任务增添了大量时间成本.
传统的图像标注工具, 如表 1所示, 大多以单机运行的传统单体式系统架构为主, 运行在单机之上, 同一时间同一系统运行实例上只允许一个用户对本地资源进行图像标定. 当使用传统图像标注工具进行协作标定时, 需要用户手动进行图像集的分组并拷贝至协作组员的工作站. 协作组员各自完成任务后仍需要用户自行合并制作数据集. 由于缺少集中化的图像与工作流, 导致传统单机标注工具在协作场景下存在大量的文件与数据传输, 在海量图像文件的压缩、打包与传输过程中产生了大量的时间与人工成本.
表1 传统图像标注工具对比
图像标注工具实例系统架构兼容系统
开源与付费
模式
协作模式支持的图像标注类型导出格式网址
LabelImg单机(PyQt5)全平台开源免费可
独立部署
手动资源分组
打包后独立运
行协作标注
矩形
PASCAL、VOC、
ImageNet
github/tzut
alin/labelImg
LabelMe单机(PyQt5)全平台开源免费多边形、矩形、圆
形、线标注、关键点
COCO
github/wke
ntaro/labelme
VIA-VGG Image Annotator Web本地静态
页面
全平台开源免费多边形、矩形
JSON、CSV、
COCO
rectlabel/
PixelAnnotaion单机(Qt5)Windows、
MacOS、Linux
(自行编译)
开源免费填充区域JSON
github/abre
heret/PixelAnnotation
Tool
RectLabel单机MacOS 不开源付费
$55
多边形、填充区域、
矩形
PASCAL、VOC、
YOLO、COCO、
CSV
rectlabel/
OpenCV/CVAT Web本地部署
(Django)
全平台开源免费
单实例不支持
直接协作, 需要
手动对资源分
组打包独立部
署多实例
图像分类、多边形
工具预定义
XML格式
github/ope
ncv/cvat
VoTT Web本地部署
(NodeJs)
全平台开源免费矩形
Azure自有格式、
CNTK、Pascal、
VOC、
TFRecords、
VOTT(JSON)、
CSV
github/mic
rosoft/VoTT
LabelBox纯前端库全平台不开源需要
引用公网库
资源
需要额外系统
支持
图像分类、多边形、
矩形
CSV、JSON(由官
方后端提供)
github/Lab
elbox/Labelbox)
为了解决机器学习图像识别训练的各种前置准备工作费时费力的问题, 本文提出并设计实现了一种基于Spring Cloud、面向机器学习模型训练的协作式图像数据管理与标注平台, 通过众包任务的方式, 优化图像标注流程, 设计实现了面向海量图像的存储、标定集管理、图像标定任务管理等功能模块. 系统采用微服务架构, 将系统各个部分进行解耦[1], 实现服务注册与发现、负载均衡、容错处理, 提升了系统的高可用性、可维护性与可扩展性. 基于GitLab-CICD实现了微服务的增量更新、持续部署与灰度更新. 通过将海量图像标定数据进行分组划分, 简化数据标注过程中的操作, 降低了数据标注人员的时间成本, 提升了数据标注工作效率.
1 概述
1.1 众包任务模式
众包任务模式指的是将本应当由单一机构或个人执行的工作内容在公开或非公开网络上以公开的方式外包给特定或非特定用户[2]. 通过采用众包任务的模式,将庞大的图像标注任务切分为小的任务, 能够有效提
计算机系统应用2021 年 第 30 卷 第 5 期
升标定的速度与质量, 从而加速深度学习模型训练流程.
1.2 微服务架构
微服务[3]是一系列功能简单、互相之间采用轻量级通信协议协同工作的功能区块. 每个小的功能区块具有高内聚、低耦合的特点, 能够独立自主地运行.
微服务架构是一种架构模式, 它是SOA架构(Service Of Application)的进一步发扬, 通过将庞大的系统根据业务边界细粒度地拆分为小的服务模块. 每个小的服务模块具有高内聚、低耦合的特点, 均能够独立地运行. 每个模块可以由不同的团队进行开发[4].
微服务架构拥有着许多传统单体式应用所不具备的优势[5]:
① 复杂度可控: 通过将复杂的系统细粒度地拆分为小体积、业务简单的模块, 降低了每个模块的开发难nodejs工作流引擎开源
度与复杂度. 各个模块间互相解耦[6], 当需求变更时,只需要修改对应的模块即可实现系统整体功能上的变更, 无需考虑其他模块可能因为接口实现的变更而无法正常工作的问题.
② 团队协作效率高: 当确定系统各个微服务接口定义后即可分组并行开发不同的微服务模块, 从而提升了整体开发效率. 同时不同微服务模块无需集成为一个整体, 只需要能够互相调用即可保证系统的正常运行, 避免了单体式应用集成过程中出现的组件源码不兼容, 降低了集成成本.
③ 独立部署: 每个小模块都能够独立地运行, 不会因为其他服务故障而受到影响. 通过微服务调度系统的支持, 能够实现快速部署在单机或集上, 从而充分利用计算性能.
④ 维护难度低: 配合持续集成与持续部署(CI/CD),即可实现灰度发布与服务热更新, 无需系统全部停机或重启即可完成功能更新.
⑤ 多种技术允许共存: 微服务独立部署使得微服务间只需要约定技术、语言无关的RPC协议即可实现不同技术、语言实现的微服务共存并配合工作[7].
⑥ 系统稳定性高: 微服务架构的系统拥有熔断机制, 当系统部分组件失效时能够及时阻止故障船体, 从而避免系统发生雪崩式功能失效, 提升了系统的稳定性.
1.3 对象存储系统
基于对象的云存储即对象存储(object storage)是近几年逐渐流行的一个新兴且切实可行的大规模存储方案[8], 使用较为简便的方法实现数据存储, 即充分利用已有的存储组件、网络技术和处理技术, 使系统拥有较好的可扩展性以及高吞吐量[9]. 对象存储思想的核心为对象, 每个对象都有唯一的标识[10]. 对象存储将文件划分为一个个对象, 为用户提供了统一的存储空间,从而能更好的对文件进行访问控制和存储管理[11]. 这些对象被分布在整个集之中, 为保障数据安全、防止数据丢失将每一个对象多重备份复制到多个设备上.对象存储系统将数据块列表映射为对象列表, 将各类数据块简化成为一个个对象来进行管理[12], 极大改善了系统的可伸缩性, 可以轻易实现海量数据的管理.
2 系统设计
2.1 需求分析
传统的数据集标注往往在单终端中进行, 大量的图像需要由一个部门或者个人完成. 使用传统的标注工具进行多人协作式图像标注时, 在图像整理上浪费了大量时间. 协作前需要人工将大量图像打包分组, 协作后需要将图像与标定数据回收合并为同一个数据集合. 常见的文件系统针对海量小文件的处理性能往往不及少量大文件, 导致人工打包也是一项耗时的工作.针对以上痛点, 图像标注系统主要有以下需求:
① 图像数据托管: 为避免文件系统直接频繁操作大量小文件, 从而节省任务分配数据打包的时间, 图像数据应当由专门的机制进行托管, 必要时以图像为基本单位提供图像及其元数据检索服务.
② 任务划分与管理: 为实现众包模式的图像标注,需要将包含大量图像的任务拆分为小任务, 交由不同的个人进行标注.
③ 支持多种标注模式: 系统应当支持机器视觉训练常用的关键点、矩形、多边形标注模式.
④ 支持多种导出格式: 针对主流深度学习源码所接受的格式, 系统应当具备良好的扩展性以支持更多的深度学习框架.
⑤ 数据统计: 任务发起者应当能够看到子任务的标注进度、标签数量等统计信息, 从而有针对性地决定是否需要增加或者调整图像组成.
⑥ 支撑模块需求: 除此之外, 系统应当具有基本的用户与权限控制功能.
2.2 微服务划分与系统架构设计
① 系统微服务划分
根据系统需求分析结果, 将系统划分为4个功能
2021 年 第 30 卷 第 5 期计算机系统应用
性微服务和3个架构支撑服务: 图像对象存储服务、图像集合管理服务、标定集合管理服务、数据输入输出服务、用户及授权管理和服务网关.
图像对象存储服务用于面向海量图片的对象存储,将图片统一以相同规则生成的不重复定位符作为索引,避免图片重复存储与图片文件名重复冲突的问题.
图像集合管理服务用于将离散的图片在逻辑上组成一个集合, 作为系统中图片操作的基本单位.
标定集合管理服务用于管理和存储图像集对应的标定数据, 同时提供标定任务的划分与分配.
数据导入导出服务主要用于图像、标签数据的解包导入与打包导出. 提供常见的压缩与视频格式的解析与常见数据集格式的导出等功能.
② 系统架构设计
系统整体采用分层式结构, 如图 1所示. 为了开发过程中能够更明确的分工, 其中服务层按照微服务的思想进行拆分. 各层主要包含内容如下:
持久化层: 为了方便使用微服务编排框架进行部署, 所有有状态的服务均从整体架构中分离整合在持久化层中. 其中包括用于对象数据存储的NoSQL 数据
库; 用于关系型信息数据存储的SQL 数据库; 用于全局数据缓存的内存NoSQL 数据库; 用于全局消息同步的消息队列中间件.
微服务层: 包含了业务逻辑微服务和架构支撑服务两部分. 架构支撑服务中包含了微服务架构必需的注册发现中心、日志监控、配置中心等基础微服务. 业务逻辑微服务提供了实现业务逻辑的相关微服务, 包括图像对象存储微服务、图像集管理微服务、标定管理微服务和数据导入导出微服务.
网关层: 网关层包含了由Spring Gateway 实现的API 网关微服务、前端站点微服务和Nginx 总代理微服务, 提供了系统接入入口.
CI/CD 支撑部分: 系统源代码采用了Gitlab 私服进行托管, Gitlab 也提供了对持续集成的支持, 故直接采用Gitlab-CICD 实现系统开发过程中的持续集成与部署.
系统采用现有完整的微服务方案, 使用服务发现实现松散的服务间耦合, 采用声明式RPC 客户端实现微服务间的互相调用, 使用统一网关代理微服务作为系统入口, 添加负载均衡机制以扩展系统负载容量, 使用OAuth2开放认证协议作为认证机制.
系统部署
业务逻辑服务
数据导入导出微服务
图像对象存储
微服务
持久化层
SSDB 数据库
MySQL 数据库
Redis 缓存
RabbitMQ 消息队列
图像集管理微服务
标定管理微服务
数据导入导出微服务微服务支撑前端微服务Nginx 总代理
Spring gateway API 网关
Eureka 注册中心Config server 配置中心
日志&监控
自动化部署
CI/CD 支撑
Gitlab 代码仓库
Gitlab-runner 宿主机
代码提交
开发团队
图1 图像标注系统架构
3 持续集成、持续部署与微服务架构实现
3.1 微服务注册与发现
在微服务架构的系统中, 为了实现微服务间既有
松散的耦合度, 又能够互相访问, 微服务注册与发现机制是一种常用方法[13]. 通过由微服务自行将自身的信息主动注册至注册中心的方式, 使得其他微服务可以
计算机系统应用
2021 年 第 30 卷 第 5 期
通过查询注册中心注册记录的方式间接地发现其存在并获得访问相关参数. 注册中心是注册与发现中最重要的一部分, 在Spring Cloud 微服务套件中, 提供了注册中心的一种原生实现和两种接入实现:
① Eureka Server: 由Netflix 开发的基于原生Java 的开源注册中心实现, Spring Cloud 套件给出了基于Spring Boot 快速构建注册中心的方案.
② Spring Cloud Consul: Consul 是由HashiCorp 公司开发的一种服务网格解决方案, 提供具有服务发
现,配置和分段功能的全功能控制平面[14]. 通过添加org.springframework.cloud.spring-cloud-starter-consul-all 依赖, 同样可以实现类似的注册发现功能.
Spring Cloud Zookeeper: Apache ZooKeeper 是一项集中式服务, 用于维护配置信息, 命名, 提供分布式同步和提供组服务[15]. 基于Spring Cloud 的微服务可以通过添加org.springframework.cloud.spring-cloud-starter-zookeeper-all 依赖实现基于ZooKeeper 的注册发现.
由于后两种注册发现的方案需要单独部署第三方的应用实例来支撑微服务注册与发现的功能, 故选择可自行构建的Eureka Server 方案.
Eureka 的注册与发现方案整体流程如图 2所示,主要分为两部分.
Eureka 注册中心
微服务1
微服务2DC
Feign 3. 调用服务
1. 注册
2. 获取实例列表
DC
DC: Discovery client
Feign
图2 基于Eureka 的注册发现实现流程
第一部分为Eureka 注册中心. Spring 提供了一套项目生成工具Spring Initializer [16], 允许开发人员直接通过可视化配置直接生成Spring Boot 项目, 这里借用Spring Initializer 可以直接生成Eureka Server 的项目.
如图 3所示, 在Spring Initializer 中输入项目信息并选中Eureka Server 依赖, 点击Generate 即可得到初始项目模板. 在Spring Boot 启动类上添加@EnableEurekaServer 参数即可开启项目依赖中的
Eureka Server.
图3 使用Spring Initializer 生成Eureka Server 实例
第二部分即业务微服务中的Discovery Client. 在需要通过服务发现感知其他服务实例的微服务中, 增加org.springframework.cloud.spring-cloud-starter-netflix-eureka-client 依赖, 并在项目引导类上添加@Enable-DiscoveryClient 注解, 即可为Feign 客户端添加服务发现的功能.
完成其他业务微服务开发后, 同时启动各个微服务, 可通过登录Eureka 监控页面看到各个微服务的注册情况, 如图4所示.
图4 通过Eureka Server 查看服务发现注册状态
3.2 微服务接口网关与负载均衡
相较于传统的单体式应用, 微服务架构的应用更接近于单体式应用站. 微服务架构应用为了实现从外部表现为与单体式应用类似的形式, 需要一个微服务作为接口网关, 同时需要提供负载均衡的特性.
对于API 网关, Spring Cloud 提供了两套方案:① Zuul: Zuul 来源于Netflix 开源的微服务架构套件. Zuul 底层采用了Tomcat Embeded 版本作为HTTP 支撑层.
② Spring Cloud Gateway: Spring Cloud Gateway 是由Spring 项目组基于其自研Web 框架WebFlux 实现的API 网关. Spring Cloud Gateway 是Spring Cloud 去Netflix 进程中非常重要的一个项目, 旨在替代Zuul 成为未来的Spring Cloud 框架下的API 网关组件.
WebFlux 底层为直接使用Netty 等高性能非阻塞
2021 年 第 30 卷 第 5 期
计算机系统应用
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论