【labelme】制作标签数据的完整流程_labelime定制化-程序员宅基地

技术标签: # 深度学习基础知识  

every blog every motto: Just live your life cause we don’t live twice.

0. 前言

因为遇到一个任务,需要自己制作标签。
题外话: 像mnist或是fashion_minst数据集,样本的标签是是一个数字(或是one-hot)或是字符串。对于搭建的模型最后一般用softmax调整下概率,最后交叉熵计算就行。刚开始制作标签的就一根筋的想着怎么把样本映射到一个数字上,擦,,,,浪费了不少时间。原来是遇到一个新的任务------图像分割(语义分割),minst那些是图像分类,两个不是一码事!!!!
这里的标签也是一个图片!!!
这里的标签也是一个图片!!!
这里的标签也是一个图片!!!

1. 正文

1.1 安装与使用

控制台输入

pip install labelme

打开软件,控制台输入

labelme

如下图,
open: 打开单个文件
open dir : 打开文件夹(内含多个文件)
在这里插入图片描述
打开多个图片,右下角显示文件夹中含有的图片,如下图。
在这里插入图片描述
进行标注,如下图(create polygons,首尾点合并就能输入标签名称。
在这里插入图片描述

保存,如下图(会在文件下生成对应的json文件)
在这里插入图片描述
接着进行下一张图片的标注,点击next image,如下图(图片仅为演示)
在这里插入图片描述

1.2 (批量)转成可用与训练的样本和标签

第一步,将上面生成的若干个json文件放在同一个文件夹下(文件夹内只含有json文件),如下图。
路径:

D:\Data_saved\Desktop\deep_learning_data\Sample\json

在这里插入图片描述
第二步,找到 json_to_dataset.py
在如下图路径下。
在这里插入图片描述
将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 base64
 
def 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_file
    if 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.out
    if 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 dense
            label_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文件夹,路径如下
(其实可以不用切换,可以在任意路径下,不过后续生成的文件会在此文件夹下,因为是用的这个文件夹下的labelme_json_to_dataset.exe)
在这里插入图片描述
第四步,运行命令
命令格式:

labelme_json_to_dataset.exe + json文件的路径

我的图片标注后生成的json文件统一放在如下路径(1.1 中有提到),如下:

D:\Data_saved\Desktop\deep_learning_data\Sample\json

所以,完成的命令如下:

labelme_json_to_dataset.exe D:\Data_saved\Desktop\deep_learning_data\Sample\json

在这里插入图片描述
在这里插入图片描述
具体文件如下图
在这里插入图片描述
查看标签图像的位深度,如下图。是8位,即是可用于训练的标签。
在这里插入图片描述

参考文献

[1] https://blog.csdn.net/yql_617540298/article/details/81110685
[2] https://blog.csdn.net/u014513323/article/details/81166997
[3] https://www.cnblogs.com/roscangjie/p/10737053.html
[4] https://blog.csdn.net/xjtdw/article/details/94741984
[5] https://www.bilibili.com/video/BV16b411G7kB?p=3

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_39190382/article/details/105890812

智能推荐

ad19原理图标注_AD19中原理图的模板如何进行编辑?-程序员宅基地

文章浏览阅读8.5k次,点赞3次,收藏28次。我们在进行原理图设计的时候,有时候不想去用软件自带默认的模板,想要用自己设计的模板,就涉及到我们的模板怎么去编辑的呢?我们应该如何去编辑原理图自己设计的模板?操作步骤是怎么的呢?我们今天就以AD19为例去进行原理图的如何进行编辑的教程。1.首先我们需要把原理图的默认模板给取消掉,在属性框中找到“Title Bloc”前面的√给去掉即可,一下为对比图:那么,我们的默认模板就已经消失了。2.默认消..._ad19原理图标题栏修改

【漏洞复现】Apache系列(二)之Solr漏洞复现-程序员宅基地

文章浏览阅读7.1k次。【漏洞复现】Apache系列(二)之Solr漏洞复现_solr漏洞

规范字体:font-family 的用法-程序员宅基地

文章浏览阅读949次,点赞16次,收藏20次。一些前端UI库例如bootstrap会给根节点(例如/)设置类似这样(font-family: sans-serif;无衬线字体)的字体规范,以防止页面字体不统一。_font-family

基于虚拟相机的人脸识别 (视频) - Face recognition based on virtual camera_虚拟摄像头人脸识别教程-程序员宅基地

文章浏览阅读1.4w次,点赞12次,收藏57次。利用虚拟相机破解人脸识别 _虚拟摄像头人脸识别教程

使用OpenSSL实现https_openssl发起请求-程序员宅基地

文章浏览阅读1.5k次。一、配置OpenSSL生成证书1、由于是实验,所以要自己安装OpenSSL(官方地址https://www.openssl.org)生成证书,其版本号分为1.1和1.0两个大分支,Centos 7开始使用1.0.2k版本,如果配置的SSL需要达到苹果要求也需要1.0.2版本。1.1依赖的libssl也是1.1版本的,而系统默认的libsso库是1.0版本(ls /usr/lib64/libssl..._openssl发起请求

物联网平台系列 - 开源技术平台_开源物联网平台框架-程序员宅基地

文章浏览阅读2.4k次,点赞2次,收藏4次。物联网正在快速发展。许多组织和公司推出了各自的开源技术平台,这里对几个影响力比较大的平台做一下介绍。AllJoynAllJoyn是一个由Allseen联盟赞助的开源软件框架,基于邻近感应,支持互操作性,各种设备都可以直接相互查找、连接和通信,而无需借助中间服务器。- 许可协议:Apache2.0、BSD- 开发语言:C,C ++,OBJ-C,Java- _开源物联网平台框架

随便推点

Unity 2019 Android与Unity通信 UnityPlayerActivity找不到相关问题记录_unity导出android工程报错unityplayeractivity找不到unityplaye-程序员宅基地

文章浏览阅读4.9k次,点赞2次,收藏7次。解决思路:https://blog.csdn.net/LM514104/article/details/108518253需将C:\Program Files\Unity\Editor\Data\PlaybackEngines\AndroidPlayer\Source\com\unity3d\player下的UnityPlayerActivity直接拖入安卓工程MainActivity(继承于UnityPlayerActivity)的目录下。之后打包出的arr只需获取里面的AndroidMani_unity导出android工程报错unityplayeractivity找不到unityplayer

Efficient detection under varying illumination conditions and image plane rotations_人脸光照不变特征-程序员宅基地

文章浏览阅读596次。摘要本文主要研究了不同光照和姿态下的兰伯曲面目标的检测问题。我们提供了一种新的检测方法,该方法通过对训练集中少量图像的不同光照进行建模;这将自动消除光照效果,允许快速的光照不变检测,而不需要创建一个大型的训练集。实验证明,该方法很好地“适应”了之前关于在不同光照下建模物体外观集的工作。在实验中,即使在存在显著阴影的情况下,在45范围内的图像平面旋转和各种不同光照下,也能正确地检测到目标。1、简介姿态和光照的微小变化会产生物体外观的巨大变化。在[9,16,19,20]中研究了不同类别几何变换或不同_人脸光照不变特征

【ROS2机器人入门到实战】_ros2机器人编程实战 pdf-程序员宅基地

文章浏览阅读1.3w次,点赞35次,收藏421次。1.ROS2前世今生2.ROS与ROS2对比3.动手安装ROS24.ROS2初体验。_ros2机器人编程实战 pdf

Android Studio 控制台中文乱码,解决方案都在这里了,完美解决_android studio 乱码-程序员宅基地

文章浏览阅读1.3w次,点赞24次,收藏35次。android studio 中文乱码问题,统一设置 UTF-8_android studio 乱码

第4章-Quartus 软件和 USB-Blaster 驱动安装_fpga的usb blaster安装驱动-程序员宅基地

文章浏览阅读1.9k次。接下来,我们以 Quartus II 13.0 版本为例,手把手教会各位实现 Quartus II 开发软件的。芯片,所以要使用 Altera 提供的配套开发软件 Quartus II,我们使用的是 13.0 版本---如图 4-11 所示,安装信息包括 Quartus II 软件。先, QaurtusII_13.0 版本是众多初学者习惯使用的版本,操作界面比较传统,众多教程都针。立安装器件库,组件的选择不包括器件库,如图 4-10 所示。另一种是独立安装,开发软件安装完毕后再进行器件库的安装,独。_fpga的usb blaster安装驱动

2024届【校招】安全面试题和岗位总结(字节、百度、腾讯、美团等大厂)_百度安全工程师面试笔试-程序员宅基地

文章浏览阅读1.5w次,点赞8次,收藏64次。个人强烈感觉面试因人而异,对于简历上有具体项目经历的同学,个人感觉面试官会着重让你介绍自己的项目,包括但不限于介绍一次真实攻防/渗透/挖洞/CTF/代码审计的经历 => 因此对于自己的项目,面试前建议做一次复盘,最好能用文字描述出细节,在面试时才不会磕磕绊绊、或者忘了一些自己很得意的细节面试题会一直更新(大概,直到我毕业或者躺平为止吧...)包括一些身边同学(若他们同意的话)和牛客上扒拉下来的(若有,会贴出链接)还有自己的一些经历。_百度安全工程师面试笔试

推荐文章

热门文章

相关标签