一、概述
在实际的工程应用中,我们通常要制作自己的数据集,进而完成实际场景下的任务。关于语义分割任务数据集的基本介绍以及规范,请参考我总结的官网博客,PASCAL VOC 2012 数据集解析。在该系列博客中,将详细介绍【DeepLabV3+】的整个应用过程:数据制作,数据生成,代码解析,网络结构解析,论文翻译以及解析。
二、软件安装(Labelme)
本次数据制作,选择普遍使用的标注软件,Labelme。该软件是一个图形界面的图像标注软件,来自于 http://labelme.csail.mit.edu/ 。它是用 Python 语言编写的,图形界面使用的是 Qt(PyQt)。
-
配置环境(anaconda+windows10)
conda create --name=labelme python=3.6 source activate labelme pip install pyqt5 # pyqt5 can be installed via pip on python3 pip install labelme
激活环境,运行软件:
软件启动界面如下图所示:
三、软件使用以及数据生成
-
数据标注
选择【Edit】=>【Create Ploygons】后,进入该模式下编辑,见下图所示,我们标注了三类对象,分别是 person,plant,chair,标注完成后,保存数据,会生成 Json 文件。
生成 Json 的文件如下图所示:
-
数据生成及可视化
使用命令工具,【
labelme_draw_json 2007_004000.json
】,可视化标注的结果,如下图所示,并且会自动生成背景类,使用软件命令【
labelme_json_to_dataset 2007_004000.json
】,生成标签数据,如下图所示,img:原图,label:掩码图,label_names:类别,label_viz:可视化结果(背景默认是第0类),
-
批量生成数据
在【2.】和【3.】中,我们展示了如何标注数据,并生成标签数据,这些操作都是针对单个数据处理。在实际的项目中,数据集规模往往非常大,不可能手动运行。然而,【Labelme】软件没有提供批量生成标签的代码,因此我们需要作相应的处理,Python【exe.py
】代码如下:# 【exe.py】 import os path = '.\\image44\\' # 存放原图像和标注软件生成的Json文件 file = os.listdir(path) # 循环调用exe(labelme_json_to_dataset)程序,name1是传入参数 for name in file: if name.endswith('.json'): print(name) name1 = path + name os.system('labelme_json_to_dataset ' + name1)
Windows下,【
labelme_json_to_dataset.exe
】应用程序路径,
Adaconda Prompt 下运行【exe.py
】,就可以将 Labelme 标注文件生成掩码图,便于训练使用,
运行【python exe.py
】后,生成的三个文件夹分别对应三张图片以及其Json文件转换的掩码图, -
问题点
在实际情况下,图像中并没有包含所有的类,可能仅仅标注少的几类。那么,按照上述生成方式,会出现类别错误。如下图所示,不同的图片中,天空的掩码颜色并没有保持一致(左图是黄色,右图是绿色):
针对上述问题,需要修改源代码,打开【C:\Users\ll_66\Anaconda3\envs\labelme\Lib\site-packages\labelme\cli】下的脚本文件【json_to_dataset.py】,具体修改见下图所示,修改完成后保存,然后重新运行命令 【python exe.py
】即可,
四、参考资源
- https://blog.csdn.net/u014061630/article/details/88756644(介绍的非常详细,全面)
- 语义分割数据制作(介绍Ubuntu下利用Labelme制作数据)