目標檢測:YOLO-V3算法實現
1. 引言
論文:You Only Look Once: Unified, Real-Time Object Detection
論文地址:https://arxiv.org/abs/1506.02640
DarkNet源碼下載地址:https://github.com/pjreddie/darknet
Tensorflow源碼下載地址:https://github.com/hizhangp/yolo_tensorflow
2.實現(基於darknet)
這篇文章將指導您使用預訓練的模型通過YOLO系統檢測物體。如果尚未安裝Darknet,則應先進行安裝。
環境:Ubuntu16.04
1.主目錄打開命令行,輸入命令:
git clone https://github.com/pjreddie/darknet
cd darknet
make
簡單!
2.您已經在cfg/子目錄中擁有YOLO的配置文件。可以離線下載預訓練重量文件(237 MB)。或着只是運行此命令:
離線下載地址:
https://pjreddie.com/media/files/yolov3.weights
在線下載命令:
wget https://pjreddie.com/media/files/yolov3.weights
3.然後運行檢測器
./darknet detect cfg/yolov3.cfg yolov3.weights data/dog.jpg
您將看到以下輸出:
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會打印出它檢測到的對象,其置信度以及找到它們所花費的時間。我們沒有使用Darknet進行編譯,OpenCV因此它無法直接顯示檢測結果。而是將它們保存在中predictions.png。您可以打開它以查看檢測到的對象。由於我們在CPU上使用Darknet,因此每個圖像大約需要6-12秒。如果我們使用GPU版本,它將更快。
另外,作者提供了一些示例圖像,以備不時之需。嘗試data/eagle.jpg,data/dog.jpg,data/person.jpg,或data/horses.jpg!
該detect命令是該命令的更通用版本的簡寫。它等效於命令:
./darknet detector test cfg/coco.data cfg/yolov3.cfg yolov3.weights data/dog.jpg
如果只想對一個圖像進行運行檢測,就不需要知道這一點,但是瞭解是否要進行其他操作(例如在網絡攝像頭上運行)將很有用。
多張圖片
您可以將其留爲空白,以連續嘗試多個圖像,而不必在命令行上提供圖像。相反,當配置和權重加載完成時,您將看到提示:
./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
會產生所有的檢測框。因此,這顯然不是超級有用,但是可以將其設置爲不同的值,以控制模型對閾值的限制。
4.微型的YOLOv3
對於受限環境,我們也有一個非常小的模型yolov3-tiny。要使用此模型,請首先下載權重:
wget https://pjreddie.com/media/files/yolov3-tiny.weights
5.網絡攝像頭上的實時檢測
如果看不到結果,對測試數據運行YOLO並不是很有趣。不用在一堆圖像上運行它,而是在網絡攝像頭的輸入上運行它!
要運行此演示,將需要使用CUDA和OpenCV編譯Darknet。然後運行命令:
./darknet detector demo cfg/coco.data cfg/yolov3.cfg yolov3.weights
YOLO將顯示當前的FPS和預測的類別,以及在其頂部繪製邊框的圖像。
需要將網絡攝像頭連接到OpenCV可以連接到的計算機,否則它將無法正常工作。如果連接了多個網絡攝像頭,並且想要選擇要-c 使用的網絡攝像頭0,則可以通過該標誌進行選擇(默認情況下,OpenCV使用網絡攝像頭)。
如果OpenCV可以讀取視頻,也可以在視頻文件上運行它:
./darknet detector demo cfg/coco.data cfg/yolov3.cfg yolov3.weights <video file>
未完待續,之後將會進行yolo在VOC數據上訓練,在自己的數據上訓練~
您的支持,是我不斷創作的最大動力~
歡迎點贊,關注,留言交流~
深度學習,樂此不疲~