AI – Yolo – Format Convert Tool

簡介

當我們使用過先前介紹過的LabelImg這套標籤工具後,事實上其實不需要使用這篇這種工具,但當我們拿到了現成的DataSet後,卻又不符合Darknet能吃的格式,這時候就需要用到了。

尤其是我們自己透過自動化程式來拍照並自動產出Yolo Training VOC格式,資料量又非常大(雖然可以再自動化程式自己在撰寫轉換格式程式,我之後一定會寫在Unity中),這時候最省事的方法就是靠別人發明的輪子來處理遇到的問題。

Convert2Yolo

來介紹一下這工具,其實蠻好用的,但是我在Win10都一直跑不起來(可能是該工具只for mac or linux,或Win10所安裝的套件包不符合),所以拿來Mac使用,畢竟這不需要像Yolo Training耗費非常多電腦資源。

Convert2Yolo

以上是git的連結位置,這套工具可以無痛轉換常用到的四種標籤格式,

  1. COCO
  2. VOC
  3. UDACITY Object Detection
  4. KITTI 2D Object Detection

而這邊為求電腦不髒掉,一樣透過Anaconda來新增一個虛擬環境,那我們就開始創立一個專屬於Convert2Yolo的環境吧。為求慎重我在該虛擬環境安裝python3.8版本。

//name的環境名稱可以用自己喜歡的
conda create --name YoloConverter python=3.8
//安裝過程他會問題y/n
y
//把他git資料抓下來
git clone https://github.com/ssaru/convert2Yolo.git

接下來就要安裝該工具所需要的套件在你虛擬環境。以下是該工具所需要的套件與程式碼,輸入字串就好。他會依照文件中的字串一一去下載安裝。最後安裝完匯出下下圖資訊與安裝過程。

  • Pillow==7.2.0
  • cycler==0.10.0
  • kiwisolver==1.0.1
  • matplotlib==2.2.2
  • numpy==1.14.3
  • pyparsing==2.2.0
  • python-dateutil==2.7.2
  • pytz==2018.4
  • six==1.11.0
pip3 install -r requirements.txt

接著就要開始轉換你的資料了,請看到下圖,左邊第一個就是要放置你要轉換的所有圖片,中間則是你的標籤文檔案,右邊則是你所有標籤的類別,如下圖二,我用自動化所拍攝的照片總共有四種類別,就把它儲存在txt檔案即可。

最後要進到關鍵一步,首先你要先知道你的DataSet是什麼的格式,在上方有說明該工具可以轉換四種不同類型的標籤格式,我這邊是VOC,Annotations中的檔案都是xml格式,而Yolo Darknet是需要怎樣的格式?

如上圖,第一個就是標籤類別,如上述要準備的檔案中的name.txt類別名稱,假如該圖所標示的物件都是『Red』的話,此欄位會顯示0(陣列索引排序,這不多說),後面的四個浮點數,就是標籤在圖片中的座標位置,下面是轉換公式:

Yolo annotation object format

x = (xmin + (xmax-xmin)/2) * 1.0 / image_w
y = (ymin + (ymax-ymin)/2) * 1.0 / image_h
w = (xmax-xmin) * 1.0 / image_w
h = (ymax-ymin) * 1.0 / image_h

上圖匡起來的地方就是VOC格式要轉換成Yolo格式必須要有的數值,而下方就是要叫轉換工具動起來的指令:

1. --datasets

   選用你原始格式 COCO / VOC / UDACITY / KITTI

     ```指令
     --datasets COCO
     ```

2. --img_path

   你的大量圖片放置的位置

     ```指令
     --img_path ./example/kitti/images/
     ```

3. --label

   你的標籤檔案放置位置

     ```指令
     --label ./example/kitti/labels/
     ```

4. --convert_output_path

   你轉出檔案的路徑

     ```指令
     --convert_output_path ./
     ```

5. --img_type

   要轉換的圖片格式,通常都是jpg

     ```指令
     --img_type ".jpg"
     ```

6. --manifest_path

   這在透過darknet工具訓練時需要的一個檔案,darkflow不需要
  [darknet framework](https://pjreddie.com/darknet/)

     ```指令
     --manifest_path ./
     ```

7. --cla_list_file(`*.names`)

   這個也是darknet要訓練時需要備妥的一個檔案,『檔名.name』
   [darknet `*.name` file](https://github.com/pjreddie/darknet/blob/master/data/voc.names)

     ```指令
     --cls_list_file voc.names

接著我們就開始轉換吧以下是指令,要注意的是這是我自己檔案的路徑,記得要遵循自己放資料的路徑,並修改之,轉換好之後會呈現上圖資訊。這邊我轉換了3000份資料,並隨機抽樣檢查檔案也是正常轉換,上圖二,大概花了半秒即大功告成。

python3 example.py --datasets VOC --img_path ./example/20200916/JPEGImages/ --label ./example/20200916/Annotations/ --convert_output_path ./YOLO/ --img_type ".jpg" --manifest_path ./ --cls_list_file ./example/20200916/names.txt

小結 & 可能遇到的問題

這邊紀錄一下可能會遇到的問題,第一:可能是你路徑找不到導致工具無法轉換,第二:該工具需要的套件Pillow的版本,因為工具本身在轉換時會去讀取format.py的程式碼,由於程式找不到Pillow所以無法進行編譯,如上圖。我遇到的小問題大概是這兩個,假如大家有用到且有遇到其他問題,我們再一起解。

這工具其實可以讓你在整個準備Yolo DataSet時加速,並且可以轉換的格式還蠻多種的,所以在這邊分享並作紀錄,讓你的人生加速(加速可以有更多時間體驗人生,不是加速XX)。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *