- 常用模型結(jié)果對(duì)比
Model | Train | Test | mAP | FLOPS | FPS | Cfg | Weights |
---|---|---|---|---|---|---|---|
Old YOLO | VOC 2007+2012 | 2007 | 63.4 | 40.19 Bn | 45 | link | |
SSD300 | VOC 2007+2012 | 2007 | 74.3 | - | 46 | link | |
SSD500 | VOC 2007+2012 | 2007 | 76.8 | - | 19 | link | |
YOLOv2 | VOC 2007+2012 | 2007 | 76.8 | 34.90 Bn | 67 | cfg | weights |
YOLOv2 544x544 | VOC 2007+2012 | 2007 | 78.6 | 59.68 Bn | 40 | cfg | weights |
Tiny YOLO | VOC 2007+2012 | 2007 | 57.1 | 6.97 Bn | 207 | cfg | weights |
--------------------- | |||||||
SSD300 | COCO trainval | test-dev | 41.2 | - | 46 | link | |
SSD500 | COCO trainval | test-dev | 46.5 | - | 19 | link | |
YOLOv2 608x608 | COCO trainval | test-dev | 48.1 | 62.94 Bn | 40 | cfg | weights |
Tiny YOLO | COCO trainval | - | - | 7.07 Bn | 200 | cfg | weights |
從表中可以看出抢呆,在VOC2007+2010數(shù)據(jù)集上属瓣,從mAP的角度來(lái)衡量幾種方法,SSD和YOLO2的結(jié)果接近而優(yōu)于YOLO1的結(jié)果和Tiny YOLO的結(jié)果烘嘱,而從FPS速度的角度來(lái)衡量,SSD500最差茬缩,Tiny YOLO最優(yōu),YOLO2的速度要優(yōu)于YOLO1和SSD300.
- YOLO環(huán)境搭建
- clone yolo包
git clone https://github.com/pjreddie/darknet
cd darknet
- 配置makefile文件
GPU=1 #配置好cuda環(huán)境 這里將GPU=0改為GPU=1
CUDNN=0 #優(yōu)于作者使用的是V4版本的cudnn吼旧,如果系統(tǒng)內(nèi)安裝的cudnnV5以上版本的凰锡,此處最好不要開(kāi)啟cudnn加速,否則在make的時(shí)候會(huì)報(bào)錯(cuò)
OPENCV=1 #開(kāi)啟opencv環(huán)境
DEBUG=0
#ARCH處可以刪除compute_20這一行,build compute_20已經(jīng)被棄用了
ARCH= -gencode arch=compute_30,code=sm_30 \
-gencode arch=compute_35,code=sm_35 \
-gencode arch=compute_50,code=[sm_50,compute_50] \
-gencode arch=compute_52,code=[sm_52,compute_52]
# This is what I use, uncomment if you know your arch and want to specify
# ARCH= -gencode arch=compute_52,code=compute_52
VPATH=./src/
EXEC=darknet
OBJDIR=./obj/
NVCC=/usr/local/cuda-8.0/bin/nvcc #此處自己添加NVCC的路徑,我用的是cuda8.0版本
- 編譯
make -j8
產(chǎn)生一串如下所示的編譯log信息掂为,如果中間沒(méi)有提示error就編譯成功了
....
....
gcc -DOPENCV `pkg-config --cflags opencv` -DGPU -I/usr/local/cuda/include/ -Wall -Wfatal-errors -Ofast -DOPENCV -DGPU -c ./src/gemm.c -o obj/gemm.o
gcc -DOPENCV `pkg-config --cflags opencv` -DGPU -I/usr/local/cuda/include/ -Wall -Wfatal-errors -Ofast -DOPENCV -DGPU -c ./src/utils.c -o obj/utils.o
gcc -DOPENCV `pkg-config --cflags opencv` -DGPU -I/usr/local/cuda/include/ -Wall -Wfatal-errors -Ofast -DOPENCV -DGPU -c ./src/cuda.c -o obj/cuda.o
gcc -DOPENCV `pkg-config --cflags opencv` -DGPU -I/usr/local/cuda/include/ -Wall -Wfatal-errors -Ofast -DOPENCV -DGPU -c ./src/deconvolutional_layer.c -o obj/deconvolutional_layer.o
gcc -DOPENCV `pkg-config --cflags opencv` -DGPU -I/usr/local/cuda/include/ -Wall -Wfatal-errors -Ofast -DOPENCV -DGPU -c ./src/convolutional_layer.c -o obj/convolutional_layer.o
gcc -DOPENCV `pkg-config --cflags opencv` -DGPU -I/usr/local/cuda/include/ -Wall -Wfatal-errors -Ofast -DOPENCV -DGPU -c ./src/list.c -o obj/list.o
....
....
- 測(cè)試opencv
./darknet imtest data/eagle.jpg
生成一系列eagle的圖像
- 可選項(xiàng)
(1)change what card Darknet uses
./darknet -i 1 imagenet test cfg/alexnet.cfg alexnet.weights
(2)GPU模式改為CPU模式
./darknet -nogpu imagenet test cfg/alexnet.cfg alexnet.weights
- 下載the pre-trained weight
wget http://pjreddie.com/media/files/yolo.weights
- 分類(lèi)和檢測(cè)
./darknet detect cfg/yolo.cfg yolo.weights data/dog.jpg
檢測(cè)結(jié)果:
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
2 conv 64 3 x 3 / 1 208 x 208 x 32 -> 208 x 208 x 64
3 max 2 x 2 / 2 208 x 208 x 64 -> 104 x 104 x 64
4 conv 128 3 x 3 / 1 104 x 104 x 64 -> 104 x 104 x 128
5 conv 64 1 x 1 / 1 104 x 104 x 128 -> 104 x 104 x 64
6 conv 128 3 x 3 / 1 104 x 104 x 64 -> 104 x 104 x 128
7 max 2 x 2 / 2 104 x 104 x 128 -> 52 x 52 x 128
8 conv 256 3 x 3 / 1 52 x 52 x 128 -> 52 x 52 x 256
9 conv 128 1 x 1 / 1 52 x 52 x 256 -> 52 x 52 x 128
10 conv 256 3 x 3 / 1 52 x 52 x 128 -> 52 x 52 x 256
11 max 2 x 2 / 2 52 x 52 x 256 -> 26 x 26 x 256
12 conv 512 3 x 3 / 1 26 x 26 x 256 -> 26 x 26 x 512
13 conv 256 1 x 1 / 1 26 x 26 x 512 -> 26 x 26 x 256
14 conv 512 3 x 3 / 1 26 x 26 x 256 -> 26 x 26 x 512
15 conv 256 1 x 1 / 1 26 x 26 x 512 -> 26 x 26 x 256
16 conv 512 3 x 3 / 1 26 x 26 x 256 -> 26 x 26 x 512
17 max 2 x 2 / 2 26 x 26 x 512 -> 13 x 13 x 512
18 conv 1024 3 x 3 / 1 13 x 13 x 512 -> 13 x 13 x1024
19 conv 512 1 x 1 / 1 13 x 13 x1024 -> 13 x 13 x 512
20 conv 1024 3 x 3 / 1 13 x 13 x 512 -> 13 x 13 x1024
21 conv 512 1 x 1 / 1 13 x 13 x1024 -> 13 x 13 x 512
22 conv 1024 3 x 3 / 1 13 x 13 x 512 -> 13 x 13 x1024
23 conv 1024 3 x 3 / 1 13 x 13 x1024 -> 13 x 13 x1024
24 conv 1024 3 x 3 / 1 13 x 13 x1024 -> 13 x 13 x1024
25 route 16
26 conv 64 1 x 1 / 1 26 x 26 x 512 -> 26 x 26 x 64
27 reorg / 2 26 x 26 x 64 -> 13 x 13 x 256
28 route 27 24
29 conv 1024 3 x 3 / 1 13 x 13 x1280 -> 13 x 13 x1024
30 conv 425 1 x 1 / 1 13 x 13 x1024 -> 13 x 13 x 425
31 detection
Loading weights from yolo.weights...Done!
data/dog.jpg: Predicted in 0.213838 seconds. #檢測(cè)所用的時(shí)間
pottedplant: 26% #此處以下幾項(xiàng)為檢測(cè)到的目標(biāo)的分類(lèi)以及其檢測(cè)精度
truck: 74%
bicycle: 25%
dog: 81%
bicycle: 83%
當(dāng)檢測(cè)圖片中有大量的不同種類(lèi)的目標(biāo)時(shí)裕膀,檢測(cè)結(jié)果為:
Loading weights from yolo.weights...Done!
data/timg.jpg: Predicted in 0.210836 seconds.
person: 58%
person: 61%
person: 36%
person: 68%
person: 40%
person: 81%
horse: 60%
horse: 76%
horse: 84%
horse: 79%
horse: 72%
Loading weights from yolo.weights...Done!
data/plane.jpg: Predicted in 0.213104 seconds.
aeroplane: 73%
aeroplane: 63%
aeroplane: 75%
aeroplane: 72%
aeroplane: 40%
aeroplane: 78%
aeroplane: 54%
aeroplane: 65%
從這些單幅圖像的檢測(cè)結(jié)果可以看出,YOLO的檢測(cè)效果比SSD要好勇哗,特別是當(dāng)圖像類(lèi)目標(biāo)的種類(lèi)和個(gè)數(shù)增多時(shí)魂角,YOLO幾乎沒(méi)有漏檢的情況而根據(jù)以前SSD的檢測(cè)結(jié)果可以看出在圖像內(nèi)目標(biāo)個(gè)數(shù)和種類(lèi)增多時(shí)會(huì)有漏檢的情況出現(xiàn)。
- Tiny YOLO(速度比YOLO要快但是精度有所下降)
wget http://pjreddie.com/media/files/tiny-yolo-voc.weights #下載預(yù)訓(xùn)練的tiny yolo的超參數(shù)文件
進(jìn)行檢測(cè):
./darknet detector test cfg/voc.data cfg/tiny-yolo-voc.cfg tiny-yolo-voc.weights data/dog.jpg
可以得到tiny_yolo下的檢測(cè)速度和結(jié)果:
Loading weights from tiny-yolo-voc.weights...Done!
data/person.jpg: Predicted in 0.187108 seconds.
dog: 53%
person: 73%
sheep: 60% #檢測(cè)錯(cuò)誤
對(duì)比yolo2下的檢測(cè)速度和結(jié)果:
Loading weights from yolo.weights...Done!
data/person.jpg: Predicted in 0.252314 seconds.
dog: 85%
person: 85%
horse: 91%
從對(duì)比結(jié)果可以看出tiny_yolo的檢測(cè)速度要快于yolo2而檢測(cè)的準(zhǔn)確度相對(duì)于yolo2要差很多智绸。從檢測(cè)過(guò)程中的信息也可以看出,tiny_yolo使用的模型的層數(shù)大概是yolo2的一半访忿,所以造成了兩者速度和精度的不同瞧栗。