yolov3训练测试自己的数据集过程

只是想运行一下yolov3,然后再慢慢理解代码,所以直接放了yolov3训练自己数据集和测试的过程。其实只用终端也可以运行,但是如果出现问题不方便调试,所以我还是选择了用pycharm。

运行的项目代码来源:
https://github.com/wizyoung/YOLOv3_TensorFlow

准备

1.下载github上的项目,然后通过pycharm打开项目,选择一个合适的环境。
2.下载yolov3的权重:点击项目代码中的here进行下载,放在:data/darknet_weights文件夹下面
3.运行convert_weight.py脚本文件,结果如下图所示:
在这里插入图片描述
发现data/darknet_weights文件夹下面多出来了三个文件,那三个文件存的实际上是预训练得到的权重和模型,论文作者直接提供了。所以我们不需要预训练了。
在这里插入图片描述
4.在终端中对预训练模型进行测试,我是通过pycharm运行项目,所以点击下面的Terminal,然后输入:python test_single_image.py ./data/demo_data/messi.jpg回车运行,如下图所示:
在这里插入图片描述
会出现一幅图片的检测结果图,任意按随便一个按钮,图片检测结果窗口关闭,出现图片的数值检测结果,如下图所示:
在这里插入图片描述

Trainning:

现在开始训练自己的网络:

由于很多用户使用像LabelImg这样的工具来生成xml格式注释,所以在VOC dataset上添加了一个演示脚本来进行转换,转换成我们需要的格式。如下:
0 xxx/xxx/a.jpg 1920 1080 0 453 369 473 391 1 588 245 608 268
1 xxx/xxx/b.jpg 1920 1080 1 466 403 485 422 2 793 300 809 320
详细的代码在misc/parse_voc_xml.py

1.在misc/ 下建立voc_names.txt,文本中写入自己的目标的名字,如下图所示:
在这里插入图片描述
2.由于运行自己的数据集,所以对parse_voc_xml.py代码进行了修改:

首先由于我的xml文件中并没有图片的Size信息,所以height = tree.findtext("./size/height")和width = tree.findtext("./size/width")这两句代码需要改了,手动改成自己图片的大小,注意的是要写成字符串类型。
其次,原数据集是对voc07和voc12进行拼凑作为训练测试等,我是利用自己的数据集,所以需要修改一下

# coding: utf-8

import xml.etree.ElementTree as ET
import os

names_dict = {
   }
cnt = 0
f = open('./voc_names.txt', 'r').readlines()
for line in f:
    line = line.strip()
    names_dict[line] = cnt
    cnt += 1
#原来的代码是将voc2007和voc2012整合到了一起,并且把验证集用来做测试集了,我认为不对,进行了修改
#我按照自己的数据集修改了代码,得到val、test、train
voc_07 = '/home/dlut/网络/bolt_1_YOLOv3_TensorFlow/bolt/VOC2018'
# voc_07 = '/data/VOCdevkit/VOC2007'
# voc_12 = '/data/VOCdevkit/VOC2012'
# anno_path = [os.path.join(voc_07, 'Annotations'), os.path.join(voc_12, 'Annotations')]
# img_path = [os.path.join(voc_07, 'JPEGImages'), os.path.join(voc_12, 'JPEGImages')]

anno_path = [os.path.join(voc_07, 'Annotations')]
img_path = [os.path.join(voc_07, 'JPEGImages')]

#trainval_path = [os.path.join(voc_07, 'ImageSets/Main/trainval.txt')]
train_path = [os.path.join(voc_07, 'ImageSets/Main/train.txt')]
#   os.path.join(voc_12, 'ImageSets/Main/trainval.txt')]
test_path = [os.path.join(voc_07, 'ImageSets/Main/test.txt')]

val_path = [os.path.join(voc_07, 'ImageSets/Main/val.txt')]  #自己添加了验证集
#原来的代码没有验证集,自己添加了验证集

def parse_xml(path):
    tree = ET.parse(path)
    img_name = path.split('/')[-1][:-4]

    #height = tree.findtext("./size/height")
    #width = tree.findtext("./size/width")

    height = '960'
    width = '960'  #由于我的xml文件中没有Size这一项,所以图片的宽度高度自己手动写了一下
    #注意要为字符串,以前写960报错,改了'960'字符串以后才可以

    objects = [img_name, width, height]

    for obj in tree.findall('object'):
        difficult = obj.find('difficult').text
        if difficult == '1':
            continue
        name = obj.find('name').text
        bbox = obj.find('bndbox')
        xmin = bbox.find('xmin').text
        ymin = bbox.find('ymin').text
        xmax = bbox.find('xmax').text
        ymax = bbox.find('ymax').text

        name = str(names_dict[name])
        objects.extend([name, xmin, ymin, xmax, ymax])
    
评论 43
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值