目标检测技术在多个领域有着广泛的应用,从简单的物品识别到复杂的自动驾驶汽车场景理解。本文将探讨最新的目标检测算法YOLOv7,并介绍如何在自定义数据集上应用该算法。
YOLO(You Only Look Once)是当前流行的目标检测模型框架,它首次将边界框预测和目标分类集成到一个端到端的可微分网络中。YOLOv7是YOLO家族中的最新成员,它在Darknet框架下创建并维护。YOLOv4已经被社区适配到TensorFlow,而YOLOv5则是首个基于PyTorch框架的YOLO模型,它更轻量且易于使用。尽管YOLOv7在标准基准测试COCO数据集上并没有超越YOLOv6,但它在处理小尺寸物体和物体尺寸不均时的性能有所提升。
以下是使用YOLOv7在自定义数据集上进行目标检测的详细步骤:
步骤1:准备数据集 要启动目标检测器,首先需要收集训练照片。应根据目标任务提前规划,尽可能减少模型需要处理的领域范围,以提高最终模型的准确性。如果没有数据,可以使用Open Images数据库,或者从Roboflow平台下载数据,该平台提供了多种数据集以供训练使用。
步骤2:标注数据集 使用LabelImg或其他标注工具对数据集进行标注。为每张图片创建一个同名的标注文本文件。YOLOv7接受的标签数据格式为文本文件,具体格式如下:
步骤3:分割数据集 标注完成后,将数据分为训练集和测试集。分割比例由用户决定,常见的比例为80%用于训练,20%用于测试。可以使用Python库Split Folder来随机分割数据。
pip install split-folders
输入文件夹应按照以下格式组织:
├── yolov7
## └── train
####└── images (包含所有训练图片的文件夹)
####└── labels (包含所有训练标签的文件夹)
## └── test
####└── images (包含所有测试图片的文件夹)
####└── labels (包含所有测试标签的文件夹)
## └── valid
####└── images (包含所有验证图片的文件夹)
####└── labels (包含所有验证标签的文件夹)
步骤4:创建自定义训练配置文件 现在需要创建一个自定义的配置文件,训练过程将完全依赖于该文件。在yolov7/data文件夹中创建一个名为custom.yaml的文件,并粘贴以下代码。设置数据集文件夹的正确路径,修改类别数量和类别名称,然后保存。
Image_path
Number_of_classes
Classes_names_array
train: (数据集训练文件夹的完整路径)
test: (数据集测试文件夹的完整路径)
valid: (数据集验证文件夹的完整路径)
#Classes
nc: 1 # 替换类别数量
#classes names
#替换所有自定义类别名称列表
names: ['person', 'bicycle', 'car', 'motorcycle', 'airplane', ...]
完成所有预处理步骤后,可以开始训练。在yolov7的主目录下打开终端,激活虚拟环境,并执行以下命令:
git clone https://github.com/WongKinYiu/yolov7.git # 克隆
cd yolov7
pip install -r requirements.txt # 安装模块
wget https://github.com/WongKinYiu/yolov7/releases/download/v0.1/yolov7.pt # 下载预训练权重
步骤5:训练模型
python train.py --weights yolov7.pt --data "data/custom.yaml" --workers 4 --batch-size 4 --img 416 --cfg cfg/training/yolov7.yaml --name yolov7 --hyp data/hyp.scratch.p5.yaml
参数说明:
- img = 模型训练时的图片大小,默认值为640。
- batch-size = 自定义数据集训练时使用的批次大小。
- epochs = 训练周期数,以获得最佳模型。
- data = 自定义配置文件路径。
- weights = 预训练的yolov7权重文件(yolov7.pt)。
步骤6:使用自定义权重进行推理 训练完成后,在终端执行以下命令,使用自定义权重进行检测。
python detect.py --weights runs/train/yolov7/weights/best.pt --source "测试图片的路径"
结论 YOLOv7在速度和准确性方面都有显著提升,它与基于RPN的模型相匹配甚至超越。该模型快速可靠,适用于各种场景。YOLOv7训练迅速,结论准确,性能出色。