本篇介紹如何使用 LabelImg 這個免費的影像標註工具,標示照片中的物體,製作成可用來訓練深度學習引擎的輸入資料集。
在使用深度學習來實作影像的物件偵測時,都會需要有大量的已知資料集,也就是照片加上物件的所在位置以及物件的名稱,而通常若要準備這類的資料,初期都會使用人工的方式來手動標註,而 LabelImg 就是用來標註照片中物體位置與名稱的小工具。
官方網站:GitHub
支援平台:Windows、Linux、Mac OS X
下載預先編譯版本:Windows 與 Linux 版本
授權:開放原始碼(MIT 授權)
安裝 LabelImg
LabelImg 支援 Windows、Linux 與 Mac OS X 平台,而 Windows 與 Linux 兩個平台有提供預先編譯好的版本,直接從其官方網站下載即可使用。
另外也可以從 PyPI 上面直接下載:
# 從 PyPI 下載與安裝 LabelImg pip install labelImg # 執行 LabelImg labelImg
執行之後,就會開啟 LabelImg 的視窗。
標註照片
Step 1
開啟 LabelImg 之後,首先開啟想要進行標註的圖片檔,開啟時可以選擇「Open」開啟單張圖檔,或是以「Open Dir」開啟整個目錄中所有的圖檔。
這裡我拿兩張歐洲盤羊的圖片作為示範。
Step 2
這張照片中有三頭歐洲盤羊,接下來我們就要在這張照片上標示出這三頭羊的位置與名稱資訊。
在照片上點選滑鼠右鍵,在右鍵選單中點選「Create RectBox」。
如果要進行大量的物件標註,可以先研究一下 LabelImg 的快速鍵,以加速人工標註的速度,例如建立標註方框的快速鍵就是 w
,善用這些快速鍵的話,標註的處理速度會加快非常多。
Step 3
使用滑鼠將整頭羊框起來。
Step 4
輸入這個物件的名稱。
Step 5
按照上述的物件標註方式,把照片中的每一個物件都標示好,在標示多個物件時,LabelImg 會自動列出已經標示過的名稱,所以如果有重複的名稱,就可以直接用滑鼠在選單上點選,不用再打一次,非常方便。
Step 6
標示完成後,在視窗的右方會列出所有標示好的物件,我們可以對任何的物件進行修改或刪除等動作。
Step 7
當一張圖片上的物件都標註完成後,記得按下左側的「Save」鍵儲存,LabelImg 會使用 XML 格式來儲存標註資訊。
這樣就完成一張圖片的標註工作了。
Step 8
若有多張照片的話,就按照這樣的流程來標註每一張照片,記得每張照片標註完都要儲存成 XML 檔。
使用 LabelImg 開啟照片時,會自動檢查是否有對應的 XML 標註檔,如果它發現同目錄下有對應的 XML 標註檔,就會自動載入它並顯示出來,所以一般來說,將標註的 XML 與照片放在一起會比較方便。
LabelImg 輸出的 XML 內容會類似這樣:
<annotation> <folder>mouflon</folder> <filename>mouflon-1260937_1280.jpg</filename> <path>/home/gtwang/mouflon/mouflon-1260937_1280.jpg</path> <source> <database>Unknown</database> </source> <size> <width>1280</width> <height>853</height> <depth>3</depth> </size> <segmented>0</segmented> <object> <name>Mouflon</name> <pose>Unspecified</pose> <truncated>0</truncated> <difficult>0</difficult> <bndbox> <xmin>28</xmin> <ymin>383</ymin> <xmax>434</xmax> <ymax>817</ymax> </bndbox> </object> <object> <name>Mouflon</name> <pose>Unspecified</pose> <truncated>0</truncated> <difficult>0</difficult> <bndbox> <xmin>399</xmin> <ymin>270</ymin> <xmax>828</xmax> <ymax>702</ymax> </bndbox> </object> <object> <name>Mouflon</name> <pose>Unspecified</pose> <truncated>0</truncated> <difficult>0</difficult> <bndbox> <xmin>817</xmin> <ymin>166</ymin> <xmax>1268</xmax> <ymax>612</ymax> </bndbox> </object> </annotation>
有了這些照片的標註資訊,就可以進行後續的深度學習引擎訓練了。
常見問題
若在 Ubuntu Linux 中執行 labelImg
時,出現這樣的錯誤訊息:
Traceback (most recent call last): File "/usr/local/bin/labelImg", line 7, in <module> from labelImg.labelImg import main File "/usr/local/lib/python2.7/dist-packages/labelImg/labelImg.py", line 24, in <module> from PyQt4.QtGui import * ImportError: No module named PyQt4.QtGui
表示 Python 的 Qt 模組沒有裝,只要安裝一下即可:
sudo apt-get install python-qt4
詹杰熹
請問為什麼會顯示ModuleNotFoundError: No module named ‘tensorflow.contrib’
錯誤訊息
Andy
請問為甚麼?我標記完我有將每一張標記過的招片都儲存,可是隔天、或者是一離開labelimg,標記好的照片又被格式化了呢。
Andy
我無法開啟舊檔,而且標記過的照片不是與之前標記不同就是完全不見了。請問大神有何解救方法?