手把手教你用yolov3模型實現目標檢測教程(一) - 環境配置

手把手教你用yolov3模型實現目標檢測(一)

寫在前面:
由於項目需要,使用yolov3模型做了各種現實場景物體的目標檢測。做完了過了好長時間,感覺有些遺忘,還是該留下點東西,方便自己查找,也希望能惠及他人。
同時,爲了督促自己補充理論體系,儘量做到知其然知其所以然

1、環境配置

首先,本教程是完全在ubuntu 18.04下進行的,你能找到的成熟框架不外乎以下三個:

https://github.com/qqwweee/keras-yolo3 ,基於keras編寫

https://github.com/pjreddie/darknet ,基於c++編寫

https://github.com/AlexeyAB/darknet , 基於c++編寫

其中,第一個keras-yolo3需要搭建tensorflow-gpu,keras等很多環境。比較麻煩,有時間學習可以用這個。
推薦使用第二個官方框架pjreddie/darknet,官網(教程)如下:https://pjreddie.com/darknet/yolo/
第三個AlexeyAB/darknet項目近期一直在維護,而且文檔特別詳細。但個人感覺第二個官方框架實踐起來更簡單。
建議訓練和檢測過程中有任何問題,先到第二第三個倉庫的issues中查找,也許會找到你想要的
好,那我們開始:
先下載該項目:https://github.com/pjreddie/darknet

CPU/GPU編譯:

編譯過程中,檢查環境:
我的環境:cmake version 3.10.2; 別的版本應該也可
Python 3.6.3 |Anaconda custom (64-bit)| (default, Oct 13 2017, 12:02:49)
教程也很清楚哦:https://pjreddie.com/darknet/install/

注意:darknet不支持gcc和g++6以上的版本,而ubuntu18.04默認安裝的gcc-7
因此,需要將gcc和g++分別降級:
(1) gcc/g++降級爲4.8版本

	(1)在Ubuntu 16.04上安裝老版gcc十分簡單,直接用apt-get命令下載即可.
sudo apt-get install gcc-4.8
(2)安裝完成後輸入命令gcc --verison查看gcc的版本,此時還是高版本
(3)查看版本gcc-4.8版本是否安裝成功
ls /usr/bin/gcc*
(4)輸入命令設置默認版本:
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8 100
(5)查看默認結果(非必須)
sudo update-alternatives --config gcc
(6)最終gcc --version 發現變成4.8版本了

g++的降級,只需把上面gcc改稱g++。gcc和g++的版本應該必須一致。

CPU:

cd darknet-master 
make

就完事了,一般不會有問題。

GPU:
yolov3是十分高效快速的!這點不用過多介紹,雖然CPU版本以及很快,但GPU號稱快了500倍!
修改根目錄下的makefile文件的GPU和CUDNN爲1即可:

GPU=1
CUDNN=1
OPENCV=0
OPENMP=0
DEBUG=0

改完然後同樣的,根目錄 -> make就ok了
我的環境:
ubuntu18.04+CUDA9.0+CUDNN7+nvidia1050 4G顯存
安裝教程:(很多鏈接)
https://blog.csdn.net/Hu_helloworld/article/details/102614562
CPU和GPU實測yolov3檢測同一張圖片,cpu到7、8s,GPU就是0.幾s的量級
如果對於精確度要求不是特別高,而機器配置低對速度要求更高,建議使用yolov3-tiny版本(輕量,速度也可)

2、下載與訓練模型

yolov3.weights
模型文件包括**.cfg配置文件和.weights**權重文件
.cfg文件在項目中 /cfg目錄
下載權重文件:
https://pjreddie.com/media/files/yolov3.weights
或者
https://pjreddie.com/media/files/yolov3-tiny.weights

3、使用預訓練模型測試目標檢測

最簡單的檢測命令,在根目錄下執行

./darknet detect cfg/yolov3.cfg yolov3.weights data/dog.jpg

另一種命令寫法:

./darknet detector test cfg/coco.data 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%

其中data文件夾中提供了一些示例圖像,以備不時之需。嘗試data/eagle.jpg,data/dog.jpg,data/person.jpg,或data/horses.jpg!
以下是我訓練tiny模型的檢測結果
在這裏插入圖片描述
到此位置我們可以使用官方提供的預訓練模型進行目標檢測,後面想在我們自己的場景下使用還需要自己訓練樣本,調整參數,調用自己的模型進行檢測。
下篇介紹,標註自己的PASCAL VOC圖片數據集,訓練自己的yolov3-tiny模型。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章