1
本文作者: AI研習(xí)社-譯站 | 2018-07-24 18:09 |
雷鋒網(wǎng)按:本文為雷鋒字幕組編譯的技術(shù)博客,原標(biāo)題 Object Detection with 10 lines of code ,作者為 Moses Olafenwa 。
翻譯 | 于志鵬 校對(duì) | 陳濤 整理 | MY
計(jì)算機(jī)視覺是人工智能的一個(gè)重要領(lǐng)域。計(jì)算機(jī)視覺是一門關(guān)于計(jì)算機(jī)和軟件系統(tǒng)的科學(xué),可以讓計(jì)算機(jī)對(duì)圖像及場(chǎng)景進(jìn)行識(shí)別和理解。計(jì)算機(jī)視覺還包括圖像識(shí)別、目標(biāo)檢測(cè)、圖像生成、圖像超分辨率重建等分支領(lǐng)域。因?yàn)橛斜姸嗟默F(xiàn)實(shí)需求,目標(biāo)檢測(cè)可能是計(jì)算機(jī)視覺中最有價(jià)值的的領(lǐng)域。在本教程中,我會(huì)簡(jiǎn)要介紹目標(biāo)檢測(cè)的概念、開發(fā)者面臨的挑戰(zhàn)和我們提供的解決方案包括高效率的目標(biāo)檢測(cè)代碼。
在應(yīng)用內(nèi)或者系統(tǒng)中使用最新的目標(biāo)檢測(cè)算法很困難,同樣基于這些算法構(gòu)建新的應(yīng)用也并非易事。早期的目標(biāo)檢測(cè)使用的是傳統(tǒng)算法,如 OpenCV(主流的計(jì)算機(jī)視覺庫)中提供的算法,但是這些經(jīng)典算法在不同場(chǎng)景下表現(xiàn)的不是很穩(wěn)定。
2012 年深度學(xué)習(xí)的突破和快速普及,為我們帶來了全新的高精確的目標(biāo)檢測(cè)算法和方法,如 R-CNN、Fast-RCNN、Faster-RCNN、RetinaNet 以及 SSD 和 YOLO 等快速而高度精確的目標(biāo)檢測(cè)算法。使用這些基于深度學(xué)習(xí)(同時(shí)也是基于機(jī)器學(xué)習(xí))的算法和方法,需要一定的數(shù)學(xué)及深度學(xué)習(xí)框架的基礎(chǔ)。目前有數(shù)百萬程序員和軟件開發(fā)人員致力于整合和開發(fā)使用目標(biāo)檢測(cè)技術(shù)的新產(chǎn)品。不過由于這項(xiàng)技術(shù)過于復(fù)雜和艱深,你很難將算法直接應(yīng)用到實(shí)際開發(fā)中。
我們的團(tuán)隊(duì)在幾個(gè)月前注意到了這個(gè)問題,所以我們和 John Olafenwa 共同開發(fā)了 ImageAI,這是一個(gè) python 庫,它允許程序員和軟件開發(fā)人員只用幾行代碼就能將最新的目標(biāo)檢測(cè)算法整合到自己的項(xiàng)目中。
使用 ImageAI 進(jìn)行目標(biāo)檢測(cè)時(shí),需要以下步驟:
在當(dāng)前系統(tǒng)上安裝 Python
安裝 ImageAI 和相關(guān)依賴包
下載目標(biāo)檢測(cè)模型文件
運(yùn)行樣例代碼 (只需 10 行)
讓我們開始開始吧。
在官方網(wǎng)站下載 Python3
2.用 pip 命令安裝以下依賴包:
i. Tensorflow
pip install tensorflow
ii. Numpy
pip install numpy
iii. SciPy
pip install scipy
iv. OpenCV
pip install opencv-python
v. Pillow
pip install pillow
vi. Matplotlib
pip install matplotlib
vii. H5py
pip install h5py
viii. Keras
pip install keras
ix. ImageAI
pip install
https://github.com/OlafenwaMoses/ImageAI/releases/download/2.0.1/imageai-2.0.1-py3-none-any.whl
3. 下載目標(biāo)檢測(cè)要用到的 RetinaNet 模型文件 link 。
很好!現(xiàn)在您已經(jīng)安裝了依賴包,可以開始編寫第一個(gè)目標(biāo)檢測(cè)的代碼了。創(chuàng)建一個(gè) Python 文件并命名(例如 FirstDetection.py),然后將下面的代碼寫入其中。將 RetinaNet 模型文件和要檢測(cè)的圖像復(fù)制到包含 python 文件的文件夾。
FirstDetection.py
然后運(yùn)行代碼并等待結(jié)果輸出到控制臺(tái)。在結(jié)果顯示后,轉(zhuǎn)到 FirstDetection.py 所在的文件夾,您將找到保存的新圖像。請(qǐng)看下面的 2 個(gè)圖像樣例,代碼運(yùn)行后將保存新圖像。
運(yùn)行代碼前:
圖片來源:alzheimers.co.uk
圖片來源:Wikicommons
運(yùn)行代碼后:
上圖的控制臺(tái)結(jié)果:
person : 55.8402955532074
person : 53.21805477142334
person : 69.25139427185059
person : 76.41745209693909
bicycle : 80.30363917350769
person : 83.58567953109741
person : 89.06581997871399
truck : 63.10953497886658
person : 69.82483863830566
person : 77.11606621742249
bus : 98.00949096679688
truck : 84.02870297431946
car : 71.98476791381836
上圖的控制臺(tái)結(jié)果:
person : 71.10445499420166
person : 59.28672552108765
person : 59.61582064628601
person : 75.86382627487183
motorcycle : 60.1050078868866
bus : 99.39600229263306
car : 74.05484318733215
person : 67.31776595115662
person : 63.53200078010559
person : 78.2265305519104
person : 62.880998849868774
person : 72.93365597724915
person : 60.01397967338562
person : 81.05944991111755
motorcycle : 50.591760873794556
motorcycle : 58.719027042388916
person : 71.69321775436401
bicycle : 91.86570048332214
motorcycle : 85.38855314254761
現(xiàn)在我來解釋一下這 10 行代碼是如何工作的。
在上面的 3 行代碼中,我們?cè)诘谝恍袑?dǎo)入了 ImageAI 的目標(biāo)檢測(cè)類,在第二行導(dǎo)入了 python 的 os 類。然后在第三行定義了一個(gè)變量來保存文件夾的路徑地址,該文件夾是我們用來保存 python 文件、RetinaNet 模型文件和圖像的。
在上面的 5 行代碼中,我們?cè)诘谝恍卸x了一個(gè)目標(biāo)檢測(cè)類的實(shí)例,在第二行將實(shí)例的模型類型設(shè)置為 RetinaNet,在第三行將實(shí)例的模型路徑設(shè)置為我們的 RetinaNet 模型文件所在的路徑,第四行將模型加載到目標(biāo)檢測(cè)類的實(shí)例中,第五行我們調(diào)用檢測(cè)函數(shù),并將文件輸入輸出路徑作為參數(shù)傳入。
在上面兩行代碼中,第一行用來對(duì) detector.detectObjectsFromImage 函數(shù)返回的所有結(jié)果進(jìn)行迭代,第二行用來輸出圖片中檢測(cè)到的每個(gè)目標(biāo)的名字和概率。
ImageAI 還有很多強(qiáng)大的自定義功能。比如,可以將圖片中被檢測(cè)到的每個(gè)對(duì)象提取出來。只需要將參數(shù) extract_detected_objects = True 傳入到 detectObjectsFromImage 函數(shù)中就可以實(shí)現(xiàn),如下所示,目標(biāo)檢測(cè)類將為圖像對(duì)象創(chuàng)建一個(gè)文件夾,提取每個(gè)檢測(cè)到的子圖像,將每個(gè)子圖像保存到創(chuàng)建的新文件夾中,并返回包含每個(gè)圖像路徑的數(shù)組。
我們將這個(gè)方法應(yīng)用于第一張圖片,一些提取到的子圖如下:
所有行人的圖片都很好的提取了出來。為了節(jié)約空間這里只顯示了一部分。
ImageAI 提供了許多有用的功能,可用于自定義的目標(biāo)檢測(cè)任務(wù)和部署項(xiàng)目。支持的一些功能包括:
- 調(diào)整最小概率:默認(rèn)情況下,檢測(cè)到概率百分比小于 50 的對(duì)象將不會(huì)顯示。你可以在需要高精度的場(chǎng)景提高此值,或者在需要檢測(cè)所有可能目標(biāo)時(shí)減小此值。
- 自定義目標(biāo)檢測(cè):使用 CustomObject 類,您可以告訴檢測(cè)類檢測(cè)一個(gè)或多個(gè)獨(dú)立目標(biāo)。
- 檢測(cè)速度:可以將檢測(cè)速度設(shè)置為「fast」,「faster」和「fastest」,來縮短檢測(cè)時(shí)間。
- 輸入類型:可以將輸入?yún)?shù)指定為圖像路徑,Numpy 數(shù)組或圖像文件流的類型。
- 輸出類型:可以指定 detectObjectsFromImage 函數(shù)返回圖像的方式是文件還是 Numpy 數(shù)組。
你可以在官方 GitHub 庫中找到上述功能以及 ImageAI 中其他計(jì)算機(jī)視覺功能的詳細(xì)信息和文檔。
https://github.com/OlafenwaMoses/ImageAI
如果你覺得這篇文章對(duì)你有所幫助或者你也對(duì)它感興趣的話,請(qǐng)點(diǎn)個(gè)贊。歡迎隨時(shí)與朋友同事分享。
如果您有任何疑問、建議、或想與我聯(lián)系。請(qǐng)發(fā)送電子郵件至 guymodscientist@gmail.com。也可以通過我的 Twitter 賬號(hào) @OlafenwaMoses 和 Facebook https://www.facebook.com/moses.olafenwa 與我聯(lián)系。
原文鏈接:https://towardsdatascience.com/object-detection-with-10-lines-of-code-d6cb4d86f606
雷鋒網(wǎng)雷鋒網(wǎng)
雷峰網(wǎng)原創(chuàng)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見轉(zhuǎn)載須知。