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左右