制作用于图像语义分割训练的标签数据

  • *写在前面
  • 一、使用labelme制作json数据
    • 1、安装labelme
    • 2、利用labelme制作json数据
  • 二、将json数据转化为图像数据
    • 1、单个json数据
    • 2、多个json数据同时转换
  • 三、将每一个图像标签数据从对应文件夹中取出来
  • 四、其他一些在操作过程中会遇到的小问题和解决方法
    • 1、文件名称中带有中文括号,如何删除括号
    • 2、统一修改文件名称
  • 参考

*写在前面

读者您好!本文主要就如何制作用于图像语义分割网络训练的标签数据进行介绍,包括利用labelme制作json数据,再将json数据转换为图像标签等,同时也介绍了一些批量管理文件的小方法。由于这是我的第一篇技术博客,所以可能内容文笔不免令人吐槽,还烦请多提意见!

一、使用labelme制作json数据

1、安装labelme

用于图像语义分割的训练数据一般都需要对物体进行像素级的标记,我们采用labelme来实现这个操作。在这之前需要先对python进行安装并按如下在cmd中安装labelme:

// 首先打开cmd并进入相应的安装环境
activate pytorch //这里进入我一般使用的pytorch环境
pip install labelme

2、利用labelme制作json数据

安装好后再次进入终端中,启动labelme:

labelme

启动后的界面如下图所示:

视图左上角打开样本数据或样本所在文件夹:

在图像处点击右键选择标记工具,一般选择“Polygons”,然后就可以勾勒目标轮廓。轮廓一定要封闭,结束一个封闭轮廓的勾勒后会提醒你标记相应的标签类别(这里我选择勾勒了骨头,因此为“bone”):

点击“ok”后即可形成json并及时保存(左边save)。

二、将json数据转化为图像数据

1、单个json数据

该情况很简单,直接进入json数据所在的文件夹,然后进入终端进行如下操作:

 labelme_json_to_dataset  <json文件名>.json

2、多个json数据同时转换

首先打开对应环境下".\Lib\site-packages\labelme\cli"文件夹(我的是“C:\ProgramData\Anaconda3\envs\pytorch-gpu\Lib\site-packages\labelme\cli”),将原有的json_to_dataset.py文件中代码替换为以下内容(或者重新建立该文件):

import argparse
import json
import os
import os.path as osp
import warnings
import PIL.Image
import yaml
from labelme import utils
import base64def main():warnings.warn("This script is aimed to demonstrate how to convert the\n""JSON file to a single image dataset, and not to handle\n""multiple JSON files to generate a real-use dataset.")parser = argparse.ArgumentParser()parser.add_argument('json_file')parser.add_argument('-o', '--out', default=None)args = parser.parse_args()json_file = args.json_fileif args.out is None:out_dir = osp.basename(json_file).replace('.', '_')out_dir = osp.join(osp.dirname(json_file), out_dir)else:out_dir = args.outif not osp.exists(out_dir):os.mkdir(out_dir)count = os.listdir(json_file) for i in range(0, len(count)):path = os.path.join(json_file, count[i])if os.path.isfile(path):data = json.load(open(path))if data['imageData']:imageData = data['imageData']else:imagePath = os.path.join(os.path.dirname(path), data['imagePath'])with open(imagePath, 'rb') as f:imageData = f.read()imageData = base64.b64encode(imageData).decode('utf-8')img = utils.img_b64_to_arr(imageData)label_name_to_value = {'_background_': 0}for shape in data['shapes']:label_name = shape['label']if label_name in label_name_to_value:label_value = label_name_to_value[label_name]else:label_value = len(label_name_to_value)label_name_to_value[label_name] = label_value# label_values must be denselabel_values, label_names = [], []for ln, lv in sorted(label_name_to_value.items(), key=lambda x: x[1]):label_values.append(lv)label_names.append(ln)assert label_values == list(range(len(label_values)))lbl = utils.shapes_to_label(img.shape, data['shapes'], label_name_to_value)captions = ['{}: {}'.format(lv, ln)for ln, lv in label_name_to_value.items()]lbl_viz = utils.draw_label(lbl, img, captions)out_dir = osp.basename(count[i]).replace('.', '_')out_dir = osp.join(osp.dirname(count[i]), out_dir)if not osp.exists(out_dir):os.mkdir(out_dir)PIL.Image.fromarray(img).save(osp.join(out_dir, 'img.png'))#PIL.Image.fromarray(lbl).save(osp.join(out_dir, 'label.png'))utils.lblsave(osp.join(out_dir, 'label.png'), lbl)PIL.Image.fromarray(lbl_viz).save(osp.join(out_dir, 'label_viz.png'))with open(osp.join(out_dir, 'label_names.txt'), 'w') as f:for lbl_name in label_names:f.write(lbl_name + '\n')warnings.warn('info.yaml is being replaced by label_names.txt')info = dict(label_names=label_names)with open(osp.join(out_dir, 'info.yaml'), 'w') as f:yaml.safe_dump(info, f, default_flow_style=False)print('Saved to: %s' % out_dir)
if __name__ == '__main__':main()

然后进入到对应环境下的“\Scripts”(我的是”C:\ProgramData\Anaconda3\envs\pytorch-gpu\Scripts“),进入终端后执行以下操作即可生成图像数据:

labelme_json_to_dataset.exe <json所在文件夹名>

但是这些文件均在“\Scripts”文件夹下,记得将其取出。

三、将每一个图像标签数据从对应文件夹中取出来

比如目前我有10个经由json文件转化得来的图像标签数据文件夹(很可恶,一个json一个文件夹)。

创建如下python文件并运行即可将每个文件夹中所有标签数据取出来并按顺序命名且排列:

import os
import random
import shutil
import reGT_from_PATH = "图像文件夹们的母文件夹名称"
GT_to_PATH = "目标文件夹名称"filepath_list = os.listdir(GT_from_PATH)for i, file_path in enumerate(filepath_list):gt_path = "{}/{}_gt.png".format(os.path.join(GT_from_PATH, filepath_list[i]), file_path[:-5])print("copy {} to ...".format(gt_path))gt_name = ["label.png".format(file_path[:-5])]gt_file_path = os.path.join(GT_from_PATH, file_path)from_dir=gt_file_path to_dir= GT_to_PATH   Name_list="bonelabel{}.png".format(i+1)#为输出图像命名if not os.path.isdir(to_dir):os.mkdir(to_dir)try:if not os.path.isfile(os.path.join(from_dir, "label.png")):print("{} is not existed".format(os.path.join(from_dir, Name_list)))shutil.copy(os.path.join(from_dir, "label.png"), os.path.join(to_dir, Name_list))except:passprint("{} has copied to {}".format(from_dir, to_dir))

结果如下,至此完成了图像标签数据从json文件制作到处理最终输出图像标签的全过程:

四、其他一些在操作过程中会遇到的小问题和解决方法

1、文件名称中带有中文括号,如何删除括号

问题如图,想要取除其中的中文括号(一般出现在你想要批量命名一堆文件时,全选后重命名相同内容就会出现这个效果):

在所属文件夹下创建txt文件,并添加以下内容:

@Echo Off&SetLocal ENABLEDELAYEDEXPANSION
FOR %%a in (*) do (
set "name=%%a"
set "name=!name: (=!"
set "name=!name:)=!"
ren "%%a" "!name!"
)
exit

保存后,重命名其后缀为.bat然后双击运行即可,效果如下:

2、统一修改文件名称

该问题解决方法推荐一位博主,亲测有效:
链接: https://www.cnblogs.com/HYLering/p/9190943.html.

参考

链接1: https://blog.csdn.net/u011574296/article/details/79740633.
链接2: https://blog.csdn.net/yql_617540298/article/details/81110685.

制作用于图像语义分割训练的标签数据【图像分割】【labelme】相关推荐

  1. 用于图像语义分割的GAU与PPM

    简单记录一下用于图像语义分割的2个模块 1. GAU(Global Attention Upsample, 全局注意力上采样模块) 全局注意力上采样模块 (GAU)通过全局池化将高层特征作为低层特征的 ...

  2. 图像语义分割_图像语义分割(9)-DeepLabV3: 再次思考用于图像语义分割的空洞卷积...

    论文地址 :Rethinking Atrous Convolution for Semantic Image Segmentation 论文代码:Github链接 1. 摘要 文章主要的工作: 使用空 ...

  3. ps语义分割_图像语义分割训练经验总结--图像语义分割

    最近一直在学pytorch,copy了几个经典的入门问题.现在作一下总结. 首先,做的小项目主要有 分类问题:Mnist手写体识别.FashionMnist识别.猫狗大战 语义分割:Unet分割肝脏图 ...

  4. Pytorch:图像语义分割-FCN, U-Net, SegNet, 预训练网络

    Pytorch: 图像语义分割-FCN, U-Net, SegNet, 预训练网络 Copyright: Jingmin Wei, Pattern Recognition and Intelligen ...

  5. 笔记:基于DCNN的图像语义分割综述

    写在前面:一篇魏云超博士的综述论文,完整题目为<基于DCNN的图像语义分割综述>,在这里选择性摘抄和理解,以加深自己印象,同时达到对近年来图像语义分割历史学习和了解的目的,博古才能通今!感 ...

  6. 图像语义分割入门:FCN/U-Net网络解析

    向AI转型的程序员都关注了这个号???????????? 机器学习AI算法工程   公众号:datayx 图像语义分割(Semantic Segmentation)是图像处理和是机器视觉技术中关于图像 ...

  7. 图像语义分割网络FCN(32s、16s、8s)原理及MindSpore实现

    一.FCN网络结构 全卷积网络(Fully Convolutional Networks),是较早用于图像语义分割的神经网络.根据名称可知,FCN主要网络结构全部由卷积层组成,在图像领域,卷积是一种非 ...

  8. 图像语义分割方法研究进展

    全监督学习的图像语义分割方法研究进展 简介 1 全监督学习的图像语义分割方法 1.1 基于全卷积的图像语义分割方法 1.2 基于编码器解码器结构的图像语义分割方法 1.3 基于注意力机制的图像语义分割 ...

  9. PyTorch12—Unet图像语义分割

    语义分割简介 图像语义分割是计算机视觉中十分重要的领域.它是指像素级地识别图像,即标注出图像中每个像素所属的对象类别.下图为语义分割的一个实例,其目标是预测出图像中每一个像素的类标签. 图像语义分割是 ...

最新文章

  1. MVC-前台调用后台action 传递upload file 参数问题
  2. 马云牛啊 从骑自行车到坐迈巴赫只用20年
  3. 【数理知识】拉格朗日乘数 Lagrange multipliers
  4. 数学之美番外篇:快排为什么那样快
  5. 电脑办公人员必看:效率翻倍的11个Excel技巧!
  6. 嵌入式软件工程师笔试题
  7. as3 与 java_每天学一点Flash(48) As3.0 与 java 通信(1)
  8. 《OSPF和IS-IS详解》
  9. iOS 一种很方便的构造TarBar
  10. 绿色版电子书PDF转换Word转换器
  11. 在IT呆了好久了,给大家科普下这个行业的行话
  12. 误差逆传播算法(BP算法)
  13. oracle重启rac2监听,RAC监听服务
  14. 互联网之子——亚伦·斯沃茨:新时代网络自由的先驱
  15. matlab 三角函数 积化和差,三角函数之积化和差、和差化积及推导过程
  16. Brand.com 总统迈克·扎姆托说,勒索企图的受害者
  17. Market1501数据集介绍及相关代码
  18. 【修复H5农场复利】黄金家园农场理财游戏源码Thinkphp开发 带商城仓库商店模块
  19. 全国高校食堂排行榜TOP10?!
  20. HDU 5446 Unknown Treasure(Lucas定理+CRT)

热门文章

  1. 包和工具(读书笔记)
  2. [解疑][TI]TI毫米波雷达系列(三):调频连续波雷达回波信号3DFFT处理原理(测距、测速、测角)
  3. Nvidia jetson tx2 ubuntu16.04插入128GB内存卡报错:Unable to access/mount “128 GB Volume”
  4. 名词诠释大全以及新站上线后,seo优化应该如何做?
  5. 2014工作总结与2015展望
  6. 量子计算机需要的物理知识,量子计算机和物理学上的量子力学关系大吗?
  7. bboss kafka组件使用介绍
  8. 42表盘直径是从哪测量_表盘直径多大合适,怎样测量手表表盘的直径
  9. C++ 动态开辟空间
  10. 第7章第40节:多图排版:经典的九宫格布局法 [PowerPoint精美幻灯片实战教程]