YOLOv3使用自己的數據集訓練

1.下載源碼

git clone https://github.com/qqwweee/keras-yolo3.git

2.下載預訓練的yolov3權重

官網:https://pjreddie.com/darknet/yolo/

下載好後,放在項目主文件夾下

運行 convert.py

python convert.py yolov3.cfg yolov3.weights model_data/yolo.h5

運行完後會在model_data/文件夾下生成yolo.h5

------------------------------

或者...

轉化好的yolo.h5文件可在百度網盤鏈接直接下載  下載後放在model_data

百度網盤:https://pan.baidu.com/s/18KibISOlIVYpNctgcKI9XA    提取碼:mfsm

3 簡單測試一下

修改yolo.py文件,

修改加載的路徑

 

 

在最後加上以下代碼

測試圖片

#測試圖片
if __name__ == '__main__':
    import cv2
    img=cv2.imread('1.png')#圖片路徑
    img = Image.fromarray(img[..., ::-1])  # bgr to rgb
    yolo=YOLO()
    img = yolo.detect_image(img)  
    img=np.asarray(img)
    cv2.imshow('1',img)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

可在第四行修改圖片路徑

 

測試視頻,則在最後加上以下代碼:

if __name__ == '__main__':
    import cv2
    vdo=cv2.VideoCapture(0)
    yolo=YOLO()
    while 1:
        ret,frame=vdo.read()
        if ret:
            frame = Image.fromarray(frame[..., ::-1])  # bgr to rgb

            frame = yolo.detect_image(frame)
            frame=np.asarray(frame)
            cv2.imshow('1', frame[...,::-1])
            if cv2.waitKey(1) & 0xFF == ord('q'):
                break
    cv2.destroyAllWindows()

第三行修改視頻路徑

測試結果:

4.製作voc格式數據集

儘量有幾百張圖像才能做訓練集

(1)安裝labelimg

方法1:pip install labelImg

然後直接cmd輸入lableimg即可運行

方法2:git clone https://github.com/tzutalin/labelImg

運行labelimg.py

(2)快捷鍵

常用:ctrl+u 打開目錄  ctrl+s保存    w創建矩形框    d、a上一張下一張

(3)整理格式、創建訓練文件夾路徑

labelimg默認將標註的xml文件保存在圖像文件夾下,可以在所有圖像標註完成過後一起把xml複製出來

創建voc格式的目錄:

在keras—yolo項目目錄下創建文件夾結構如下

--VOCdevkit
   |----VOC2007

           |-------Annotations

           |-------ImageSets

                    |-------Main

           |-------JPEGImages

           |-------make_text.py

Annotations:用於存放labelimg保存的所有xml文件
ImageSets/Main:存放訓練集、測試集、驗收集的文件列表的txt
JPEGImages:用於存放所有原始圖像,文件名跟Annotations對應

make_text.py代碼如下

import os
import random

trainval_percent = 0.8
train_percent = 0.75
xmlfilepath = 'Annotations'
txtsavepath = 'ImageSets\Main'
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)

ftrainval = open('ImageSets/Main/trainval.txt', 'w')
ftest = open('ImageSets/Main/test.txt', 'w')
ftrain = open('ImageSets/Main/train.txt', 'w')
fval = open('ImageSets/Main/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()

第三行   trainval_percent  爲train+val佔全部圖片的比例  ,若不需要test集則改爲1

第四行 train_percent 爲 train集佔train+val的比例,可自行調整。

運行後在Main文件夾下生成4個txt文件

總體結構如下

 (4)VOC轉YOLOv3訓練文件

打開voc_annotation.py

將classes改爲自己標記的類別

運行,會生成三個txt文件

(5)修改cfg文件

打開yolov3.cfg

修改這兩個地方

classes改爲你需要的類別數量

filter : filters=3*(cls+5)    計算方法見https://blog.csdn.net/davidlee8086/article/details/79693079

訓練----------------------------------------------------------------------

在model_data/文件夾下創建my_classes.txt

按行輸入你的檢測類別

如:

 

打開train.py

修改

兩個txt文件的路徑

log_dir爲保存訓練模型的路徑

從52行開始,先凍結最後三層之外的所有層來訓練最後三層,

57行修改batch size  電腦配置配置低可以改小,

epochs根據自己經驗來修改

從68行開始  ,釋放所有凍結層的參數開始訓練  顯存不夠batchsize可改爲1

 

訓練好的h5文件  回到yolo修改加載模型路徑就可以拿來用了 大概loss到15左右

 

 

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