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

 

 

  • 0
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值