YOLOv4 創生故事

「只要讓我看一眼,我就知道這是什麼!(You Only Look Once, YOLO)」YOLO,是目前當紅的 AI 物件偵測演算法。中研院資訊科學研究所所長廖弘源及博士後研究員王建堯,與俄羅斯學者博科夫斯基(Alexey Bochkovskiy)共同研發最新的 YOLO 第四版(簡稱為 YOLO v4),一舉成為當前全世界最快、最高精準度的物件偵測系統,引爆全球 AI 技術社群,已然改寫物件偵測演算法的發展。究竟,他們在演算法裡動了哪些手腳?又是什麼樣的契機,開啟了這項研究?

產業出難題,學界來解題

故事,是從一項產學合作開始。前幾年,科技部提出了「產學共創」機制:產業出題、學界解題,中研院合作對象義隆電子,出了一個考題給資訊所:如何增進十字路口的交通分析?也就是即時偵測車流量、車速等等。當時義隆電子已經在十字路口架設了監視器,包括全景攝影機及單一方向的槍型攝影機,接下來最需要的,就是辨識車輛的物件偵測技術。

「但我們需要的不只是辨識車輛而已。」王建堯說。在馬路上運行中的車速度很快,物件辨識必須非常即時,在短時間內就能辨識出車輛,並能持續追蹤,計算車速。換句話說,這個技術對物件的偵測必須「快、狠、準」。此外,因為影像資料不斷產生,如果把資料都上傳雲端運算,不但比較耗時,也會給雲端電腦帶來太大的負擔,因此這個偵測技術還得做到一件事──計算量必須夠小,小到可裝在十字路口監視器上的小型計算器, 即可完成物件偵測的任務。

要做到交通路況的即時分析,必須有一種速度快、仍能精準辨識,但又可應用在生活中小型計算器的物件偵測技術。

YOLOv4 演算法達到這個不可能的任務!它是目前世界最快、最精準的物件偵測演算法,卻又能小到放在十字路口的監視器內,已實際應用於如「智慧城市交通車流解決方案計畫」,即時偵測車輛、停等車列、車速等等。

物件辨識的阿基里斯腱:梯度消失問題

怎麼辦到的?首先,王建堯著手研究著名物件偵測系統 YOLOv3 ,「我們想找出在建立一個物件偵測系統時,哪一個步驟是最關鍵的?如果改善了,效率和精確度會提升最多?」廖弘源強調:「雖然是工程問題,但我們要把科學思考帶進來。」

先來認識物件偵測技術!它是個卷積神經網路(Convolutional Neural Network, 簡稱CNN),具有許多網路層,每一層負責抽取某些圖像特徵。一個輸入的影像通過層層層層層層……分析,最後找出最可能的答案。理論上,層數越多、判斷結果應該越精確。

先教電腦定義每個影像的值,再透過神經網路的層層非線性函數運算,判斷這個影像最可能為哪個數字,信心水準比值最高者為答案。
圖│研之有物 (資料來源│李宏毅)

訓練這個卷積神經網路的方法是:先倒入大量已標記正確答案的學習材料 (如標記好各種車輛的圖片),讓機器學習如何判斷。每次機器判斷結果與正確答案不符,就將這個資訊反饋到前面的網路層,調整每一層的參數,以期下次達到更準確的判斷。

那麼,哪一步改善後可以大幅提升表現呢?王建堯找到的關鍵是:學習的反饋過程。當卷積神經網路的網路層數愈多,在訓練階段,因為反饋計算方式,每回傳一層就會損失一些資訊,越前面的網路層學習到的東西越少,稱為「梯度消失問題」(vanishing gradient problem)。

為了解決梯度消失問題,前人曾經提出 ResNet、DenseNet 等等卷積神經網路,簡單來說,即是將後面資料備份後往前「跳級」傳遞!以 ResNet 為例,我們可以想像成「含水傳話」,從最後一個人往前傳,愈前面的人資訊愈缺失。但如果最後一層開始,每一層都備份錄音,再把錄音跳過一層直接往前傳,那麼前面的所有層都可接收到資訊,前面網路層就不會學不到東西。

上圖為原始的卷積神經網路 (CNN) ,假設只有三層,在資料回傳的過程中會逐層遞減,稱為梯度消失問題。下圖為改良版 ResNet ,從最後一層開始,每一層都備份,再把備份越過一層「跳級」傳遞,前面網路層就能接收到後面的資訊。
圖│研之有物 (資料來源│王建堯)

然而,ResNet 具有太多重複的拷貝,不但浪費計算量,而且不同層的參數用來學習重複、但多餘的資訊,換句話說,每一層能學到的東西都差不多。「是否有一種更好的方式,在不改參數量,讓機器運算變快,省下來的資源 (參數) 還能讓機器多學一點,提高精確度?」廖弘源說。

 

欲瀏覽完整精采文章,請至研之有物官網:

https://research.sinica.edu.tw/yolov4-hong-yuan-mark-liao/

(趕快點進來喔!還有更多精采圖文!)