如何在 Colab 安裝 Darknet 框架訓練 YOLO v3 物件辨識並且最佳化 Colab 的訓練流程

Up Chen
Up Chen
Nov 1 · 6 min read

本篇文章假設你已經有 Colab、YOLO3 的基礎知識。如果你還不是很瞭解,可以參考:


這篇文章會教你:

  • 利用 Colab 128G RAM GPU 來訓練你的 Yolo3 模型
  • 將 Colab 設定成可以運用在實際專案的訓練環境
  • 快速掛載本機電腦上的檔案到 Colab 環境中
  • 事先編譯所有需要的檔案,每次開啟 Colab 後即可立刻進行訓練
  • 將訓練好的 weight 檔案自動同步回本機電腦,避免檔案遺失

步驟 1:設定使用 Colab 12G-RAM GPU 環境

Colab 預設環境是使用 CPU 訓練,我們想要使用快速的 GPU!

打開 Runtime > Change runtime type
然後在 Hardware accelerator 欄位中選擇 GPU。

步驟 2:連接你的 Google Drive

我們使用 Google Drive 來同步 Colab 雲端和本機的檔案。

  1. 安裝 Google Drive https://www.google.com/intl/zh-TW_ALL/drive/
  2. 在 Google Drive底層目錄中,建立 darknet 資料夾

步驟 3:將 Google Drive 掛載到 Colab 環境中

開啟步驟 1 建立的 Colab 專案,輸入

from google.colab import drive
drive.mount('/content/gdrive')

這一行會將整個 Google Drive 掛載到 content/gdrive 下。我們另外建立一個捷徑,這樣每次取用檔案的時候就不用打一場串的路徑。

!ln -fs /content/gdrive/My\ Drive /app

步驟 4:下載並編譯 Darknet(只需要執行一次)

首先需要先安裝 Darknet 需要的 cuDNN

  1. 下載 cuDNN v7.5.0.56 for CUDA v10.0 並放到 Google Drive darknet/cuDNN/ 目錄下
!tar -xzvf /app/cuDNN/cudnn-10.0-linux-x64-v7.5.0.56.tgz -C /usr/local/
!chmod a+r /usr/local/cuda/include/cudnn.h
# 檢查是否安裝成功
!cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2

2. 下載並編譯 darknet

%cd /content/
!git clone https://github.com/kriyeng/darknet/ darknet_source
%cd darknet_source
# 修改 Darknet 設定,符合 Colab 環境
!sed -i "s/GPU=0/GPU=1/g" Makefile
!sed -i "s/CUDNN=0/CUDNN=1/g" Makefile
!sed -i "s/OPENCV=0/OPENCV=1/g" Makefile
# 編譯
!make
# 將編譯完成的執行檔複製回 Google Drive
!cp ./darknet /app/darknet
!cp ./darknet /content/darknet
%cd /content

步驟 4.1:之後執行時只要複製編譯好的檔案就能馬上開始訓練

上個步驟會將 darknet 編譯成可以執行的檔案,只有第一次需要做。第二次以後,只要從 Google Drive 將編譯好的檔案複製回 Colab 就可以馬上開始進行訓練了。

%cd /content
!cp /app/darknet ./
!chmod +x ./darknet

步驟 5:設定完成!

到這邊,你已經設定好 Darknet 的環境並可以開始執行了。設定好一次之後,第二次重新啟動 Colab 的時候,就不用重新上傳檔案和編譯,只要掛載 Google Drive 並把 darknet 檔案複製到 Colab 就可以開始訓練了。


如何測試 Darknet 是否正常安裝

我們利用 yolo 事先訓練好的模型來偵測圖片, data/person.jpg是要被偵測的圖片位置,你可以用自己的照片試試看。

%cd /content/darknet_source
!wget https://pjreddie.com/media/files/yolov3.weights
!/content/darknet detect cfg/yolov3.cfg yolov3.weights data/person.jpg -dont-show

預測的結果會存在 predictions.jpg 檔案中,我們利用下面的程式碼顯示出這張圖片

import cv2
from google.colab.patches import cv2_imshow
img = cv2.imread(‘predictions.jpg’, cv2.IMREAD_UNCHANGED)
cv2_imshow(img)

如果你能看到類似下圖的圖片,恭喜你,你的 Darknet Yolo3 已經正確安裝並且正確運作了。

Yolo3 辨識結果

你可以試試看把 data/person.jpg替換成 data/eagle.jpg 、data/horses.jpg 來試試看不同圖片的辨識結果。


完整範例程式碼請見 http://bit.ly/2C4QNQx

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade