Win10中用yolov3訓練自己的數據集全過程(VS、CUDA、CUDNN、OpenCV配置,訓練和測試)


在Windows系統的Linux系統中用yolo訓練自己的數據集的配置差異很大,今天總結在win10中配置yolo並進行訓練和測試的全過程。

提綱:

1.下載適用於Windows的darknet

2.安裝VS和CUDA、CUDNN、OpenCV

  1)安裝VS2017

  2)安裝OpenCV

  3)VS配置OpenCV

  4)安裝CUDA10.0和CUDNN7.5

  5)VS配置CUDA

3. 編譯darknet

4.訓練自己的數據集

5.開始訓練

6.測試

 

1.下載適用於Windows的darknet

git clone https://github.com/AlexeyAB/darknet

這個適用於Windows和Linux

而前面博客中的:https://github.com/pjreddie/darknet

是只適用於Linux的。

2.安裝VS和CUDA、CUDNN、OpenCV

1)安裝VS2017

       可以在官網找:vs2017:https://visualstudio.microsoft.com/zh-hans/downloads/

       我是在學校的軟件中心找的安裝包。

2)安裝OpenCV

opencv-3.4.1-vc14_vc15.exe,vc15表示VS2017(vc10表示VS2010,vc11表示VS2012,vc12表示VS2013,vc14表示VS2015),其他opencv的版本也可以的。

  https://opencv.org/releases.html

 

 

  直接雙擊安裝,安裝好之后要添加環境變量。選擇控制面板->系統和安全->系統->高級系統設置->環境變量->系統變量,找到Path,編輯Path變量,在變量值中添加路徑“D:\opencv-3.4.1\opencv\build\x64\vc15\bin”其中D:\opencv-3.4.1\opencv是opencv的安裝路徑。

3)VS配置OpenCV

VS2017中新建項目

 把配置改成release和x64,現在的電腦應該大部分都是64位的。如果是32位,選x86

左菜單欄選擇視圖—>其它窗口—>屬性管理器,點擊項目名字左邊的小三角形——debug|x64,如果是32位系統,選Win32。雙擊 Microsoft.Cpp.x64.user彈出屬性頁

VC++ 目錄—>包含目錄—>編輯,添加以下三項(對於自己的安裝路徑)
D:\opencv-3.4.1\opencv\build\include\opencv
D:\opencv-3.4.1\opencv\build\include
D:\opencv-3.4.1\opencv\build\include\opencv2

在庫目錄中添加:

D:\opencv-3.4.1\opencv\build\x64\vc15\lib

 然后選擇連接器—>輸入—>附加依賴項,復制以下兩個:opencv_world341d.lib表示debug,opencv_world341.lib表示release。也可以只添加opencv_world341d.lib,因為前面我們選擇的debug|x64,我這里兩個都放進去了。D:\opencv-3.4.1\opencv\build\x64\vc15\lib(路徑根據自己的)中確認一下這兩個文件有沒有。

opencv_world341d.lib
opencv_world341.lib

最后點擊右下角的應用,再點確認就會生效!

4)安裝CUDA10.0和CUDNN7.5

 CUDA下載地址:https://developer.nvidia.com/cuda-downloads

默認安裝就行,記住安裝的位置,安裝完成后要配置環境變量:控制面板->系統和安全->系統->高級系統設置->環境變量->系統變量,找到Path,編輯Path變量,在變量值中添加路徑:

 

 驗證是否安裝成功:

cmd下輸入:

nvcc -V

有如下信息表示安裝成功

 驗證環境變量:

CUDNN下載地址:https://developer.nvidia.com/rdp/cudnn-download,要注冊賬號才能下載。

(由於我的賬號現在不記得密碼了,就不放截圖了~~)

將下載下來的包解壓縮后應該是三個文件夾,對應名稱copy到CUDA的安裝目錄下的對應文件夾。最后把C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.0\lib\x64添加到環境變量中。

 

5)VS配置CUDA

 這部分我參考的這篇博客:https://blog.csdn.net/HaleyDong/article/details/86093520

 3. 編譯darknet

按照官網的步驟進行編譯:

有幾點要注意:

  .\darknet\build\darknet修改darknet.vcxproj文件,由於darknet.vcxproj 中使用的是CUDA 9.1,所以要將所有CUDA 9.1修改為自己對應的CUDA版本。

  用VS2017打開darknet.sln,因為這個是VS2015版本的,所以打開后需要進行重定向,在項目上右鍵-重定向項目,然后設置 x64 and Release模式,再編譯:生成-生成darknet。成功后會在. \darknet\build\darknet\x64中生成darknet.exe,完成編譯。

  到opencv的安裝目錄下找到兩個文件:D:\opencv-3.4.1\opencv\build\x64\vc15\bin下復制opencv_world341.dll和opencv_ffmpeg341_64.dll到.\darknet\build\darknet\x64\darknet.exe所在目錄下。

  下載預訓練權重文件:https://pjreddie.com/media/files/yolov3.weights,下載后放在.\darknet\build\darknet\build\darknet\x64下,打開該目錄,雙擊darknet_yolo_v3.cmd會出現那張狗狗的照片及檢測結果,說明編譯成功了。

4.訓練自己的數據集

1)下載http://pjreddie.com/media/files/darknet53.conv.74預訓練權重文件到. \darknet\build\darknet\x64

2)從.\ darknet\build\darknet\x64\cfg中復制yolo3.cfg到.\ darknet\build\darknet\x64並命名為yolo-obj.cfg(名字自己隨意)。修改每一個yolo層上面一層的filters和yolo層的classes,classes是類別數,filters = (classes+5)*3。改成train模式,可以修改batch_size和subdivisions。max_batches修改為classes*2000,這個也可以自己定。steps=max_batches*80%,max_batches*90%

從. \darknet\cfg中復制voc.names到. \darknet\build\darknet\x64\data中,命名為obj.names,修改,每一行是一個類別名。復制voc.data到. \darknet\build\darknet\x64\data中,命名為obj.data,根據自己的路徑修改里面的內容。

3)將所有訓練圖片和對應的txt文件一起放在. \darknet\build\darknet\x64\data\obj中,測試圖片放在. \darknet\build\darknet\x64\data\test中,生成train.txt和test.txt(路徑在obj和test):

import os

# 遍歷指定目錄,目錄下的所有文件
def eachFile(filepath):
    pathDir =  os.listdir(filepath)
    for allDir in pathDir:
        if filetype in allDir:
            child = os.path.join('%s%s' % (filepath, allDir))
            #print(child.decode('gbk')) # .decode('gbk')是解決中文顯示亂碼問題
            #print(child)
            fopen.write(child+'\n')
    fopen.close()
if __name__ == '__main__':
    filePath = "路徑\\train.txt"#這里替換成你的路徑,test.txt對應改路徑
    filePathC = "路徑\\darknet\\build\\darknet\\x64\\data\\obj\\"#這里替換成你的路徑,訓練或測試圖片的路徑
    filetype ='.jpeg'#圖片后綴
    fopen = open(filePath, 'a')
    eachFile(filePathC)

在. \darknet\build\darknet\x64中新建backup文件夾,存放訓練的權重文件,新建log文件夾存放訓練過程的數據。

4)修改保存權重文件的迭代間隔,在. \darknet\src\detector.c的第271行左右修改。

 

5.開始訓練

打開cmd,cd到\darknet\build\darknet\x64中,執行:

darknet.exe detector train data/obj.data yolo-obj.cfg darknet53.conv.74

若不想顯示average loss曲線,執行:

darknet.exe detector train data/obj.data yolo-obj.cfg darknet53.conv.74 -dont_show

若要保存log日志,執行:

darknet.exe detector train data/obj.data yolo-obj.cfg darknet53.conv.74  >> log/train_yolov3.log

現在就開始訓練啦!!

中斷訓練后再次訓練時將上述命令的權重文件修改成backup/權重文件名。

若遇到cuda error:out of memory錯誤,調整batch_size和subdivisions,batch_size改小,分批數subdivisions可以設置成等於batch_size。

 

6.測試

 命令行測試方法:在. \darknet\build\darknet\x64下游很多.cmd文件,里面就是一些命令,可以打開查看,選擇對應的一些命令進行測試!

 

 

我們還可以連接攝像頭(USB攝像頭)進行實時檢測:

darknet.exe detector demo cfg/coco.data yolov3.cfg yolov3.weights

 

 當然,大多數時候我們都需要用腳本來測試,才能達到目的,這就涉及到yolo的封裝,另外一篇博文里會詳細講解!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM