概述
最近需要自己制作一个语义分割的数据集,查了查,大家普遍使用的是labelme 工具
https://blog.csdn.net/shwan_ma/article/details/77823281 从这位朋友的博客中我得到了很大的启发,在这里和他说一声谢谢。
一个python版的labelme( https://github.com/wkentaro/labelme ), 我用的是ubuntu16.04,上面的博主有用windows。
关于语义分割数据集的制作在最后面。
安装
直接使用pip安装,
# Python3
sudo apt-get install python3-pyqt5 # PyQt5
sudo pip3 install labelme
途中出现了一个错误:
Traceback (most recent call last):
File “/usr/bin/pip3”, line 9, in
from pip import main
我的解决方法是用 sudo gedit修改了 user/bin/pip3的内容。
# 原来的内容
from pip import main
if __name__ == '__main__':
sys.exit(main())
# 修改为
from pip import __main__
if __name__ == '__main__':
sys.exit(__main__._main())
测试
安装好之后转入我们的工作空间,(cd examples/tutorial),然后在终端运行 labelme 打开GUI
这里运行GUIde方法有多种
labelme # just open gui
labelme apc2016_obj3.jpg # specify image file
labelme apc2016_obj3.jpg -O apc2016_obj3.json # close window after the save
labelme apc2016_obj3.jpg --nodata # not include image data but relative image path in JSON file
labelme apc2016_obj3.jpg \
--labels highland_6539_self_stick_notes,mead_index_cards,kong_air_dog_squeakair_tennis_ball # specify label list
如果有兴趣的话,可以对这几种方法都尝试一下。
下面就是按照教程上的方法进行操作,
首先我们在工作空间下使用
labelme apc2016_obj3.jpg -O apc2016_obj3.json
来打开我们要处理的图像,PS:没有必要一定按照作者的命名方式给自己的图像命名。
之后,选择左侧的“create polygons”来对我们的目标区域进行框选(我要做一个语义分割的数据集,所以我在这里按照图像的语义信息为图像进行分类),框选的结果如下。
完成这步之后就可以保存了(左侧SAVE),之后在我们的工作空间中会出现一个json文件,大家有兴趣可以点开来看一下。
可视化
我们可以快速的对这个.json文件做一下可视化操作
labelme_draw_json apc2016_obj3.json
结果如下
label data的获取
到这里,我们便已经得到了json文件,但是我们的目的是要得到label data,接下来我们执行转换操作
labelme_json_to_dataset apc2016_obj3.json -o apc2016_obj3_json
这样一来,我们便从json中生成了如下的四个标准文件(standard files)
- img.png: Image file.
- label.png: uint8 label file.
- label_viz.png: Visualization of
label.png
. - label_names.txt: Label names for values in
label.png
.
这是教程上的说法,但是我发现在我实际的操作中生成了一个 info.yaml 文件。
语义分割数据集的制作
好了,经过上面的一系列操作,我们已经得到了分割好的图像,如果对语义分割有一些了解,就会知道这之后还有一步,就是为图像中相同语义的物体标注上相同的颜色。(譬如将头部标记为红色,胳膊是蓝色等等。。。)
https://github.com/wkentaro/labelme/tree/master/examples/semantic_segmentation 这是作者给的案例。
下面的这些是我自己的理解:
作者案例中的代码只有这么一句
labelme data_annotated --labels labels.txt --nodata
这当中的data_annotated是一个文件夹,存放的是jpg文件和相应的json文件;labels.txt中写的是所有的类标记。
相应的,我也做了我自己的一个库用来实验。(名字是我瞎起的,哈哈)
然后在终端运行
labelme toto2 --labels labels.txt --nodata
结果如下:
选中保罗乔治的body部分,右击鼠标,选择 edit label,选中你要更改的label,OK了。
body 部分已经更改为了sofa 部分
这样我们就可以将分割的图像与自定义的标签做到一一对应了。
呃。。。。这部分是不是有些多余了,明明可以在标注的时候就全部做好的。。。。。。就先这样吧,具体的颜色如何修改,我也没有在作者的介绍中找到,如果哪位朋友找到了可以给我留言分享一下,在这里先谢谢啦!