目標檢測使用LabelImg標註VOC數據格式和YOLO數據格式——LabelImg使用詳細教程

歡迎大家關注筆者,你的關注是我持續更博的最大動力


原創文章,轉載告知,盜版必究


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

在這裏插入圖片描述



在這裏插入圖片描述


在這裏插入圖片描述
♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章