《图像标注工具调研》
- qtxu
- 2020年07月30日
文章目录
一、任务简介
对于监督学习算法而言,数据质量决定了任务结果的上限,而算法只是在不断逼近这个上限,对于图像深度学习任务来说,图片本身和图片标注的label的质量和数量,就极为重要。
在计算机视觉中,训练算法的数据主要有三种类型:
- 分类:图片 + 分类器训练标签( ResNets… )
- 目标检测:包围框 + 检测器标签( YOLOv3,Faster R-CNN ……)
- 语义分割:多边形 + 用于分割应用程序标签( Mask R-CNN … )
注意下图 语义分割(左边蓝色)与目标检测(右边紫色)的差异:
图片的label数据非常珍贵,除了下载别人标注好的公开数据集之外,面对自己特有的任务或特有数据 ,就只能自己亲手标注。但是,标注是个非常耗时耗力的工作,一个便捷的标注工具就显得极为重要。
二、标注工具介绍
如果你想标注大量数据从而展开业务,一个完美的标注工具需要满足以下5个要求:
- 界面美观:直观的用户体验(UX),使你临时聘用的每个标注人员都可以立即开始工作;️
- 多人协作:提供WEB API,能实现低成本多人协作;️️️
- 项目管理:先进的项目管理功能,方便多人协作;️️
- 各类标注:足够多的标注类别,以完成任何标注任务(分类、目标检测、语义分割);️
- 辅助脚本:提供提高效率的自动化工具或者脚本,便于标注数据只能被模型使用。️
但是非常遗憾,经过调研目前比较活跃的图像标注项目,都不能同时达到以上设计目标。所以,在选择工具的时候,要有所取舍,要清楚,自己的最大的需求是什么。
本文更关注第2点(多人协作),所以按照能否多人协作同时标注,将标注工具分为两类:(1)单机版(2)联机版。
1 单机版
labelImg
Labelme适用于图像检测任务的数据集制作:
它来自下面的项目:https://github.com/tzutalin/labelImg
其中标签存储功能和“Next Image”、“Prev Image”的设计使用起来比较方便。
该软件最后保存的xml文件格式和ImageNet数据集是一样的。
优点:
- 安装部署方便
- 输出格式标准
缺点:
- 无法多人协作。
Labelme
Labelme适用于图像分割任务的数据集制作:
它来自下面的项目:https://github.com/wkentaro/labelme
该软件实现了最基本的分割数据标注工作,在save后将保持Object的一些信息到一个json文件中
RectLabel
RectLabel适用于图像检测任务的数据集制作:
它来自下面的项目:
https://rectlabel.com/
这是一个适用于Mac OS X的软件,而且可以在apple app store中直接下载。
VIA
VGG Image Annotator (VIA)是一款开源的图像标注工具,可标注矩形、圆、椭圆、多边形、点和线。标注完成后,可以导出为csv和json文件格式。一个非常容易使用的标注器,其由牛津机器人实验室开发。它被编码在单个的 html/js 文件里,所以它很容易进行开发!
http://www.robots.ox.ac.uk/~vgg/software/via/
缺点:
- 界面丑
- 输出格式特殊,需自己写脚本转换。
2 联机版
LabelStudio
Label Studio是一个开源的,可配置的数据注释工具。 其目的是使您能够使用标准化输出格式的最方便的界面标记不同类型的数据。
优点:
- 界面相对美观
- 部署方便
- 配置方便,有多种内置模板
- 可以明晰了解任务的完成度及每条任务的完成时间
- 支持图像、文本和音频等多种数据格式和多种任务数据的标注
缺点:
- 导入图像数据不太方便
- 速度稍慢,尤其是保存标注结果并进行下一条标注时
- 没有账号体系,暂不支持分角色与权限;
VoTT
VoTT 是由微软开发的,它提供了非常棒的用户体验,这可能会在你标注时为你节省大量的时间和精力。而且,创建项目也很直接,所以你可以不用深入阅读其文档就能使用它。
优点:
- 用户界面UX 是完美的,它有一个黑色的主题和一个跟随鼠标的虚线网格,所以很容易知道从哪里开始标注一个边界框。这看起来像是一种额外嘉奖,但是相信我,这对于标注来说真的很重要!
- 它提出使用深度学习算法来自动检测对象(它附带了在 COCO 数据集上训练的 SSD 模型)
- 它是一个 web 应用程序和一个电子应用程序。这使你可以将它作为一个重客户端使用,也可以将它作为 web 浏览器中运行的应用程序来使用
缺点:
- 要使用 web 应用程序版本,你需要将数据托管在微软的云计算服务 Azure 上,只能和微软 云存储绑定公有云使用,限制了隐私数据的标注。
- 你不能给整张图片贴标签:你只被允许绘制带有相关标签的边界框(或多边形)。因此,它不适合创建分类数据库
lablebox
使用快速标记工具,人工,数据管理,强大的API和自动化功能来控制培训数据的完整解决方案。
外观最好看,还可以分类,结果是企业级,需要注册收费。
od-annotation
采用python-flask框架开发,基于B/S方式交互,支持多人同时标注。官网:https://github.com/hzylmf/od-annotation
优点:
- B/S方式交互
- 支持多人同时标注(可分配不同标注人员的标注范围,或不同人员标注不同类别)
- 支持拖拽方式修正标注区域
- 支持多类别多目标标注
缺点:
- 外观略丑,毕设水平;
- 同一类只能标记一个(同一张图片中2只狗只能标一个)
3 工具选择总结:
图像目标检测标注任务:
- 如果单枪匹马的学生标注,就用labelImg,最流行。
- 如需要果团队多人协作标注,就用LabelStudio。
三、labelImg使用手册
1 安装labelImg
1.1 windows在线版安装
1.1.1 安装python3
- 登录Python官网,下载python3.6.8,网址为:https://www.python.org/downloads/release/python-368/
选中Windows x86-64 executalbe installer,将其下载下来,由于是可执行文件,直接安装即可。
- 安装时,一定要选择pip,将其安装上
1.1.2 安装labelImg
python3安装好之后,打开命令行,依次运行一下命令:
pip install pyqt5
pip install lxml
pip3 install labelImg
如果由于网速慢导致下载失败, 则用国内源下载,(在每个命令后面加
-i https://pypi.doubanio.com/simple
) 如:
pip install pyqt5 -i https://pypi.doubanio.com/simple
1.2 windows离线版安装
1.2.1 安装python
-
双击安装”
python-3.6.8-amd64.exe
“ -
安装时,一定要选择pip,将其安装上
1.2.2 安装labelImg
python3安装好之后,打开命令行,进入software文件夹依次运行一下命令:
pip install PyQt5_sip-12.7.2-cp36-cp36m-win_amd64.whl
pip install PyQt5-5.14.2-5.14.2-cp35.cp36.cp37.cp38-none-win_amd64.whl
pip install lxml-4.5.1-cp36-cp36m-win_amd64.whl
pip3 install labelImg-1.8.3-py2.py3-none-any.whl
1.3 mac版安装
略
2 标注数据
主要步骤:
- 打开labelImg软件
- 打开图片文件夹
- 设置 输出xml文件的存放路径
- 标注一张图片
- 保存标注结果
- 标注下一张图片(循环)
2.1 打开labelImg软件
直接在命令行输入:labelImg
标注页面如下图:
2.2 打开图片文件夹
2.3 设置 输出xml文件的存放路径
点击“改变存放目录”, 更改标注的输出文件存放地址。
2.4 标注一张图片
按键盘“W
”键, 用鼠标标记一个标签。 本次有两个标签:Unionpay
(代表银联Logo)、UnionpayApp
(代表云闪付Logo)。
注意:标签名字极为重要,千万不能写错,注意大小写。
注意:框框要包含Logo,但是不要扩的太大, 以“正好”扩住四个角为最优。
2.5 保存标注结果
标好一张图片之后,按下Ctrl + s
保存,就会在目标目录生成 一个同图片片名字的xml文件。
2.6 标注下一张图片(循环)
按键盘“D
”键,继续标注标注下一张,知道标注完成。
注意每次标注完成后,不要忘记保存。
2.7 labelImg快捷键
可以参考的labelImg快捷键:
热键 | 功能 | |
---|---|---|
Ctrl + u | 从目录加载所有图像 | |
Ctrl + r | 更改默认注释目标目录 | |
w | 创建一个矩形框 | 共有两个标签:Unionpay & UnionpayApp |
d | 下一张图片 | |
a | 上一张图片 | |
↑→↓← | 键盘箭头移动选定的矩形框 | |
Ctrl + s | 保存 | 每标记一张图片 都要保存一次 |
四、labelStudio使用手册
博客:http://www.kejik.com/article/7ci22c1c.html
官网:https://labelstud.io/guide/tasks.html
docker:https://hub.docker.com/r/heartexlabs/label-studio
github: https://github.com/heartexlabs/label-studio
1 安装
pip install label-studio
2 使用
2.1 新建路径
在文件路径中,新建一个目录 labelStudio
2.2 初始化项目
准备文件:
- 准备待标注的图片放入/labelStudio/imagedata/文件夹下;
- 准备 config.xml 文件 放入/labelStudio/文件夹下.config.xml 内容如下:
<View>
<Header value="银联Logo检测项目标注"></Header>
<Image name="image" value="$image"/>
<RectangleLabels name="label" toName="image">
<Label value="Unionpay" background="green"/>
<Label value="UnionpayApp" background="blue"/>
</RectangleLabels>
</View>
将路径切换至 LabelStudio文件夹 ,在该路径 labelStudio/ 初始化项目,创建一个名叫 my_project 的项目,命令行执行:
label-studio init --input-path=/home/qtxu/project/labelStudio/imagedata/ --input-format=image-dir --label-config=/home/qtxu/project/labelStudio/config.xml --allow-serving-local-files labeling_project
label-studio init --input-path=/Users/xuqingtang/programming/PycharmProjects/labelStudio/imagedata/ --input-format=image-dir --label-config=/Users/xuqingtang/programming/PycharmProjects/labelStudio/config.xml --allow-serving-local-files labeling_project
由于labelStudio只能通过json上传数据路径,所以,命令中的--input-format=image-dir
的意思就是自动从该文件夹中生成所需的文件路径json。
此时,在labelStudio/路径下生成以下文件:
├── my_project
│ ├── config.json // 项目设置
│ ├── tasks.json // 所有导入的任务都以{ task_id:task}之类的字典表示
│ ├── config.xml // 当前项目标签 配置
│ ├── completions // 目录,每个task_id一个完成数存储在一个文件中
│ │ ├── <task_id>.json
│ ├── export // 存储存档,所有结果均通过Web UI导出
│ │ ├── 2020-03-06-15-23-47.zip
2.3 修改配置文件。
- config.json 更改服务的端口如: 8140。
2.4 启动服务
进入 /labelStudio/
文件夹 输入以下命令:
label-studio start ./labeling_project
# 或者
nohup label-studio start ./labeling_project &
tail -100f nohup.out
2.5 导出
导出为VOC XML
2.6 试点云开放端口 (可选)
网关 -> nat-da56 -> DNAT规则 -> 把8140暴露出来 -> 访问:http://117.144.188.244:8140/
五、参考文献:
- 《计算机视觉领域最好用的 5 个开源图像标注工具》 :https://www.infoq.cn/article/OOFtcgKNej1TJvW6u7FR
- 《深度学习图像标注工具汇总》:https://blog.csdn.net/chaipp0607/article/details/79036312
原文链接:https://lookme.blog.csdn.net/article/details/107687314
本站声明:网站内容来源于网络,如有侵权,请联系我们,我们将及时处理。
还没有人抢沙发呢~