Yolov4訓練本身的數據集,史上最詳細教程(本人屢次使用訓練,親測效果不錯,小白均可以學會)

Yolov4訓練本身的數據集,史上最詳細教程(本人屢次使用訓練,親測效果不錯,小白均可以學會。

  1. 代碼運行環境Ubuntu18.04+python3.6+顯卡1080Ti+CUDA10.0+cudnn7.5.1+OpenCV3.4.6+Cmake3.12.2,詳細環境配置安裝步驟就不講解拉,網上教程一大堆。
  2. 從github克隆下載源碼,連接地址:https://github.com/AlexeyAB/darknet
  3. 訓練確定須要使用GPU加速,那麼得打開項目裏面的makefile文件修改一些參數的值,1-四、7改成1
    makefile前面幾行:打開GPU 加速,打開opencv,打開libdarknet.so生成開關
GPU=1
CUDNN=1
CUDNN_HALF=1
OPENCV=1
AVX=0
OPENMP=0
LIBSO=1
ZED_CAMERA=0 # ZED SDK 3.0 and above
ZED_CAMERA_v2_8=0 # ZED SDK 2.X
  1. 編譯
    在darknet-master目錄下運行:cmake.&make -j48
    python

    下載與訓練權重放在主目錄下https://github.com/AlexeyAB/darknet/releases/download/darknet_yolo_v3_optimal/yolov4.weightsgit

    百度網盤: 連接:https://pan.baidu.com/s/16wOHbaa2mG7cTZ_RcGjRnw
    提取碼:99bl
    github

    用下面的命令測試一下預訓練權重
    ./darknet
    算法

    若是編譯成功則會出現如下信息
    usage: ./darknet
    dom

    如今能夠測試初始預訓練權重效果了
    ./darknet detect cfg/yolov4.cfg yolov4.weights data/dog.jp
    測試

成功則在主目錄下出現predictions.jpg 圖片爲預測後的圖片,打開 OPENCV=1的能夠直接顯示出圖片。說明咱們的環境配置好了,不然先去配置環境。
在這裏插入圖片描述
5. 訓練本身的數據集
–5.1 在主目錄下建立yolo-obj.cfg 配置文件。將 yolov4-custom.cfg 中的內容複製到 yolo-obj.cfg裏面,並作如下修改。
  --5.1.1修改batch=64,修改subdivisions=16(若是顯卡是2080TI的,能夠把batch設置爲96,若是報內存不足,將batch改回64將,或者subdivisions設置爲32)
  --5.1.2修改max_batches=classes*2000 例若有2個類別人和車 ,那麼就設置爲4000,N個類就設置爲N乘以2000,
  --5.1.3修改steps爲80% 到 90% 的max_batches值 好比max_batches=4000,則steps=3200,3600
  --5.1.4修改classes,先用ctrl+F搜索 [yolo] 能夠搜到3次,每次搜到的內容中 修改classes=你本身的類別 好比classes=2
  --5.1.5修改filters,同樣先搜索 [yolo] ,每次搜的yolo上一個[convolution] 中 filters=(classes + 5)x3 好比filters=21
  --5.1.6(能夠跳過)若是要用[Gaussian_yolo] ,則搜索[Gaussian_yolo] 將[filters=57] 的filter 修改成 filters=(classes + 9)x3 (這裏我沒用到,可是仍是修改了)
–5.2製做obj.names,在主目錄下建立obj.names文件。內容爲你的類別 好比人和車 那麼obj.names 爲以下,多個類別依次往下寫









spa

person
car
code

–5.3 製做obj.data,在主目錄下建立obj.data文件。內容以下xml

classes= 2
  train  = ./scripts/2007_train.txt
  #valid  = ./scripts/2007_test.txt #(作測試用的測試txt)
  valid  = ./scripts/2007_val.txt
  names = darknet-master/obj.name #(找不到的話,能夠修改成本身的絕對路徑)
  backup = backup/ # 權重保存的位置

–5.4 數據集製做
在scripts文件夾下按以下目錄建立VOCdevkit 文件夾,放本身的訓練數據。
blog

VOCdevkit
--VOC2007
----Annotations  #(放XML標籤文件)
----ImageSets
------Main
----JPEGImages   # (放原始圖片)
把本身的原始未標註圖片和標籤信息放入相應文件夾下。

–5.5 scripts文件夾下有voc_label.py,打開後修改本身的類別信息,

sets=[ (‘2007’, ‘train’), (‘2007’, ‘val’), (‘2007’, ‘test’)]
classes = [「person」,「car」 ] 按本身的類別修改,可是順序要和obj.name 保持一致,
-5.6 在主目錄下建立make_data.py 文件,把以下代碼方進去。運行此文件在scripts 文件下生成 3個相應的txt文件,在Main 下生成四個txt文件。
在這裏插入圖片描述


import os
import random
import sys
root_path = './scripts/VOCdevkit/VOC2007'
xmlfilepath = root_path + '/Annotations'
txtsavepath = root_path + '/ImageSets/Main'
if not os.path.exists(root_path):
    print("cannot find such directory: " + root_path)
    exit()
if not os.path.exists(txtsavepath):
    os.makedirs(txtsavepath)
trainval_percent = 0.9
train_percent = 0.8
total_xml = os.listdir(xmlfilepath)
num = len(total_xml)
list = range(num)
tv = int(num * trainval_percent)
tr = int(tv * train_percent)
trainval = random.sample(list, tv)
train = random.sample(trainval, tr)
print("train and val size:", tv)
print("train size:", tr)
ftrainval = open(txtsavepath + '/trainval.txt', 'w')
ftest = open(txtsavepath + '/test.txt', 'w')
ftrain = open(txtsavepath + '/train.txt', 'w')
fval = open(txtsavepath + '/val.txt', 'w')
for i in list:
    name = total_xml[i][:-4] + '\n'
    if i in trainval:
        ftrainval.write(name)
        if i in train:
            ftrain.write(name)
        else:
            fval.write(name)
    else:
        ftest.write(name)
ftrainval.close()
ftrain.close()
fval.close()
ftest.close()

-5.7運行voc_labels.py文件,在VOC2007文件下生成labels文件,文件夾裏包含相應的txt.(如今voc2007文件裏多出一個labels 文件夾)
在這裏插入圖片描述

-5.8 開始訓練
首先下載預訓練權重yolov4.conv.137,放入主目錄下。

連接:https://pan.baidu.com/s/1yhB8pRcGH84gyRWeNictBA
提取碼:gi4d

用下面的命令開始訓練:
./darknet detector train obj.data yolo-obj.cfg yolov4.conv.137 -map

#訓練2000此後在以前訓練的基礎上繼續訓練(適合中途中止後繼續訓練)
./darknet detector train obj.data yolo-obj.cfg backup/yolo-obj_2000.weights -map

在這裏插入圖片描述你們能夠看到收斂效果仍是很明顯的,效果扛扛的。不愧是吊打一切的目標檢測算法。

-5.9測試
修改obj.data,
valid = ./scripts/2007_test.txt
#valid = ./scripts/2007_val.txt


測試:
./darknet detector map obj.data yolo-obj.cfg backup/yolo-obj_final.weights

好了,你居然認真的看完了,記得點贊收藏,下次觀看不迷路,有任何問題歡迎流言私信我。

相關文章
相關標籤/搜索