AlexeyAB DarkNet YOLOv3框架解析與應用實踐(一)
Darknet: C語言中的開源神經網絡
Darknet是一個用C和CUDA編寫的開源神經網絡框架。它速度快,易於安裝,支持CPU和GPU計算。您可以在GitHub上找到源代碼,也可以在這里閱讀更多關於Darknet可以做什么的信息:
1. Installing Darknet
Darknet易於安裝,只有兩個可選依賴項:
OpenCV,如果你想要更廣泛的支持圖像類型。
如果你想計算GPU的話,安裝CUDA。
兩者都是可選的,所以讓我們從安裝基本系統開始。我只在Linux和Mac電腦上測試過。
Installing The Base System
首先在這里獲取Darknet git存儲庫。這可以通過以下方式實現:
git clone https://github.com/pjreddie/darknet.git
cd darknet
make
如果這有效,你會看到一大堆編譯信息飛馳而過:
mkdir -p obj
gcc -I/usr/local/cuda/include/ -Wall -Wfatal-errors -Ofast....
gcc -I/usr/local/cuda/include/ -Wall -Wfatal-errors -Ofast....
gcc -I/usr/local/cuda/include/ -Wall -Wfatal-errors -Ofast....
.....
gcc -I/usr/local/cuda/include/ -Wall -Wfatal-errors -Ofast -lm....
如果你有任何錯誤,試着去修正它們?如果一切看起來都編譯正確,請嘗試運行它!
./darknet
你應該得到輸出:
usage: ./darknet <function>
使用CUDA編譯
CPU上的Darknet速度很快,但是GPU上的速度快了500倍!你必須有一個Nvidia的GPU,你必須安裝CUDA。我不會詳細介紹CUDA的安裝,因為它很可怕。
安裝CUDA后,將基本目錄中Makefile的第一行更改為:
GPU=1
現在你可以做這個項目,CUDA將被啟用。默認情況下,它將在系統的第0個圖形卡上運行網絡(如果正確安裝了CUDA,則可以使用nvidia smi列出圖形卡)。如果要更改Darknet使用的卡,可以給它一個可選的命令行標志-i<index>,例如:
./darknet -i 1 imagenet test cfg/alexnet.cfg alexnet.weights
如果您使用CUDA編譯,但出於任何原因希望進行CPU計算,則可以使用-nogpu來代替CPU:
./darknet -nogpu imagenet test cfg/alexnet.cfg alexnet.weights
用OpenCV編譯
默認情況下,Darknet使用stb_image.h加載圖像。如果你想更多的支持奇怪的格式(像CMYK jpeg),你可以使用OpenCV代替!OpenCV還允許您查看圖像和檢測,而無需將它們保存到磁盤。
首先安裝OpenCV。如果從源代碼處執行此操作,則會很長且很復雜,因此請嘗試讓包管理器為您執行此操作。
接下來,將Makefile的第2行更改為:
OPENCV=1
完成了!嘗試一下,首先重新做一個項目。然后使用imtest例程測試圖像加載和顯示:
./darknet imtest data/eagle.jpg
2. YOLO:實時目標檢測
你只看一次(YOLO)是一個最先進的實時物體檢測系統。在Pascal Titan X上,它以每秒30幀的速度處理圖像,在COCO test-dev上有57.9%的mAP。
與其他檢測模型的比較
YOLOv3非常快速和准確。在0.5 IOU處測得的mAP中,YOLOv3與焦距損失相當,但速度快了約4倍。此外,可以輕松地權衡速度和准確性之間的簡單改變模型的大小,無需再訓練!


工作原理
先前的檢測系統重新利用分類器或定位器來執行檢測。他們將模型應用於多個位置和比例的圖像。圖像的高分區域被認為是檢測。
使用完全不同的方法。將單一的神經網絡應用於完整的圖像。該網絡將圖像分為多個區域,並預測每個區域的包圍盒和概率。這些邊界框由預測的概率加權。
與基於分類器的系統相比,我們的模型有幾個優點。它在測試時查看整個圖像,因此它的預測由圖像中的全局上下文通知。它也用單一的網絡評估來預測,不像R-CNN這樣的系統需要數千張單一的圖像。這使得它非常快,比R-CNN快1000倍,比R-CNN快100倍。有關完整系統的詳細信息,請參閱我們的論文。
