1. 介紹
人類可以在幾毫秒內在我們的視線中挑選出物體。事實上,你現在就環顧四周,你將觀察到周圍環境并快速檢測到存在的物體,并且把目光回到我們這篇文章來。大概需要多長時間?
這就是實時目標檢測。如果我們能讓機器做到這一點有多酷?開心的是現在我們就可以做到!主要由于最近在深度學習和計算機視覺方面的突破,我們不僅可以依靠目標檢測算法來檢測圖像中的物體,而且還可以以人類的速度和準確度來實現。
我們將首先看看目標檢測的各種細微差別(包括你可能面臨的潛在挑戰)。然后,我將介紹SlimYOLOv3框架并深入探討它如何工作以實時檢測目標。
2. 什么是目標檢測?
在我們深入研究如何實時檢測目標之前,讓我們首先介紹一下基礎知識。如果你是計算機視覺領域初學者,這一點尤為重要。
目標檢測是我們用于識別圖像中目標位置的技術。如果圖像中有單個目標,并且我們想要檢測該目標,則稱為圖像定位。如果圖像中有多個目標怎么辦?嗯,這就是目標檢測!讓我用一個例子解釋一下:
左側的圖像具有單個目標(狗),因此檢測該目標將是圖像定位問題。右邊的圖像有兩個目標(一只貓和一只狗)。檢測這兩個目標則是目標檢測問題。
現在,你可能想知道為什么需要目標檢測?更重要的是,為什么我們需要執行實時目標檢測?我們將在下一節回答這些問題。
3. 目標檢測的應用
目標檢測現在正在業界廣泛使用。任何從事計算機視覺工作的人都應該清楚地了解這些應用。
目標檢測的使用范圍從個人安全到自動車輛系統。讓我們討論一些當前和無處不在的應用。
3.1. 自動駕駛
這是目標檢測最有趣和最新的應用之一。
自動駕駛汽車是能夠在很少或沒有人為引導的情況下自行移動的車輛。現在,為了讓汽車決定它的行動,即要么向前移動,要么停車,要么轉彎,它必須知道它周圍所有物體的位置。使用目標檢測技術,汽車可以檢測其他汽車,行人,交通信號等物體。
3.2. 人臉檢測與人臉識別
人臉檢測和識別可能是計算機視覺中應用最廣泛的應用。每次在Facebook,Instagram或Google相冊上傳圖片時,它都會自動檢測圖像中的人物。
3.3. 行為識別
你會喜歡這個,目的是識別一個或多個圖像系列的活動或動作。目標檢測是其背后的核心概念,它檢測行為然后識別操作。這是一個很酷的例子:
3.4. 目標計數
我們可以使用目標檢測算法來計算圖像中的目標數量,甚至是實時視頻中的目標數量。計算目標的數量有很多方面,包括分析存儲表現或估計人群中的人數。
而大多數應用程序需要實時分析。我們行業的動態性質傾向于即時結果,而這正是實時目標檢測的結果。
4. 為什么要進行實時目標檢測?
我們以自動駕駛汽車為例。考慮到我們已經訓練了一個目標檢測模型,它需要幾秒鐘(比如每個圖像2秒)來檢測圖像中的物體,我們最終將這個模型部署在自動駕駛汽車中。
你覺得這個模型會好嗎?汽車能夠檢測到它前面的物體并采取相應的措施嗎?
當然不是!這里的推理時間太多了。汽車將花費大量時間做出可能導致事故等嚴重情況的決策。因此,在這種情況下,我們需要一個能夠為我們提供實時結果的模型。該模型應該能夠檢測目標并在幾微秒內進行推斷。
用于目標檢測的一些常用算法包括RCNN,Fast RCNN,Faster RCNN和YOLO。
本文的目的不是深入研究這些技術,而是了解用于實時目標檢測的SlimYOLOv3架構。當我們不需要實時檢測時,這些技術非常有效。不幸的是,當面對實時分析時,他們往往不是很好。讓我們來看看在嘗試構建自己的實時目標檢測模型時可能遇到的一些挑戰。
5. 實時目標檢測的挑戰
實時目標檢測模型應該能夠感知環境,解析場景并最終做出相應的反應。模型應該能夠識別場景中存在的所有類型的目標。一旦識別出目標的類型,模型應該通過在每個目標周圍定義邊界框來定位這些目標的位置。
所以,這里有兩個功能。首先,對圖像中的目標進行分類(圖像分類),然后使用邊界框(目標檢測)定位目標。
當我們處理實時問題時,我們可能面臨多重挑戰:
我們如何處理變化?變化可能與物體形狀,亮度等有所不同。
部署目標檢測模型。這通常需要大量的內存和計算能力,特別是在我們每天使用的機器上
最后,我們還必須在檢測性能和實時要求之間保持平衡。通常,如果滿足實時要求,我們會看到性能會有所下降,反之亦然。因此,平衡這兩個方面也是一個挑戰
那么我們如何克服這些挑戰呢?好吧,這是文章的關鍵所在--SlimYOLOv3框架!SlimYOLOv3旨在處理這些限制并以令人難以置信的精度執行實時目標檢測。
讓我們首先了解SlimYOLOv3是什么,然后我們將介紹架構細節以更好地理解框架。
6. SlimYOLOv3介紹
你能猜出深度學習管道是如何工作的嗎?以下是典型流程的基本摘要:
首先,我們設計模型結構
微調該模型的超參數
訓練模型
最后評估模型
模型中有多個組件或連接。經過幾次迭代后,其中一些連接變得多余,因此我們可以從模型中刪除這些連接。刪除這些連接稱為剪枝。
剪枝不會顯著影響模型的性能,并且計算要求將顯著降低。因此,在SlimYOLOv3中,在卷積層上執行剪枝。我們將在下一部分中了解有關如何完成此剪枝的更多信息。
剪枝后,我們對模型進行微調以補償模型性能的下降。
與原始YOLOv3相比,剪枝后的模型導致較少的訓練參數和較低的計算要求,因此對于實時目標檢測更方便。
現在讓我們討論一下SlimYOLOv3的結構,以便更好,更清楚地理解這個框架底層的工作原理。
7. 了解SlimYOLOv3的結構
下圖說明了SlimYOLOv3的工作原理:
SlimYOLOv3是YOLOv3的修改版本。YOLOv3的卷積層被剪枝以實現小和更快的版本。但是等等, 為什么我們首先使用YOLOv3?為什么不用RCNN,Faster RCNN等其他目標檢測算法呢?
7.1. 為什么是YOLOv3?
基本上有兩種類型深度目標檢測模型:
Two-stage detectors
屬于RCNN系列的探測器屬于Two-stage detectors。該過程包含兩個階段。首先,我們提取候選區域,然后對每個候選區域進行分類并預測邊界框。這些探測器通常可以提供良好的探測精度,但這些探測器對于候選區域的推斷時間需要大量的計算和實時存儲
Single-stage detectors
屬于YOLO系列的探測器屬于Single-stage detectors。這是一個單階段的過程。這些模型利用預定義的錨點來覆蓋圖像中的空間位置,比例和縱橫比。因此,我們不需要額外的分支來提取候選區域。由于所有計算都在單個網絡中,因此它們比Single-stage detectors更可能運行得更快。YOLOv3也是Single-stage detectors,目前是目標檢測的最先進技術
7.2. 稀疏訓練(Sparsity training)
下一步是YOLOv3模型的稀疏訓練:
在這里,我們使用以下步驟剪枝YOLOv3模型:
首先,我們評估YOLOv3模型的每個組件的重要性。我將簡要討論如何確定這些組件的重要性的細節
一旦評估了重要性,我們就會刪除不太重要的組件
移除的組件可以是單獨的神經連接或網絡結構。為了定義每個組件的重要性,我們根據它們的貢獻對網絡的每個神經元進行排序。有多種方法可以做到:
我們可以采用L1 / L2正則化神經元權重的平均值
每個神經元的平均激活
神經元輸出不為零的次數
在SlimYOLOv3中,基于被認為是縮放因子的L1正則化神經元權重的平均值來計算重要性。這些縮放因子的絕對值是通道的重要性。為了加速收斂并改進YOLOv3模型的泛化,在每個卷積層之后使用批量歸一化層。
7.3. SlimYOLOv3
然后我們定義一個全局閾值,比如說?,并丟棄任何縮放因子小于此閾值的通道。通過這種方式,我們修剪了YOLOv3架構并獲得了SlimYOLOv3架構:
在評估縮放因子時,尚未考慮YOLOv3架構的最大池化層和上采樣層。
7.4. Fine-tuning
我們現在有SlimYOLOv3模型,那么下一步是什么?我們對其進行微調以補償性能下降,并最終評估微調模型以確定修剪后的模型是否適合部署。
稀疏訓練實際上在減小比例因子方面非常有效,因此使得卷積層的特征通道稀疏。以較大的懲罰因子α= 0.01訓練會導致比例因子衰減,并且模型開始過度擬合。
在SlimYOLOv3中,懲罰因子α= 0.0001用于執行通道修建。
8. 結語
我們在本文中介紹了很多內容。我們看到了不同的目標檢測算法,如RCNN,Fast RCNN,Faster RCNN,以及目前最先進的目標檢測YOLO。
然后,我們介紹了SlimYOLOv3架構,它是YOLO的修改版本,可用于實時目標檢測。
-
框架
+關注
關注
0文章
404瀏覽量
17721 -
自動駕駛
+關注
關注
788文章
14108瀏覽量
168670
發布評論請先 登錄
相關推薦
一種實時多線程VSLAM框架vS-Graphs介紹

在英特爾AIPC上利用LabVIEW與YOLOv11實現目標檢測

采用華為云 Flexus 云服務器 X 實例部署 YOLOv3 算法完成目標檢測

AI模型部署邊緣設備的奇妙之旅:目標檢測模型
案例分享 ▏基于HZ-EVM-RK3576開發板實現YOLOv5目標檢測應用

使用OpenVINO C# API部署YOLO-World實現實時開放詞匯對象檢測

評論