閱讀1019 返回首頁    go 阿裏雲 go 技術社區[雲棲]


Mac上開源圖像物體識別工具YOLO-darknet-安裝使用指南

一、前言

YOLO是一名叫做Joseph Chet Redmon的大神與他的幾個小夥伴做的一個開源實時物體檢測係統。Joseph的幾個小夥伴來自於華盛頓大學以及伯克利大學等知名院校。

YOLO是基於他們開發的Darknet(基於c語言的神經網絡開源框架)上的一個應用係統,不同於前置檢測係統將一副圖像的不同位置以及維度分別進行分類預測,YOLO將整幅圖像輸入進單一的神經網絡進行分類預測。這使得YOLO相對於其它的物體檢測網絡更加的快速。

其在 VOC 2007(Visual Object Class Challenge 2007)上的 mAP(Mean Average Precision)為78.6%,在 COCO test-dev 上為 48.1%

二、YOLO的前置組件介紹

YOLO是基於Darknet的應用,而Darknet還有幾個可選的依賴組件:

OpenCV:如果需要更多的圖像類型支持,需引進該組件。我在之前研究人臉識別開源框架OPENFACE時,已經在電腦上安裝過OpenCV了。感興趣的同學可以移步 Mac上開源人臉識別軟件OPENFACE安裝全流程教程 查看

CUDA:如果要使用GPU進行計算,需引進該組件。可惜我買不起GPU,所以pass

三、YOLO安裝步驟以及錯誤解決方案

1)Darknet下載與安裝

git clone https://github.com/pjreddie/darknet.gitcd darknetmake

2)Darknet 錯誤與解決

錯誤1: undeclared identifier 'CLOCK_REAKTIME'

./src/utils.c:16:19: fatal error: use of undeclared identifier 'CLOCK_REALTIME'

clock_gettime(CLOCK_REALTIME, &now);

根據報錯日誌信息可以指導,在 src/utils.c 中的 CLOCK_REALTIME 這個標識符並沒有被定義。通過在網絡上搜索得知,clock_gettime這個函數在MAC電腦的操作係統中並沒有被實現,所以我們要使用 MAC 係統上的類似函數來替代。通過對 src/utils.c 進行改寫,可以解決該問題,具體代碼如下:

3)Darknet 安裝成功驗證

在命令行輸入:

./darknet

當得到反饋如下時,說明安裝成功了:

usage: ./darknet

Darknet安裝成功後,其實就代表著yolo安裝好了!下邊我們來繼續配置一下環境,然後開始使用yolo吧

四、yolo的配置與使用

yolo是基於darknet的一個具體的實例,說是介紹yolo的使用,實際上是介紹darknet的配置與使用

1)darknet的使用與參數介紹

通過前邊的介紹,我們知道darknet是一款神經網絡開源框架,那麼使用darknet,我們需要確定下邊幾個參數:

[1]神經網絡模型:darknet使用一個 xx.cfg 的文件來定義神經網絡模型,包括神經網絡的迭代次數、層級網絡架構等內容

[2]神經網絡權重:darknet可以直接使用訓練好的權重來進行測試/預測,我們也可以通過對訓練樣本進行訓練獲得網絡權重。比如可通過下邊的命令獲得yolo模型已訓練好的權重

wget https://pjreddie.com/media/files/yolo.weights

[3]訓練樣本(optional:訓練時需要):當我們需要訓練時,需要生成訓練樣本的標簽文件 label.txt。darknet使用了一個 xx.data 類型的文件來存儲訓練樣本參數

通過下邊的命令行來實現對訓練樣本的訓練:

./darknet detector train cfg/voc.data cfg/yolo-voc.cfg darknet19_448.conv.23

[4]測試樣本(optional:測試時需要):

測試樣本是圖像,我們可以選擇單張圖片處理形式、多張圖片處理形式,以及攝像頭方式來對圖像進行檢測。需注意的是如果要使用網絡攝像頭接入流來對物體進行圖像檢測,需要接入 OpenCV,而為了提高速度最好也接入 CUDA 來使用 GPU 進行運算。

通過下邊的三種命令行均可對圖像進行物體檢測,其分別代表了一種處理模式:

//單圖片模式./darknet detect cfg/yolo.cfg yolo.weights data/dog.jpg//多圖片模式,即不要輸入測試樣本,然後後邊再一張張輸入,這個模式可以避免反複load模型./darknet detect cfg/yolo.cfg yolo.weights//攝像頭模式(沒錢買不起GPU,所以未驗證)./darknet detector demo cfg/coco.data cfg/yolo.cfg yolo.weights

2)yolo的使用樣例

[1]預訓練權重下載(250MB)

wget https://pjreddie.com/media/files/yolo.weights

[2]根據下載的權重來進行物體檢測

./darknet detect cfg/yolo.cfg yolo.weights data/dog.jpg

輸出結果如下所示:

通過上邊的介紹,我相信大夥應該對yolo或者說darknet應該有了初步的理解了,通過閱讀源碼以及對該框架的繼續學習,我相信我們應該可以將這套開源框架應用到實際場景中進行應用!

Hope everyone will have fun playing around!

最後更新:2017-10-12 17:41:46

  上一篇:go ipad10.5更新到ios11後連不上手機熱點
  下一篇:go iCloud照片同步慢或者不能同步