YOLOv4是目前非常受到歡迎的物件偵測工具,他本身後端使用的類神經框架是Darknet(https://github.com/pjreddie/darknet),而今天則是要把他轉換成Tensorflow框架,這樣做有什麼好處呢?
<<教學影片更新中>>
1. 一般我們在學習AI演算法的過程,多數已TF框架為入門,而Darknet一般只用來實做YOLO辨識,學生在學習上很難從TF很忽然跳到Darknet上,而轉換後TF語法都可以使用,學習上沒有斷層。
2. Darknet在Windows上編譯GPU版本太過瑣碎,而直接使用OpenCV的DNN模型則無法作到GPU加速,但轉換成TF後,就可以直接使用原本TF GPU加速的設定。經過測試,在1024x768的解析度下,OpenCV(非Cuda加速版)FPS=0.2X,而TF版的FPS可達到2-5,差異大概十倍。
我們使用的轉換工具是tf-yolov4(https://github.com/sicara/tf2-yolov4),根據官方說明,目前沒有Train功能,只能做Inference,所以訓練還是得到Colab(誤)。
以下將過程簡要的說明
1. 使用Anaconda建立Python3.9的虛擬環境:由於轉換過程提示建議使用TF2.6以上,因此以Python3.9 版本來建議虛擬環境,因為依據經驗TF-GPU 2.6 搭配的是Py39,所以才需要建立Python3.9的虛擬環境。若您不使用GPU加速,則不限制Python3.9。
2. 開啟命令視窗
2.1 安裝Tensorflow-gpu:conda install tensorflow-gpu==2.6
2.2 安裝轉換工具:pip install tf2-yolov4
3. 下載YOLOv4權重檔:https://github.com/AlexeyAB/darknet/releases/download/darknet_yolo_v3_optimal/yolov4.weights,並放置到資料夾內。
4. 執行轉換命令,請注意yolov4.weights的路徑是否正確:convert-darknet-weights yolov4.weights -o yolov4.h5
若要轉換成其他種類格式,例如tflite請參閱作者的github說明
5. 完成後就可以得到yolov4的TF的H5權重檔:yolov4.h5
接下來就可以直接使用我寫好的程式來執行
import tensorflow as tf
from tf2_yolov4.anchors import YOLOV4_ANCHORS #pip install tf2-yolov4
from tf2_yolov4.model import YOLOv4
import time