YOLOv3 网络搭建Darknet53 训练自己的数据集

YOLOv3官网
YOLOv3 网络搭建Darknet53 训练自己的数据集_第1张图片

网络搭建步骤

  • 一、编译darknet53
    • 1.下载darknet53文件
    • 2.修改Makefile文件
    • 3.编译darkent53
  • 二、下载预训练权重文件
  • 三、测试编译好的darknet
  • 四、训练自己的数据
    • 1.准备自己的数据集
    • 2.obj.names文件
    • 3.obj.data文件
    • 4. yolov3.cfg文件
    • 5.训练模型
    • 6.测试图片

一、编译darknet53

1.下载darknet53文件

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

YOLOv3 网络搭建Darknet53 训练自己的数据集_第2张图片

2.修改Makefile文件

  在darknet文件夹下找到Makefile文件,修改:(如果没有GPU加速的话,就不用修改了。)

GPU=1   
CUDNN=1 
OPENCV=1

YOLOv3 网络搭建Darknet53 训练自己的数据集_第3张图片

另外,OPENCV需要提前安装好。

3.编译darkent53

cd darknet
make
在这里插入图片描述

二、下载预训练权重文件

wget https://pjreddie.com/media/files/yolov3.weights
YOLOv3 网络搭建Darknet53 训练自己的数据集_第4张图片

三、测试编译好的darknet

./darknet detect cfg/yolov3.cfg yolov3.weights data/dog.jpg
  运行结束后,可以查看输出的predictions.jpg,直接点开图片即可,也可以运行:
diaplay predicions.jpg
YOLOv3 网络搭建Darknet53 训练自己的数据集_第5张图片

四、训练自己的数据

1.准备自己的数据集

  将数据图片和标签(txt)放到一个文件夹obj里,将obj文件夹复制到darknet/data文件夹下。可以使用公开的数据集,下载方式。
YOLOv3 网络搭建Darknet53 训练自己的数据集_第6张图片
  在darknet/文件夹下创建一个generate_train.py,将下面代码复制进去并运行:

import os
image_files = []
os.chdir(os.path.join("data", "obj"))
for filename in os.listdir(os.getcwd()):
    if filename.endswith(".jpg"):
        image_files.append("data/obj/" + filename)
os.chdir("..")
with open("train.txt", "w") as outfile:
    for image in image_files:
        outfile.write(image)
        outfile.write("\n")
    outfile.close()
os.chdir("..")

  然后到darknet/data文件夹下看是否生成了一个train.txt文件。
YOLOv3 网络搭建Darknet53 训练自己的数据集_第7张图片

2.obj.names文件

  在darknet/data文件夹下创建obj.names文件,里面存放需要识别的物体的名字(我们以识别两个物体为例,分别是Car和Bird),例如:

Car 
Bird

YOLOv3 网络搭建Darknet53 训练自己的数据集_第8张图片

3.obj.data文件

  在darknet/data文件夹下添加obj.data文件。
darknet/data/obj.data
  输入内容如下:其中train.txt为训练集保存路径,test.txt为测试集保存路径

classes=2                    
train = /data/train.txt      
validation = /data/test.txt  
names=data/obj.names         
backup=backup/         

YOLOv3 网络搭建Darknet53 训练自己的数据集_第9张图片

4. yolov3.cfg文件

  在darknet/cfg文件夹下找到yolov3.cfg文件,复制一份更名为yolov3-custom.cfg文件,我们修改复制之后的文件,源文件不动。
YOLOv3 网络搭建Darknet53 训练自己的数据集_第10张图片

打开yolov3-custom.cfg文件:

  • 在[net]层修改:
    -将#Testing下面两行用#注释掉;
    -将#Training 下面两行的注释打开;
    其余修改如下:
burn_in=1000    
max_batches=6000   (训练6000)
steps=4800,5400    (设置为0.8倍的max_batches和0.9倍的max_batches)

YOLOv3 网络搭建Darknet53 训练自己的数据集_第11张图片

  • 在[yolo]层修改:
    -在文本中搜索yolo,找到[yolo]层。下面的classes=2,random=0,上面一层的[convolutional]的filters=21,[21=(2+5)*3,2是类别数,如果是80类则应该写(80+5)*3=255]。
    这种[yolo]层一共有3处,都要修改。
    YOLOv3 网络搭建Darknet53 训练自己的数据集_第12张图片

5.训练模型

下载darknet53预训练权重:
wget https://pjreddie.com/media/files/darknet53.conv.74
YOLOv3 网络搭建Darknet53 训练自己的数据集_第13张图片

开始训练:
./darknet detector train data/obj.data cfg/yolov3-custom.cfg darknet53.conv.74

这里需要训练一段时间,下面是训练结果(6000次训练):
YOLOv3 网络搭建Darknet53 训练自己的数据集_第14张图片

6.测试图片

  首先复制一份yolov3-custom.cfg 并更名为yolov3-custom_test.cfg, 修改的位置如下:
YOLOv3 网络搭建Darknet53 训练自己的数据集_第15张图片

运行:
./darknet detector test data/obj.data cfg/yolov3-custom-test.cfg backup/yolov3-custom_final.weights data/person.jpg
在这里插入图片描述

显示结果如下:
YOLOv3 网络搭建Darknet53 训练自己的数据集_第16张图片

你可能感兴趣的:(深度学习,目标检测,YOLOv3,Darknet53)