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