图像标注工具Lable

labelme 是一款图像标注工具,主要用于神经网络构建前的数据集准备工作,因为是用 Python 写的,所以使用前需要先安装 Python 集成环境 anaconda。

anaconda 安装

anaconda下载地址如下:
https://www.anaconda.com/products/distribution

找到对应自己电脑操作系统位数的版本,直接下载,下载后安装,正常情况下,根据提示,一直 next 就可以,直到提示安装完成

Lableme安装

labelme 安装前,需要先创建 anaconda 虚拟环境 labelme,进入 Anaconda Prompt,输入如下命令,该命令表示创建虚拟环境 labelme。

conda create -n labelme python=3.8


输入如上命令,会运行几秒钟,正式开始创建前,会出现([y]/n)?字样,表示是·否同意创建的意思,输入 y,按 enter,等待运行结束
输入:

conda env list

查看当前已安装的虚拟环境

创建好虚拟环境后,需要激活,用如下命令

conda activate labelme

labelme 正常运转需要各种依赖的包,下面的 pypt 和 pillow 就是,它们用如下命令安装

conda install pyqt5
conda install pillow

安装好 labelme 依赖的包之后,正式开始安装 labelme,用如下命令,先用 conda 命令,如果安装不成功,则用 pip 命令

conda install labelme=3.16.2
#conda 安装命令如果出错也可以使用 pip 命令,使用逻辑等号"=="
pip install labelme==3.16.2
#也可以直接
conda install labelme
# 或者
pip install labelme

中间有可能会再次出现([y]/n)?,也有可能不出现,玄学,如果出现,则和之前的操作一样,输入y,按下 enter,等待安装结束。如果不出现,运行一段时间后,如果看到有 successfully installed labelme 等字样,则表示安装成功

这一步一定要注意安装的版本号,如果直接安装 labelme 不标注版本号在后续 json 到 dataset 的时候会出现异常,一般来说3.16的版本都可以

lableme使用

以后每次使用 labelme 时,都需要桌面搜索进入 anaconda prompt,用如下命令激活 labelme 环境

activate labelme

用如下命令打开 labelme

labelme

输入如上命令后,会弹出 labelme 操作界面,如下:

图片打标实例

点击 Open Dir,选择待标注图片所在文件夹,批量导入

根据需求,选择圆、矩形、多边形(默认)等开始标注,一般为多边形
一个区域标注完成后,会自动弹出对话框,键入标签名称

所有区域标注完成后,点击左侧栏 Save,会自动保存对应的 json 数据

每一个json文件都会包含这几项信息:

label:标注的类别
points:标注的信息,这里是左上和右下角的坐标,后面使用需要转换
shape type:标注框的类型,这里是矩形框
shapes:一张图像上的所有标注信息
imagePath:标注图片所在的路径
imageHeight:标注图片的高
imageWidth:标注图片的宽

标注文件的使用(以YOLO v3为例)

一、写好模型所需的配置文件

执行步骤如下

1、在此文件夹右击,选择Git Bash Here(没有的去下载安装)

2、输入命令bash create_custom_model.sh 2是多少分类数字就写几,演示案例2分类

ps: create_custom_model.sh不能重复执行,要先把yolov3-custom.cfg删除掉才可以


3、执行之后会出现yolov3-custom.cfg这个文件,里面的内容和官方的网络模型配置文件(yolov3.cfg)差不多,只是yolo层的classes会变成2(是几分类就变成几)。
这里我们可以根据自己的任务用K-means聚类算法更改anchors,使其更符合我们的任务,这里的框完全够用,我就不改了。

二、标签格式转换

labelme -------→ X1,Y1,X2,Y2
yolo-v3---------→Cx,Cy,W,H 相对位置(取值范围0-1)
我们需要把labelme格式的框坐标转为yolo格式的。
这里我们需要用到json2yolo.py

import json
import osname2id = {'person':0,'dog':1}  # 转换类别的定义(有多少类别就写对应的)def convert(img_size, box):# 计算放缩比例dw = 1./(img_size[0])dh = 1./(img_size[1])# 计算Cx,Cy,W,H的值x = (box[0] + box[2])/2.0 - 1y = (box[1] + box[3])/2.0 - 1w = box[2] - box[0]h = box[3] - box[1]# 归一化操作x = x*dww = w*dwy = y*dhh = h*dhreturn (x,y,w,h)def decode_json(json_floder_path,json_name):# 输出转换好的标签路径txt_name = 'G:\\DeepLearning\\yolov3\\PyTorch-YOLOv3\\PyTorch-YOLOv3\\data\\label\\labels\\' + json_name[0:-5] + '.txt'txt_file = open(txt_name, 'w')# 读取json文件的路径  json_floder_path:生成标签的文件夹json_path = os.path.join(json_floder_path, json_name)data = json.load(open(json_path, 'r', encoding='gb2312'))# 提取W,H的值img_w = data['imageWidth']img_h = data['imageHeight']for i in data['shapes']:label_name = i['label']   # 得到标签类别if (i['shape_type'] == 'rectangle'):  # 判断是否为矩形框# 提取x1,y1,x2,y2并做convert函数操作x1 = int(i['points'][0][0])y1 = int(i['points'][0][1])x2 = int(i['points'][1][0])y2 = int(i['points'][1][1])bb = (x1,y1,x2,y2)bbox = convert((img_w,img_h),bb)txt_file.write(str(name2id[label_name]) + " " + " ".join([str(a) for a in bbox]) + '\n')if __name__ == "__main__":json_floder_path = 'G:\\DeepLearning\\yolov3\\PyTorch-YOLOv3\\PyTorch-YOLOv3\\data\\label\\label_text'   # 文件路径json_names = os.listdir(json_floder_path) # 读取文件夹的内容for json_name in json_names:  # 遍历每一个json文件传递给decode_json处理decode_json(json_floder_path,json_name)

运行之后的结果

  • 这个文件可以按规则(下面《存放标签数据的文件夹有讲究》会讲到)放到data/custom/labels文件夹里(官方推荐),我这里随便放的,后期要注意路径的修改。(看第五步)
  • 训练集和验证集的标注文件放到两个文件夹,通过使用两次脚本或在这个脚本上加一些逻辑完成转换。


一行是一个矩形框, 第一列为类别,然后是Cx,Cy,W,H

存放标签数据的文件夹有讲究

存放标签数据的文件夹要和存放图片数据的文件夹对应,目的是找到图片对应的标签数据。
label是存放数据和标签的大文件夹,源码中在处理标签数据时会提取到的文件夹路径是label\label_data\train_label\xxx.jpg,label\label_data\val_label\xxx.jpg,当然.jpg会转为相应的.txt格式。因此我们需要在标签数据的文件夹上面再套一层存放数据和标签的大文件夹label,然后我们的源码路径做相应的更改即可,可以看下面图片理解。

存放图片的文件夹路径

存放标签的文件夹路径

## 三、标签与图片名字对应 这里可以写一个脚本,我这里是对应好的。 ![在这里插入图片描述](https://img-blog.csdnimg.cn/d2531af9a4b34d3d8660277662b26c8a.png) ![在这里插入图片描述](https://img-blog.csdnimg.cn/e5690433b9f842f29023ee6c2807383c.png)

四、修改classes.names配置文件


改为自己任务的类别名字(按自己定义的顺序写好),最后一个类别后面要留有一行,不然识别不到最后一个类别。

五、修改train.txt和val.txt

存放数据和标签的大文件夹label下创建train.txt和val.txt。将图片路径写入train.txt和val.txt,这里可以写一个脚本,演示数据比较少,我直接复制,train.txt和val.txt也用同一批数据。

六、修改custom.data

将classes和存放图片路径的.txt文件修改为自己的。

七、训练代码参数的更改

--model_def config/yolov3-custom.cfg  # 更改为自己的配置文件
--data_config config/custom.data  # 更改为自己的数据
--pretrained_weights weights/darknet53.conv.74 # 用训练好的模型做微调,可加可不加

八、修改数据集路径

然后进行训练就可以了

九、预测操作

--image_folder data/samples/          # 把需要预测的数据放到这里
--checkpoint_model checkpoints/yolov3_ckpt_100.pth      # 训练好模型的路径
--class_path data/custom/class.names  # 画图时要把框上的类别显示出来

深度学习数据标注_Lableme及标注文件的使用(以YOLO v3为例)相关推荐

  1. 深度学习半自动标注_时下流行的深度学习数据标注工具

    时下流行的深度学习数据标注工具 迷若烟雨 2018-09-04 16:36:00 15820 收藏 33 分类专栏: 深度学习 版权 本文将标注工具适用的最佳运行环境分成了三类. 跨平台 https: ...

  2. 深度学习——数据预处理篇

    深度学习--数据预处理篇 文章目录 深度学习--数据预处理篇 一.前言 二.常用的数据预处理方法 零均值化(中心化) 数据归一化(normalization) 主成分分析(PCA.Principal ...

  3. 深度学习数据更换背景_开始学习数据科学的最佳方法是了解其背景

    深度学习数据更换背景 数据科学教育 (DATA SCIENCE EDUCATION) 目录 (Table of Contents) The Importance of Context Knowledg ...

  4. 深度学习入门笔记(十二):深度学习数据读取

    欢迎关注WX公众号:[程序员管小亮] 专栏--深度学习入门笔记 声明 1)该文章整理自网上的大牛和机器学习专家无私奉献的资料,具体引用的资料请看参考文献. 2)本文仅供学术交流,非商用.所以每一部分具 ...

  5. 基于Python的空气质量网络数据爬虫,构建面向深度学习数据预测的空气质量数据集

    目录 1.目标 2. 思路 3.算法 3.1 算法流程 3.2 开发环境 4 核心代码 4.1 Header伪装 4.2 get_html_soup函数 4.3 get_city_link_list函 ...

  6. 深度学习数据特征提取:ICCV2019论文解析

    深度学习数据特征提取:ICCV2019论文解析 Goal-Driven Sequential Data Abstraction 论文链接: http://openaccess.thecvf.com/c ...

  7. 深度学习数据集中数据差异大_使用差异隐私来利用大数据并保留隐私

    深度学习数据集中数据差异大 The modern world runs on "big data," the massive data sets used by governmen ...

  8. 深度学习数据自动编码器_如何学习数据科学编码

    深度学习数据自动编码器 意见 (Opinion) When I first wanted to learn programming, I coded along to a 4 hour long Yo ...

  9. 【matplotlib + opencv】关于opencv和matplotlib绘制图像时,出现色差色偏的问题探讨,思考,解决。(深度学习数据包plt.imshow绘制的图像底色偏绿蓝偏黄)

    文章目录 一.图像红变蓝,蓝变红的问题 (1)原因分析 (2)代码及结果展示 1)错误代码 2)错误结果 3)正确代码 二.深度学习数据包plt.imshow绘制图像偏蓝黄色 (1)原因分析 1)原理 ...

最新文章

  1. 全麦吐司和普通吐司的区别_全麦面包和普通面包的区别
  2. 我发现了pandas的黄金搭档!
  3. 机制 linux_从一道面试题谈linux下fork的运行机制
  4. 《MySQL——给长字符串加索引》
  5. 员工薪酬管理设计方案
  6. LeetCode 853. 车队(排序)
  7. Oracle tips
  8. 【impala】impala的shell命令使用
  9. 关于Cocos2d-x的粒子系统
  10. 以太坊本地开发环境搭建
  11. linux临时网络配置
  12. Qt 地址薄 (一) 界面设计
  13. 机器学习导论(一)绪论
  14. 独家研究 I 某新一线城市中高端养老社区项目(CCRC)入住客户画像深度洞察研究报告
  15. opencv31:哈里斯角检测|Harris Corner
  16. java中apache和tomcat的区别和联系
  17. 《一个报文的路由器之旅》学习
  18. 使用Python获取DNS记录
  19. 软件开发中UI设计需要注意什么?
  20. Mac 应用中支持Dark Mode(深色模式)

热门文章

  1. 为什么手机网速太慢_为什么手机网速很慢;为什么手机信号满格,网速却很慢?...
  2. 易语言 易语言进入下次循环 类似C语言的continue
  3. Mosquitto安装及使用
  4. 一次重新的认识--第二次随笔
  5. 计算机网络 一、 IP地址,域名,DNS
  6. Laravel学习笔记 ViewComposer
  7. 产品结构设计的主要内容有哪些?
  8. Python入门教程NO.5 用python写个自动选择加油站的小程序
  9. 四旋翼动力学和仿真翻译(Quadcopter Dynamics and Simulation)
  10. QQ登录, 腾讯开放平台和QQ互联的坑