一、YOLOv4的原理
首先,说一下YOLOv4目标检测算法的原理,其实相对YOLOv4仍然采用YOLOv3的设计,主要多了一些细节的改进,其主要基于深度学习,特别是卷积神经网络(CNN)的应用。YOLOv4也
是一个结合了前面很多研究的技术,加以组合从而进行适当创新的算法,使速度和精度较为平衡。可以说有许多技巧可以提高卷积神经网络(CNN
)的准确性,但是某些技巧仅适合在某些模型上运行,或者仅在某些问题上运行,或者仅在小型数据集上运行。以下的模型检测即可很好地说明。
二、YOLOv4的数据准备
2.1数据的收集
首先需要收集适合训练YOLOv4的数据集。这些数据集可以来源于各种渠道,如公开的数据集或自己采集的数据。如果是视频数据,可以先将视频转换成图片格式。这里的实验是图片格式,且都为jpg格式。
2.2数据集的标注
对收集到的图片数据集进行标注,创建对应的标签文件。标签文件中包含了每张图片中物体的位置(边界框)以及类别信息。这一步骤对于模型的训练至关重要,因为模型将通过这些标注来学习识别和定位物体。创建标签文件使用的是labelImg_exe软件,如图一。将放在YOLOv4文件的VOCdevkit中VOC2007下面的JPEGImages里存放的照片导入软件里,一张张框出来,如图二和图三。生成的标签xml文件存在VOC2007下面的Annotations里,如图四。
图一
图二
图三
图四
2.3 数据集的划分
将数据集划分为训练集、验证集和测试集。通常,训练集用于模型的训练,验证集用于调整模型参数,测试集用于评估模型的最终性能。训练集的数量和次数对训练都有很大的影响,次数越多要训练的时间就很长。
2.4配置文件设置
在YOLOv4的文件目录下,通常会有一个data文件夹,其中包含了多个子文件夹,分别对应不同的数据集。需要将这些数据集按照指定的目录结构放置好,并确保labels文件夹中包含正确的标签文件。
2.5环境配置
确保已经安装了YOLOv4所需的软件环境和依赖库。如果是使用Python版本,可能还需要安装PyTorch等深度学习框架。
2.6数据预处理
根据需要,可能还需要对数据集进行一些预处理操作,比如调整图片大小、归一化等,以便更好地适应YOLOv4模型的输入要求。
2.7开始训练
完成以上步骤后,就可以开始使用YOLOv4进行模型训练了。在训练过程中,可能需要根据实际情况调整模型参数,以获得最佳的训练效果。训练的过程有以下步骤:
数据加载:从数据集中加载图像和标签,并进行相应的预处理。
模型初始化:初始化模型的权重参数,通常使用预训练的权重进行初始化。
前向传播:将输入图像输入模型,计算模型的输出,并计算损失函数。
反向传播:根据损失函数的梯度信息,更新模型的参数。
评估模型:使用测试集对训练好的模型进行评估,计算模型的性能指标。
总的来说,数据准备是机器学习项目中非常重要的一步,它直接影响到模型的训练效果和最终性能。因此,在进行数据准备时,需要仔细处理每个细节,确保数据的质量和准确性。
三、模型训练
3.1运行文件
接着,可以运行voc_annotation.py文件以及yolo.py文件,运行这个文件之后会生成yolov4-pytorch-master\VOCdevkit\VOC2007\ImageSets里的.txt文件以及之后训练会用到的2007_train.txt、2007_val.txt文件。
3.2运行train.py文件
在运行文件训练的过程中,UnFreeze_Epoch可以更改训练次数,一般数越大,训练的更准确,但相对时间更久。这取决于电脑容量。
注:在训练过程中可能会报的错tensorflow.python.framework.errors_impl.FailedPreconditionError: logs\loss_2024_04_04_17_07_55 is not a directory,主要是版本不兼容问题,创建一个虚拟环境,将python版本降低即可。
四、模型评估
模型的评估通常使用一些常见的指标,如精确度、召回率、F1 值等。此外,还可以使用混淆矩阵、PR 曲线、ROC 曲线等工具对模型进行更深入的分析和评估。
4.1权重文件的路径
修改代码yolo.py的model_data的权重文件的路径参数。
4.2运行get_map.py文件
运行结果保存在./map_out/路径下,文件包含各个类的AP、F1、Recall、Precision和所有类别的AP进行平均得到的值mAP,未检测到的比率的平均值等。
注:在运行get_map.py文件时,可以会出现AttributeError: 'FigureCanvasTkAgg' object has no attribute 'set_window_title'报错信息,点击报错的链接,跳转到utils_map.py文件,在fig.canvas后面即set_window_title前面加上.manager就可以了。
训练过程的准确率
训练完成的准确率
注:如果之前训练过其他的数据集,当删掉换新的数据时可能会加上之前的准确率一起,要只看新数据的准确率的话,这时需要重新解压文件,之后重新运行。
五、模型测试
运行predict.py文件,测试模型是否可以目标检测,然后输入需要检测的图片路径(img文件目录下的图片),如输入./img/1.jpg,进行检测即可。
六、实验小结
实验之前,需要的硬件环境是要有足够的GPU与内存资源,以便进行模型训练和测试。软件环境即需要安装Darknet框架及相关依赖库,配置好CUDA、cuDNN等环境。实验过程中,如果出现报错信息,根据报错信息查找资料即可。同时,在这个实验中,可以知道YOLO V4是YOLO系列一个重大的更新,其在COCO数据集上的平均精度(AP)和帧率精度(FPS)分别提高了10% 和12%,并得到了Joseph Redmon的官方认可,被认为是当前最强的实时对象检测模型之一。