iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 4
0
AI & Data

漫談 YOLO 30天系列 第 4

Day-04:從YOLO v4 到 YOLO v3

楔子

寫會程式最重要的環節
就是是從亂改參數開始...
--- 筆者幹話集

昨天我們成功讓YOLO v4 在WSL上執行。或許很多讀者也是第一次接觸WSL...
其實,會有這個想法是WSL2 發布的時候,讀者跟同事曾經想在讓WSL直接使用GPU,但是經過多次測試都未果。後來筆者發現,沒有GPU的加持之下,其實YOLO v4也會工作!!!
所以才開始了這一波... 叛逆的操作~

前言

大家都在ubuntu下使用yolo。筆者偏偏要在Windows下執行。而且嘗試用一個比較快的方法實現XD
(謎之音...你明明是借用WSL的能力...)

相信隨著驅動程式的更新,WSL 早晚也會開始支援CUDA的~
如果有讀者測出來還請指導筆者...

今天的內容,我們將嘗試交叉比對一下 YOLO v3, v4 , v3-tiny, v4-tiny。並簡單介紹yolo的重要組成。
簡單的說,今天想討論的是如何"用"

改用YOLO v3

首先,我們先討論一個觀念:YOLOv4真的比YOLOv3好嗎?
筆者的結論是:不見得,必須綜合運用場合來討論。例如YOLOv2所需要的資源就低於YOLOv3。
所以我的建議是:
在Target Device上測試一下數據
綜合各項資源再來討論之~

下載權重檔

從YOLOv4的Repo上,幾乎無法找到v3的權重檔下載位置,所以筆者從原始作者的網站中找到下列語法:

wget https://pjreddie.com/media/files/yolov3.weights

使用V3權重進行辨識

同樣從上述網站中也可以找到下列語法:

./darknet detect cfg/yolov3.cfg yolov3.weights data/dog.jpg


請注意執行的結果。相較於v4而言,YOLOv3對於dog的偵測信心居然是1.0(即100%)!!!
當相較之下少了pottedplant(盆栽)的辨識。而執行時間就CPU來說,好像快了不少。
這就是筆者說的,具體要看您的運用場合以及硬體資源。
開啟所辨識的圖檔如下:

小結

就目前而言,筆者整理了一個簡單的概念如下:

如上圖所示,YOLOv3 YOLOv4都是架構在Darknet之上,所以抽換不同的設定檔(cfg)以及權重檔(weights)理論上可以達成各種版本的抽換。這就是在鬼故事那篇提及的v5為何可以快速發表出來的原因,因為只要製作出對應的cfg/weights就可以宣稱有v5 v6 v7 的版本了...
(謎之音:只是做了一個大家都不承認的版本...自己爽而已...)

發現新天地

藉由上面的測試,我們知道修改不同的cfg跟weights可以得到不同的結果。於是筆者就好奇是否還有其他設定檔:

cd cfg
ls


看來有很多的cfg檔在召喚我們... (眼睛發亮模式)
其中,如果您有關注YOLO原作者的網站,不難發現,其實還有一個輕量版本稱為tiny,又稱Lite版。也就是上圖框選出來的檔案。

總是愛惡搞... :P

如同筆者在楔子所提及,身為一名軟體工程師,亂改參數進行測試是最基本的... (壞)習慣 XD
所以難免會開始進行下列的測試:

./darknet detect cfg/yolov3-tiny.cfg yolov3.weights data/dog.jpg


居然!甚麼都沒有!!可見不可以亂配...

圖片來源 「反正我很閒」

筆者覺得自己就像上圖一樣,不測試各種惡搞的組合,誓不罷休... (壞習慣又來了...)
於是有了下面的測試集合:

./darknet detect cfg/yolov4-tiny.cfg yolov3.weights data/dog.jpg
./darknet detect cfg/yolov3-tiny.cfg yolov4.weights data/dog.jpg
./darknet detect cfg/yolov4-tiny.cfg yolov4.weights data/dog.jpg

恭喜我! 得到全部都失敗的結果!!!!

回歸正常用法

是否有很多次... 你都跟筆者一樣....
不愛看說明書...

根據上面的錯誤實驗,筆者還是去原作者官方網站找到下列命令

wget https://pjreddie.com/media/files/yolov3-tiny.weights


嘗試執行

./darknet detect cfg/yolov3-tiny.cfg yolov3-tiny.weights data/dog.jpg

圖片結果:

可以看到執行速度非常快!而辨識結果的信心值卻掉下來了。

YOLO v4 tiny 呢?

GitHub中可以找到yolov4-tiny的權重檔案。下載如下:

 wget https://github.com/AlexeyAB/darknet/releases/download/darknet_yolo_v4_pre/yolov4-tiny.weights


執行結果測試看看吧~

./darknet detect cfg/yolov4-tiny.cfg yolov4-tiny.weights data/dog.jpg


相對應的圖檔如下:

注意上圖中的辨識速度,注意,這是CPU模式!!

結論

至今為止,我們嘗試了v3 v4 v3-tiny v4-tiny的辨識方式。
通過實驗,我們再次證明了,只有最適用的AI模型,沒有最好的AI模型。
雖然YOLOv4有較準確的結果,但YOLOv4-tiny辨識速度非常快速。
至於要準度,還是速度,就是實際運用場域的問題了。
另外,我們通過多次的測試(含失敗)可以得到一個結論cfg跟weight是配套的。不可以亂設定.
未來的日子裡,我們將慢慢對cfg 跟weight 抽絲剝繭 來進行討論。

後記

早知道不要寫甚麼鬼故事...結果自己就遇到鬼故事...

  1. 寫到一半 跳電沒有存好 悲劇= =
  2. 第一次執行 v3-tiny的時候檔案居然壞掉= =
  3. 我自己的Blog直接掛掉...= =

所以筆者學乖一點還是使用HackMD來編輯好了,日後的文章就同步發表到HackMD了

本文同步發布於 HackMD


上一篇
Day-03: YOLO v4 起手式
系列文
漫談 YOLO 30天4
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言