在 Colab 上使用 yolov4-tiny 訓練一個人臉偵測模型

張家銘
Nov 9, 2020

--

使用 yolov4-tiny 訓練一個人臉偵測模型

在 Colab 上訓練

打開後先複製一份到自己的 Colab Notebooks 裡

打開自己複製的那份,並開始執行,首先需要先認證,打開連結,並將授權碼輸入到白色框框中,就會連接到自己的 Google Drive

連接到後會看到左邊的資料夾會多了一個 gdrive,這就是你的雲端硬碟的資料夾

移動到自己的個人雲端硬碟裡 My Drive,並創建一個 yolo_face 的資料夾方便我們使用

1. 編譯 darknet

將 AlexeyAB 大神的 darknet 複製到我們的資料夾中

修改 Makefile,將 GPU、CUDNN、CUDNN_HALF、OPENCV 都打開

  • GPU=1
  • CUDNN=1
  • CUDNN_HALF=1
  • OPENCV=1

開始編譯

2. 準備人臉資料集與 cfg

由於只是示範,我們選擇資料集較少的人臉資料集,是在 kaggle 上的 Face Detection in Images,資料集格式以 json 檔儲存,只有 409 張影像,共有 1128 個人臉,給各位看一下 json 儲存資訊如下,content 為影像網址,annotation 的 label 為 Face、points 為框住人臉的左上角與右下角的座標位置 (歸一化後的)、imageWidth 與 imageHeight 為整張影像的寬和高。

{'content': 'http://com.dataturks.a96-i23.open.s3.amazonaws.com/2c9fafb064277d86016431e33e4e003d/d1c32c8e-8050-482d-a6c8-b101ccba5b65___0de0ee708a4a47039e441d488615ebb7.png',
'annotation': [{'label': ['Face'],
'notes': '',
'points': [{'x': 0.7053087757313109, 'y': 0.23260437375745527},
{'x': 0.7692307692307693, 'y': 0.36182902584493043}],
'imageWidth': 1280,
'imageHeight': 697}],
'extras': None}

下載資料集 face_detection.json 與將 json 格式轉換成 yolo 格式 (x, y, w, h) 的 data_convert_to_yolo.py,執行完 data_convert_to_yolo.py 後會創建 face 資料夾,裡面存放資料集的影像與對應的 yolo 格式 label,還會創建 data 資料夾裡面存放 train.txt 與 val.txt 這兩個 txt 檔寫入了 face 資料夾裡影像的絕對路徑

我們來看看第 100 張的資訊,有三個人臉所以有三行值,每個人臉記錄了五個值分別是:類別 (只有一類所以是 0)、x, y, w, h (歸一化後的)

創建一個 weights 資料夾用來存放訓練時的權重

設定 cfg 檔,在 data 資料夾裡新增 face.data, face.names,詳細內容如下

複製一個 yolov4-tiny-custom.cfg 到 data 資料夾中,並重新命名為 yolov4-tiny-obj.cfg,並依照自己喜好修改 subdivisions, width, height, max_batches, steps, filters, classes

我做了以下設定

  • subdivisions=16 (若記憶體不夠用可以增加這個數字)
  • width, height=288 (input_size)
  • max_batches=4000 (classes*2000,不得低於4000)
  • steps=3200, 3600 (max_batches*0.8, max_batches*0.9)
  • filters=18 ((classes+Bbox)*anchors=(1+5)*3=18)
  • classes=1

使用 k-means 來計算資料集中出適合的 anchors,結果會輸出成 anchors.txt

到 yolo-v4-tiny-obj.cfg 的第 219, 268 行修改 anchors 成 21, 34, 29, 62, 56, 46, 45, 89, 68,124, 100,191

3. 開始訓練

在 data 資料夾中下載預訓練模型的權重,並開始訓練

訓練完的結果如下,他會將最好的權重 (yolov4-tiny-obj_best.weights) 記錄到 weights 資料夾中

來測試看看訓練好的權重預測效果如何,先複製一個測試用的 cfg,並將 Training 注釋掉,Testing 打開

預測完後會輸出一個 predictions.jpg,將她打開來看一下預測效果,效果還不錯

下篇將會介紹如何把訓練好的 yolov4-tiny 模型放在 Jetson Nano 上並使用 TensorRT 最佳化,以及展示推論效果。

--

--

Responses (1)