前言
准备搞一搞实例分割,自己准备一下数据集进行训练,在使用 labelme 进行进行一下标注与格式转换,中途遇到一些坑,这里记录一下。
环境
- win10 1909
- conda 4.7.12
- 配置时间:2020.02.14(情人节我就干这些?!?)
使用流程
1. 安装
为了方便管理,决定单独给 labelme 单独建立一个 conda 环境,中间出错了也不会乱套(conda 真的是好用啊)。
在控制台执行以下命令:
conda create -n labelme python=3.6
conda activate labelme
pip install labelme
至此,labelme 的安装就完成了,在控制台直接舒服 labelme
,即可启动 labelme 的 GUI 界面,网上有很多打标教程,这里就不赘述了。
检验打标结果
这里随便找了张 .jpg 格式的网图进行了标注工作,之后会在图片目录生成一个 .json 文件。
在控制台中运行:
labelme_draw_json <your_json_file_name>.json
即可得到刚才的标注结果:
这里要注意的是,最好使用 jpg 格式图片进行标注,因为 png 格式可能存在 RGBA 四个通道,会导致后续识别的一些问题,在运行上一步绘制的时候也会爆出如下错误:
Traceback (most recent call last):
File "d:\software\anaconda\envs\labelme\lib\runpy.py", line 174, in _run_module_as_main
"__main__", fname, loader, pkg_name)
File "d:\software\anaconda\envs\labelme\lib\runpy.py", line 72, in _run_code
exec code in run_globals
File "D:\Software\Anaconda\envs\labelme\Scripts\labelme_draw_json.exe\__main__.py", line 9, in <module>
File "d:\software\anaconda\envs\labelme\lib\site-packages\labelme\cli\draw_json.py", line 53, in main
img=imgviz.rgb2gray(img),
File "d:\software\anaconda\envs\labelme\lib\site-packages\imgviz\color.py", line 21, in rgb2gray
assert rgb.shape[2] == 3, "rgb shape must be (H, W, 3)"
AssertionError: rgb shape must be (H, W, 3)
3. 将标注转为 COCO 格式
因为最终使用的网络读取是按照 COCO 数据集的格式,所以要将刚刚标注的图片与数据进行一个转换,labelme 也包含这样的工具。
3.1 pycocotools 安装
在转换之前,首先要安装 coco 数据集的 python API,试了很多方法,下面的方法最为简单快捷:
conda install git
pip install Cython
pip install "git+https://github.com/philferriere/cocoapi.git#egg=pycocotools&subdirectory=PythonAPI"
至此,完成 pycocotools 的安装。
3.2 数据集格式的转换
首先在 labelme_InstanceSegmentation 中获得labelme2coco.py
文件,然后同一目录下放置文件如下:
data
│ labelme2coco.py
│ labels.txt # 该文件中包含数据集中所有的类别名称
│
└─data_annotated
0.jpg
0.jsons
1.jpg
1.json
2.jpg
2.json
3.jpg
3.json
4.jpg
4.json
5.jpg
5.json
做好上述准备后,即可在控制台运行:
python labelme2coco.py data_annotated data_dataset_coco --labels labels.txt
labelme2coco.py
后跟三个参数,第一个为输入文件夹的名称,第二个为转化为 coco 数据格式后的数据存储的路径,第三个则为数据中包含的类别及其次序。转换完毕后即可得到:
data
│ labelme2coco.py
│ labels.txt
│
├─data_annotated
│ 0.jpg
│ 0.json
│ 1.jpg
│ 1.json
│ 2.jpg
│ 2.json
│ 3.jpg
│ 3.json
│ 4.jpg
│ 4.json
│ 5.jpg
│ 5.json
│
└─data_dataset_coco
│ annotations.json
│
└─JPEGImages
0.jpg
1.jpg
2.jpg
3.jpg
4.jpg
5.jpg
至此,数据集准备完毕。
小结
整个流程并不算很复杂,就是第一次做遇到了很多奇奇怪怪的坑耽误了整整一天的时间……希望看到这篇博客的朋友不要重蹈覆辙,能够快速上手哈哈。