1. 程式人生 > >YOLO v1之總結篇(linux+windows)

YOLO v1之總結篇(linux+windows)

論文解讀篇:

YOLO出自2016 CVPR You Only Look Once:Unified, Real-Time Object Detection,也是一個非常值得學習的框架,不得不說facebook的技術就是牛啊。

整個訓練和檢測框架都是端到端,YOLO達到了45幀每秒,Fast YOLO達到了155幀每秒,除了剛開始載入模型有點慢,檢測部分確實是非常的快。

         整個檢測過程分為3個階段,

(1)將影象縮放到448*448

(2)通過神經網格進行檢測和分類

(3)NMS抑制,輸出最終結果

該模型首先,將輸入的影象分為S*S個grid,然後每個grid產生B個預測邊界框(包括,x,y,windth,height,confidence)和C類判別屬性,最終將輸出S*S*(B*5+C)維度的向量。

         在VOC上訓練中,S=7,B=2,C=20,最終輸出7*7*(2*5+20)維度的資訊。

YOLO包含24個卷基層,2個全連線層,FastYOLO只包含9個卷基層,因此速度快很多,當然代價就是精度也相應的有損失。

         YOLO的損失函式,權衡了邊界框的損失和類別判斷的損失,使得邊界框的損失是類別判斷損失的10倍,同時兼顧了大的邊界框和小的邊界框的IOU偏差,使得同樣的損失在大框中表現出很小的影響,小框中則變現出很大的影響。

其中,

λcoord =5 ,

λnoobj =0.5,

1obji 表示是否物體出現在gridcell i中,

1objij表示grid cell i中的第j個邊界框預測到了正確類別。

         訓練過程資料:

epoch:135

batch size:64

momentum:0.9

decay:0.0005

learning rate:前75為0.01,中間30為0.001,最後30為0.0001

dropout layer rate:0.5

YOLO的優勢在於,外圍庫的依賴少,純c和CUDA寫成,唯一的依賴就是pthreads,不像caffe那樣需要一堆的dll。當然,缺點就是,訓練的模型檔案太大,750多M,2G視訊記憶體的電腦直接掛掉,tiny-yolo雖然小,但是效果卻大打折扣。另一個缺點就是由於其自身結構的設計,使得對聚集,堆疊的物體檢測不是很好,當然,fast RCNN,ssd等在這點上也沒有變現出不俗的效果。就YOLO v1的速度和識別率來看,還是比SSD差點。當然所有的這些都在YOLO v2中得到了大大的改善。

linux篇:

安裝步驟:

git clonehttps://github.com/pjreddie/darknet.git
cd darknet
vim Makefile
修改GPU=1  OPENCV=1
make -j8
wgethttp://pjreddie.com/media/files/yolov1.weights
./darknetyolo test cfg/yolov1/yolo.cfg yolov1.weights data/dog.jpg

注意這裡,yolov1.weights,官網現在給的是753M的,實際上我用這個沒有跑出結果,用了小夥伴的780多M的成功跑出了上面的結果,就這一個地方,折騰了一下午,換了不同機器測試過,也是被官網坑了啊。如果不對之處,還請大神斧正。

至此,YOLOv1就安裝完畢,又可以愉快的玩耍了。

windows篇:

由於原版的官方YOLOv1是隻支援linux 和mac的,如果要自己修改,可能需要走好對哦的坑,同時還得具備一定的技術水平,幸好有革命鬥士為我們走出了這一步,

可以參考下面2個YOLO-windows,

隨便下載上面的一個yolo,然後進入yolo-windows-master\build\darknet\下面,用vs2013直接開啟darknet.sln,選擇,x64版本,只要配置opencv和pthreads就可以,

為了方便大家參考,這裡貼出本人的環境配置,

vc++目錄,可執行檔案,

E:\opencv2_4_12\build\x64\vc12\bin;
G:\yolo-windows-master\3rdparty\dll\x64;

vc++目錄,包含目錄,

E:\opencv2_4_12\build\include;
E:\opencv2_4_12\build\include\opencv;
E:\opencv2_4_12\build\include\opencv2;
G:\yolo-windows-master\3rdparty\include;
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v7.5\include(GPU版本加)

vc++目錄,庫目錄,

E:\opencv2_4_12\build\x64\vc12\lib;
G:\yolo-windows-master\3rdparty\lib\x64;
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v7.5\lib\x64(GPU版本加)

連結器,輸入,下面為release的輸入,debug只將opencv的lib換成相應debug即可。

pthreadVC2.lib;
opencv_calib3d2412.lib;
opencv_contrib2412.lib;
opencv_core2412.lib;
opencv_features2d2412.lib;
opencv_flann2412.lib;
opencv_gpu2412.lib;
opencv_highgui2412.lib;
opencv_imgproc2412.lib;
opencv_legacy2412.lib;
opencv_ml2412.lib;
opencv_objdetect2412.lib;
opencv_ts2412.lib;
opencv_video2412.lib;
cublas.lib(GPU版本加)
curand.lib(GPU版本加)
cudart.lib(GPU版本加)

c/c++,前處理器

_CRT_SECURE_NO_WARNINGS
OPENCV
GPU(GPU版本加)

環境配好,點選生成就可以,

debug版本的生成資訊,

release版本的生成資訊,

進入,yolo-windows-master\build\darknet\x64\Release\下面,

然後執行,darknet.cmd,隨便輸入一張影象,例如,person.jpg,就會出來執行效果。

其中第一個為cpu+debug版本,第二個為cpu+release版本,

references: