
計算機視覺是人工智能領域中最重要的一個分支。
計算機視覺是一門能夠識别和了解圖像及其場景的計算機軟體系統的科學。計算機視覺包括圖像識别、對象檢測、圖像生成、圖像超分辨率等多個方面。這其中有衆多實際案例的就是對象檢測,是以,對象檢測可能是計算機視覺最有影響力的一個分支。本教程将簡要介紹現代對象檢測的概念、軟體開發人員所面臨的挑戰、我們團隊提供的解決方案以及高性能對象檢測的代碼教程。
對象檢測是指計算機和軟體系統在圖像或場景中對目标對象進行定位和識别的能力。在實際應用中,目标檢測已廣泛用于人臉識别、車輛檢測、行人計數、網絡圖像、安全系統和無人駕駛。并且,目前有很多種方法可用于對象檢測。和其他任何計算機技術一樣,對象檢測的各種創造性和驚人的用途,來自于開發人員的不懈努力。
使用現代對象檢測方法、以及基于這些方法建構新的應用程式并不是一個簡單的任務。早期的對象檢測大多使用經典算法,如計算機視覺庫OpenCV中的算法。然而,在不同的環境中,這些經典算法的性能并沒有達到我們所期望的性能。
2012年,深度學習有了新的突破,并被開發者廣泛使用,出現了R-CNN、Fast-RCNN、Faster-RCNN、RetinaNet等現代高精度對象檢測算法(方法),以及SSD和YOLO等快速高精度對象檢測算法(方法)。要想使用這些基于深度學習(同時也基于機器學習)的算法進行對象檢測,開發人員則需要掌握大量的數學和深度學習架構的相關知識。有數百萬計的開發人員想要使用對象檢測來建立新的産品。但是,由于深度學習技術了解和使用起來比較複雜,是以,這項技術很難掌握。
幾個月前,我們就意識到了這一問題,我和
John Olafenwa共同建構了
ImageAI這個Python庫,利用
,僅僅使用幾行代碼,開發人員就可以輕松地将最新的計算機視覺技術內建到現有的新應用程式中。
使用ImageAI進行對象檢測的步驟如下:
1.在系統上安裝Python。
2.安裝ImageAI及其依賴項。
3.下載下傳對象檢測模型檔案。
4.運作示例代碼(10行)。
詳細步驟如下:
1.從
Python官網下載下傳并安裝Python 3。
2.使用pip指令安裝以下依賴項:
(1)Tensorflow
指令:pip install tensorflow
(2)Numpy
指令:pip install numpy
(3)SciPy
指令:pip install scipy
(4)OpenCV
指令:pip install opencv-python
(5)Pillow
指令:pip install pillow
(6)Matplotlib
指令:pip install matplotlib
(7)H5py
指令:pip install h5py
(8)Keras
指令:pip install keras
(9)ImageAI
指令:pip installhttps://github.com/OlafenwaMoses/ImageAI/releases/download/2.0.1/imageai-2.0.1-py3-none-any.whl
3.
下載下傳用于對象檢測的RetinaNet模型檔案。
安裝好了依賴項,現在就可以編寫第一個對象檢測代碼了:建立一個Python檔案并為其命名(如:
FirstDetection.py),然後寫入代碼(如下圖所示)。并将RetinaNet模型檔案和要檢測的圖像複制到包含python檔案的檔案夾中。
運作代碼,并将結果列印到控制台,在FirstDetection.py所在的檔案夾内,你就能找到儲存的新圖像。 看看下面的2個圖像樣本和檢測後儲存的新圖像。
對象檢測前:
對象檢測後:

控制台輸出結果:
人 : 55.8402955532074
人 : 53.21805477142334
人: 69.25139427185059
人: 76.41745209693909
自行車: 80.30363917350769
人 : 83.58567953109741
人: 89.06581997871399
貨車 : 63.10953497886658
人: 69.82483863830566
人: 77.11606621742249
公共汽車: 98.00949096679688
貨車 : 84.02870297431946
小汽車: 71.98476791381836
人: 71.10445499420166
人: 59.28672552108765
人: 59.61582064628601
人: 75.86382627487183
機車: 60.1050078868866
公共汽車: 99.39600229263306
小汽車 : 74.05484318733215
人: 67.31776595115662
人 : 63.53200078010559
人: 78.2265305519104
人: 62.880998849868774
人: 72.93365597724915
人: 60.01397967338562
人: 81.05944991111755
機車: 50.591760873794556
機車: 58.719027042388916
人: 71.69321775436401
自行車: 91.86570048332214
機車: 85.38855314254761
現在,我們來看一下這10行代碼是如何運作的。
如上圖所示,第一行導入了ImageAI對象檢測類,第二行導入了python os類,第三行定義了一個變量來儲存python檔案、RetinaNet模型檔案和圖像所在的檔案夾的路徑 。
在上圖中的5行代碼中,第一行中定義了對象檢測類,第二行将模型類型設定為RetinaNet,第三行将模型路徑設定為RetinaNet模型的路徑,第四行将模型加載到對象檢測類,第五行調用檢測函數,并在輸入和輸出圖像路徑中分别進行解析。
在上面的兩行代碼中,第一行将detector.detectObjectsFromImage函數傳回的所有結果進行疊代,第二行列印出模型在每個圖像上檢測出來的對象名稱和機率。
ImageAI支援對象檢測過程的定制,其中之一就是能夠提取圖像中檢測到的每個對象。如下所示,通過簡單地将extra_detected_objects = True設定為detectObjectsFromImage函數的參數,對象檢測模型将為檢測到的對象建立建立一個檔案夾,提取每個圖像,并将每個圖像都儲存到新建立的檔案夾中,并傳回一個包含每個對象的數組。
讓我們來看第一張圖檔的輸出結果:
所有照片中的行人也被提取出來了,這裡我并沒有列出所有提取的行人。
ImageAI提供了更多有用的功能,可用于對象檢測任務的定制和生産功能部署,它所支援的功能如下:
1.調整最小機率門檻值:預設情況下,檢測的機率百分比小于50%的對象将不會顯示或輸出。ImageAI可以為高确定性案例中提高該機率門檻值;或者在需要檢測所有可能對象的情況下降低該門檻值。
2.自定義對象檢測:使用ImageAI提供的CustomObject類,你可以告訴檢測類對一個或幾個唯一對象的檢測結果進行輸出。
3.檢測速度:可以将檢測速度設定為“快速”、“更快”和“最快”,可以縮短檢測對象所需的時間。
4.輸入類型:你可以指定圖像的檔案路徑,指定圖像的Numpy數組或檔案流作為輸入圖像
5.輸出類型:你可以指定detectObjectsFromImage函數将圖像以檔案還是以Numpy數組的形式傳回。
你可以在
GitHub官方存儲庫中找到有關如何使用上述功能以及ImageAI中包含的其他計算機視覺功能的所有詳細資訊和文檔。
數十款阿裡雲産品限時折扣中,趕緊點選領劵開始雲上實踐吧!以上為譯文。
本文由北郵
@愛可可-愛生活老師推薦,
阿裡雲雲栖社群組織翻譯。
文章原标題《Object Detection with 10 lines of code
》,譯者:Mags,審校:袁虎。
文章為簡譯,更為詳細的内容,請檢視 原文 。