目標檢測使用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,在命令行中輸入(因爲安裝完之後會自動添加到):
LabelImg
或labelimg
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
♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠