天天看點

YOLO 算法架構的使用一(初級)

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

    接下來,我們看一下目錄:

YOLO 算法架構的使用一(初級)

     3)執行預測

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

   data目錄下是圖檔,輸出結果:

YOLO 算法架構的使用一(初級)
YOLO 算法架構的使用一(初級)

圖檔有點重複了,我們看到結果了:

檢測到狗的機率為82%

檢測到車的機率為28*,其實沒有車

檢測到kache的機率為64%

檢測到自行車的機率為85%

當然機率高的是正确,機率低的确實沒有

其實他會生成一張圖檔,并辨別所識别到的物體

YOLO 算法架構的使用一(初級)

Predictions.png 就是生成預測圖

我們看看圖檔:

YOLO 算法架構的使用一(初級)

至此,證明我們已經安裝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,

檢測完,他繼續提示你繼續輸入圖檔路徑:

YOLO 算法架構的使用一(初級)

終止輸入:ctrl + c 就可以退出

   3)設定檢測的視窗的門檻值

   這個一般沒有必要設定,預設門檻值是在.25或者以上,當可以通過

   -thresh  <val> 來設定,如果設定為0,則:

./darknet detect cfg/yolo.cfg yolo.weights data/dog.jpg -thresh 0

結果為:

YOLO 算法架構的使用一(初級)

這是完全沒有必要的。

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的視訊。