使用darknet yolov3训练自己的物体

 准备

下载darknet并编译(GPU版),编译这里就不说了。反正视频检测要依赖opencv,GPU版本要依赖CUDA和cuDNN。

以训练人手和人脸这两个类为例子

1.将包含人手和人脸的图片放到build\darknet\x64\data\train_iamges和build\darknet\x64\data\val_images,train_iamges里是训练的图片,val_images里是用来验证的图片。

2.新建 human.names文件,输入所有类名如下:(注意不要有制表符)

human face
human hand

3.使用labelImg打标签,目的是生成每张图片对应的txt文件(保护框框的类序号,坐标)。labelImg保存一张图片时生成的是xml文件,我们需要将xml转为txt。

python xml_to_txt.py

# 此代码和data文件夹同目录
import glob
import xml.etree.ElementTree as ET
import sys

file = open('data/my.names')
class_names = file.read().splitlines()
print(class_names)
file.close()

# 转换一个xml文件为txt
def single_xml_to_txt(xml_file):
    tree = ET.parse(xml_file)
    root = tree.getroot()
    # 保存的txt文件路径
    txt_file = xml_file.split('.')[0]+'.txt'
    with open(txt_file, 'w') as txt_file:
        for member in root.findall('object'):
            picture_width = int(root.find('size')[0].text)
            picture_height = int(root.find('size')[1].text)
            class_name = member[0].text
            # 类名对应的index
            class_num = class_names.index(class_name)
            box_x_min = int(member[4][0].text)  # 左上角横坐标
            box_y_min = int(member[4][1].text)  # 左上角纵坐标
            box_x_max = int(member[4][2].text)  # 右下角横坐标
            box_y_max = int(member[4][3].text)  # 右下角纵坐标
            # 转成相对位置和宽高
            x_center = (box_x_min + box_x_max) / (2 * picture_width)
            y_center = (box_y_min + box_y_max) / (2 * picture_height)
            width = (box_x_max - box_x_min) / picture_width
            height = (box_y_max - box_y_min) / picture_height
            print(class_num, x_center, y_center, width, height)
            txt_file.write(str(class_num) + ' ' + str(x_center) + ' ' + str(y_center) + ' ' + str(width) + ' ' + str(height) + '\n')

# 转换文件夹下的所有xml文件为txt
def dir_xml_to_txt(path):
    for xml_file in glob.glob(path + '*.xml'):
        single_xml_to_txt(xml_file)

path1 = 'data/train_images/' 
path2 = 'data/val_images/' 

dir_xml_to_txt(path1)
dir_xml_to_txt(path2)

4.生成train.txt和val.txt文件,这两个文件里每一行都是图片的路径。

python generate_train.py

# generate_train.py

import os

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

generate_train_and_val("train_images", "train.txt")
generate_train_and_val("val_images", "val.txt")

5.新建 human.data文件,输入如下:

classes= 2
train = data/train.txt
valid = data/val.txt
names = data/human.names
backup = backup/

class=2代表训练两个类(人脸和人手)

6.新建human.cfg文件,里面的内容直接复制yolov3.cfg的,然后再修改:

具体如何修改参考https://github.com/AlexeyAB/darknet#how-to-train-to-detect-your-custom-objects

主要修改如下:
max_batches=训练物体数量*2000,即2*2000=4000

steps=max_batches*0.8,max_batches*0.9

将610行,696行,783行改为classes=训练物体数量,即2

将603行,689行,776行改为filters=(classes + 5)x3,即153

7.darknet训练命令和检测命令:

训练:

darknet.exe detector train data/human.data cfg/human.cfg darknet53.conv.74

darknet53.conv.74是下载好的预训练文件。

检测图片:

darknet.exe detector test data/human.data cfg/human.cfg backup/human_final.weights data/test.jpg

检测视频:

darknet.exe detector demo data/human.data cfg/human.cfg backup/human_final.weights test.mp4

Qt调用opencv实现yolov3对视频进行目标检测

参考:

YOLO3 darknet训练自己的数据

https://github.com/AlexeyAB/darknet

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Darknet YOLOv4训练数据集是指用于训练YOLOv4目标检测模型的数据集,其中包含了大量的图像和对应的标注信息,用于训练模型识别不同的物体。这些数据集通常由专业的数据科学家和研究人员创建,以确保数据的质量和准确性。训练数据集的质量对于模型的准确性和性能至关重要,因此在选择和使用训练数据集时需要非常谨慎。 ### 回答2: Darknet YOLOv4是一种开源深度学习框架,可用于训练各种图像识别和物体检测模型。为了训练Darknet YOLOv4模型,需要使用大量的数据集,以便模型可以充分学习,并提高识别和检测的准确性。 训练数据集是Darknet YOLOv4训练的重要组成部分。一个好的数据集应该是大规模的、多样的和真实的。例如,对于目标检测算法,需要大量包含目标的图像,例如人、车、道路标志等。数据集应该涵盖不同的光照条件、角度、遮挡、比例、背景等多种情况。此外,为了提高模型的鲁棒性,还需要添加一些负样本,例如一些没有目标的图像。 数据集的构建可以通过手动标记或使用第三方标记服务完成,例如Amazon Mechancial Turk、SuperAnnotate、Labelbox等。在标记数据集时,必须谨慎,确保每个目标都有足够的标记,并且标记精度达到标准。 对于Darknet YOLOv4模型的训练,通常需要运行数千次迭代,以便模型可以逐渐学习更复杂的特征。在每次迭代中,将图片输入到模型中,模型将预测每个目标在图像中的位置和类别。然后计算预测框和真实框之间的损失函数,并使用反向传播算法更新模型的权重。重复这个过程,直到模型精度满意为止。 为了获得更好的模型精度,还可以采用一些技术,例如数据增强、模型融合、超参数调整等。数据增强可以通过对原始图像进行旋转、翻转、缩放等操作,生成一系列不同的训练图像。模型融合可以使用多个模型进行推理,以使预测更准确。超参数调整可以调整模型的学习率、动量、批量大小等超参数,以提高训练效果。 总的来说,Darknet YOLOv4训练数据集是训练好模型的关键。创建一个好的数据集需要耗费大量的时间和精力,但是训练出精度更高的模型可以帮助我们更好地解决实际问题。 ### 回答3: Darknet是一个开源的深度学习框架,Yolov4则是一种基于Darknet开发的物体识别算法。为了让Yolov4达到更好的识别效果,需要训练数据集。 训练数据集一般需要包含所需要识别的物体的图像,同时标注每个物体的位置和类型。这个过程通常需要人工完成,成本较高,且需要一定的时间和经验。一般来说,数据集的越大,训练出的模型效果也会越好。 在训练数据集时,还需要注意一些技巧。首先,需要对数据集进行预处理,例如对图像进行大小统一化、裁剪等操作。其次,需要设置好训练的超参数,例如学习率、批次大小等。 除了使用自己的数据集之外,还可以使用一些公开的数据集进行训练,例如PASCAL VOC、COCO等。这些数据集已经被标注好了物体的位置和类型,因此可以直接用于训练。 最后,在训练数据集时还需要注意数据集的质量。数据集的质量决定了模型的识别能力和鲁棒性,因此需要不断进行反复训练和调整,直到达到满意的效果。 综上所述,训练数据集是训练Yolov4模型的重要一环,需要仔细制定方案、选择好数据集和完成数据标注工作,同时还需要反复训练和调整以获取更好的识别效果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值