YOLO官方架構使用C寫的,性能杠杠的,YOLO算法,我就不做過多介紹了。先簡單介紹一下這個架構如何使用。這裡預設是yolo2,yolo1接近過時。
環境 推薦ubuntu 或者centos
YOLO是一個近實時的架構,在1核cpu下,對一張圖檔的識别大概在6s-12s之間,其實還是在沒有緩存的環境下運作的,如果是在攝像頭實時采集識别估計也能達到10s左右的處理速度。如果用GPU來處理,當然時間短很多了。在看官網的資訊時,有些名詞看不太懂,但号稱在titanX 上的處理速度是每秒40-60張圖檔,識别精度為78.6% ;在coco 開發測試集上的voc 2007 上的識别精度為48.1%。這樣看來,速度确實很快。
在https://www.youtube.com/上有yolo攝像頭實時識别的視訊,你可以上去搜尋,對于國内的高牆,略表無奈。
1,YOLO原理
關于yolo論文相對複雜,要有足夠的耐心去看。這裡位址先貼出來:
https://arxiv.org/abs/1612.08242
2,yolo安裝
1,安裝預備庫
1)安裝git 工具
Yum install git
2)安裝 bunzip2
yum install -y bzip2
3 ) 安裝gcc
yum install "gcc-c++.x86_64"
2,下載下傳安裝包
1)下載下傳安裝包并編譯
git clone https://github.com/pjreddie/darknet
cd darknet
make
2)下載下傳預訓練的超參數,也是權重
wget https://pjreddie.com/media/files/yolo.weights
接下來,我們看一下目錄:

3)執行預測
./darknet detect cfg/yolo.cfg yolo.weights data/dog.jpg
data目錄下是圖檔,輸出結果:
圖檔有點重複了,我們看到結果了:
檢測到狗的機率為82%
檢測到車的機率為28*,其實沒有車
檢測到kache的機率為64%
檢測到自行車的機率為85%
當然機率高的是正确,機率低的确實沒有
其實他會生成一張圖檔,并辨別所識别到的物體
Predictions.png 就是生成預測圖
我們看看圖檔:
至此,證明我們已經安裝yolo成功了!
3,圖檔檢測
1)單圖檔檢測
單圖檔檢測,我們的已經示範過了:
./darknet detect cfg/yolo.cfg yolo.weights data/dog.jpg
一般服務運作比較慢6s-12s,開啟GPU會快速很多,會生成predictions.png,圖中會辨別出識别的物體。
dog.jpg 就是要檢測的圖檔,可以換成其餘的試試。
2)多圖檔檢測
./darknet detect cfg/yolo.cfg yolo.weights
layer filters size input output
0 conv 32 3 x 3 / 1 416 x 416 x 3 -> 416 x 416 x 32
1 max 2 x 2 / 2 416 x 416 x 32 -> 208 x 208 x 32
.......
29 conv 425 1 x 1 / 1 13 x 13 x1024 -> 13 x 13 x 425
30 detection
Loading weights from yolo.weights ...Done!
Enter Image Path:
多圖檔檢測跟單圖檔檢測是差不多的,隻是會不斷的提示你輸入圖檔路徑進行檢測
你可以data/hourses.jpg,
檢測完,他繼續提示你繼續輸入圖檔路徑:
終止輸入:ctrl + c 就可以退出
3)設定檢測的視窗的門檻值
這個一般沒有必要設定,預設門檻值是在.25或者以上,當可以通過
-thresh <val> 來設定,如果設定為0,則:
./darknet detect cfg/yolo.cfg yolo.weights data/dog.jpg -thresh 0
結果為:
這是完全沒有必要的。
4,tiny yolo
Tiny yolo 是更快的yolo模型,但是準确度很低下,可以慎重考慮使用,參考連結為:
https://pjreddie.com/darknet/imagenet/#reference
你可以試着去用tiny的權重voc集去測試一下:
wget https://pjreddie.com/media/files/tiny-yolo-voc.weights
./darknet detector test cfg/voc.data cfg/tiny-yolo-voc.cfg tiny-yolo-voc.weights data/dog.jpg
雖然精度差了,但是處理速度高度200張每秒
5,通過攝像頭實時監測
通過攝像頭實時監測識别,這樣可以實時檢視測試的結果是怎麼樣的,但是需要相應的裝置來支援,硬體必須有攝像頭,同時還要編譯CUDA和OPENCV,可以執行以下的指令:
./darknet detector demo cfg/coco.data cfg/yolo.cfg yolo.weights
這樣就會在展示每一幀上辨別出識别的物體。
需要用openv連接配接到你電腦的攝像頭上,攝像頭是否能用不是很大問題;如果你有多個攝像頭的話,就必須指定一個攝像頭:-c <num> 預設為0 第一攝像頭。
如果你有video檔案,openCV能夠讀取video的話,那麼可以:
./darknet detector demo cfg/coco.data cfg/yolo.cfg yolo.weights <video file>
可以動态監測,這裡建議去翻一下牆,在youtube 看看yolo的視訊。