2020 年在 AI 領域中有不少令人振奮的技術創新,像是在電腦視覺領域的 YOLO v4 以及自然語言領域的 GPT-3,而 YOLO (You Only Look Once) 為物件偵測 (Object Detection) 的重要技術。
YOLO 首次於 2015 年 6 月由 Joseph Redmon 提出,隨著時間推進又推出了 YOLOv2 (2016.12)和 YOLOv3 (2018.04),而在 2020.02.21 時 YOLO 之父 Joseph Redmon 宣布退出電腦視覺領域,但是這並不影響 YOLO 的進化,在 2020 年 4 月時就推出了 YOLOv4,總共有三位作者,第一個是來自俄羅斯的 Alexey Bochkovskiy,他曾經參與 YOLO github 的項目維護,而另外兩位則來自台灣,分別是中央研究院資訊所的廖弘源所長與王建堯博士,YOLOv4 在 AI Rewind 2020: A Year of Amazing Papers 榮獲 2020 年度最驚艷的論文之一,簡直是 AI 界的台灣之光。
那麼紅的 YOLOv4 想必大家都在使用,在我們台灣人工智慧學校技術領袖班的結業專題中,使用的組別也是大有人在。在本篇文章中,將整理一些使用 YOLOv4 的心得 : (關於技術細節方面並不會深入探討)
物件偵測在現實生活中可以解決許多問題,例如
YOLOv4 展示影片如 影片一 所示:
影片一,YOLOv4 展示影片
YOLOv3 發表於 2018 年 4 月,讓我們來看看經過兩年後 YOLO 進化成怎樣吧!
在 圖一 和 圖二 中,分別畫出了 YOLOv3 和 YOLOv4 的網路架構圖,方便比較兩者的不同
我們可以從圖中清楚的看到兩者的區別,另外我將它們的差異整理在 表格一 中
表格一,YOLOv3 和 YOLOv4 差異
YOLOv3 | YOLOv4 | 為什麼要這樣改進 | |
---|---|---|---|
Backbone | Darknet53 | CSPDarknet53 | 參數量減少,進而減少運算量,甚至能提高準確率 |
Neck | FPN | PANet + SPP | 提升局部特徵和全局特徵的融合,進而豐富最終特徵圖的表達能力 |
Head | YOLO | YOLO | None |
Activations | leaky-ReLU | leaky-ReLU + Mish | Mish 的梯度更平滑,可以穩定網路梯度流,具有更好的泛化能力 |
Bounding box regression loss | MSE loss | CIoU-loss | 使得訓練和推論時用的驗證標準一致,並且能更好的學習 Bounding box |
Data Augmentation | Pixel-wise adjustments | Mosaic | 由 4 張影像拼成 1 張影像,增加了許多小目標,且 Mini-batch 減少 4 倍,進而減少 GPU 的計算 |
Regularization | Dropout | DropBlock | 由於圖片是連續的,所以選擇隨機 dropout 掉一整個區域 |
Normalization | Batch Normalization (BN) | Cross mini-Batch Normalization (CmBN) | 可以更好的適用於小的 batch size 上 |
Attention Module | None | Spatial Attention Module (SAM) | 增加注意力機制,使得不會因為網路的加深而忘記前面的訊息 |
Loss function trick | None | Class label smoothing, Grid Sensitivity | 解決在 Grid 邊緣時較難偵測到的問題 |
假如讀者想要了解細節,可以參考以下的文章連結,這邊就不多加撰述了:
常見的深度學習框架是 TensorFlow 和 PyTorch,而 YOLO 作者基於 C 和 CUDA 寫了一個相對小眾的深度學習框架 — Darknet,優點是易於安裝,以下提供了一些 source code 可以訓練 YOLO 模型,詳細訓練說明可以查看 github。
在使用 darknet 訓練時可以根據更改 CFG,來調整自己的需求,有關 CFG 的說明可以參考下列說明
在這邊我會列幾個比較重要的超參數,並解說一下它的重要性
在這邊我使用了官方提供的 darknet 來訓練一個人臉偵測模型,人臉資料集選用 WIDER FACE Dataset 共有 32203 張圖像其中包含 393703 個人臉目標,分別在尺度、姿勢、標準、表情、裝扮和光照有不同的表現,如 圖三 所示,其中 40% 為訓練集、10% 為驗證集、50% 為測試集。
而我分別使用 YOLOv3 和 YOLOv4 去訓練,各用兩顆 GPU 的訓練時間分別是 14.5 小時和 17 小時, YOLOv4 的訓練時間雖然比較長,但是比起 YOLOv3 偵測人臉的效果好很多 (在 圖四 中可以看到在 mAP 這個評估指標下 YOLOv3 最高的 mAP 是 61%,而 YOLOv4 比 YOLOv3 高了 7.5% 來到了68%),這個關鍵在於說 YOLOv4 在訓練時增加了很多 YOLOv3 沒有使用到的技巧。
mAP介紹:深度學習系列: 什麼是AP/mAP?另外我實際推論了一個在菜市場邊走邊錄影的影片,如 影片二 所示。可以觀察到他們兩個模型的效果其實都很好,但如果仔細觀看的話可以發現 YOLOv4 連特別小的人臉都可以偵測出來,很仔細的話...
影片二,YOLOv3 和 YOLOv4 在影片的推論比較
在 圖五 這張照片的比較中,乍看之下好像沒什麼區別,但是如果認真看的話在小目標上 YOLOv4 會把臉框的更精準,看不清楚沒關係,我們放大左上方的位置來比較看看,結果如 圖六 中所示,可以看到 YOLOv4 會把人臉包覆的更好
近幾年來的 AI 落地最火紅的應該就是 Edge AI,在 圖七 中我們可以看到 Edge AI 在最頂端的地方
我們在訓練模型通常是在 Cloud 端上訓練,人們想著模型架構越大準確率越高越好,而想在 Edge 端上運行 AI 模型並實現 real time 就會受運算資源影響,因此需要模型架構小且推論速度快的模型,因此在 2020 年 11 月又推出了 Scaled-YOLOv4,他能讓你選擇要準確率還是要推論速度。
若要求準確率可以選擇在 Cloud 端上運行 YOLOv4-large 模型: YOLOv4-P5, YOLOv4-P6, YOLOv4-P7,在 圖八 中可以觀察到 YOLOv4-large 的 AP (綠色的線) 都比 YOLOv4 (灰色的線) 要好
若要求速度可以選擇在 Edge 端上運行 YOLOv4-tiny 模型,作者在不同 Nvidia GPU 設備中測試 YOLOv4-tiny 的速度,包括 Xavier AGX, Xavier NX, Jetson TX2, Jetson NANO,在 表格二 中比較了 FP32 的精度和 FP16 的精度的推論速度,在 NANO 中 FP32 的 FPS 為 16,而 FP16 的 FPS 可以達到 39,可以看到速度大概差了兩倍多
影片三 是我實際使用 Jetson Nano 並用 FP16 的精度經由 TensorRT 加速後的結果,可以看到在預測單個人時可以高達 39 FPS,並且 YOLOv3-tiny 和 YOLOv4-tiny 的推論速度沒有太大的差異
影片三,YOLOv4-tiny on Jetson nano除了官方提供的 tiny 系列,有些非官方的甚至提出了可以在 CPU 上達到 Real time 速度的 YOLO 模型,在這邊列給各位參考,當然在準度方面就不能太要求,在準度和速度方面需要自己取捨:
$ darknet detector train data/coco.data data/yolov4-coco.cfg data/yolov4-csp.conv.142 -dont_show
import cv2 CONFIDENCE_THRESHOLD=0.2 NMS_THRESHOLD=0.4 net = cv2.dnn.readNet("yolov4.weights", "yolov4.cfg") model = cv2.dnn_DetectionModel(net) model.setInputParams(size=(416, 416), scale=1/255, swapRB=True) classes, scores, boxes = model.detect(img, CONFIDENCE_THRESHOLD, NMS_THRESHOLD)YOLOv4 inference using OpenCV DNN
YOLOv4 是個簡易上手又效果很好的工具,在很多產業應用上都可以使用它來解決問題,例如在製造業上可以偵測出有異常的產品、在農業上可以偵測出水稻的位置,進而估算出收穫量、在當今疫情下可以偵測出人臉,並搭配熱影像溫度偵測來判斷進出人員有無發燒、在智慧交通上可以偵測出車輛或行人的流量,進而控制紅綠燈的秒數,讓交通更有效率!看了那麼多案例,心動不如馬上行動,還沒用過的快來試試看吧!
而近年來不同於 anchor-based 的物件偵測方法也開始雨後春筍般地冒出,例如 anchor-free 的方法、基於 Transformer 的方法,若對其他實現物件偵測的方法有興趣的話也可以去查看看哦
Copyright© 台灣人工智慧學校 | Taiwan AI Academy 版權所有