数据标注的目的是为了在监督学习中告诉机器哪些东西是属于哪个类别或者具有某种属性. 语义分割其实是像素级的分类, 预测目标像素点属于哪个物体. 所以标注的目的就是告诉机器哪些个像素属于哪个类别

一. 标注工具

标注软件只是为了辅助标记物体的轮廓, 只要是有这个功能的软件都可以用. 我用的是 Labelme, 这个软件还是比较好用的, 以下就以 Labelme 为例说明

二. Labelme 安装和启动

1. 安装

打开 Anaconda Prompt, 输入 activate tf_gpu (tf_gpu 是我 Anaconda 中配置的环境, 你的就输入你的环境的名称, 没有的话, 直接用打开 Anaconda Prompt 时默认的 base 也是可以的) 回车. 接着再输入 pip install labelme 回车就开始安装了, 安装的过程会下载依赖项, 网速慢的话就会多等一阵, 下载失败就重新安装或者到 https://pypi.org/ 下载后在本地安装

install lablme

2. 启动

打开 Anaconda Prompt, 输入 activate tf_gpu, 再输入 labelme 就启动了. 如果刚才安装的窗口还在的话, 直接输入 labelme 也可以

labelme run

启动之后是下面这个样子

labelme window

三. 标注与保存

1. 打开图像

有两个方式可以打开图像, 一个是最左上面的 Open, 这个是打开单张图像, 基本不用. 最常用的还是用左上用的 Open Dir 选择要标注的图像的路径. 这样就可以把要标注的图像全部载入. Open Dir 打开路径之后, 在右下角的 File List 窗口中会列出所有图像的名称(绝对路径). 待标注的图像的名称没有什么要求, 不一定要按什么 0001 排到 9999 什么的, 除非你有强迫症

file list

文件名前面的复选框如果是勾上的, 表示这张图已经被标注过, 没有勾选就表示这张图还没有标注过

2. 标注

标注的形状可以有多种, 常用的有 Polygons(多边形), Rectangle (矩形), Circle(圆), 可以同时出现在一张图中, 根据目标的形状选择合适的标注形状. 语义分割一般会用 Polygons, 因为是像素级的分割, 所以其他的形状可能不合适. 这里只讲 Polygons, 其他的操作是一样的

假如我们要标注干脆面, 可以点左边工具栏的 Create Polygons 按钮, 也可以在图像显示区域右键, 选择 Create Polygons, 鼠标就变成十字了, 就开始沿它的边缘点击左键形成封闭的图形. 在标注过程中, 可以按住 Ctrl + 鼠标滚轮 放大缩小图像, 以方便标注细节的东西

pop menu
label

到最后一个点连接到第一个点时, 有一个大圆出现, 点击就会弹出一个窗口让你输入目标类别. 标注过程中双击会连接到第一个点, 一样的功能. 这里我输入raccoon, 如果没有标注过的话, 下面的列表是空的. 下次就可以在列表中选择而不用输入. 然后点 OK 按钮就标注好了一个目标了

class

标注好之后在右面的 Label List 中会出现标注的类别

label list

注意这里的 raccoon 后面有一个红色的点, 标注的图形也是红色. 记住这个颜色, 后面会讲. Polygon Labels 下面会出现刚才标注的图形. 这里也是红色, 因为这是第一个类别, 用红色表示

polygon labels

3. 保存

标记完成之后, 可以点左边工具栏的 Save 按钮保存, 如果是灰色的话, 表示不能被保存. 有可能是你刚才保存过, 还有可能是这张图没有被标注或者改动. 如果没有被保存, 则保存时会弹出窗口让你选保存的路径和保存文件的名称, 一般不用修改, 使用默认值, 方便以后处理. 如果你不保存, 在点 Next Image 按钮, 或者 Prev Image 按钮, 又或者右面的 File List 中的图像想标注其他图像时, 也会让你保存.

如果你是按默认的路径和名称保存的话, 在你放图像的文件夹中会多出一个 json 文件, 名称和对应的图像一样. 里面记录了标注的图形和类别, 标注的图像名称等, 以后会分析这个文件

jpg and json
在 File 菜单中有一个 Save With Image Data 选项, 默认是勾选上的. 意思是保存的时候连同图像数据一同保存到 json 文件中, 这样就可以不用原始图像了. 取不取消看个人使用情况, 我建议可以勾选上, 方便以后使用

4. 修改

如果你想修改刚才标注的图形, 可以点左边工具栏 Edit Polygons 按钮, 也可以右键选择 Edit Polygons. 然后拖动标注的图形, 完成后保存. 其他一些修改功能可以看右键菜单中的菜单项来操作, 相信聪明的你一看就会

四. 多类别标注

同上面讲的一样标注, 可以是不同类型的形状. 只是输入目标类别的时候输入你想要的类别就可以了, 比如 dog 之类的

raccoon and dog
dog
这是第二个类别. 所有与之相关的颜色都会是绿色.

label_dog
polygon_dog

如果是第三个类别的话. 颜色就会是暗黄色, 如下表颜色依次向后. 从红色开始是因为黑色表示的是背景. 这个就是所谓的索引表. 黑色排在 0, 就表示第 0 个类别(背景). 红色排第 1, 表示第 1 个类别. 依次类推…, 最后用这个索引在表里面找出颜色来显示标注相关的颜色. 就是一个查表操作. 如果用 labelme 提供的代码生成标签图像的话, 所以生成的标签图像中目标的颜色和这个表里的颜色是对应的. 这个排序(索引)就是标签图像的 像素值

color table
多类别标注完成后, 生成的 json 文件里面会记录所有类别的名称和标记数据等, 和单个类别是一样的. 只是类别多一点而已. 如果类别超过 256 个的话, 颜色我也不知道怎么显示, 因为我没有标注过这么多的类别. 你可以试一下

五. 快捷键

  • Ctrl + 鼠标滚轮: 放大与缩小图像
  • 鼠标滚轮: 上下移动图像
  • Alt + 鼠标滚轮: 左右移动图像
  • D: 下一张图像
  • A: 上一张图像
  • File 菜单中有一个 Save Automatically: 自动保存, 选上之后就不用每张图像都要确认保存了
  • 如果在标注过程中有一个点错了想删除那个点, 可以按 Back sapce, 新版本 Labelme 可能是 Ctrl + Z, 删除完了后, 就可以点左键继续标注

如果有什么不明白的功能的话, 可以留言一起讨论

按上面的方法把所有图像都标注完成后, 你的标注工作就完成了

下一篇: 语义分割之 json 文件分析

Logo

学大模型,用大模型上飞桨星河社区!每天8点V100G算力免费领!免费领取ERNIE 4.0 100w Token >>>

更多推荐