当前位置:   article > 正文

YOLOv4 训练自己数据集_yolov4预训练模型

yolov4预训练模型

目录

概要

制作数据集

labelImg 使用

训练数据集

技术细节


概要

YOLO(You Only Live Once)是一种流行的态度和口头禅,起源于2000年代晚期。YOLO的初衷是告诫人们要珍惜生命,鼓励他们勇敢尝试新事物,不要留下遗憾。

YOLO这个词汇最初由加拿大说唱歌手Drake在他的歌曲中提到。这首歌曲在2011年发布后迅速走红,并使YOLO一词流行开来。之后,YOLO迅速蔓延到年轻人的日常生活中,成为一种用于表达不计后果的行为或者鼓励冒险的态度。

YOLO的发展历程不仅仅局限于歌曲中的引用,它也成为了一种时尚潮流,并在社交媒体上广泛传播。人们开始使用YOLO作为标题和标语,表达他们的生活态度和冒险精神。当时的年轻人把YOLO作为一种信仰,鼓励追求个人幸福和满足。

然而,YOLO也受到了批评。一些人认为YOLO鼓励不负责任的行为和过度冒险,可能导致危险和后悔。此外,YOLO也被商业化和滥用,失去了原始的意义和价值。

尽管如此,YOLO依然在年轻一代中流行,并成为了一种年轻人生活哲学的象征。它鼓励人们勇敢追求自己的激情和梦想,珍惜每一刻。虽然YOLO可能已经过时,但它对于年轻人的影响仍然存在,并为他们的生活注入了一种积极向上的态度。

什么是yolov4

YOLOv4是一种目标检测算法,全称为You Only Look Once version 4。它是YOLO算法系列的最新版本,由Joseph Redmon和Alexey Bochkovskiy于2020年发布。

YOLOv4通过将整个图像划分为多个网格,并为每个网格预测边界框和类别,实现了实时高效的目标检测。与传统的目标检测算法相比,YOLOv4具有更快的速度和更高的准确率。

YOLOv4在模型架构和训练过程上进行了优化和改进,包括使用更大的网络、使用不同大小的特征图进行多尺度检测、引入更多的数据增强技术等。此外,YOLOv4还融合了一些先进的目标检测技术,如PANet、SAM和CIOU等,进一步提升了检测性能。

YOLOv4在计算机视觉领域具有广泛的应用,如物体检测、行人检测、车辆检测等。它可以实时地在图像或视频中检测和定位多个目标,并为每个目标分配类别标签和置信度分数。

制作数据集

需要用到 labelimg 可以加个镜像地址 Simple Indexicon-default.png?t=N7T8https://pypi.tuna.tsinghua.edu.cn/simple 我比较喜欢用清华源,还有其他的看你自己的需求

pip install labelimg 

先在Anaconda Prompt 新建一个虚拟环境 可以使用下面这个代码 test 是新建环境的name

conda create -n test python=3.8

 

激活环境

conda activate test1

安装labelimg

安装好之后就可以直接打开

labelImg 使用

在 labelImg → data 文件夹里有 predefined_classes.txt 文件,将内容修改为你的目标

一些基本设置:

一个小技巧:如果类型较少,可以选择 【Single Class Mode】,会自动标注好,不用你选择类别

一些常用快捷键:

W:弹出十字架开始标记
A:切换到上一张图片
D:切换到下一张图片
右键选择修改编辑

【Open Dir】打开图片所在文件夹;

【Change Save Dir】设置保存标记文件目录,默认和图片一个目录,也必然要放在一个目录的;

标注错了也没有关系,右键菜单可修改;

训练数据集

1. 数据集的准备  
**本文使用VOC格式进行训练,训练前需要自己制作好数据集,**    
训练前将标签文件放在VOCdevkit文件夹下的VOC2007文件夹下的Annotation中。   
训练前将图片文件放在VOCdevkit文件夹下的VOC2007文件夹下的JPEGImages中。   
使用代码生成train.txt,test.txt,trainval.txt,val.txt 
  1. import os
  2. import random
  3. trainval_percent = 0.1
  4. train_percent = 0.9
  5. xmlfilepath = '../../Annotations'
  6. txtsavepath = '../../ImageSets'
  7. total_xml = os.listdir(xmlfilepath)
  8. num = len(total_xml)
  9. list = range(num)
  10. tv = int(num * trainval_percent)
  11. tr = int(tv * train_percent)
  12. trainval = random.sample(list, tv)
  13. train = random.sample(trainval, tr)
  14. ftrainval = open('./trainval.txt', 'w')
  15. ftest = open('./test.txt', 'w')
  16. ftrain = open('./train.txt', 'w')
  17. fval = open('./val.txt', 'w')
  18. for i in list:
  19. name = total_xml[i][:-4] + '\n'
  20. if i in trainval:
  21. ftrainval.write(name)
  22. if i in train:
  23. ftest.write(name)
  24. else:
  25. fval.write(name)
  26. else:
  27. ftrain.write(name)
  28. ftrainval.close()
  29. ftrain.close()
  30. fval.close()
  31. ftest.close()
2. 数据集的处理  
在完成数据集的摆放之后,我们需要利用voc_annotation.py获得训练用的2007_train.txt和2007_val.txt。   
修改voc_annotation.py里面的参数。第一次训练可以仅修改classes_path,classes_path用于指向检测类别所对应的txt。   
训练自己的数据集时,可以自己建立一个cls_classes.txt,里面写自己所需要区分的类别。   
model_data/cls_classes.txt文件内容为:      
```python
# cat
# dog
...
```
修改voc_annotation.py中的classes_path,使其对应cls_classes.txt,并运行voc_annotation.py。  

3. 开始网络训练  
**训练的参数较多,均在train.py中,大家可以在下载库后仔细看注释,其中最重要的部分依然是train.py里的classes_path。**  
**classes_path用于指向检测类别所对应的txt,这个txt和voc_annotation.py里面的txt一样!训练自己的数据集必须要修改!**  
修改完classes_path后就可以运行train.py开始训练了,在训练多个epoch后,权值会生成在logs文件夹中。  

运行train.py出现错误是因为内存不足,在运行get_map.py会得到较低的评估结果
训练epoch可根据需求修改
4. 训练结果预测  
训练结果预测需要用到两个文件,分别是yolo.py和predict.py。在yolo.py里面修改model_path以及classes_path。  
**model_path指向训练好的权值文件,在logs文件夹里。  
classes_path指向检测类别所对应的txt。**  
完成修改后就可以运行predict.py进行检测了。运行后输入图片路径即可检测。  
预测步骤
### 使用预训练权重
1. 下载完库后解压,在百度网盘下载yolo_weights.pth,放入model_data,运行predict.py,输入  
```python
# img/street.jpg
```
2. 在predict.py里面进行设置可以进行fps测试和video视频检测。  
### b、使用自己训练的权重
1. 按照训练步骤训练。  
2. 在yolo.py文件里面,在如下部分修改model_path和classes_path使其对应训练好的文件;**model_path对应logs文件夹下面的权值文件,classes_path是model_path对应分的类**。  
```python
_defaults = {
    #--------------------------------------------------------------------------#
    #   使用自己训练好的模型进行预测一定要修改model_path和classes_path!
    #   model_path指向logs文件夹下的权值文件,classes_path指向model_data下的txt
    #   如果出现shape不匹配,同时要注意训练时的model_path和classes_path参数的修改
    #--------------------------------------------------------------------------#
    "model_path"        : 'model_data/yolo_weights.pth',
    "classes_path"      : 'model_data/coco_classes.txt',
    #---------------------------------------------------------------------#
    #   anchors_path代表先验框对应的txt文件,一般不修改。
    #   anchors_mask用于帮助代码找到对应的先验框,一般不修改。
    #---------------------------------------------------------------------#
    "anchors_path"      : 'model_data/yolo_anchors.txt',
    "anchors_mask"      : [[6, 7, 8], [3, 4, 5], [0, 1, 2]],
    #---------------------------------------------------------------------#
    #   输入图片的大小,必须为32的倍数。
    #---------------------------------------------------------------------#
    "input_shape"       : [416, 416],
    #---------------------------------------------------------------------#
    #   只有得分大于置信度的预测框会被保留下来
    #---------------------------------------------------------------------#
    "confidence"        : 0.5,
    #---------------------------------------------------------------------#
    #   非极大抑制所用到的nms_iou大小
    #---------------------------------------------------------------------#
    "nms_iou"           : 0.3,
    #---------------------------------------------------------------------#
    #   该变量用于控制是否使用letterbox_image对输入图像进行不失真的resize,
    #   在多次测试后,发现关闭letterbox_image直接resize的效果更好
    #---------------------------------------------------------------------#
    "letterbox_image"   : False,
    #-------------------------------#
    #   是否使用Cuda
    #   没有GPU可以设置成False
    #-------------------------------#
    "cuda"              : True,
}
```
3. 运行predict.py,输入  
```python
# img/street.jpg
```
4. 在predict.py里面进行设置可以进行fps测试和video视频检测。 

### b、评估自己的数据集
1. 本文使用VOC格式进行评估。  
2. 如果在训练前已经运行过voc_annotation.py文件,代码会自动将数据集划分成训练集、验证集和测试集。如果想要修改测试集的比例,可以修改voc_annotation.py文件下的trainval_percent。trainval_percent用于指定(训练集+验证集)与测试集的比例,默认情况下 (训练集+验证集):测试集 = 9:1。train_percent用于指定(训练集+验证集)中训练集与验证集的比例,默认情况下 训练集:验证集 = 9:1。
3. 利用voc_annotation.py划分测试集后,前往get_map.py文件修改classes_path,classes_path用于指向检测类别所对应的txt,这个txt和训练时的txt一样。评估自己的数据集必须要修改。
4. 在yolo.py里面修改model_path以及classes_path。**model_path指向训练好的权值文件,在logs文件夹里。classes_path指向检测类别所对应的txt。**  
5. 运行get_map.py即可获得评估结果,评估结果会保存在map_out文件夹中。

技术细节

  • API

    YOLOv4 API是基于YOLOv4算法的应用程序编程接口(API)。YOLOv4是一种目标检测算法,用于在图像或视频中快速准确地检测和定位多个目标。

    YOLOv4 API允许开发人员使用该算法进行目标检测任务。它提供了一组函数和工具,使开发人员能够使用YOLOv4算法进行图像或视频的目标检测。

    使用YOLOv4 API,开发人员可以将YOLOv4算法集成到自己的应用程序中。他们可以通过调用API中的函数来加载和配置YOLOv4模型,然后将图像或视频输入到模型中进行目标检测。API还提供了获取检测结果的函数,开发人员可以使用这些结果进行后续的处理和分析。

    YOLOv4 API还提供了一些额外的功能,例如可视化工具,用于在图像或视频中标记检测到的目标,以及性能评估工具,用于测量算法的准确性和速度。

    总之,YOLOv4 API是一个方便开发人员使用YOLOv4算法进行目标检测任务的工具集合,它简化了开发过程并提供了一些额外的功能和工具。

  • VOC数据集是一个计算机视觉领域的常用数据集,用于对象检测和语义分割任务。VOC是Visual Object Classes的缩写,该数据集包含了20个常见的对象类别,如人,车辆,动物等。VOC数据集提供了大量标注的图像,每个图像都标注了图像中出现的对象及其位置。数据集还包含了用于评估和比较不同算法性能的标准评估指标。

    VOC数据集是一个多年来持续更新的数据集,每年都会发布新的版本。每个版本的数据集都包含训练集、验证集和测试集。训练集用于模型训练,验证集用于调参和性能评估,测试集用于最终模型的性能评估。

    VOC数据集广泛应用于对象检测、目标跟踪、图像分割等视觉任务的研究和算法评估中。由于其丰富的标注和大量的样本,VOC数据集被认为是计算机视觉领域的基准数据集之一。许多经典的视觉算法和深度学习模型都是在VOC数据集上进行评估和比较的。

  • YOLOv4是一种目标检测算法,它是YOLO(You Only Look Once)系列算法的第四个版本。下面是YOLOv4的一些技术总结:

  • 骨干网络:YOLOv4使用了CSPDarknet53作为其骨干网络。CSPDarknet53是YOLOv3中的Darknet53骨干网络的改进版本,通过引入CSP(Cross Stage Partial)结构来加强特征传递,提高模型的性能。

  • Neck结构:YOLOv4引入了SPP(Spatial Pyramid Pooling)和PAN(Path Aggregation Network)结构作为其neck结构。SPP结构可以在多个尺度上提取特征,PAN结构可以聚合不同层级的特征来提高模型的表达能力。

  1. 总的来说,YOLOv4通过引入CSPDarknet53、SPP和PAN等新的网络结构,以及LeakyReLU激活函数、数据增强、剪枝和量化等技术,提高了目标检测模型的性能和效率。

  2. Head结构:YOLOv4使用了YOLOv3中的head结构,包括多尺度预测和多层级预测。多尺度预测通过在不同层级上进行预测来提高模型对不同大小目标的检测能力。多层级预测通过在不同层级上进行目标检测来提高模型的准确性。

  3. 激活函数:YOLOv4使用了LeakyReLU作为激活函数,相较于ReLU函数,LeakyReLU函数具有更好的激活性能,能够更好地处理梯度消失的问题。

  4. 数据增强:YOLOv4采用了大量的数据增强技术,包括随机裁剪、随机旋转、随机缩放等。这些技术可以增加训练数据的多样性,提高模型的泛化能力。

  5. Loss函数:YOLOv4使用了YOLOv3中的YOLOv3 loss作为其损失函数。YOLOv3 loss包括目标检测损失、类别损失和置信度损失,通过综合考虑这些损失来训练模型。

  6. 剪枝和量化:YOLOv4还引入了剪枝和量化技术来减小模型的大小,提高模型的推理速度。剪枝技术可以通过去除不重要的权重来减小模型的大小,量化技术可以将浮点数权重转换为定点数权重来减小模型的大小。

要训练YOLOv4模型使用自己的数据集,需要按照以下步骤进行:

  1. 数据准备:收集和标记数据。确保数据集包含各种类别的对象,并对每个对象进行准确标记。可以使用YOLO标注工具来进行标记。

  2. 数据预处理:对数据进行预处理,以便符合YOLOv4模型的要求。通常需要将图像调整为模型指定的输入大小,并进行归一化。

  3. 配置文件:创建一个配置文件,指定训练的参数和模型的架构。可以根据自己的需求进行调整,如网络结构、批大小、学习率等。

  4. 模型训练:使用准备好的数据集和配置文件,训练YOLOv4模型。可以使用darknet训练框架进行训练。在训练过程中,可以根据需要进行迭代,直到达到满意的结果。

  5. 模型评估:使用测试数据集评估训练好的模型的性能。可以计算预测的精确度、召回率等指标来评估模型的准确性。

  6. 模型优化:根据评估结果,对模型进行调整和优化。可以调整训练参数、网络结构等,以提升模型的性能。

  7. 模型应用:完成训练和优化后,可以将模型应用于实际场景中。可以使用训练好的模型进行对象检测,并在需要的地方进行应用。

总结来说,训练YOLOv4模型使用自己的数据集需要进行数据准备、数据预处理、配置文件的创建、模型训练、模型评估和模型优化等步骤。通过不断迭代和优化,可以得到准确并高性能的模型,用于对象检测任务。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/667500
推荐阅读
相关标签
  

闽ICP备14008679号