目标检测使用LabelImg标注VOC数据格式和YOLO数据格式——LabelImg使用详细教程

目标检测使用LabelImg标注VOC数据格式和YOLO数据格式——LabelImg使用详细教程欢迎大家关注笔者,你的关注是我持续更博的最大动力原创文章,转载告知,盗版必究@[toc](目标检测使用LabelImg标注VOC数据格式和YOLO数据格式——LabelImg使用详细教程文章目录:)1LabelImg介绍与安装1.1Label介绍github是目标检测数据标注工具,可以标注标注两种格式:VOC标签格式,标注的标签存储在xml文件YOLO标签格式,标注的标签存储在txt文件中LabelImg的github主页地址:点我,带你去>https://…

大家好,又见面了,我是你们的朋友全栈君。

1 LabelImg介绍与安装

1.1 Label介绍

github是目标检测数据标注工具,可以标注标注两种格式:

  • VOC标签格式,标注的标签存储在xml文件
  • YOLO标签格式,标注的标签存储在txt文件中

LabelImg的github主页地址:

点我,带你去>https://github.com/tzutalin/labelImg

2.1 LabelImg安装

2.1.1 使用pip工具进行安装LabelImg (推荐)

使用pip安装LabelImg安装时最简单的方式,首推,安装完之后会自动把LabelImg添加到环境变量中,这样你就可以在命令行中输入:labelimg直接打开该工具——windows用户强烈推荐此方法

使用pip安装labelimg

pip install labelimg -i https://pypi.tuna.tsinghua.edu.cn/simple

下面的方式是从源码开始安装LabelImg,一般比较麻烦,不推荐

2.1.2 在Ubuntu Linux上安装LabelImg

1、Python 2 + Qt4
Python2的环境使用如下命令安装

sudo apt-get install pyqt4-dev-tools
sudo pip install lxml
make qt4py2
python labelImg.py
python labelImg.py [IMAGE_PATH] [PRE-DEFINED CLASS FILE]

2、Python 3 + Qt5 (Recommended)
Python3的环境使用如下命令安装

sudo apt-get install pyqt5-dev-tools
sudo pip3 install -r requirements/requirements-linux-python3.txt
make qt5py3
python3 labelImg.py
python3 labelImg.py [IMAGE_PATH] [PRE-DEFINED CLASS FILE]

2.1.3 在macOS上安装LabelImg

1、Python 2 + Qt4
Python2的环境使用如下命令安装

brew install qt qt4
brew install libxml2
make qt4py2
python labelImg.py
python labelImg.py [IMAGE_PATH] [PRE-DEFINED CLASS FILE]

2、Python 3 + Qt5 (Recommended)
Python3的环境使用如下命令安装

brew install qt  # Install qt-5.x.x by Homebrew
brew install libxml2

or using pip

pip3 install pyqt5 lxml # Install qt and lxml by pip

make qt5py3
python3 labelImg.py
python3 labelImg.py [IMAGE_PATH] [PRE-DEFINED CLASS FILE]

2.1.4 在Virtualenv虚拟环境中安装labelimg

使用virtualenv创建虚拟环境可以避免python版本和QT版本带来的一些问题,当然你也可以用conda创建虚拟环境,道理是一样的

brew install python3
pip3 install pipenv
pipenv run pip install pyqt5==5.13.2 lxml
pipenv run make qt5py3
python3 labelImg.py
[Optional] rm -rf build dist; python setup.py py2app -A;mv "dist/labelImg.app" /Applications

2.1.5 其他安装方法

作者还给出了很多的其他安装方法,如docker安装方法等,大家可以去作者的github主页进行参考,这里我就不一一列举了!

2 LabelImg的使用

安装好之后,就是在命令行中打开LabeImg,在命令行中输入(因为安装完之后会自动添加到):

LabelImglabelimg

2.1 打开Labelimg

我们在要标定数据的时候,一般是已经制定好了要标注物体的类别,这样在打开LabelImg之后,我们只要框定目标之后,选择要对应的标签即可。

labelimg JPEGImage predefined_classes.txt

说明:

  • JPEGImage 目录:存储的是图片的名字
  • Annotation 目录:用于存放标注图片的标签文件
  • predefined_classes.txt 文件:定义自己要标注的所有类别

例如:我的predefined_classes.txt中定义的类别如下:

circle_red
circle_gray
rectangle_red
rectangle_gray
fingeprint_red
fingeprint_gray
other

执行命令,然后选择JPEGImage待标注图片数据文件夹,然后点选择文件夹,如下图:
在这里插入图片描述
选择好标注数据文件夹之后,即进入到了LabelImg的界面,如下图:
在这里插入图片描述

  • 最上方显示的是当前标注图片的路径
  • Open Dir:待标注图片数据的路径文件夹,即选择JPEGImage文件夹
  • Change Save Dir:保存类别标签的路径文件夹,即选择Annotation文件夹
  • PascalVOC:标注的标签保存成VOC格式,在鼠标点一下就变成YOLO,即此时就会把标注的标签变成YOLO格式

2.2 标注前先进行一些设置

点击View显示如下图,然后把如下的几个选项勾上:

  • Auto Save mode:当你切换到下一张图片时,就会自动把上一张标注的图片标签自动保存下来,这样就不用每标注一样图片都按Ctrl+S保存一下了
  • Display Labels:标注好图片之后,会把框和标签都显示出来
  • Advanced Mode:这样标注的十字架就会一直悬浮在窗口,不用每次标完一个目标,再按一次W快捷键,调出标注的十字架。
    在这里插入图片描述

2.3 标注常用的快捷键

  • W:调出标注的十字架,开始标注
  • A:切换到上一张图片
  • D:切换到下一张图片
  • Ctrl+S:保存标注好的标签
  • del:删除标注的矩形框
  • Ctrl+鼠标滚轮:按住Ctrl,然后滚动鼠标滚轮,可以调整标注图片的显示大小
  • Ctrl+u:选择要标注图片的文件夹
  • Ctrl+r:选择标注好的label标签存放的文件夹
  • ↑→↓←:移动标注的矩形框的位置

使用标注的十字架,框住要标注的目标即可,如下图,是我对公章数据进行标注:

  • 标注的时候,会把predefined_classes.txt预定义的标加载出来,然后我们只要选择对应的标签即可
  • 右上角会显示已经标注目标的标签
    在这里插入图片描述

3 VOC数据标签和格式和YOLO数据标签格式说明

3.1 VOC数据格式

VOC数据格式,会直接把每张图片标注的标签信息保存到一个xml文件中

例如:我们上面标注的JPEGImage/000001.jpg图片,标注的标签信息会保存到Annotation/000001.xml文件中,000001.xml中的信息如下:

<annotation>
	<folder>JPEGImage</folder>
	<filename>000000.jpg</filename>
	<path>D:\ZF\2_ZF_data\3_stamp_data\标注公章数据\JPEGImage\000000.jpg</path>
	<source>
		<database>Unknown</database>
	</source>
	<size>
		<width>500</width>
		<height>402</height>
		<depth>3</depth>
	</size>
	<segmented>0</segmented>
	<object>
		<name>circle_red</name>
		<pose>Unspecified</pose>
		<truncated>0</truncated>
		<difficult>0</difficult>
		<bndbox>
			<xmin>168</xmin>
			<ymin>2</ymin>
			<xmax>355</xmax>
			<ymax>186</ymax>
		</bndbox>
	</object>
	<object>
		<name>circle_red</name>
		<pose>Unspecified</pose>
		<truncated>0</truncated>
		<difficult>0</difficult>
		<bndbox>
			<xmin>2</xmin>
			<ymin>154</ymin>
			<xmax>208</xmax>
			<ymax>367</ymax>
		</bndbox>
	</object>
	<object>
		<name>circle_red</name>
		<pose>Unspecified</pose>
		<truncated>0</truncated>
		<difficult>0</difficult>
		<bndbox>
			<xmin>305</xmin>
			<ymin>174</ymin>
			<xmax>493</xmax>
			<ymax>364</ymax>
		</bndbox>
	</object>
</annotation>

xml中的关键信息说明:

  • 图片的名字
  • 每个目标的标定框坐标:即左上角的坐标和右下角的坐标
    • xmin
    • ymin
    • xmax
    • ymax

3.2 YOLO数据格式

YOLO数据格式,会直接把每张图片标注的标签信息保存到一个txt文件中

例如:我们上面标注的JPEGImage/000001.jpg图片,标注的标签信息会保存到Annotation/000001.txt文件中(同时会生成一个classes.txt文件,也保存到Annotation/classes.txt),000001.txt中的信息如下:

0 0.521000 0.235075 0.362000 0.450249
0 0.213000 0.645522 0.418000 0.519900
0 0.794000 0.665423 0.376000 0.470149

txt中信息说明:

  • 每一行代表标注的一个目标
  • 第一个数代表标注目标的标签,第一目标circle_red,对应数字就是0
  • 后面的四个数代表标注框的中心坐标和标注框的相对宽和高(进行了归一化,如何归一化可以参考我的这篇博客中的介绍

同时会生成一个Annotation/classes.txt实际类别文件classes.txt,里面的内容如下:

circle_red
circle_gray
rectangle_red
rectangle_gray
fingeprint_red
fingeprint_gray
other

#4 常见问题

##4.1 每次打开labelimg都莫名奇妙出现很多标签

如下图,我命名没有设置这些标签,但是莫名其妙出现这些标签,这个是我在linux系统中遇到的:

在这里插入图片描述

后面我去labelImg目录下全局搜索一下发现在data目录下有一个predefined_classes.txt文件,我打开查看了一下果然和上面给出的一样,这个文件在你克隆的时候就保留的,我感觉没有什么用,后面我删除了!

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述



在这里插入图片描述


在这里插入图片描述
♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/148630.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • BigDecimal 除法

    BigDecimal 除法文章目录BigDecimal除法除法常用方法示例舍入模式ROUND_UPROUND_DOWNROUND_CEILINGROUND_FLOORROUND_HALF_UPROUND_HALF_DOWNROUND_HALF_EVENROUND_UNNECESSARYBigDecimal除法除法常用方法divide(BigDecimaldivisor,intscale,introundingMode)参数释义divisor被除数scale保留小数位roun

    2022年6月14日
    28
  • 网站用户单点登录系统

    1背景
      在网站建设的过程中,多个应用系统一般是在不同的时期开发完成的。各应用系统由于功能侧重、设计方法和开发技术有所不同,也就形成了各自独立的用户库和用户认证体系。随着网站的发展,会出现这样的用户群体:以其中的一个用户为例,他(她)使用网站的多个应用系统,但在每个应用系统中有独立的账号,没有一个整体上的网站用户账号的概念,进入每一个应用系统前都需要以该应用系统的账号来登录。这带给用户不方便的使用感受,用户会想:既然我使用的是同一个网站上的应用,为什么不能在一次在网站上

    2022年4月13日
    89
  • 回声状态网络基础知识_肝血管瘤内回声成网络样

    回声状态网络基础知识_肝血管瘤内回声成网络样http://jlearning.cn/2017/05/29/ESN-basic-tutorial/最近在看回声状态网络(EchoStateNetwork)的内容,注意到中文搜索引擎搜不到关于有关EchoStateNetwork通俗的讲解,打算写一下关于ESN的一个基本教程。本文先用一小段简单介绍ESN是什么,然后用公式来表示这种网络,并说明他的优缺点,最后用一个可执行的简单例子来演示…

    2022年10月21日
    0
  • ncodeURIComponent() 函数 vue内容

    ncodeURIComponent() 函数 vue内容

    2022年3月1日
    42
  • 基础乐理

    基础乐理

    2022年3月13日
    37
  • 云服务器和虚拟主机哪个好?两者有什么优缺点?「建议收藏」

    云服务器和虚拟主机哪个好?两者有什么优缺点?「建议收藏」云服务器和虚拟主机哪个好?两者有什么优缺点?想必有好多网站站长和中小型企业都被这个问题所困惑。现在小杜就来讲一讲云服务器和虚拟主机分别的特征和差异,小杜我相信大家看完本文后,就不会再被这样的问题所困惑了。云服务器云服务类似于传统的独立主机一样,它有自身独立的IP和宽带资源的,而且云服务器自身带有防火墙等防御工具。可是它不同于传统的独立主机,它可以按照使用者的需求量来增加或是降低服务器的配置,而且可以按照所需所用租用,而且租用云主机建立网站的成本,比传统独立主机建立要低好多。优点:它有独立的IP,独立

    2022年6月25日
    24

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号