You Only Look Once
YOLO
1. Instrucion
"You only look once (YOLO) is a state-of-the-art, real-time object detection system. On a Titan X it processes images at 40-90 FPS and has a mAP on VOC 2007 of 78.6% and a mAP of 48.1% on COCO test-dev." - YOLO website
2. How It Works
a. Neural Network
YOLO主要由CNN、DNN、和Maxpooling等類神經網路所組成。如下圖所示。
![](images/network.png)
b. Recognition
一張圖片讀入後,會被劃分成7個區塊。接著會做bouding boxes、confidence的偵測以及每一個區域代表的物體的分類。Bouding boxes代表偵測到物體的位置,一個黑框代表一個物體被偵測到,而confidence代表黑框真的包含一個物體的可能性。透過Bouding boxes搭配各個區域的物體分類,便可成功辨識出圖片中所含的物體及其位置。
![](images/recognition.png)
(Picture from YOLO website. )
c. Darknet
YOLO的作者還開發了Darknet,一套機器學習框架,可在其中找到已經建構好的YOLO網路,並可於YOLO官網下載訓練好的模型。詳細可參考Darknet。
![](images/darknet.png)
(Picture from Darknet website. )
3. Speed Up
NNPACK
YOLO的設計在擁有GPU的運算平台上有快速且優異的表現,然而在Rpi3上,受限於硬體限制,正常辨識一張圖片花費時間長達38秒。因此在這裡使用了NNPACK做搭配。NNPACK是由Facebook開發,專門用來加速神經網路運算的專案,能夠在多核CPU上提高計算效率。詳細可參考NNPACK。為了在原本的Darkne中加入NNPACK,參考並使用了shizukachan的專案,並且針對Rpi的硬體架構做了一些優化,詳細建構方式可參考Readme。
![](images/nnpack.png)
(Picture from NNPACK. )
4. Recognition Time
比較建構時,Makefile中的各種不同選項對效能影響,辨識時間如下。
Build Options | Recognition time |
NNPACK=0, ARM_NEON=0, NNPACK_FAST=0, -mcpu=native | 38s |
NNPACK=1, ARM_NEON=0, NNPACK_FAST=0, -mcpu=native | 3.1s |
NNPACK=1, ARM_NEON=1, NNPACK_FAST=1, -mcpu=native | 2.3s |
NNPACK=1, ARM_NEON=1, NNPACK_FAST=1, -mcpu=cortex-a53 | 1.6s |