由淺入深:教你如何構建一個行人目標檢測模型(Python)

摘要: 零基礎也能構建一個目標檢測(對象檢測)模型?小編教你使用Image AI庫從頭開始構建一個行人檢測模型。

當咱們看到一張圖片時,咱們的大腦會當即識別圖片中所包含的物體。而對於機器來講,識別這些對象則須要耗費大量的時間和大量的訓練數據。可是,隨着深度學習和硬件技術的不斷進步,目標檢測在計算機視覺領域變得更加簡單和直觀。算法

以下圖所示,該目標檢測系統可以以使人難以置信的精確度來識別圖像中的不一樣對象。安全

clipboard.png

如今,目標檢測技術在不一樣的行業中發展迅速。它能幫助無人駕駛汽車在交通中安全行駛、在擁擠的地方發現暴力行爲、協助運動團隊分析和創建相應的報告、製造業中保證部件質量等等。以上這些只不是是目標檢測技術的冰山一角而已。網絡

本文將介紹什麼是目標檢測,以及解決這一領域問題的一些方法。而後,咱們將深刻探究如何用Python構建一個目標檢測系統。讀完這篇文章,你將有能力獨自應對不一樣對象的檢測!機器學習

讀本文以前,你須要有必定的深度學習基礎知識,而且也解決過簡單的圖像處理問題。性能

什麼是目標檢測?

在開始構建模型以前,讓咱們先試着理解什麼是目標檢測。假設咱們要爲一個無人駕駛汽車構建一個行人檢測系統,汽車已經捕獲到了以下這張圖片,請問,你會如何描述這張圖片?學習

clipboard.png

這張圖片描述了這樣一個場景:汽車在廣場附近,前面有些人正在穿過馬路,因爲馬路上的交通標誌不是很清晰,所以,這個行人檢測系統必須可以準確的識別行人在哪裏行走,這樣咱們的汽車就能夠避開這些行人了。優化

那麼,汽車的行人檢測系統須要作些什麼呢?它須要在這些行人的周圍建立一個邊界框,這樣一來,系統就可以準確的定位圖像中的行人,而後再決定走哪條路來避開行人。spa

clipboard.png

該系統進行目標檢測的目標以下:3d

1.肯定圖像中全部的對象以及其所在的位置。對象

2.過濾出目標對象。

目標檢測的方法

如今,咱們已經知道要解決什麼問題,那麼,有什麼方法能夠進行目標檢測呢?

方法一:分而治之

將圖像簡單的分爲四個部分:

(1)左上角

clipboard.png

(2)右上角

clipboard.png

(3)左下角

clipboard.png

(4)右下角

clipboard.png

這是一個很不錯的辦法,可是咱們想構建一個更爲精確的系統,它須要識別整個對象(好比這個圖中的某我的) 。

方法二:增長分割的數量

方法一的系統能夠運做的很好,那麼咱們還須要作什麼呢?增長咱們輸入到系統的塊的數量,來改進這個系統,以下圖所示:

clipboard.png

這雖然是個很好的方法,可是也帶來了沒必要要的麻煩。固然,這要比第一個方法要好一些,惟一的缺點就是有大量的邊界框。所以,咱們須要一個更爲合理的辦法來進行目標檢測。

方法三:結構化劃分

爲了更有調理的建立一個目標檢測系統,咱們的改進以下:

第一步:將圖像劃分紅10*10的網格,以下圖所示:

clipboard.png

第二步:定義每一個塊的中心

第三步:對於每一箇中心,取三種不一樣的塊的組合,即不一樣長寬比例:

clipboard.png

咱們繼續進行改進,看看還有什麼方法可以使這個目標檢測模型的性能更好。

方法四:提升效率

上述三種方法都是比較容易實現的,可是咱們但願構建一個更有效率的系統。我在方法三的基礎上進行優化,來提升模型的性能,我總共作了兩件事:

1.增長網格的數量:將原來的1010網格的數量提升到2020。

clipboard.png

2.從以前的3個快增長到更多不一樣長寬比的塊:在同一個中心上取出9個塊,即3個不一樣寬度的正方形塊和6個不一樣長寬比的矩形塊,以下圖所示:

clipboard.png

這種方法有利有弊,它可以使咱們從更細的層次來檢測對象,可是,另外一方面,咱們必須將大量的塊輸入到圖像分類模型中。

所以,咱們能夠進行有選擇性的選擇一部分塊,而不是所有做爲模型的輸入。好比,創建一箇中間分類器,來檢測圖像中是否爲背景,仍是可能包含一個圖像。這樣就能夠大大的減小了模型所須要檢測的塊。

咱們還能夠作另外一個優化:減小對「同一個對象」的預測。咱們再來看看方法三的輸出:

clipboard.png

正如上圖顯示的那樣,邊界框裏預測的是同一我的,咱們就能夠選擇其中任何一個進行預測。所以,爲了進行目標檢測,對於有「同一對象」的盒子,咱們選擇那個最容易檢測到是人的邊界框。

到目前爲止,全部這些優化系統的預測結果都很不錯。那麼,是否是還缺乏點什麼?沒錯,就是深度學習!

方法五:利用深度學習進行特徵選擇,並構建一個端到端的方法

深度學習在目標檢測領域中有着很大的應用潛力。那麼,咱們應該如何將深度學習應用到目標檢測中呢?下面,我列出了幾種方法:

1.將原始圖像輸入到神經網絡中來下降維度,而不是原始圖像的塊。

2.使用神經網絡來檢測所選擇的預測塊。

3.使用強化深度學習算法,使預測結果儘量的接近原始邊界框,這將確保算法可以提供更加精確的邊界框預測。

如今,咱們並不會訓練不一樣的神經網絡來解決目標檢測中的每個問題,而是訓練一個單一的深度神經網絡模型來解決全部的問題。這樣作的好處是,神經網絡中每個小組件有助於優化這個神經網絡的其餘組件,也有助於咱們訓練整個深度學習模型。

其輸出結果是上述全部的方法中性能最好的一個方法,結果相似於下面這個圖像,最後,咱們將會學習如何使用Python來建立該模型。

clipboard.png

教程:如何使用Image AI庫構建一個目標檢測模型

既然咱們如今已經瞭解了什麼是目標檢測和解決問題的最佳方法,那麼讓咱們來構建一個屬於本身的目標檢測系統吧!在這裏,咱們使用Image AI庫來構建目標檢測模型——支持最前沿的計算機視覺任務的機器學習Python庫。

運行一個目標檢測模型來得到預測結果,這是件至關簡單的事。咱們並不須要進行復雜的腳本安裝,更不須要一個GPU來產生預測結果。咱們將使用上述方法五和Image AI庫進行目標檢測,代碼實現以下所述。

請注意:在構建目標檢測模型以前,請確保您在本地計算機上安裝了Python的Anaconda版本!

第一步:在Python 3.6中佈置一個Anaconda環境。

clipboard.png

第二步:激活環境,並安裝必要的軟件包。

clipboard.png

第三步:安裝Image AI庫。

clipboard.png

第四步:下載預先訓練好的模型,該模型是基於目標檢測器——Retina Net,下載Retina Net預訓練模型。

第五步:將下載好的文件複製到工做文件夾中。

第六步:下載圖片,並命名爲image.png。

第七步:在 Jupyter Notebook 上運行如下代碼:

clipboard.png

這將會建立一個名爲image new.png的圖像文件,該圖像中包含了邊界框。

第八步:打印圖片,代碼及輸出圖像以下:

clipboard.png

clipboard.png

這樣,咱們就成功構建了一個行人目標檢測模型。

結語

在這篇文章中,咱們瞭解什麼是目標檢測,以及建立一個目標檢測模型的思路。最後,咱們使用Image AI庫成功構建了一個行人檢測模型。

本文做者:【方向】

閱讀原文

本文爲雲棲社區原創內容,未經容許不得轉載。

相關文章
相關標籤/搜索