用不到 30 行 Python 代碼實現 YOLO

本文為 AI 研習社編譯的技術博客,原標題 :

You Only Look Once(YOLO): Implementing YOLO in less than 30 lines of Python Code

作者 | Garima Nishad

翻譯 | yasi

校對 | 約翰遜·李加薪 審核 | 醬番梨 整理 | 立魚王

原文鏈接:

https://towardsdatascience.com/you-only-look-once-yolo-implementing-yolo-in-less-than-30-lines-of-python-code-97fb9835bfd2

"You Only Look Once"是一個實時對象檢測算法,它避免了在生成區域建議上花費太多的時間。它不能完美地定位物體,而是優先考慮速度和識別。

像 faster R-CNN 這樣的架構是準確的,但是模型本身相當複雜,有多個輸出,每個輸出都是潛在的錯誤來源。一旦接受訓練,他們仍然沒有足夠的速度來實時運行。

設想一輛自動駕駛汽車看到這條街道。對於一輛自動駕駛汽車來說,能夠探測到周圍物體的位置是至關重要的,比如行人、汽車和交通燈。最重要的是,這種檢測必須在接近實時的情況下進行,這樣汽車才能安全行駛在街道上。汽車並不總是需要知道所有這些物體是什麼?它只是需要需要知道,千萬不要撞到這些物體,另外,它也確實需要識別紅綠燈、自行車和行人,以便能夠正確遵守道路規則。在下面的圖中,我使用YOLO算法來定位和分類不同的對象,有一個定位每個對象的包圍框和相應的類標籤。

用不到 30 行 Python 代碼實現 YOLO

動態的YOLO

很顯然,下一個問題就是,YOLO的運行原理是什麼?

假設我們有一個CNN,它被訓練來識別幾個類,包括交通燈、汽車、人和卡車。我們給了它兩種類型的錨盒,一種高的和一種寬的,這樣它就可以處理不同形狀的重疊對象。一旦CNN經過訓練,我們現在可以通過輸入新的測試圖像來檢測圖像中的物體。

用不到 30 行 Python 代碼實現 YOLO

設定神經網絡

什麼是 anchor box ?YOLO可以很好地工作於多個對象,其中每個對象都與一個網格單元關聯。但是在重疊的情況下,一個網格單元實際上包含兩個不同對象的中心點,我們可以使用 anchor box 來允許一個網格單元檢測多個對象。

用不到 30 行 Python 代碼實現 YOLO

動態Anchor Boxes

在上圖中,我們看到我們在圖像中有一個人和一輛汽車重疊。因此,汽車的一部分被遮擋了。我們還可以看到,邊界框,汽車和行人的中心都落在同一個網格單元中。由於每個網格單元的輸出向量只能有一個類,因此它將被強制選擇汽車或人。但是通過定義 Anchor Boxes ,我們可以創建一個更長的網格單元格向量,並將多個類與每個網格單元關聯起來。Anchor Boxes 具有定義的縱橫比,並且他們試圖檢測恰好適合具有該比率的箱子的物體。例如,由於我們正在檢測寬車和站立的人,我們將定義一個大致與汽車形狀相似的 Anchor Box ,這個箱子比它高的寬。我們將定義另一個 Anchor Box ,它可以容納一個站立的人,它的高度比它寬。

首先將測試圖像分解成網格,然後網絡產生輸出向量,每個網格單元一個。這些向量告訴我們一個單元格中是否有一個對象,該對象是什麼類,以及該對象的邊界框。由於我們使用兩個 Anchor Box ,我們將為每個網格單元獲得兩個預測的錨箱。實際上,大多數預測的錨箱都具有非常低的PC(物體存在概率)值。在生成這些輸出向量之後,我們使用非最大抑制來消除不可能的邊界框。對於每個類,非最大抑制消除了PC值低於某個給定閾值的邊界框。

什麼是非極大抑制(NMS)?

YOLO使用非極大抑制(NMS) 僅保留最佳邊界框。 NMS的第一步是刪除檢測概率小於給定NMS閾值的所有預測邊界框。在下面的代碼中,我們將此NMS閾值設置為0.6。這意味著將刪除檢測概率小於0.6的所有預測邊界框。

什麼是交併比閾值(IOU)?在刪除具有低檢測概率的所有預測邊界框之後,NMS中的第二步是選擇具有最高檢測概率的邊界框,並消除其 交併比 (IOU)值高於給定的所有邊界框。 IOU門檻。在下面的代碼中,我們將此IOU閾值設置為0.4。這意味著將刪除所有相對於最佳邊界框的IOU值大於0.4的預測邊界框。

用不到 30 行 Python 代碼實現 YOLO

然後選擇PC值最高的邊界框,並刪除與此太相似的邊界框。它將重複此操作,直到每個類的所有非最大邊界框都被刪除為止。最終的結果將如下圖所示,我們可以看到黃色已經有效地檢測到了很多物體在圖像中比如這樣的一輛車和一個人。雷鋒網雷鋒網雷鋒網

用不到 30 行 Python 代碼實現 YOLO

YOLO物體檢測

現在您已經瞭解了YOLO的工作原理,您可以看到為什麼它是當今使用最廣泛的對象檢測算法之一。

查看這裡的代碼:

YOLO(https://github.com/Garima13a/YOLO-Object-Detection),以獲得YOLO算法的代碼實現,並真正瞭解它如何檢測不同場景中的對象和不同程度的置信水平。

想要繼續查看該篇文章相關鏈接和參考文獻?

點擊用不到 30 行 Python 代碼實現 YOLO】即可訪問:

https://ai.yanxishe.com/page/TextTranslation/1539

Python中文書籍大集合

100本Python中文電子書,6份源代碼,Python從入門到出家,一條龍服務。

包含Python基礎、進階、爬蟲、算法實現、深度學習、TensorFlow、NLP等等

友情提示:文件大小為2.89GB,慎用流量下載,可以先收藏喲~~!

點擊鏈接即可獲取:https://ai.yanxishe.com/page/resourceDetail/676

相關推薦

推薦中...