AlexeyAB DarkNet YOLOv3框架解析与应用实践(二)
AlexeyAB DarkNet YOLOv3框架解析與應(yīng)用實(shí)踐(二)
版本3有什么新功能?
YOLOv3使用了一些技巧來改進(jìn)訓(xùn)練和提高性能,包括:多尺度預(yù)測、更好的主干分類器等等。全部細(xì)節(jié)都在我們的論文上!
使用預(yù)先訓(xùn)練的模型進(jìn)行檢測
這篇文章將指導(dǎo)你通過使用一個(gè)預(yù)先訓(xùn)練好的模型用YOLO系統(tǒng)檢測物體。如果你還沒有安裝Darknet,你應(yīng)該先安裝。或者不去閱讀所有的東西:
git clone https://github.com/pjreddie/darknet
cd darknet
make
容易的!
在cfg/子目錄中已經(jīng)有YOLO的配置文件。你必須在這里下載預(yù)先訓(xùn)練的權(quán)重文件(237MB)。或者運(yùn)行這個(gè):
wget
https://pjreddie.com/media/files/yolov3.weights
將看到如下輸出:
layer
filters size input output
0 conv 32
3 x 3 / 1 416 x 416 x 3
-> 416 x 416 x 32
0.299 BFLOPs
1 conv 64
3 x 3 / 2 416 x 416 x 32
-> 208 x 208 x 64
1.595 BFLOPs
.......
105 conv 255
1 x 1 / 1 52 x 52 x 256
-> 52 x 52 x 255
0.353 BFLOPs
106 detection
truth_thresh: Using default ‘1.000000’
Loading weights from yolov3.weights…Done!
data/dog.jpg: Predicted in 0.029329 seconds.
dog: 99%
truck: 93%
bicycle: 99%
Darknet打印出它檢測到的物體,它的可信度,以及找到它們所花的時(shí)間。我們沒有用OpenCV編譯Darknet,因此它不能直接顯示檢測結(jié)果。相反,它將它們保存在predictions.png中。您可以打開它來查看檢測到的對(duì)象。因?yàn)槲覀冊贑PU上使用Darknet,所以每張圖像大約需要6-12秒。如果我們使用GPU版本,速度會(huì)快得多。 已經(jīng)包括了一些例子圖片,以防你需要靈感。嘗試
data/eagle.jpg, data/dog.jpg, data/person.jpg, or data/horses.jpg!
detect命令是命令的更通用版本的簡寫。它相當(dāng)于命令:
./darknet
detector test cfg/coco.data cfg/yolov3.cfg yolov3.weights data/dog.jpg
如果您只想在一個(gè)圖像上運(yùn)行檢測,則不需要知道這一點(diǎn),但知道是否要執(zhí)行其他操作(如在網(wǎng)絡(luò)攝像頭上運(yùn)行)(稍后將看到)會(huì)很有用。
多幀圖像
不要在命令行上提供圖像,您可以將其留空以嘗試一行中的多個(gè)圖像。相反,當(dāng)配置和權(quán)重完成加載時(shí),您將看到一個(gè)提示:
./darknet detect cfg/yolov3.cfg yolov3.weights
layer
filters size input output
0 conv 32
3 x 3 / 1 416 x 416 x 3
-> 416 x 416 x 32
0.299 BFLOPs
1 conv 64
3 x 3 / 2 416 x 416 x 32
-> 208 x 208 x 64
1.595 BFLOPs
.......
104 conv 256
3 x 3 / 1 52 x 52 x 128
-> 52 x 52 x 256
1.595 BFLOPs
105 conv 255
1 x 1 / 1 52 x 52 x 256
-> 52 x 52 x 255
0.353 BFLOPs
106 detection
Loading weights from yolov3.weights…Done!
Enter Image Path:
輸入像data/horses.jpg這樣的圖像路徑,讓它為該圖像預(yù)測框。
完成后,它將提示您輸入更多路徑以嘗試不同的圖像。完成后,使用Ctrl-C退出程序。
更改檢測閾值
默認(rèn)情況下,YOLO只顯示置信度為.25或更高的對(duì)象。可以通過將-thresh標(biāo)志傳遞給yolo命令來更改此值。例如,要顯示所有檢測,可以將閾值設(shè)置為0:
./darknet
detect cfg/yolov3.cfg yolov3.weights data/dog.jpg -thresh 0
產(chǎn)生:
![[全部]
所以這顯然不是非常有用,但是可以將其設(shè)置為不同的值來控制模型設(shè)置的閾值。 Tiny YOLOv3
我們有一個(gè)非常小的模型,也適用于約束環(huán)境,yolov3 tiny。要使用此模型,請(qǐng)首先下載權(quán)重:
wget
https://pjreddie.com/media/files/yolov3-tiny.weights
然后使用Tiny配置文件和權(quán)重運(yùn)行檢測:
./darknet
detect cfg/yolov3-tiny.cfg yolov3-tiny.weights data/dog.jpg
網(wǎng)絡(luò)攝像頭的實(shí)時(shí)檢測
如果看不到結(jié)果,在測試數(shù)據(jù)上運(yùn)行YOLO就不是很有趣了。與其在一堆圖片上運(yùn)行,不如在網(wǎng)絡(luò)攝像頭的輸入上運(yùn)行!
要運(yùn)行這個(gè)演示,您需要使用CUDA和OpenCV編譯Darknet。然后運(yùn)行命令:
./darknet detector demo cfg/coco.data cfg/yolov3.cfg
yolov3.weights
YOLO將顯示當(dāng)前FPS和預(yù)測類,以及在其上繪制邊界框的圖像。
你需要一個(gè)網(wǎng)絡(luò)攝像頭連接到OpenCV可以連接到的計(jì)算機(jī),否則它將無法工作。如果您連接了多個(gè)網(wǎng)絡(luò)攝像頭,并且希望選擇要使用的攝像頭,則可以通過-c標(biāo)志進(jìn)行選擇(OpenCV默認(rèn)使用網(wǎng)絡(luò)攝像頭0)。
如果OpenCV可以讀取視頻,也可以在視頻文件上運(yùn)行它:
./darknet
detector demo cfg/coco.data cfg/yolov3.cfg yolov3.weights
這就是我們制作上述YouTube視頻的方式。
在VOC上訓(xùn)練YOLO
如果你想使用不同的訓(xùn)練模式、超參數(shù)或數(shù)據(jù)集,你可以從頭開始訓(xùn)練YOLO。下面是如何讓它在Pascal VOC數(shù)據(jù)集上工作。
獲取Pascal VOC數(shù)據(jù)
要訓(xùn)練YOLO,您需要2007年至2012年的所有VOC數(shù)據(jù)。你可以在這里找到數(shù)據(jù)的鏈接。要獲取所有數(shù)據(jù),請(qǐng)創(chuàng)建一個(gè)目錄來存儲(chǔ)所有數(shù)據(jù),然后從該目錄運(yùn)行:
wget
https://pjreddie.com/media/files/VOCtrainval_11-May-2012.tar
wget
https://pjreddie.com/media/files/VOCtrainval_06-Nov-2007.tar
wget
https://pjreddie.com/media/files/VOCtest_06-Nov-2007.tar
tar xf VOCtrainval_11-May-2012.tar
tar xf VOCtrainval_06-Nov-2007.tar
tar xf VOCtest_06-Nov-2007.tar
現(xiàn)在將有一個(gè)VOCdevkit/子目錄,其中包含所有VOC訓(xùn)練數(shù)據(jù)。
為VOC生成標(biāo)簽
現(xiàn)在我們需要生成Darknet使用的標(biāo)簽文件。Darknet希望為每個(gè)圖像創(chuàng)建一個(gè).txt文件,并為圖像中的每個(gè)真實(shí)值對(duì)象創(chuàng)建一條線,如下所示:
其中x、y、寬度和高度與圖像的寬度和高度相關(guān)。要生成這些文件,我們將在Darknet的script s/目錄中運(yùn)行voc_label.py腳本。我們再下載一次吧,因?yàn)槲覀兒軕小?/p>
wget https://pjreddie.com/media/files/voc_label.py
python voc_label.py
幾分鐘后,此腳本將生成所有必需的文件。它主要在VOCdevkit/VOC2007/labels/和VOCdevkit/VOC2012/labels/中生成大量標(biāo)簽文件。在您的目錄中,您應(yīng)該看到:
ls
2007_test.txt
VOCdevkit
2007_train.txt
voc_label.py
2007_val.txt
VOCtest_06-Nov-2007.tar
2012_train.txt
VOCtrainval_06-Nov-2007.tar
2012_val.txt VOCtrainval_11-May-2012.tar
文本文件如2007_train.txt列出了當(dāng)年的圖像文件和圖像集。Darknet需要一個(gè)文本文件,其中包含所有要訓(xùn)練的圖像。在這個(gè)例子中,讓我們訓(xùn)練除了2007測試集之外的所有東西,以便我們可以測試我們的模型。運(yùn)行:
cat 2007_train.txt
2007_val.txt 2012_*.txt > train.txt
現(xiàn)在我們把2007年的trainval和2012年的trainval都列在一個(gè)大名單上。這就是我們要做的數(shù)據(jù)設(shè)置!
修改Pascal數(shù)據(jù)的Cfg
現(xiàn)在找到的darknet目錄。我們必須更改cfg/voc.data配置文件以指向您的數(shù)據(jù):
1 classes= 20
2 train = /train.txt
3 valid = 2007_test.txt
4 names =
data/voc.names
5 backup =
backup
您應(yīng)該將
下載預(yù)訓(xùn)練卷積權(quán)重
對(duì)于訓(xùn)練,我們使用在Imagenet上預(yù)先訓(xùn)練的卷積權(quán)重。我們使用darknet53模型的權(quán)重。你可以在這里下載卷積層的權(quán)重(76MB)。
wget https://pjreddie.com/media/files/darknet53.conv.74
訓(xùn)練模型
現(xiàn)在我們可以訓(xùn)練了!運(yùn)行命令:
./darknet detector
train cfg/voc.data cfg/yolov3-voc.cfg darknet53.conv.74
在COCO上訓(xùn)練YOLO
如果你想使用不同的訓(xùn)練模式、超參數(shù)或數(shù)據(jù)集,你可以從頭開始訓(xùn)練YOLO。下面是如何讓它在COCO數(shù)據(jù)集上工作。
獲取COCO數(shù)據(jù)
為了訓(xùn)練YOLO,你需要所有的COCO數(shù)據(jù)和標(biāo)簽。腳本scripts/get_coco_dataset.sh將為您執(zhí)行此操作。找出要將COCO數(shù)據(jù)放在哪里并下載它,例如:
cp scripts/get_coco_dataset.sh data
cd data
bash get_coco_dataset.sh
現(xiàn)在您應(yīng)該擁有為Darknet生成的所有數(shù)據(jù)和標(biāo)簽。
修改COCO的cfg
現(xiàn)在找到darknet目錄。我們必須更改cfg/coco.data配置文件以指向您的數(shù)據(jù):
1 classes= 80
2 train = /trainvalno5k.txt
3 valid = /5k.txt
4 names =
data/coco.names
5 backup =
backup
您應(yīng)該用放置coco數(shù)據(jù)的目錄替換
您還應(yīng)該修改模型cfg以進(jìn)行訓(xùn)練,而不是測試。cfg/yolo.cfg應(yīng)該如下所示:
[net]
Testing
batch=1
subdivisions=1
Training
batch=64
subdivisions=8
…
訓(xùn)練模型
現(xiàn)在我們可以訓(xùn)練了!運(yùn)行命令:
./darknet
detector train cfg/coco.data cfg/yolov3.cfg darknet53.conv.74
如果要使用多個(gè)GPU運(yùn)行:
./darknet detector train cfg/coco.data cfg/yolov3.cfg
darknet53.conv.74 -gpus 0,1,2,3
如果要從檢查點(diǎn)停止并重新開始訓(xùn)練:
./darknet detector train cfg/coco.data cfg/yolov3.cfg
backup/yolov3.backup -gpus 0,1,2,3
開放圖像數(shù)據(jù)集上的YOLOv3
wget
https://pjreddie.com/media/files/yolov3-openimages.weights
./darknet detector test cfg/openimages.data
cfg/yolov3-openimages.cfg yolov3-openimages.weights
老yolo地址怎么了?
如果您使用的是YOLO版本2,您仍然可以在此處找到該網(wǎng)站:
https://pjreddie.com/darknet/yolov2/
引用
如果你在工作中使用YOLOv3,請(qǐng)引用我們的論文!
@article{yolov3,
title={YOLOv3:
An Incremental Improvement},
author={Redmon, Joseph and Farhadi, Ali},
journal =
{arXiv},
year={2018}
}
總結(jié)
以上是生活随笔為你收集整理的AlexeyAB DarkNet YOLOv3框架解析与应用实践(二)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: AlexeyAB DarkNet YOL
- 下一篇: AlexeyAB DarkNet YOL