在yolov3前,還有yolov2以及yolo 2個版本,YOLO 的核心思想是用整張圖作為網絡的輸入,直接在輸出層回歸 bounding box(邊界框) 的位置及其所屬的類別,由于yolo前2個版本的缺陷,作者發布了第三個版本yolov3,其yolov3在不同訓練集上的速度與精確度遠遠大于Faster R-CNN,ResNet,SSD等訓練算法,yolo算法的發布便引起了大家的廣泛關注
yolov3在不同訓練集上的處理速度
YOLO3主要的改進有:調整了網絡結構;利用多尺度特征進行對象檢測;對象分類用Logistic取代了softmax。
YOLOV3結構
在基本的圖像特征提取方面,YOLO3采用了稱之為Darknet-53的網絡結構(含有53個卷積層),它借鑒了殘差網絡residual network的做法,在一些層之間設置了快捷鏈路(shortcut connections)。
YOLOV3結構
DBL:代碼中的Darknetconv2d_BN_Leaky,是yolo_v3的基本組件, 卷積+BN+Leaky relu
resn:n代表數字,有res1,res2, … ,res8等等,表示這個res_block里含有多少個res_unit
concat:張量拼接。將darknet中間層和后面的某一層的上采樣進行拼接
上圖的Darknet-53網絡采用256*256*3作為輸入,最左側那一列的1、2、8等數字表示多少個重復的殘差組件。每個殘差組件有兩個卷積層和一個快捷鏈路,示意圖如下:
YOLOV3結構
關于YOLOV3以及yolo算法的詳細解讀,大家查看網絡上的解讀,我們分享的文章主要是如何來使用它,按照我們先前講解的Faster R-CNN,ResNet,SSD等算法:
5步實現深度學習OpenCV對象檢測:Faster-RCNN圖片識別
深度學習和OpenCV的對象檢測(MobileNet SSD圖像識別)
依然可以使用python來進行yolo的執行,此部分我們后期分享,本期主要分享Darknet的安裝
Darknet:C語言中的開源神經網絡
Darknet是一個用C和CUDA編寫的開源神經網絡框架。它快速,易于安裝,并支持CPU和GPU計算,以上說的易于安裝主要是Linux環境下的安裝,若你習慣了Linux環境,可以按照官網教程幾行命令行來進行Darknet的安裝(PS:果然大牛程序員都是使用Linux系統的)
Darknet的Windows環境下安裝,比較復雜,好在有網友已經編寫好了源代碼,我們使用編譯器來進行編譯
1、源代碼下載
源代碼小編已經下載(可直接回復:Darknet),解壓好的代碼結構如下:
目錄結構
解壓完成后打開bulid文件夾,使用visual studio 2015 profession 專業版打開darknet_no_gpu.sln 文件,若你有cuda ,可以查看你的cuda版本,對darknet.vcxproj的cuda版本進行修改(修改2處),然后使用visual studio 2015 profession打開darknet.sln文件,由于no_gpu版本適合所有用戶,我們分享no_gpu版本,有gpu的版本可以參考本期來進行設置。
2、opencv windows 版本下載安裝
由于yolo使用到opencv ,我們需要下載windows版本的opencv,推薦版本大于3.4.2
opencv windows版本可以直接到官網下載,下載完成后,直接打開exe的文件,便可以安裝完成(exe的安裝不再一一介紹,這個軟件好像不是安裝,感覺解壓縮后就可以了,exe類似一個rar的后綴)
opencv安裝
3、visual studio 設置
使用visual studio 2015 profession 專業版打開darknet_no_gpu.sln 文件后,更改release X64
更改release X64
打開項目-屬性
屬性
打開項目-屬性C/C++ 常規-添加包含目錄-編輯
添加包含目錄
選擇自己安裝的opencv目錄(\opencv\build\include)
自己安裝的opencv目錄
打開項目-屬性-鏈接器- 常規-添加庫目錄-編輯
添加庫目錄
添加自己opencv的安裝目錄(\opencv\build\x64\vc14\lib)
添加自己opencv的安裝目錄
打開項目-屬性-鏈接器-輸入-添加依賴項-編輯
打開編輯框,輸入opencv_world346.lib(小編安裝的opencv是3.4.6版本的,所以這地方要填寫自己的版本lib文件,此文件在安裝目錄:opencv\build\x64\vc14\lib)
添加依賴項
添加opencv_world346.lib依賴項
添加opencv_world346.lib
4、release exe版本文件
待visual studio配置完成后,就可以編譯完成exe文件,此文件在darknet-master\build\darknet\x64文件夾下
release exe版本文件
5、運行代碼檢測來進行對象檢測
在darknet-master\build\darknet\x64目錄下,按住shift+鼠標右鍵打開cmd命令行
在此之前,請把yolov3.weights預訓練權重(回復小編:Darknet)與opencv_world346.dll(opencv\build\x64\vc14\bin)拷貝到本目錄下
yolov3.weights預訓練權重
在cmd命令行下運行如下代碼:
darknet_no_gpu.exe detect yolov3.cfg yolov3.weights dog.jpg
cmd命令行
待軟件運行完成,便可以生產檢測好的圖片與對象檢測的概率
檢測結構
6、總結
以上便是整個過程,若覺得上述過程比較麻煩(回復小編:Darknet),小編已經release好了代碼,且已經封裝了opencv的庫,可以下載到自己電腦上,直接運行便可
下期我們介紹一下如何使用python代碼來進行yolov3的對象檢測
yolo-v3號稱比fast-RCNN快100倍。yolo-v3用了新方法來提升訓練速度,提高性能。新方法包括有多尺度預測,更好的backbone分類器等。用了53個卷積層,叫Darknet-53。
本想試驗下,但darknet在Windows上好像不支持,官網未說明。暫且備忘。
1、用預訓練模型來檢測:
首先安裝dartnet。
git clone https://github.com/pjreddie/darknet
cd darknet
make
再下載模型,并把config文件放置到cfg/目錄下。
wget https://pjreddie.com/media/files/yolov3.weights
然后運行檢測:
./darknet detect cfg/yolov3.cfg yolov3.weights data/dog.jpg
檢測多張圖像:
./darknet detector test cfg/coco.data cfg/yolov3.cfg yolov3.weights data/dog.jpg
2、基于webcam實時檢測:
首先編譯使用cuda,opencv的dartnet。
實時檢測:./darknet detector demo cfg/coco.data cfg/yolov3.cfg yolov3.weights
如果用一段視頻來檢測,用如下命令:
./darknet detector demo cfg/coco.data cfg/yolov3.cfg yolov3.weights <video file>
hello
demo