Object Detection Label 標註教學

李謦伊
謦伊的閱讀筆記
5 min readFeb 18, 2021

在進行物件偵測訓練之前需要準備訓練集和驗證集,因此本文將要來介紹如何進行標記。內容會分為三個部分:

  • Python XML 讀寫操作
  • 使用 labelImg 手動進行標註
  • 使用 insightface 自動化標註
  • 使用 YOLO 自動化標註

Python XML 讀寫操作

首先來看一下 XML 格式

接下來讀取 XML 以及寫入 XML,需要使用以下模組

from xml.etree import ElementTree as ET
  • 讀取 XML
# 載入檔案進行解析tree = ET.parse(“maksssksksss10.xml”)
root = tree.getroot()
# 查看每個 tagfor child in root:
print(child.tag)
# ===== output =====
# folder
# filename
# size
# segmented
# object
# 搜尋所有 ‘object’ 裡的 name
for child in root.findall(‘object’):
name = child.find(‘name’)
print(name.text)
# ===== output =====
# with_mask
# 更改 name 內容並儲存成 xml 檔
for child in root.findall(‘object’):
name = child.find(‘name’)
name.text = “face”
tree.write(“001.xml”)
  • 寫入 XML

參考: https://officeguide.cc/python-read-write-xml-format-file-tutorial-examples/

使用 labelImg 手動進行標註

首先下載 labelImg 工具,下圖為資料夾內容

更改 data/predefined_classes.txt 為需要的 label

打開 labelImg.exe 會出現以下 UI 介面,功能使用可以參考下圖

在圖片上按右鍵,點選 Create RectBox 後,就可以開始畫框了~

畫好框後選擇要標註的 label,再按左邊的 Next Image 就會儲存圖片 label

使用 insightface 自動化標註

Github: https://github.com/deepinsight/insightface

當有大量的資料需要標記時,手動標記非常耗時,因此我們可以使用工具幫助進行標記,不過標記完成之後還是建議再看過一次,避免有標記錯誤的問題。以下 label 的儲存格式是使用 XML,可將其改為需要的格式。

首先安裝 MXNet GPU 以及 cython。因為我的 CUDA 版本為 10.2,因此執行以下指令進行安裝

$ pip install mxnet-cu102$ pip install cython

本文示範標註戴口罩的圖片,因此使用 RetinaFaceAntiCov 項目

$ git clone --recursive https://github.com/deepinsight/insightface.git

需要先將 rcnn 編譯

$ cd insightface/detection/RetinaFace$ make

編譯好後,將 rcnn 資料夾覆蓋 RetinaFaceAntiCov/rcnn,然後下載模型: https://www.dropbox.com/s/6rhhxsbh2qik65k/cov2.zip?dl=0 ,建立一個 model 資料夾放入剛下載好的模型

原本的程式只能偵測一張圖片,因此將程式碼修改為偵測多張圖片並寫入 XML 檔,然後就可以開始執行自動化標記了~

使用 YOLO 自動化標註

若要使用 yolo 進行自動化標註可參考以下:

我根據第二個 github 去修改成讀取圖片檔預測並儲存畫出預測框及 txt 檔,其中 imgdir 為要預測的檔案資料夾、save_result_dir 和 save_txt_dir 分別為預測出的圖片與 txt 檔、第 20 和 31 行依照各自的設定進行更改。

--

--