首頁 > 科學 > 查看文章

十行代碼搞定目標檢測

    發表時間:2019-08-26 11:51

大數據文摘出品

編譯:邢暢、寧靜

計算機視覺是人工智能的一個重要領域,是關于計算機和軟件系統的科學,可以對圖像和場景進行識別、理解。計算機視覺還包括圖像識別、目標檢測、圖像生成、圖像超分辨率重建等多個領域。由于存在大量的實際需求,目標檢測可能是計算機視覺中最有意義的領域。

目標檢測是指計算機和軟件系統對圖像或場景中的目標進行定位和識別的任務。目標檢測已廣泛應用于人臉檢測、車輛檢測、人流量統計、網絡圖像、安防系統和無人駕駛等多個領域。

在應用或系統中使用目標檢測方法,以及基于這些方法構建新的應用都不是簡單的任務。早期目標檢測的實現基于經典算法,比如流行的計算機視覺庫OpenCV中支持的算法。然而,這些經典算法在不同的條件下無法獲得穩定的性能。

2012年深度學習的突破性進展和迅速普及,使得R-CNN、Fast-RCNN、Faster-RCNN、RetinaNet以及快速、高度準確的SSD、YOLO等目標檢測算法應運而生。這些基于深度學習、機器學習的算法,需要一定的數學以及深度學習框架基礎。有數百萬的專業計算機程序員和軟件開發人員想要集成和創建基于目標檢測算法的新產品。同時由于理解和實際使用較為復雜,一直無法實現。如何開發出高效的目標檢測代碼呢?ImageAI就應運而生了。

ImageAI讓代碼變得簡潔

ImageAI是一個python庫,只需要幾行代碼,就可以讓程序員和軟件開發人員輕松地將最先進的計算機視覺技術集成到他們現有的或新的應用中,ImageAI已經在Github上開源。

Github地址:

https://github.com/OlafenwaMoses/ImageAI

ImageAI目前支持使用在ImageNet-1000數據集上訓練的4種不同機器學習算法進行圖像預測和訓練。ImageAI還支持使用在COCO數據集上訓練的RetinaNet,YOLOv3和TinyYOLOv3進行對象檢測,視頻檢測和對象跟蹤。最后,ImageAI允許訓練自定義模型,以執行新目標的檢測和識別。

ImageAI庫有依賴其他Python庫,所以在使用ImageAI開發之前還需要導入其他的包。

準備工作

使用ImageAI實現目標檢測,只需進行以下4步:

  1. 在你的電腦上安裝Python
  2. 安裝ImageAI,配置依賴環境
  3. 下載目標檢測模塊文件
  4. 運行樣例代碼(只需10行)

下面一步步詳細展開:

1)從Python官網下載并安裝Python3

鏈接地址:

https://python.org

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

pip3 install imageai --upgrade

注意:第一次安裝ImageAI庫,需要下載對應版本的.whl文件,文摘菌的電腦是Python3的環境,所以下載了imageai-2.0.2-py3-none-any.whl 文件,然后轉移到相應的文件夾下,執行如下命令即可安裝:

pip install imageai-2.0.2-py3-none-any.whl

.whl文件鏈接地址:

https://github.com/OlafenwaMoses/ImageAI/releases/download/2.0.2/imageai-2.0.2-py3-none-any.whl

3)下載用于目標檢測的RetinaNet模型文件

鏈接地址:

https://github.com/OlafenwaMoses/ImageAI/releases/download/1.0/resnet50_coco_best_v2.0.1.h5

開啟10行代碼的目標檢測

到這里你已經安裝好了所有的依賴項,可以開始編寫你的第一個目標檢測的代碼了。

創建一個Python文件并命名(如FirstDetection.py),然后將下面的代碼寫入該文件。將RetinaNet模型文件和要檢測的圖像復制到包含Python文件的文件夾中。

FirstDetection.py:

from imageai.Detection import ObjectDetectionimport os

execution_path = os.getcwd()

detector = ObjectDetection()detector.setModelTypeAsRetinaNet()detector.setModelPath( os.path.join(execution_path , "resnet50_coco_best_v2.0.1.h5"))detector.loadModel()detections = detector.detectObjectsFromImage(input_image=os.path.join(execution_path , "image.jpg"), output_image_path=os.path.join(execution_path , "imagenew.jpg"))

for eachObject in detections: print(eachObject["name"] , " : " , eachObject["percentage_probability"] )

然后運行代碼,等待結果輸出。結果顯示后,就可以在FirstDetection.py所在的文件夾下找到保存下來的新圖像。下面有兩個新圖像的示例。

目標檢測前:

圖片來源:alzheimers.co.uk

圖片來源:Wikicommons

目標檢測后:

在Spyder編譯器中運行結果如下所示:

輸出的目標檢測精度結果:

person : 57.20391869544983

person : 52.57977843284607

person : 70.81094980239868

person : 76.99859142303467

person : 79.40077781677246

bicycle : 81.0384213924408

person : 83.66722464561462

person : 89.41188454627991

truck : 60.61040759086609

person : 69.65749859809875

bus : 97.92424440383911

truck : 83.94358158111572

car : 72.50492572784424

在Spyder編譯器中運行結果如下所示:

輸出的目標檢測精度結果:

person : 62.45866417884827

person : 58.67737531661987

person : 69.44932341575623

person : 71.84218168258667

person : 59.53381657600403

person : 54.65759038925171

motorcycle : 65.84504842758179

bus : 99.40318465232849

car : 72.41445779800415

person : 58.32530856132507

person : 54.449981451034546

person : 80.11815547943115

person : 74.30745959281921

person : 77.78302431106567

person : 71.15439772605896

bicycle : 69.92427110671997

person : 66.17957353591919

bicycle : 90.50283432006836

motorcycle : 94.09030675888062

短短10行代碼就出了目標檢測的結果,這也太快了吧!本著對真理探索的熱情,在弄懂里面的原理后,文摘菌將在下文對每行代碼進行解讀。

知其然知其所以然:代碼解讀

下面來解釋一下這10行代碼的工作原理:

from imageai.Detection import ObjectDetectionimport osexecution_path = os.getcwd()

在以上3行代碼中,在第一行導入了ImageAI的目標檢測類;在第二行導入了Python的os類;在第三行中定義了一個變量,保存Python文件、RetinaNet模型文件以及圖像所在文件夾的路徑。

detector = ObjectDetection()detector.setModelTypeAsRetinaNet()detector.setModelPath( os.path.join(execution_path , "resnet50_coco_best_v2.0.1.h5"))detector.loadModel()detections = detector.detectObjectsFromImage(input_image=os.path.join(execution_path , "image.jpg"), output_image_path=os.path.join(execution_path , "imagenew.jpg"))

在以上5行代碼中,我們在第一行中定義了一個目標檢測類的實例;在第二行中將實例的模型類型設定為RetinaNet;在第三行中將模型路徑設置為RetinaNet模型的路徑;在第四行中將模型加載到目標檢測類的實例中;在第五行中調用檢測函數,并將文件輸入輸出路徑作為參數傳入。

for eachObject in detections: print(eachObject["name"] , " : " , eachObject["percentage_probability"] )

在以上兩行代碼中,第一行用來對detector.detectObjectsFromImage 函數返回的所有結果進行迭代,第二行用來輸出圖片中檢測到的每個目標的名字及其概率。

自定義目標檢測

除此外,ImageAI也支持強大的自定義目標檢測。其中之一是能夠提取圖像中檢測到的每個物體。只需要將參數

extract_detected_objects=True

傳入

detectObjectsFromImage

函數中,如下所示,目標檢測類將為圖像對象創建一個文件夾,提取每個圖像,將每個子圖像保存到創建的新文件夾中,并返回一個包含每個圖像路徑的數組。

detections, extracted_images = detector.detectObjectsFromImage(input_image=os.path.join(execution_path , "image.jpg"), output_image_path=os.path.join(execution_path , "imagenew.jpg"), extract_detected_objects=True)

將其應用到第一張圖片上,得到如下結果:

所有行人都被很好地提取了出來,為了節約空間這里只顯示了一部分。

ImageAI的其他功能

ImageAI提供了許多功能,可用于目標檢測任務的自定義和部署。其支持的功能包括:

  • 調整最小概率:默認情況下,概率小于50%的物體不會顯示。對于需要高精度的情況,可以增加此值;對于需要檢測所有可能對象的情況,可以減少此值。
  • 自定義目標檢測:通過提供的CustomObject類,可以使檢測類檢測一個或幾個特定目標。
  • 檢測速度:通過將檢測速度設置為“fast”、“faster”或“fastest”,可以減少檢測圖像所需的時間。
  • 輸入類型:可指定并解析圖像的文件路徑,以Numpy數組或圖像文件流作為輸入
  • 輸出類型:可指定detectObjectsFromImage函數以文件或Numpy數組的形式返回圖像

你可以在上文給出的官方GitHub鏈接中找到如何使用上述功能以及ImageAI中包含的其他計算機視覺功能的詳細信息和文檔。

相關報道:

https://towardsdatascience.com/object-detection-with-10-lines-of-code-d6cb4d86f606

責任編輯:

相關推薦

游說,游說,游說……美芯片商為華為操碎了心
瑞典商業銀行:在2019年底之前英鎊將上漲6%
韓國:探討放寬對日本水產品進口限制“沒有根據”
俄深潛器可能因短路起火 水下人員或無滅火實際經驗
3名日籍女子在大馬被捕 或因未獲許可參加漫展表演
法國警方搜查雷諾汽車公司總部 與戈恩案有關
英國工黨影子脫歐大臣:將竭力阻止無協議脫歐
印度孟買墻體垮塌死亡人數升至30人
經濟數據鋪天蓋地、好壞難分? 一文帶你理清這些市場動態
莫斯科動物園給旅俄大熊貓“開直播”
隨筆:垃圾分類已成日本人的基本“生存技能”
摩根士丹利:建議做多日元
海灘驚魂!美國男子空拍海景,卻意外救下全家人
吸煙易引發心血管疾病 致澳大利亞平均每天17人死亡
海地太子港遭大雨侵襲 至少5人遇難3人失蹤
把民宿“開進”音樂節,年輕的「美團榛果」要用大數據賦能中小業主
巴基斯坦一艘載50名乘客渡輪湖中傾覆 致至少8人死
歐股開盤漲跌互現
美威士忌倉庫因遭雷擊起火 4.5萬桶烈酒被燒毀
意大利斯特龍博利火山噴發致一死一傷
“新興市場教父”:低利率環境下更青睞黃金
張朝陽:搜狐處在觸底反彈狀態 正朝盈利方向迅速奔跑
Libra——貨幣新紀元
日本參議院選舉公告發布 選戰正式開始
日本西南部大雨引發山體滑坡 已造成1死多傷
邦達亞洲:數據疲軟且油價反彈 美元/加元刷新9個月低位
外媒:墨西哥聯邦部隊永久駐扎南部邊界以阻移民
提名德國防長任歐委會主席 歐盟新領導層人選艱難出爐
足壇太瘋狂!1億都不值錢了 一張彩票比C羅還貴
人民幣對美元匯率中間價報6.8705元 下調65個基點
熱點 | 消息稱優客工場將于明年在美 IPO 最高籌資 2 億美元
印度政府報告稱 全球油價下跌將提振消費
國際貨幣基金組織總裁拉加德被提名歐洲央行行長
JotForm創始人:用戶數量從0到450萬,我是如何做到的?
方邦電子等3家科創板擬上市企業提交注冊
摩根士丹利新增訂單 并修改持倉止損
深度|降薪升級!最強黑馬新賽季怕是要搞事情了
人物|當年媲美小卡如今球隊毒瘤!他太沒下限
人物|一細節或決定小卡去留!三巨是最好的路?
熱點 | OYO 酒店對外事務總裁付小明離職 入職僅半年
神吐槽:你們釣魚窩火撈蝦!這真是NBA拼夕夕隊
市場辯論會:中船系持續走強 軍工股的機會又來了?
Letv智能電視市場再出發,但多少人還會買單?
小米有品眾籌上架即熱上水器:抽水加熱二合一
攜程在上海推出“垃圾分類旅游無憂”活動
京東企業業務推定制化垃圾分類場景采購 服務企業市
蘋果獲耳機專利 頭戴式降噪耳機或年內發布
這款充電支架能將Apple Watch偽裝成iPod
銀保監會兩年來處罰金額達60億元
藥品零售百名榜:國大老百姓同仁堂居前3,3成藥店將死
聯網POS機一季度減少179萬臺,銀行發卡發不動了嗎?
7月4日河北省玉米淀粉報價保持平穩
7月4日陜西省玉米纖維報價走勢穩定
關于黑天鵝 - 建立合理的投資體系的重要性
上海英方軟件完成B+輪融資,海通開元旗下基金領投
平安基金牛志江:“微笑曲線”揭秘基金定投|走進基金
揭秘!2019十大基金排行榜,新手必看
“龍江安心保代”迎來兩周歲的生日
業績回升?新三板退市公司原石文化重啟港股IPO
東方財富:公募基金上線在即,流量變現加速推進
長生人壽去年虧損額幾乎翻一番 退保金激增38倍
7月4日內蒙古玉米蛋白粉報價走勢穩定
銀保監會周亮:上半年銀行保險機構努力增加有效供給支持穩增長
7月4日山西省玉米淀粉報價保持平穩
7月4日河北省玉米蛋白粉報價走勢穩定
【必看】股神巴菲特教你買基金,看完你也是老司機
7月4日新疆玉米蛋白粉報價保持平穩
【愛評論】宋福興:中國保險業是一個藍海
7月4日河南省一級豆油報價繼續走強
千海金9年默默耕耘大連市場 打好產融結合基礎
安邦出清和諧健康險股份,福佳集團持股51%成最大股東
有關日語的考試 搞不懂「次第」的用法?
7月4日內蒙古玉米淀粉報價維持穩定
如何選擇指數基金,看完這篇,閉眼買都不會錯
新財年澳洲移民政策變化匯總,南澳、ACT利好爆出!
大連焊鍍管市場價格暫穩 成交情況一般
錢三一那么喜歡林妙妙,為什么最后還是沒表白?
7月3日德州德寶路MTBE最新動態
言承旭工作人員對觀眾喊滾?導演道歉:讓他背鍋了
7月3日東明潤昌MTBE最新動態
四太回應何猷君領證 大贊奚夢瑤 未否認懷孕傳聞
金宇彬患癌兩年后已康復將復出 有望合作全智賢
荊門消委向美的總部發函:請就這些投訴作出合理解釋
平安基金牛志江:“微笑曲線”揭秘基金定投|走進基金
韓網抵制日貨運動發酵 Twice等日籍成員遭攻擊
7月4日山東明泉甲醇最新報價
《哈利·波特》要拍成電視劇?J.K.羅琳明確否認
7月4日內蒙古金誠泰化工甲醇最新報價
安徽亳州:12萬多名黨員登臺講授“微型黨課”
青島漁民海上漂浮4小時被成功救起
予菲視點:中國平安15天花39億元回購 帶動保險股整體上漲
闞清子劇組放風樂趣多 被網友調侃“闞三歲”
快訊|四川發展牽手自貢成立自貢航空產業投資基金
廣東全省實現110報警由市公安局集中接處
華快建南輔道促白云火車站交通
廣東省火災隱患舉報平臺已正式上線
女子赴美代孕求子沒成功 請求返還中介服務費獲法院支持
返回頂部
电子游艺行业