一、前言
(一)、什么是目标检测
目标检测是计算机视觉领域的一个重要任务,它在许多应用场景中都有广泛的应用,如自动驾驶、智能监控、人脸识别等。YOLO(You Only Look Once)是一种实时目标检测算法,相较于其他目标检测算法,YOLO具有速度快、准确性高的优点。
目标检测不仅包括识别图像中的目标物体,还需要确定这些物体的具体位置,即解决目标物体存在性的问题。这个过程涉及到多个方面,包括目标的分类、定位、大小和形状等。目标检测的任务可以概括为以下几点:
- 分类:确定图像中每个目标属于哪个类别,如人、车辆、动物等。
- 定位:精确地标定出目标在图像中的位置,通常是通过边界框(bounding box)来实现。
- 识别:在某些情况下,目标检测还需要识别目标的姿态或方向。
此外,目标检测算法可以分为两大类:传统方法和基于深度学习的方法。传统方法通常依赖于手工设计的特征提取器和分类器,而基于深度学习的方法则通过训练大量的数据来自动学习特征表示。随着深度学习技术的发展,基于深度学习的目标检测模型已经成为主流,它们在准确性和效率上都有显著的提升。
总的来说,目标检测是一个复杂的过程,涉及到图像处理、机器学习和模式识别等多个技术领域。随着技术的不断进步,目标检测的准确性和应用范围都在不断扩大。
文章以课堂学习为要求,分享自己完成yolo目标检测实验操作流程。
(二)、什么是YOLO算法
YOLO,全称为You Only Look Once,是一种实时目标检测算法。它的工作原理可以概括为以下几个步骤:
- 图片预处理:将输入的图片调整到特定的尺寸,例如448x448像素。
- 网络处理:将调整尺寸后的图片送入CNN(卷积神经网络)进行处理。
- 预测结果:网络会预测出目标的边界框(bounding box)和类别概率。
- 非极大值抑制:为了去除多余的检测框,提高检测的精度,YOLO算法使用了非极大值抑制(Non-maximum Suppression, NMS)这一步骤。
YOLO算法的特点在于它将目标检测任务处理成一个回归问题,通过一个单一的CNN模型实现从输入图像到最终检测结果的端到端处理。这种设计使得YOLO在速度上相比其他算法有显著的优势,特别适合需要快速响应的场景,如自动驾驶和视频监控。
此外,YOLO系列包括多个版本,从YOLOv1到YOLOv5,每个版本都在网络结构、检测策略和性能上有所改进和优化。例如,YOLOv3引入了多尺度检测,而YOLOv4则进一步优化了网络结构,提高了检测精度和速度。
总的来说,YOLO算法以其快速和准确的目标检测能力,在计算机视觉领域得到了广泛的应用和发展。
三、实验准备
- 环境配置:Python3.8和PyTorch框架
- 数据集:准备好标注好的数据集,提前找好足够的训练照片,并将其按照YOLOv4的格式进行转换。
- 代码编辑器:推荐使用PyCharm
-
硬件环境:确保计算机拥有足够的GPU与内存资源,以便进行模型训练和测试。(需要跑很长时间才训练完)
四、实验步骤
(一)、项目来源
项目来源于GitHub上的一个开源项目,具体链接为:https://github.com/bubbliiiing/yolov4-pytorch/tree/bilibili。这个项目提供了YOLO算法的实现,并且经过了优化和改进,方便我们进行使用和二次开发。
(二)、使用环境
YOLO算法需要使用Python3.8和PyTorch框架进行实现。确保我们使用的是PyTorch版本可以正常用于实验。请确保你的环境中已经安装了相应版本的Python和PyTorch。
(三)、安装相关库
在开始之前,你需要安装一些必要的Python库。这些库包括:
opencv-python:用于图像处理和目标检测结果的可视化。
pillow:用于图像处理和转换。
numpy:用于数值计算和数组操作。
onnx:用于模型转换和部署。
tensorboard:用于可视化训练过程中的损失和准确率等指标。
(四)、准备数据
收集实验所需图片,可以分为训练集和测试集。训练集至少需要一百张保证模型训练准确度,测试集几十张即可。
将训练集图片保存至代码文件的JPEGImages目录文件中:
yolov4-pytorch-master\VOCdevkit\VOC2007\JPEGImages
(五)、图像标注
--1.打开框选软件labelImg.exe作为标注工具;
--2.首先打开“Change Save Dir”选择框选完的图片保存位置:yolov4-pytorch-master\VOCdevkit\VOC2007\Annotations
--2.“open”打开JPEGImages文件夹选择图片;
--3.使用“Create\nRectBox”框选目标,且输入识别标签并保存,保存好的图片就会生成对应的xml文件,其中包含目标物体的边界框坐标、类别等信息。
(六)、运行代码
--1.修改检测类别名文件:coco_classes.txt和voc_classes.txt文本文件,将里面的标签名改为自己前面设置的标签名,每个类别占一行,确保类别的命名准确且一致;
--2.数据处理:需要使用voc_annotation.py脚本来生成训练所需的2007_train.txt和2007_val.txt文件。这两个文件包含了训练集和验证集中图片的路径以及对应的标注信息。运行结果如下:
--3.训练模型:运行代码train.py
需要训练数据集300次,时间较长请提前准备好。
(七)、训练结果预测
--1.主要文件:预测时,主要使用yolo.py和predict.py。在yolo.py中,需修改model_path和classes_path指向正确的模型权重和类别文件。
model_path指向训练好的权重文件
classes_path指向类别文本文件(.txt)
--2.训练权重: 在yolo.py文件里面,在如下部分修改model_path和classes_path使其对应训练好的文件就可以运行predict.py文件来进行预测了。
训练完成后会在目录yolov4-pytorch-master\logs下生成last_epoch_weights.pth文件,并将此文件路径替换至下图所选位置(已替换)
--3.输入预测图片:最后选择需要预测的图片就能预测结果了(如图)
--3.输入预测图片:最后选择需要预测的图片就能预测结果了(如图)
五、总结
本次YOLO目标检测项目的经历,让我更加熟悉了模型训练与预测的流程。在实验中,我了解到数据集大小、标签格式及网络收敛对预测结果的重要性。尽管在初步预测中遇到了准确率不高的问题,但通过反思与调整,我逐步提高了预测的准确性。此次学习不仅提升了我的实践能力,还加深了我对目标检测技术的理解。此外我还明白了数据是模型训练的基础,数据集的大小和质量直接影响到模型的性能。确保数据集多样性和标注的准确性对于提高检测准确率至关重要,以及在进行模型训练之前,需要确保所有数据的标签格式统一,同时监控模型训练过程中的收敛情况,适时调整学习率和其他超参数,有助于模型更好地拟合数据。